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
Kindling uses a two-branch model that supports multiple active streams in parallel worktrees:
mainis the stable release branch. Always publishable to npm.devis the active integration branch and the default branch.- normal feat, fix, docs, and chore branches are created from
dev. - hotfix branches are created from
mainor the activerelease/*branch.
Keep main and dev as the only permanent worktrees. Treat all other
worktrees as disposable and remove them once the branch is merged, replaced,
or paused.
Release guidance:
- small releases may promote directly from
devtomain - larger releases should use a short-lived
release/*branch - any fix that lands during release stabilisation must be merged back to
devimmediately after release
See the detailed guides for the full policy:
- Open an issue first for significant changes to discuss approach
- Create a branch from
devfor normal work, or frommainonly for production hotfixes - Write tests for new functionality
- Update documentation if behavior changes
- Keep PRs focused — one logical change per PR
- Run the full test suite:
pnpm build && pnpm test && pnpm lint - Ensure CI passes before requesting review
- Target
dev— feature PRs should targetdev, notmain. Only release-promotion and hotfix PRs targetmain.
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.