Contributing
The full contributor guide — development setup, code conventions, commit and PR rules,
testing expectations, adding a tool, and DCO sign-off — is the canonical
CONTRIBUTING.md
at the repository root. This page is a quick local build-and-test reference.
Layout
Section titled “Layout”obsidian-tc is a Bun workspace monorepo:
| Package | What |
|---|---|
packages/server |
the MCP server (obsidian-tc) — tools, dispatch, transports |
packages/shared |
Zod schemas and shared types |
packages/native |
the napi-rs native module (vector ops, BM25) + pure-JS fallback |
packages/plugin |
the companion Obsidian plugin |
docs |
this Astro Starlight site (standalone, not in the workspace) |
Toolchain
Section titled “Toolchain”- Bun 1.3.x for installs, builds, and the bun-smoke job.
- Vitest for the server test suite (run under Node with
--experimental-sqlite). - Biome for lint/format (
bun run lint).
Build & test
Section titled “Build & test”bun installbun run lintbun run --filter=@the-40-thieves/obsidian-tc-shared buildbun run --filter=obsidian-tc test # vitest, with a v8 coverage gate (>80%)Storage portability
Section titled “Storage portability”CI runs vitest under node:sqlite with --ignore-scripts (no extension loading).
Any sqlite-extension feature (sqlite-vec, FTS5) therefore keeps a pure-JS portable
path tested in vitest, and exercises the real extension only in the bun-smoke job.
Never add a vitest test that calls loadExtension.