First off — thank you for taking the time to contribute! 🎉
Beakcrypt is an open-source project and we genuinely welcome contributions of all kinds: bug fixes, new features, documentation improvements, and more. This guide will walk you through everything you need to know to make a great contribution.
- Code of Conduct
- Getting Started
- Development Workflow
- Branching Strategy
- Commit Message Guidelines
- Opening a Pull Request
- Reporting Bugs
- Requesting Features
- Code Style
This project adheres to a standard of respectful, inclusive collaboration. By participating, you agree to treat all contributors with kindness and professionalism. Harassment, discrimination, or hostile behaviour of any kind will not be tolerated.
Before you start, make sure you can run the project locally. Follow the Getting Started section in the README to set up your development environment.
Once you're set up, you're ready to contribute!
We use a fork-based workflow:
-
Fork the repository to your own GitHub account
-
Clone your fork locally
-
Set up the upstream remote so you can sync changes:
git remote add upstream https://github.com/prudentbird/beakcrypt.git
-
Always branch off
dev— this is the active development branch:git fetch upstream git checkout -b feat/your-feature upstream/dev
-
Make your changes, write tests if applicable, and commit
-
Push your branch to your fork:
git push origin feat/your-feature
-
Open a Pull Request against the
devbranch of the upstream repo
Use the following naming conventions for your branches:
| Type | Pattern | Example |
|---|---|---|
| New feature | feat/<short-description> |
feat/vault-sharing |
| Bug fix | fix/<short-description> |
fix/cli-auth-loop |
| Documentation | docs/<short-description> |
docs/update-readme |
| Refactor | refactor/<short-description> |
refactor/crypto-module |
| Chore | chore/<short-description> |
chore/update-deps |
We follow the Conventional Commits specification. This keeps our git history clean and makes changelogs easy to generate.
Format:
<type>(<scope>): <short summary>
Examples:
feat(cli): add `beakcrypt pull` command
fix(web): resolve waitlist form submission error
docs: update local setup instructions
chore: bump pnpm to v9
refactor(crypto): simplify AES encryption helper
Types:
| Type | When to use |
|---|---|
feat |
A new feature |
fix |
A bug fix |
docs |
Documentation only changes |
style |
Formatting, missing semicolons, etc. (no logic change) |
refactor |
Code restructure without feature or fix |
test |
Adding or updating tests |
chore |
Build process, dependency updates, tooling |
Keep the summary line under 72 characters. Use the body to explain why, not what.
When you're ready to open a PR, please:
-
Fill out the PR template — it's there for a reason!
-
Make sure your branch is up to date with
upstream/dev:git fetch upstream git rebase upstream/dev
-
Ensure linting and type checks pass:
pnpm lint pnpm typecheck
-
Provide a clear title following the commit convention (e.g.
feat(cli): add pull command) -
Link any related issues using
Closes #<issue-number>in the PR description -
Keep PRs focused and small — one feature or fix per PR where possible
A maintainer will review your PR as soon as possible. We may request changes, leave comments, or approve and merge. Please be responsive to feedback!
Found a bug? Please open a bug report and include:
- A clear, descriptive title
- Steps to reproduce the issue
- Expected behaviour vs actual behaviour
- Your environment (OS, Node version, pnpm version)
- Any relevant logs or screenshots
Have an idea? Open a feature request and tell us:
- What problem you're trying to solve
- Your proposed solution
- Any alternatives you considered
- All code is written in TypeScript — no plain JS in source files
- We use ESLint for linting — run
pnpm lintbefore committing - Follow the existing patterns in the codebase when in doubt
- Prefer explicit types over
any - Write self-documenting code with clear variable and function names
Thank you for being part of Beakcrypt! 🐦🔐