Welcome! We are really excited that you are interested in contributing to Conduit.
Before submitting your contribution, please make sure to take a moment and read through the following guidelines:
- Code of Conduct
- Issue Reporting Guidelines
- Pull Request Guidelines
- Development Setup
- Project Structure
-
When you are creating a bug report, please include as many details as possible.
-
Before creating issue reports, perform a cursory search to see if the problem has already been reported. If it has and the issue is still open, add a comment to the existing issue instead of opening a new one.
-
If you find a Closed issue that seems like it is the same thing that you're experiencing, open a new issue and include a link to the original issue in the body of your new one.
-
Checkout a topic branch from
main, and merge back. -
It's OK to have multiple small commits as you work on the PR - GitHub will automatically squash it before merging.
-
If adding a new feature:
- Add accompanying test case.
- Provide a convincing reason to add this feature. Ideally, you should open a suggestion issue first and have it approved before working on it.
-
If fixing a bug:
- If you are resolving a reported issue, add
(fix #xxx)(#xxx is the issue id) in your PR title for a better release log, e.g.update entities encoding/decoding (fix #389). - Provide a detailed description of the bug in the PR and the steps to reproduce it.
- If you are resolving a reported issue, add
-
DO NOT change
.gitignore.
- Node.js >=24
- pnpm 10.9.x (same major/minor as root
package.jsonpackageManager). Install via Corepack, npm global, or another supported method; match Node in.nvmrc(24+) - protoc
- MongoDB or PostgreSQL
- Redis
- Desire to create something awesome
After cloning the repo, run:
pnpm install --frozen-lockfile
turbo run build
REDIS_HOST=localhost REDIS_PORT=6379 pnpm --filter @conduitplatform/core start
CONDUIT_SERVER=0.0.0.0:55152 SERVICE_URL=0.0.0.0:55165 DB_CONN_URI=mongodb://localhost:27017 pnpm --filter @conduitplatform/database startThen repeat the following step for every additional module you wish to bring online, specifying any additional env vars. Replace the filter segment with the package name for that module (the folder name under modules/, e.g. chat, router, storage — not the literal word MODULE).
CONDUIT_SERVER=0.0.0.0:55152 SERVICE_URL=0.0.0.0:PORT pnpm --filter @conduitplatform/chat startYou may look up supported envs and configuration options for your modules in the modules section of the documentation.
Commit messages should follow the commit message convention so that changelogs can be automatically generated.
# Building Everything
turbo run build
# Building Individual Modules (eg: Database)
turbo run build --filter=@conduitplatform/database
# Running a module with env vars
CONDUIT_SERVER="0.0.0.0:55152" SERVICE_IP="0.0.0.0:55183" \
pnpm --filter @conduitplatform/database startFind out more about pnpm workspaces and Turborepo.
You may find additional scripts in the scripts section of the package.json file.
-
packages: contains core modules built into the "Core" packageadmin: provides administrative APIs (usingHermes)commons: SDK for core module intracommunicationcore: entrypoint, handles module configuration and service discovery
-
modules: contains non-core modulesauthentication: provides user authenticationauthorization: resource authorization based on Google Zanzibarchat: chat room functionalitydatabase: database engine (MongoDB, PostgreSQL), CMS, CRUD/functional endpoint generationemail: email sending with templates supportforms: form generation and submissionpush-notifications: provides support for push notificationsrouter: provides application APIs (usingHermes)sms: provides support for SMS communicationstorage: consistent storage
-
libraries: contains shared librariesgrpc-sdk: SDK for gRPC communication used by Core and moduleshermes: handles REST (+Swagger), GraphQL and WebSockets API generationnode-2fa: internal fork ofnode-2fatesting-tools: utilities for Conduit tests
-
scripts: contains build-related utility scripts -
docker: contains OCI-container related utilities -
benchmarks: contains benchmarking utilities
By contributing to Conduit & Conduit Platform repositories, you agree that your contributions will be licensed under the license specified in the repository you are contributing to.
Thank you to all the awesome people who have already contributed to Conduit!