Stroma is a neutral corpus and indexing substrate.
It owns the lowest-level operations needed to ingest text artifacts, chunk them, embed them, persist them in SQLite plus sqlite-vec, and retrieve semantically close sections. Callers consume Stroma through its APIs and treat the SQLite snapshot as an opaque local artifact. It does not own governance, specifications, compliance, drift analysis, MCP, or CLI workflows.
Stroma is for products that need a reusable text corpus layer with:
- canonical records
- deterministic content fingerprints
- heading-aware Markdown chunking
- pluggable embedders
- SQLite-backed semantic retrieval
Stroma is not for:
- spec governance
- source discovery or repository scanning
- code compliance or doc drift analysis
- product-specific adapters and transports
corpus: canonical record model and deterministic fingerprintschunk: heading-aware Markdown chunkingembed: embedding interface, deterministic fixture embedder, and OpenAI-compatible HTTP embedderstore: SQLite readiness and vector blob helpersindex: index rebuild with embedding reuse, opened snapshot readers, stats, and semantic search
ctx := context.Background()
records := []corpus.Record{
{
Ref: "widget-overview",
Kind: "note",
Title: "Widget Overview",
SourceRef: "file://docs/widget-overview.md",
BodyFormat: corpus.FormatMarkdown,
BodyText: "# Overview\n\nWidgets are synchronized in batches.",
},
}
fixture, err := embed.NewFixture("fixture-demo", 16)
if err != nil {
log.Fatal(err)
}
_, err = index.Rebuild(ctx, records, index.BuildOptions{
Path: "stroma.db",
Embedder: fixture,
})
if err != nil {
log.Fatal(err)
}
hits, err := index.Search(ctx, index.SearchQuery{
Path: "stroma.db",
Text: "synchronized batches",
Limit: 5,
Embedder: fixture,
})
if err != nil {
log.Fatal(err)
}
fmt.Println(hits[0].Ref)This repo currently provides the extracted micro-kernel only. Higher-order products should consume it rather than re-embedding their own indexing substrate.