86d welcomes contributions. The codebase is intentionally shaped so it is easy to make small focused changes, and we try hard to give every contributor a fast review. The main repositories you can contribute to are 86d-app/86d, which contains the framework (including the store app, modules, CLI, and packages), and 86d-app/docs, which hosts the documentation (this site).Documentation Index
Fetch the complete documentation index at: https://86d.app/docs/llms.txt
Use this file to discover all available pages before exploring further.
Setting up the framework repo
86d doctor to verify the project is healthy before you make changes.
Development loop
Five health gates have to pass before a pull request can merge:What good pull requests look like
- One coherent change per PR. A bug fix, a new endpoint, a new module, a docs improvement. Not all four at once.
- Tests for every code change. New endpoint -> add Vitest tests. UI change -> update Playwright snapshots. Bug fix -> add a regression test.
- A real description. What problem the PR solves, why this approach, what alternatives you considered, what is not yet covered.
- Changesets entry. For changes that affect a published package, run
bunx changesetand commit the generated file. CI will reject PRs without one when one is needed.
Coding standards
- No
any,@ts-expect-error,@ts-ignore, orbiome-ignore. Fix the underlying type or code. - No edits to
tsconfig.json,biome.json, or other config files to silence errors. If a rule does not fit, raise it; do not bypass it. - Primitive components are sacred. shadcn/ui, Base UI, Radix UI, React Aria. Wrap or compose, never modify.
- Never delete or weaken a passing test to make a new change pass.
- Biome handles formatting.
bun biome check --write src/to auto-fix.
Writing a module
Scaffold and iterate:- Real schema with proper types and relations
- Storefront and admin endpoints, fully implemented (no
TODObodies) - Loading, error, and empty states in any UI components
- Vitest tests for critical paths with realistic fixtures
- For external API integrations: real HTTP calls, retries, error mapping, webhook signature verification
- Playwright visual snapshots for any new admin or storefront screen, in light + dark mode, desktop + mobile
Publishing community modules
You do not need to upstream a module to publish it. Follow the standard pattern:- Build with
bun run build. - Set
"private": falseand a stable version inpackage.json. - Add
"86d-app"plus the relevant category tokeywordsso it surfaces in registry search. - Publish:
npm publish --access public.
Documentation contributions
Docs live in their own repo at86d-app/docs. Every page is an .mdx file with YAML frontmatter. Clone the repo and run a local Mintlify preview:
- Active voice. “Run the command” not “the command should be run.”
- Sentence case for headings.
- No em dashes. Use a comma, a colon, a semicolon, parentheses, or a sentence break instead.
- Include working examples. If you reference a CLI command or an API endpoint, paste the exact form and verify it runs.
Releasing the framework
Maintainers cut releases by merging an aggregated Changesets PR generated by CI. Seerelease in package.json. Module publishes use --provenance so consumers can verify package integrity.
Code of conduct
Be kind. Assume good faith. Disagree about ideas, not people. We follow the Contributor Covenant 2.1.Reporting security issues
Use GitHub Security Advisories rather than public issues for any security-relevant report.Where to get help
- Discussions: github.com/86d-app/86d/discussions for design proposals and open questions.
- Issues: github.com/86d-app/86d/issues for bugs and feature requests.

