Thank you for your interest in contributing to Membrane!
- Fork the repository on GitHub
- Clone your fork locally
- Create a branch for your changes
- Go 1.22 or later
- Make
- Protocol Buffers compiler (
protoc>= 3.20) for gRPC work - Node.js 20+ (for TypeScript client development)
- Python 3.10+ (for Python client development)
make build # Build the daemon binary
make test # Run all tests
make lint # Run linters (go vet + staticcheck)
make fmt # Format codepython -m pip install -e "clients/python[dev]"
python -m pytest clients/python/tests/make ts-install
cd clients/typescript && npm run check:proto-sync
make ts-typecheck
make ts-test
make ts-build- Follow standard Go conventions and idioms
- Run
make fmtbefore committing - Run
make lintto catch common issues - Write table-driven tests where appropriate
- All new code must include tests
- Run
make testto verify all tests pass - Aim for meaningful coverage of business logic
- Ensure your code passes
make lintandmake test - Update documentation if your changes affect public APIs
- Write a clear PR description explaining what changed and why
- Keep PRs focused - one feature or fix per PR
When modifying the protobuf definition (api/proto/membrane/v1/membrane.proto):
- Regenerate Go stubs:
make proto - Update gRPC handlers in
api/grpc/handlers.go - Sync the TypeScript proto copy:
cd clients/typescript && npm run sync:proto - Update the TypeScript client in
clients/typescript/src/client.ts - Update TypeScript types in
clients/typescript/src/types.tsif new enums/types are added - Update TypeScript exports in
clients/typescript/src/index.ts - Update the TypeScript client README
- Update the Python client in
clients/python/membrane/client.py - Update Python types in
clients/python/membrane/types.pyif new enums/types are added - Update
clients/python/membrane/__init__.pyexports - Update the Python client README
To release a new version of the TypeScript SDK to npm:
- You must have
NPM_TOKENset as a repository secret in GitHub - The token must have publish permissions for the
@membranenpm scope
- The git tag
ts-vX.Y.Zmust match the version inclients/typescript/package.json - For example, to release version
1.2.3:- Update
clients/typescript/package.jsonversion to1.2.3 - Commit and push
- Create tag
ts-v1.2.3
- Update
The repository's general vX.Y.Z tags continue to drive the main binary
release workflow. TypeScript npm publishes are opt-in and only run for
ts-vX.Y.Z tags.
- ✅ Ensure all tests pass (
npm test) - ✅ Update
CHANGELOG.mdif it exists - ✅ Bump version in
clients/typescript/package.json - ✅ Commit version changes
- ✅ Create git tag:
git tag ts-v1.2.3 - ✅ Push tag:
git push origin ts-v1.2.3 - ✅ GitHub Actions will automatically publish to npm
Use conventional commit messages with optional scope:
feat: add new retrieval filter optionfeat(python): add working state ingestion methodfix: correct decay calculation for linear curvesfix(grpc): validate merge ID countdocs: update retrieval API documentationtest: add atomicity tests for revision operationsci: add staticcheck to CI pipeline
This project follows the Contributor Covenant Code of Conduct.
By contributing, you agree that your contributions will be licensed under the MIT License.