Thank you for your interest in contributing to Kindling! We welcome contributions from the community.
- Node.js >= 20.0.0
- pnpm >= 8.0.0
git clone https://github.com/EddaCraft/kindling.git
cd kindling
pnpm install
pnpm build# Run all tests
pnpm test
# Run tests for a specific package
cd packages/kindling-core
pnpm test
# Watch mode
pnpm test:watch# Build all packages
pnpm build
# Type-check without emitting
pnpm type-check
# Clean build artifacts
pnpm clean- TypeScript for all source code
- Explicit types for public APIs
- Descriptive names - clarity over brevity
- Small, focused functions - single responsibility
- Tests alongside implementation - high coverage for core functionality
- ESM only - use
.jsextensions in imports
This project uses a two-tier branching workflow:
feature branches → dev (default) → main (releases)
devis the default branch and integration target for all development.mainis the release branch. Merges intomaintrigger publishing.- Feature branches are created from
devand merged back via PR. - PRs into both
devandmainrequire CI to pass. - Only maintainers merge
dev→mainfor releases.
- Open an issue first for significant changes to discuss approach
- Create a feature branch from
dev - Write tests for new functionality
- Update documentation if behavior changes
- Keep PRs focused - one logical change per PR
- Ensure CI passes before requesting review
- Target
dev— PRs should target thedevbranch, notmain
Use clear, descriptive commit messages following conventional commits:
feat: add capsule auto-close on session timeout
Capsules now auto-close when the source provides a natural end signal
or after a configurable inactivity timeout. This prevents orphaned
capsules from accumulating.
Closes #42
Prefixes:
feat:- New featurefix:- Bug fixdocs:- Documentation onlyrefactor:- Code change that neither fixes a bug nor adds a featuretest:- Adding or updating testschore:- Maintenance tasks
Kindling is infrastructure for local memory and continuity. Contributions should align with this scope.
- Observation capture and storage
- Capsule lifecycle management
- Retrieval (FTS, recency, deterministic ranking)
- Export/import and portability
- Adapter integrations (OpenCode, PocketFlow, etc.)
- CLI tooling for inspection and debugging
- Performance and reliability improvements
- Documentation and examples
These belong to downstream systems and will not be accepted:
- Governance workflows (review, approval, promotion)
- MemoryObject lifecycle management
- Multi-user access control and permissions
- Cloud/server deployment modes
- Semantic/embedding-based retrieval (planned for Phase 2)
- UI components
If you're unsure whether something is in scope, open an issue to discuss before investing time.
For net-new functionality, start with a design conversation. Open an issue describing:
- The problem you're solving
- Your proposed approach (optional)
- Why it belongs in Kindling
The maintainers will help decide whether it should move forward. Please wait for approval before opening a feature PR.
kindling/
├── packages/
│ ├── kindling/ # Main package (core + sqlite + provider + server)
│ ├── kindling-core/ # Domain types & KindlingService
│ ├── kindling-store-sqljs/ # Browser/WASM store
│ ├── kindling-adapter-opencode/
│ ├── kindling-adapter-pocketflow/
│ ├── kindling-adapter-claude-code/
│ └── kindling-cli/ # CLI tools
├── docs/ # Documentation
└── plans/ # Planning documents (APS)
- Issues: GitHub Issues
- Discussions: Open an issue for questions about contributing
By contributing, you agree that your contributions will be licensed under the Apache-2.0 License.