[{"data":1,"prerenderedAt":2327},["ShallowReactive",2],{"highlight:import \"github.com/zoobz-io/chisel\"\n\n// Register language providers\nchunker := chisel.New(\n    chisel.Go(),         // stdlib go/parser — zero C deps\n    chisel.TypeScript(), // tree-sitter\n    chisel.Python(),     // tree-sitter\n    chisel.Rust(),       // tree-sitter\n)\n\n// Parse into semantic chunks\nchunks := chunker.Chunk(ctx, \"go\", \"service.go\", sourceCode)\n\nfor _, chunk := range chunks {\n    fmt.Printf(\"%s %s [%d-%d]\\n\",\n        chunk.Kind,    // function, method, class, interface...\n        chunk.Symbol,  // \"Handler.ServeHTTP\"\n        chunk.StartLine,\n        chunk.EndLine,\n    )\n    fmt.Println(chunk.Context) // [\"class UserService\"]\n    // chunk.Content = full source including comments\n}\n\n// Feed to embedding model → vector database\nfor _, chunk := range chunks {\n    embedding := embed(chunk.Content)\n    store(chunk.Symbol, chunk.Kind, embedding)\n}":3,"footer-resources":4,"search-sections-chisel":1665,"nav-chisel":2241,"content-tree-chisel":2285,"content-table-nav-chisel":2306},"\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-keyword)\">import\u003C/span>\u003Cspan style=\"color:var(--shiki-string)\"> \"github.com/zoobz-io/chisel\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-comment)\">// Register language providers\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">chunker\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> :=\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> chisel\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">New\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">    chisel\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Go\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(),\u003C/span>\u003Cspan style=\"color:var(--shiki-comment)\">         // stdlib go/parser — zero C deps\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">    chisel\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">TypeScript\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(),\u003C/span>\u003Cspan style=\"color:var(--shiki-comment)\"> // tree-sitter\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">    chisel\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Python\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(),\u003C/span>\u003Cspan style=\"color:var(--shiki-comment)\">     // tree-sitter\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">    chisel\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Rust\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(),\u003C/span>\u003Cspan style=\"color:var(--shiki-comment)\">       // tree-sitter\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-punctuation)\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-comment)\">// Parse into semantic chunks\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">chunks\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> :=\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> chunker\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Chunk\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\">ctx\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-string)\"> \"go\"\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-string)\"> \"service.go\"\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> sourceCode\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-operator)\">for\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> _\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> chunk\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> :=\u003C/span>\u003Cspan style=\"color:var(--shiki-operator)\"> range\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> chunks\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">    fmt\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Printf\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(\u003C/span>\u003Cspan style=\"color:var(--shiki-string)\">\"\u003C/span>\u003Cspan style=\"color:var(--shiki-placeholder)\">%s\u003C/span>\u003Cspan style=\"color:var(--shiki-placeholder)\"> %s\u003C/span>\u003Cspan style=\"color:var(--shiki-string)\"> [\u003C/span>\u003Cspan style=\"color:var(--shiki-placeholder)\">%d\u003C/span>\u003Cspan style=\"color:var(--shiki-string)\">-\u003C/span>\u003Cspan style=\"color:var(--shiki-placeholder)\">%d\u003C/span>\u003Cspan style=\"color:var(--shiki-string)\">]\u003C/span>\u003Cspan style=\"color:var(--shiki-tag)\">\\n\u003C/span>\u003Cspan style=\"color:var(--shiki-string)\">\"\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">        chunk\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\">Kind\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-comment)\">    // function, method, class, interface...\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">        chunk\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\">Symbol\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-comment)\">  // \"Handler.ServeHTTP\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">        chunk\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\">StartLine\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">        chunk\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\">EndLine\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-punctuation)\">    )\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">    fmt\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Println\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\">chunk\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\">Context\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">)\u003C/span>\u003Cspan style=\"color:var(--shiki-comment)\"> // [\"class UserService\"]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-comment)\">    // chunk.Content = full source including comments\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-punctuation)\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-comment)\">// Feed to embedding model → vector database\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-operator)\">for\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> _\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> chunk\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> :=\u003C/span>\u003Cspan style=\"color:var(--shiki-operator)\"> range\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> chunks\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">    embedding\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> :=\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\"> embed\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\">chunk\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\">Content\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-function)\">    store\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\">chunk\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\">Symbol\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> chunk\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\">Kind\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> embedding\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-punctuation)\">}\u003C/span>\u003C/span>",[5,1550,1598],{"id":6,"title":7,"body":8,"description":97,"extension":1543,"icon":1544,"meta":1545,"navigation":139,"path":1546,"seo":1547,"stem":1548,"__hash__":1549},"resources/readme.md","README",{"type":9,"value":10,"toc":1531},"minimark",[11,15,83,86,91,379,382,436,439,443,460,467,532,535,539,1047,1050,1058,1062,1163,1167,1205,1209,1215,1218,1402,1405,1409,1412,1424,1428,1506,1510,1518,1521,1527],[12,13,14],"h1",{"id":14},"chisel",[16,17,18,29,37,45,53,61,68,75],"p",{},[19,20,24],"a",{"href":21,"rel":22},"https://github.com/zoobz-io/chisel/actions/workflows/ci.yml",[23],"nofollow",[25,26],"img",{"alt":27,"src":28},"CI Status","https://github.com/zoobz-io/chisel/workflows/CI/badge.svg",[19,30,33],{"href":31,"rel":32},"https://codecov.io/gh/zoobz-io/chisel",[23],[25,34],{"alt":35,"src":36},"codecov","https://codecov.io/gh/zoobz-io/chisel/graph/badge.svg?branch=main",[19,38,41],{"href":39,"rel":40},"https://goreportcard.com/report/github.com/zoobz-io/chisel",[23],[25,42],{"alt":43,"src":44},"Go Report Card","https://goreportcard.com/badge/github.com/zoobz-io/chisel",[19,46,49],{"href":47,"rel":48},"https://github.com/zoobz-io/chisel/security/code-scanning",[23],[25,50],{"alt":51,"src":52},"CodeQL","https://github.com/zoobz-io/chisel/workflows/CodeQL/badge.svg",[19,54,57],{"href":55,"rel":56},"https://pkg.go.dev/github.com/zoobz-io/chisel",[23],[25,58],{"alt":59,"src":60},"Go Reference","https://pkg.go.dev/badge/github.com/zoobz-io/chisel.svg",[19,62,64],{"href":63},"LICENSE",[25,65],{"alt":66,"src":67},"License","https://img.shields.io/github/license/zoobz-io/chisel",[19,69,71],{"href":70},"go.mod",[25,72],{"alt":73,"src":74},"Go Version","https://img.shields.io/github/go-mod/go-version/zoobz-io/chisel",[19,76,79],{"href":77,"rel":78},"https://github.com/zoobz-io/chisel/releases",[23],[25,80],{"alt":81,"src":82},"Release","https://img.shields.io/github/v/release/zoobz-io/chisel",[16,84,85],{},"AST-aware code chunking for semantic search and embeddings. Chisel parses source code into meaningful units—functions, classes, methods—preserving the context that makes code searchable.",[87,88,90],"h2",{"id":89},"from-syntax-to-semantics","From Syntax to Semantics",[92,93,98],"pre",{"className":94,"code":95,"language":96,"meta":97,"style":97},"language-go shiki shiki-themes","source := []byte(`\nfunc New(cfg Config) *Handler { ... }\n\nfunc (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { ... }\n\ntype Config struct {\n    Timeout time.Duration\n    Logger  *slog.Logger\n}\n`)\n\nchunks, _ := c.Chunk(ctx, chisel.Go, \"api.go\", source)\n\nfor _, chunk := range chunks {\n    fmt.Printf(\"[%s] %s (lines %d-%d)\\n\", chunk.Kind, chunk.Symbol, chunk.StartLine, chunk.EndLine)\n}\n// [function] New (lines 2-2)\n// [method] Handler.ServeHTTP (lines 4-4)\n// [class] Config (lines 6-9)\n","go","",[99,100,101,128,134,141,147,152,158,164,170,176,185,190,241,246,271,355,360,367,373],"code",{"__ignoreMap":97},[102,103,106,110,113,117,121,124],"span",{"class":104,"line":105},"line",1,[102,107,109],{"class":108},"sh8_p","source",[102,111,112],{"class":108}," :=",[102,114,116],{"class":115},"sq5bi"," []",[102,118,120],{"class":119},"sYBwO","byte",[102,122,123],{"class":115},"(",[102,125,127],{"class":126},"sxAnc","`\n",[102,129,131],{"class":104,"line":130},2,[102,132,133],{"class":126},"func New(cfg Config) *Handler { ... }\n",[102,135,137],{"class":104,"line":136},3,[102,138,140],{"emptyLinePlaceholder":139},true,"\n",[102,142,144],{"class":104,"line":143},4,[102,145,146],{"class":126},"func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { ... }\n",[102,148,150],{"class":104,"line":149},5,[102,151,140],{"emptyLinePlaceholder":139},[102,153,155],{"class":104,"line":154},6,[102,156,157],{"class":126},"type Config struct {\n",[102,159,161],{"class":104,"line":160},7,[102,162,163],{"class":126},"    Timeout time.Duration\n",[102,165,167],{"class":104,"line":166},8,[102,168,169],{"class":126},"    Logger  *slog.Logger\n",[102,171,173],{"class":104,"line":172},9,[102,174,175],{"class":126},"}\n",[102,177,179,182],{"class":104,"line":178},10,[102,180,181],{"class":126},"`",[102,183,184],{"class":115},")\n",[102,186,188],{"class":104,"line":187},11,[102,189,140],{"emptyLinePlaceholder":139},[102,191,193,196,199,202,204,207,210,214,216,219,221,224,226,229,231,234,236,239],{"class":104,"line":192},12,[102,194,195],{"class":108},"chunks",[102,197,198],{"class":115},",",[102,200,201],{"class":108}," _",[102,203,112],{"class":108},[102,205,206],{"class":108}," c",[102,208,209],{"class":115},".",[102,211,213],{"class":212},"s5klm","Chunk",[102,215,123],{"class":115},[102,217,218],{"class":108},"ctx",[102,220,198],{"class":115},[102,222,223],{"class":108}," chisel",[102,225,209],{"class":115},[102,227,228],{"class":108},"Go",[102,230,198],{"class":115},[102,232,233],{"class":126}," \"api.go\"",[102,235,198],{"class":115},[102,237,238],{"class":108}," source",[102,240,184],{"class":115},[102,242,244],{"class":104,"line":243},13,[102,245,140],{"emptyLinePlaceholder":139},[102,247,249,253,255,257,260,262,265,268],{"class":104,"line":248},14,[102,250,252],{"class":251},"sW3Qg","for",[102,254,201],{"class":108},[102,256,198],{"class":115},[102,258,259],{"class":108}," chunk",[102,261,112],{"class":108},[102,263,264],{"class":251}," range",[102,266,267],{"class":108}," chunks",[102,269,270],{"class":115}," {\n",[102,272,274,277,279,282,284,287,291,294,296,299,302,305,307,310,314,317,319,321,323,326,328,330,332,335,337,339,341,344,346,348,350,353],{"class":104,"line":273},15,[102,275,276],{"class":108},"    fmt",[102,278,209],{"class":115},[102,280,281],{"class":212},"Printf",[102,283,123],{"class":115},[102,285,286],{"class":126},"\"[",[102,288,290],{"class":289},"scyPU","%s",[102,292,293],{"class":126},"] ",[102,295,290],{"class":289},[102,297,298],{"class":126}," (lines ",[102,300,301],{"class":289},"%d",[102,303,304],{"class":126},"-",[102,306,301],{"class":289},[102,308,309],{"class":126},")",[102,311,313],{"class":312},"suWN2","\\n",[102,315,316],{"class":126},"\"",[102,318,198],{"class":115},[102,320,259],{"class":108},[102,322,209],{"class":115},[102,324,325],{"class":108},"Kind",[102,327,198],{"class":115},[102,329,259],{"class":108},[102,331,209],{"class":115},[102,333,334],{"class":108},"Symbol",[102,336,198],{"class":115},[102,338,259],{"class":108},[102,340,209],{"class":115},[102,342,343],{"class":108},"StartLine",[102,345,198],{"class":115},[102,347,259],{"class":108},[102,349,209],{"class":115},[102,351,352],{"class":108},"EndLine",[102,354,184],{"class":115},[102,356,358],{"class":104,"line":357},16,[102,359,175],{"class":115},[102,361,363],{"class":104,"line":362},17,[102,364,366],{"class":365},"sLkEo","// [function] New (lines 2-2)\n",[102,368,370],{"class":104,"line":369},18,[102,371,372],{"class":365},"// [method] Handler.ServeHTTP (lines 4-4)\n",[102,374,376],{"class":104,"line":375},19,[102,377,378],{"class":365},"// [class] Config (lines 6-9)\n",[16,380,381],{},"Every chunk carries its symbol name, kind, line range, and parent context. Methods know their receiver. Nested types know their enclosing scope.",[92,383,385],{"className":94,"code":384,"language":96,"meta":97,"style":97},"chunk := chunks[1]\n// chunk.Symbol    → \"Handler.ServeHTTP\"\n// chunk.Kind      → \"method\"\n// chunk.Context   → [\"Handler\"]\n// chunk.Content   → the full method source\n// chunk.StartLine → 4\n// chunk.EndLine   → 4\n",[99,386,387,406,411,416,421,426,431],{"__ignoreMap":97},[102,388,389,392,394,396,399,403],{"class":104,"line":105},[102,390,391],{"class":108},"chunk",[102,393,112],{"class":108},[102,395,267],{"class":108},[102,397,398],{"class":115},"[",[102,400,402],{"class":401},"sMAmT","1",[102,404,405],{"class":115},"]\n",[102,407,408],{"class":104,"line":130},[102,409,410],{"class":365},"// chunk.Symbol    → \"Handler.ServeHTTP\"\n",[102,412,413],{"class":104,"line":136},[102,414,415],{"class":365},"// chunk.Kind      → \"method\"\n",[102,417,418],{"class":104,"line":143},[102,419,420],{"class":365},"// chunk.Context   → [\"Handler\"]\n",[102,422,423],{"class":104,"line":149},[102,424,425],{"class":365},"// chunk.Content   → the full method source\n",[102,427,428],{"class":104,"line":154},[102,429,430],{"class":365},"// chunk.StartLine → 4\n",[102,432,433],{"class":104,"line":160},[102,434,435],{"class":365},"// chunk.EndLine   → 4\n",[16,437,438],{},"Feed chunks to an embedding model, store in a vector database, and search code by meaning rather than text.",[87,440,442],{"id":441},"install","Install",[92,444,448],{"className":445,"code":446,"language":447,"meta":97,"style":97},"language-bash shiki shiki-themes","go get github.com/zoobz-io/chisel\n","bash",[99,449,450],{"__ignoreMap":97},[102,451,452,454,457],{"class":104,"line":105},[102,453,96],{"class":212},[102,455,456],{"class":126}," get",[102,458,459],{"class":126}," github.com/zoobz-io/chisel\n",[16,461,462,466],{},[463,464,465],"strong",{},"Language providers"," (install only what you need):",[92,468,470],{"className":445,"code":469,"language":447,"meta":97,"style":97},"go get github.com/zoobz-io/chisel/golang     # Go (stdlib, no deps)\ngo get github.com/zoobz-io/chisel/markdown   # Markdown (no deps)\ngo get github.com/zoobz-io/chisel/typescript # TypeScript/JavaScript (tree-sitter)\ngo get github.com/zoobz-io/chisel/python     # Python (tree-sitter)\ngo get github.com/zoobz-io/chisel/rust       # Rust (tree-sitter)\n",[99,471,472,484,496,508,520],{"__ignoreMap":97},[102,473,474,476,478,481],{"class":104,"line":105},[102,475,96],{"class":212},[102,477,456],{"class":126},[102,479,480],{"class":126}," github.com/zoobz-io/chisel/golang",[102,482,483],{"class":365},"     # Go (stdlib, no deps)\n",[102,485,486,488,490,493],{"class":104,"line":130},[102,487,96],{"class":212},[102,489,456],{"class":126},[102,491,492],{"class":126}," github.com/zoobz-io/chisel/markdown",[102,494,495],{"class":365},"   # Markdown (no deps)\n",[102,497,498,500,502,505],{"class":104,"line":136},[102,499,96],{"class":212},[102,501,456],{"class":126},[102,503,504],{"class":126}," github.com/zoobz-io/chisel/typescript",[102,506,507],{"class":365}," # TypeScript/JavaScript (tree-sitter)\n",[102,509,510,512,514,517],{"class":104,"line":143},[102,511,96],{"class":212},[102,513,456],{"class":126},[102,515,516],{"class":126}," github.com/zoobz-io/chisel/python",[102,518,519],{"class":365},"     # Python (tree-sitter)\n",[102,521,522,524,526,529],{"class":104,"line":149},[102,523,96],{"class":212},[102,525,456],{"class":126},[102,527,528],{"class":126}," github.com/zoobz-io/chisel/rust",[102,530,531],{"class":365},"       # Rust (tree-sitter)\n",[16,533,534],{},"Requires Go 1.24+.",[87,536,538],{"id":537},"quick-start","Quick Start",[92,540,542],{"className":94,"code":541,"language":96,"meta":97,"style":97},"package main\n\nimport (\n    \"context\"\n    \"fmt\"\n\n    \"github.com/zoobz-io/chisel\"\n    \"github.com/zoobz-io/chisel/golang\"\n    \"github.com/zoobz-io/chisel/typescript\"\n)\n\nfunc main() {\n    // Create a chunker with language providers\n    c := chisel.New(\n        golang.New(),\n        typescript.New(),\n        typescript.NewJavaScript(),\n    )\n\n    source := []byte(`\npackage auth\n\n// Authenticate validates user credentials.\nfunc Authenticate(username, password string) (*User, error) {\n    // ...\n}\n\n// User represents an authenticated user.\ntype User struct {\n    ID    string\n    Email string\n}\n`)\n\n    chunks, err := c.Chunk(context.Background(), chisel.Go, \"auth.go\", source)\n    if err != nil {\n        panic(err)\n    }\n\n    for _, chunk := range chunks {\n        fmt.Printf(\"[%s] %s\\n\", chunk.Kind, chunk.Symbol)\n        fmt.Printf(\"  Lines: %d-%d\\n\", chunk.StartLine, chunk.EndLine)\n        if len(chunk.Context) > 0 {\n            fmt.Printf(\"  Context: %v\\n\", chunk.Context)\n        }\n    }\n}\n",[99,543,544,553,557,566,571,576,580,585,590,595,599,603,616,621,638,650,661,672,677,681,697,703,708,714,720,726,731,736,742,748,754,760,765,772,777,826,842,856,862,867,887,929,971,999,1031,1037,1042],{"__ignoreMap":97},[102,545,546,550],{"class":104,"line":105},[102,547,549],{"class":548},"sUt3r","package",[102,551,552],{"class":119}," main\n",[102,554,555],{"class":104,"line":130},[102,556,140],{"emptyLinePlaceholder":139},[102,558,559,562],{"class":104,"line":136},[102,560,561],{"class":548},"import",[102,563,565],{"class":564},"soy-K"," (\n",[102,567,568],{"class":104,"line":143},[102,569,570],{"class":126},"    \"context\"\n",[102,572,573],{"class":104,"line":149},[102,574,575],{"class":126},"    \"fmt\"\n",[102,577,578],{"class":104,"line":154},[102,579,140],{"emptyLinePlaceholder":139},[102,581,582],{"class":104,"line":160},[102,583,584],{"class":126},"    \"github.com/zoobz-io/chisel\"\n",[102,586,587],{"class":104,"line":166},[102,588,589],{"class":126},"    \"github.com/zoobz-io/chisel/golang\"\n",[102,591,592],{"class":104,"line":172},[102,593,594],{"class":126},"    \"github.com/zoobz-io/chisel/typescript\"\n",[102,596,597],{"class":104,"line":178},[102,598,184],{"class":564},[102,600,601],{"class":104,"line":187},[102,602,140],{"emptyLinePlaceholder":139},[102,604,605,608,611,614],{"class":104,"line":192},[102,606,607],{"class":548},"func",[102,609,610],{"class":212}," main",[102,612,613],{"class":115},"()",[102,615,270],{"class":115},[102,617,618],{"class":104,"line":243},[102,619,620],{"class":365},"    // Create a chunker with language providers\n",[102,622,623,626,628,630,632,635],{"class":104,"line":248},[102,624,625],{"class":108},"    c",[102,627,112],{"class":108},[102,629,223],{"class":108},[102,631,209],{"class":115},[102,633,634],{"class":212},"New",[102,636,637],{"class":115},"(\n",[102,639,640,643,645,647],{"class":104,"line":273},[102,641,642],{"class":108},"        golang",[102,644,209],{"class":115},[102,646,634],{"class":212},[102,648,649],{"class":115},"(),\n",[102,651,652,655,657,659],{"class":104,"line":357},[102,653,654],{"class":108},"        typescript",[102,656,209],{"class":115},[102,658,634],{"class":212},[102,660,649],{"class":115},[102,662,663,665,667,670],{"class":104,"line":362},[102,664,654],{"class":108},[102,666,209],{"class":115},[102,668,669],{"class":212},"NewJavaScript",[102,671,649],{"class":115},[102,673,674],{"class":104,"line":369},[102,675,676],{"class":115},"    )\n",[102,678,679],{"class":104,"line":375},[102,680,140],{"emptyLinePlaceholder":139},[102,682,684,687,689,691,693,695],{"class":104,"line":683},20,[102,685,686],{"class":108},"    source",[102,688,112],{"class":108},[102,690,116],{"class":115},[102,692,120],{"class":119},[102,694,123],{"class":115},[102,696,127],{"class":126},[102,698,700],{"class":104,"line":699},21,[102,701,702],{"class":126},"package auth\n",[102,704,706],{"class":104,"line":705},22,[102,707,140],{"emptyLinePlaceholder":139},[102,709,711],{"class":104,"line":710},23,[102,712,713],{"class":126},"// Authenticate validates user credentials.\n",[102,715,717],{"class":104,"line":716},24,[102,718,719],{"class":126},"func Authenticate(username, password string) (*User, error) {\n",[102,721,723],{"class":104,"line":722},25,[102,724,725],{"class":126},"    // ...\n",[102,727,729],{"class":104,"line":728},26,[102,730,175],{"class":126},[102,732,734],{"class":104,"line":733},27,[102,735,140],{"emptyLinePlaceholder":139},[102,737,739],{"class":104,"line":738},28,[102,740,741],{"class":126},"// User represents an authenticated user.\n",[102,743,745],{"class":104,"line":744},29,[102,746,747],{"class":126},"type User struct {\n",[102,749,751],{"class":104,"line":750},30,[102,752,753],{"class":126},"    ID    string\n",[102,755,757],{"class":104,"line":756},31,[102,758,759],{"class":126},"    Email string\n",[102,761,763],{"class":104,"line":762},32,[102,764,175],{"class":126},[102,766,768,770],{"class":104,"line":767},33,[102,769,181],{"class":126},[102,771,184],{"class":115},[102,773,775],{"class":104,"line":774},34,[102,776,140],{"emptyLinePlaceholder":139},[102,778,780,783,785,788,790,792,794,796,798,801,803,806,809,811,813,815,817,820,822,824],{"class":104,"line":779},35,[102,781,782],{"class":108},"    chunks",[102,784,198],{"class":115},[102,786,787],{"class":108}," err",[102,789,112],{"class":108},[102,791,206],{"class":108},[102,793,209],{"class":115},[102,795,213],{"class":212},[102,797,123],{"class":115},[102,799,800],{"class":108},"context",[102,802,209],{"class":115},[102,804,805],{"class":212},"Background",[102,807,808],{"class":115},"(),",[102,810,223],{"class":108},[102,812,209],{"class":115},[102,814,228],{"class":108},[102,816,198],{"class":115},[102,818,819],{"class":126}," \"auth.go\"",[102,821,198],{"class":115},[102,823,238],{"class":108},[102,825,184],{"class":115},[102,827,829,832,834,837,840],{"class":104,"line":828},36,[102,830,831],{"class":251},"    if",[102,833,787],{"class":108},[102,835,836],{"class":251}," !=",[102,838,839],{"class":548}," nil",[102,841,270],{"class":115},[102,843,845,849,851,854],{"class":104,"line":844},37,[102,846,848],{"class":847},"skxcq","        panic",[102,850,123],{"class":115},[102,852,853],{"class":108},"err",[102,855,184],{"class":115},[102,857,859],{"class":104,"line":858},38,[102,860,861],{"class":115},"    }\n",[102,863,865],{"class":104,"line":864},39,[102,866,140],{"emptyLinePlaceholder":139},[102,868,870,873,875,877,879,881,883,885],{"class":104,"line":869},40,[102,871,872],{"class":251},"    for",[102,874,201],{"class":108},[102,876,198],{"class":115},[102,878,259],{"class":108},[102,880,112],{"class":108},[102,882,264],{"class":251},[102,884,267],{"class":108},[102,886,270],{"class":115},[102,888,890,893,895,897,899,901,903,905,907,909,911,913,915,917,919,921,923,925,927],{"class":104,"line":889},41,[102,891,892],{"class":108},"        fmt",[102,894,209],{"class":115},[102,896,281],{"class":212},[102,898,123],{"class":115},[102,900,286],{"class":126},[102,902,290],{"class":289},[102,904,293],{"class":126},[102,906,290],{"class":289},[102,908,313],{"class":312},[102,910,316],{"class":126},[102,912,198],{"class":115},[102,914,259],{"class":108},[102,916,209],{"class":115},[102,918,325],{"class":108},[102,920,198],{"class":115},[102,922,259],{"class":108},[102,924,209],{"class":115},[102,926,334],{"class":108},[102,928,184],{"class":115},[102,930,932,934,936,938,940,943,945,947,949,951,953,955,957,959,961,963,965,967,969],{"class":104,"line":931},42,[102,933,892],{"class":108},[102,935,209],{"class":115},[102,937,281],{"class":212},[102,939,123],{"class":115},[102,941,942],{"class":126},"\"  Lines: ",[102,944,301],{"class":289},[102,946,304],{"class":126},[102,948,301],{"class":289},[102,950,313],{"class":312},[102,952,316],{"class":126},[102,954,198],{"class":115},[102,956,259],{"class":108},[102,958,209],{"class":115},[102,960,343],{"class":108},[102,962,198],{"class":115},[102,964,259],{"class":108},[102,966,209],{"class":115},[102,968,352],{"class":108},[102,970,184],{"class":115},[102,972,974,977,980,982,984,986,989,991,994,997],{"class":104,"line":973},43,[102,975,976],{"class":251},"        if",[102,978,979],{"class":847}," len",[102,981,123],{"class":115},[102,983,391],{"class":108},[102,985,209],{"class":115},[102,987,988],{"class":108},"Context",[102,990,309],{"class":115},[102,992,993],{"class":251}," >",[102,995,996],{"class":401}," 0",[102,998,270],{"class":115},[102,1000,1002,1005,1007,1009,1011,1014,1017,1019,1021,1023,1025,1027,1029],{"class":104,"line":1001},44,[102,1003,1004],{"class":108},"            fmt",[102,1006,209],{"class":115},[102,1008,281],{"class":212},[102,1010,123],{"class":115},[102,1012,1013],{"class":126},"\"  Context: ",[102,1015,1016],{"class":289},"%v",[102,1018,313],{"class":312},[102,1020,316],{"class":126},[102,1022,198],{"class":115},[102,1024,259],{"class":108},[102,1026,209],{"class":115},[102,1028,988],{"class":108},[102,1030,184],{"class":115},[102,1032,1034],{"class":104,"line":1033},45,[102,1035,1036],{"class":115},"        }\n",[102,1038,1040],{"class":104,"line":1039},46,[102,1041,861],{"class":115},[102,1043,1045],{"class":104,"line":1044},47,[102,1046,175],{"class":115},[16,1048,1049],{},"Output:",[92,1051,1056],{"className":1052,"code":1054,"language":1055,"meta":97},[1053],"language-text","[function] Authenticate\n  Lines: 4-6\n[class] User\n  Lines: 8-12\n","text",[99,1057,1054],{"__ignoreMap":97},[87,1059,1061],{"id":1060},"capabilities","Capabilities",[1063,1064,1065,1081],"table",{},[1066,1067,1068],"thead",{},[1069,1070,1071,1075,1078],"tr",{},[1072,1073,1074],"th",{},"Feature",[1072,1076,1077],{},"Description",[1072,1079,1080],{},"Docs",[1082,1083,1084,1101,1117,1133,1149],"tbody",{},[1069,1085,1086,1092,1095],{},[1087,1088,1089],"td",{},[463,1090,1091],{},"Multi-language",[1087,1093,1094],{},"Go, TypeScript, JavaScript, Python, Rust, Markdown",[1087,1096,1097],{},[19,1098,1100],{"href":1099},"docs/guides/providers","Providers",[1069,1102,1103,1108,1111],{},[1087,1104,1105],{},[463,1106,1107],{},"Semantic extraction",[1087,1109,1110],{},"Functions, methods, classes, interfaces, types, enums",[1087,1112,1113],{},[19,1114,1116],{"href":1115},"docs/learn/concepts","Concepts",[1069,1118,1119,1124,1127],{},[1087,1120,1121],{},[463,1122,1123],{},"Context preservation",[1087,1125,1126],{},"Parent chain for nested definitions",[1087,1128,1129],{},[19,1130,1132],{"href":1131},"docs/learn/architecture","Architecture",[1069,1134,1135,1140,1143],{},[1087,1136,1137],{},[463,1138,1139],{},"Line mapping",[1087,1141,1142],{},"Precise source locations for each chunk",[1087,1144,1145],{},[19,1146,1148],{"href":1147},"docs/reference/types","Types",[1069,1150,1151,1156,1159],{},[1087,1152,1153],{},[463,1154,1155],{},"Zero-copy providers",[1087,1157,1158],{},"Go and Markdown use stdlib only",[1087,1160,1161],{},[19,1162,1132],{"href":1131},[87,1164,1166],{"id":1165},"why-chisel","Why Chisel?",[1168,1169,1170,1177,1183,1189,1195],"ul",{},[1171,1172,1173,1176],"li",{},[463,1174,1175],{},"Semantic boundaries"," — Chunks split at function/class boundaries, not arbitrary line counts",[1171,1178,1179,1182],{},[463,1180,1181],{},"Embedding-ready"," — Output designed for vector databases and semantic search",[1171,1184,1185,1188],{},[463,1186,1187],{},"Isolated dependencies"," — Tree-sitter only where needed; Go/Markdown have zero external deps",[1171,1190,1191,1194],{},[463,1192,1193],{},"Context-aware"," — Methods know their parent class; nested functions know their scope",[1171,1196,1197,1200,1201,1204],{},[463,1198,1199],{},"Consistent interface"," — Same ",[99,1202,1203],{},"Provider"," contract across all languages",[87,1206,1208],{"id":1207},"code-intelligence-pipelines","Code Intelligence Pipelines",[16,1210,1211,1212,209],{},"Chisel enables a pattern: ",[463,1213,1214],{},"parse once, search by meaning",[16,1216,1217],{},"Your codebase becomes a corpus of semantic units. Each function, method, and type gets embedded with its full context — symbol name, parent scope, documentation. Queries match intent, not just text.",[92,1219,1221],{"className":94,"code":1220,"language":96,"meta":97,"style":97},"// Chunk your codebase\nchunks, _ := c.Chunk(ctx, chisel.Go, path, source)\n\n// Embed each chunk (using your embedding provider)\nfor _, chunk := range chunks {\n    embedding := embedder.Embed(chunk.Content)\n    vectorDB.Store(embedding, chunk.Symbol, chunk.Kind, path)\n}\n\n// Search by meaning\nresults := vectorDB.Query(\"authentication middleware\")\n// Returns: AuthMiddleware, ValidateToken, SessionHandler\n// Not just files containing the word \"authentication\"\n",[99,1222,1223,1228,1267,1271,1276,1294,1320,1357,1361,1365,1370,1392,1397],{"__ignoreMap":97},[102,1224,1225],{"class":104,"line":105},[102,1226,1227],{"class":365},"// Chunk your codebase\n",[102,1229,1230,1232,1234,1236,1238,1240,1242,1244,1246,1248,1250,1252,1254,1256,1258,1261,1263,1265],{"class":104,"line":130},[102,1231,195],{"class":108},[102,1233,198],{"class":115},[102,1235,201],{"class":108},[102,1237,112],{"class":108},[102,1239,206],{"class":108},[102,1241,209],{"class":115},[102,1243,213],{"class":212},[102,1245,123],{"class":115},[102,1247,218],{"class":108},[102,1249,198],{"class":115},[102,1251,223],{"class":108},[102,1253,209],{"class":115},[102,1255,228],{"class":108},[102,1257,198],{"class":115},[102,1259,1260],{"class":108}," path",[102,1262,198],{"class":115},[102,1264,238],{"class":108},[102,1266,184],{"class":115},[102,1268,1269],{"class":104,"line":136},[102,1270,140],{"emptyLinePlaceholder":139},[102,1272,1273],{"class":104,"line":143},[102,1274,1275],{"class":365},"// Embed each chunk (using your embedding provider)\n",[102,1277,1278,1280,1282,1284,1286,1288,1290,1292],{"class":104,"line":149},[102,1279,252],{"class":251},[102,1281,201],{"class":108},[102,1283,198],{"class":115},[102,1285,259],{"class":108},[102,1287,112],{"class":108},[102,1289,264],{"class":251},[102,1291,267],{"class":108},[102,1293,270],{"class":115},[102,1295,1296,1299,1301,1304,1306,1309,1311,1313,1315,1318],{"class":104,"line":154},[102,1297,1298],{"class":108},"    embedding",[102,1300,112],{"class":108},[102,1302,1303],{"class":108}," embedder",[102,1305,209],{"class":115},[102,1307,1308],{"class":212},"Embed",[102,1310,123],{"class":115},[102,1312,391],{"class":108},[102,1314,209],{"class":115},[102,1316,1317],{"class":108},"Content",[102,1319,184],{"class":115},[102,1321,1322,1325,1327,1330,1332,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355],{"class":104,"line":160},[102,1323,1324],{"class":108},"    vectorDB",[102,1326,209],{"class":115},[102,1328,1329],{"class":212},"Store",[102,1331,123],{"class":115},[102,1333,1334],{"class":108},"embedding",[102,1336,198],{"class":115},[102,1338,259],{"class":108},[102,1340,209],{"class":115},[102,1342,334],{"class":108},[102,1344,198],{"class":115},[102,1346,259],{"class":108},[102,1348,209],{"class":115},[102,1350,325],{"class":108},[102,1352,198],{"class":115},[102,1354,1260],{"class":108},[102,1356,184],{"class":115},[102,1358,1359],{"class":104,"line":166},[102,1360,175],{"class":115},[102,1362,1363],{"class":104,"line":172},[102,1364,140],{"emptyLinePlaceholder":139},[102,1366,1367],{"class":104,"line":178},[102,1368,1369],{"class":365},"// Search by meaning\n",[102,1371,1372,1375,1377,1380,1382,1385,1387,1390],{"class":104,"line":187},[102,1373,1374],{"class":108},"results",[102,1376,112],{"class":108},[102,1378,1379],{"class":108}," vectorDB",[102,1381,209],{"class":115},[102,1383,1384],{"class":212},"Query",[102,1386,123],{"class":115},[102,1388,1389],{"class":126},"\"authentication middleware\"",[102,1391,184],{"class":115},[102,1393,1394],{"class":104,"line":192},[102,1395,1396],{"class":365},"// Returns: AuthMiddleware, ValidateToken, SessionHandler\n",[102,1398,1399],{"class":104,"line":243},[102,1400,1401],{"class":365},"// Not just files containing the word \"authentication\"\n",[16,1403,1404],{},"Symbol names and kinds become metadata. Line ranges enable source navigation. Context chains power hierarchical search.",[87,1406,1408],{"id":1407},"ecosystem","Ecosystem",[16,1410,1411],{},"Chisel provides the chunking layer for code intelligence pipelines:",[1168,1413,1414],{},[1171,1415,1416,1423],{},[463,1417,1418],{},[19,1419,1422],{"href":1420,"rel":1421},"https://github.com/zoobz-io/vicky",[23],"vicky"," — Code search and retrieval service",[87,1425,1427],{"id":1426},"documentation","Documentation",[1168,1429,1430,1461,1487],{},[1171,1431,1432,1435],{},[463,1433,1434],{},"Learn",[1168,1436,1437,1444,1451,1456],{},[1171,1438,1439,1443],{},[19,1440,1442],{"href":1441},"docs/learn/overview","Overview"," — What chisel is and why",[1171,1445,1446,1450],{},[19,1447,1449],{"href":1448},"docs/learn/quickstart","Quickstart"," — Get productive in minutes",[1171,1452,1453,1455],{},[19,1454,1116],{"href":1115}," — Core abstractions",[1171,1457,1458,1460],{},[19,1459,1132],{"href":1131}," — How it works internally",[1171,1462,1463,1466],{},[463,1464,1465],{},"Guides",[1168,1467,1468,1473,1480],{},[1171,1469,1470,1472],{},[19,1471,1100],{"href":1099}," — Language-specific details",[1171,1474,1475,1479],{},[19,1476,1478],{"href":1477},"docs/guides/testing","Testing"," — Testing code that uses chisel",[1171,1481,1482,1486],{},[19,1483,1485],{"href":1484},"docs/guides/troubleshooting","Troubleshooting"," — Common issues",[1171,1488,1489,1492],{},[463,1490,1491],{},"Reference",[1168,1493,1494,1501],{},[1171,1495,1496,1500],{},[19,1497,1499],{"href":1498},"docs/reference/api","API"," — Function signatures",[1171,1502,1503,1505],{},[19,1504,1148],{"href":1147}," — Type definitions",[87,1507,1509],{"id":1508},"contributing","Contributing",[16,1511,1512,1513,1517],{},"Contributions welcome. See ",[19,1514,1516],{"href":1515},"CONTRIBUTING","CONTRIBUTING.md"," for guidelines.",[87,1519,66],{"id":1520},"license",[16,1522,1523,1524,1526],{},"MIT — see ",[19,1525,63],{"href":63}," for details.",[1528,1529,1530],"style",{},"html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .scyPU, html code.shiki .scyPU{--shiki-default:var(--shiki-placeholder)}html pre.shiki code .suWN2, html code.shiki .suWN2{--shiki-default:var(--shiki-tag)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}",{"title":97,"searchDepth":130,"depth":130,"links":1532},[1533,1534,1535,1536,1537,1538,1539,1540,1541,1542],{"id":89,"depth":130,"text":90},{"id":441,"depth":130,"text":442},{"id":537,"depth":130,"text":538},{"id":1060,"depth":130,"text":1061},{"id":1165,"depth":130,"text":1166},{"id":1207,"depth":130,"text":1208},{"id":1407,"depth":130,"text":1408},{"id":1426,"depth":130,"text":1427},{"id":1508,"depth":130,"text":1509},{"id":1520,"depth":130,"text":66},"md","book-open",{},"/readme",{"title":7,"description":97},"readme","NJKEPikJvm48E_OiIFdfVh130y893tWZUxmKrbijI2k",{"id":1551,"title":1552,"body":1553,"description":97,"extension":1543,"icon":1592,"meta":1593,"navigation":139,"path":1594,"seo":1595,"stem":1596,"__hash__":1597},"resources/security.md","Security",{"type":9,"value":1554,"toc":1588},[1555,1559,1563,1570,1573,1577],[12,1556,1558],{"id":1557},"security-policy","Security Policy",[87,1560,1562],{"id":1561},"reporting-a-vulnerability","Reporting a Vulnerability",[16,1564,1565,1566,209],{},"Please report security vulnerabilities by emailing ",[19,1567,1569],{"href":1568},"mailto:security@zoobzio.com","security@zoobzio.com",[16,1571,1572],{},"Do not open a public issue for security vulnerabilities.",[87,1574,1576],{"id":1575},"response-timeline","Response Timeline",[1168,1578,1579,1582,1585],{},[1171,1580,1581],{},"Acknowledgment: within 48 hours",[1171,1583,1584],{},"Initial assessment: within 1 week",[1171,1586,1587],{},"Fix timeline: depends on severity",{"title":97,"searchDepth":130,"depth":130,"links":1589},[1590,1591],{"id":1561,"depth":130,"text":1562},{"id":1575,"depth":130,"text":1576},"shield",{},"/security",{"title":1552,"description":97},"security","6BvZhKRNN9RxQpAWeuz3P-Iotz_T7Z7ugTXcNo-LTyU",{"id":1599,"title":1509,"body":1600,"description":97,"extension":1543,"icon":99,"meta":1661,"navigation":139,"path":1662,"seo":1663,"stem":1508,"__hash__":1664},"resources/contributing.md",{"type":9,"value":1601,"toc":1657},[1602,1604,1626,1630,1650,1654],[12,1603,1509],{"id":1508},[1605,1606,1607,1610,1613,1616,1623],"ol",{},[1171,1608,1609],{},"Fork the repository",[1171,1611,1612],{},"Create a feature branch",[1171,1614,1615],{},"Make changes with tests",[1171,1617,1618,1619,1622],{},"Run ",[99,1620,1621],{},"make check"," to verify",[1171,1624,1625],{},"Submit a pull request",[87,1627,1629],{"id":1628},"development","Development",[1168,1631,1632,1638,1644],{},[1171,1633,1634,1637],{},[99,1635,1636],{},"make help"," — list available commands",[1171,1639,1640,1643],{},[99,1641,1642],{},"make test"," — run all tests",[1171,1645,1646,1649],{},[99,1647,1648],{},"make lint"," — run linters",[87,1651,1653],{"id":1652},"code-of-conduct","Code of Conduct",[16,1655,1656],{},"Be respectful. We're all here to build good software.",{"title":97,"searchDepth":130,"depth":130,"links":1658},[1659,1660],{"id":1628,"depth":130,"text":1629},{"id":1652,"depth":130,"text":1653},{},"/contributing",{"title":1509,"description":97},"Uh51sWT_BFO8Ft7nBSzGxo0pXQxY65rXPhK3VQXlFxg",[1666,1670,1674,1679,1684,1689,1694,1698,1701,1706,1711,1716,1721,1726,1730,1734,1738,1743,1748,1752,1756,1761,1765,1769,1773,1778,1782,1787,1792,1797,1802,1807,1812,1816,1821,1825,1829,1834,1839,1844,1849,1854,1859,1864,1869,1873,1878,1882,1887,1892,1897,1902,1907,1912,1917,1922,1926,1930,1934,1938,1943,1948,1952,1957,1962,1966,1971,1976,1980,1985,1990,1995,1999,2004,2009,2014,2018,2023,2028,2033,2038,2042,2047,2052,2057,2060,2064,2068,2073,2078,2083,2088,2092,2096,2101,2106,2111,2115,2119,2123,2127,2132,2136,2140,2144,2149,2153,2157,2161,2165,2169,2173,2177,2181,2186,2191,2196,2201,2206,2211,2216,2219,2223,2227,2232,2236],{"id":1667,"title":1442,"titles":1668,"content":1669,"level":105},"/v0.0.3/learn/overview",[],"AST-aware code chunking for semantic search and embeddings",{"id":1671,"title":1442,"titles":1672,"content":1673,"level":105},"/v0.0.3/learn/overview#overview",[],"Chisel parses source code into semantic chunks—functions, classes, methods, types—preserving the structure and context that makes code meaningful. Feed these chunks to an embedder, store them in a vector database, and search code by what it does rather than what it says.",{"id":1675,"title":1676,"titles":1677,"content":1678,"level":130},"/v0.0.3/learn/overview#the-idea","The Idea",[1442],"Code search should understand code. Splitting files at arbitrary line boundaries destroys the very structure that gives code meaning. A function split in half is two meaningless fragments. A method without its class context is an orphan. Chisel asks: what if we chunked code the way developers think about it?",{"id":1680,"title":1681,"titles":1682,"content":1683,"level":130},"/v0.0.3/learn/overview#the-implementation","The Implementation",[1442],"Chisel provides: Language providers — Parsers for Go, TypeScript, JavaScript, Python, Rust, and MarkdownSemantic extraction — Functions, methods, classes, interfaces, types, enums, modulesContext preservation — Parent chain for nested definitions (method → class → module)Line mapping — Precise source locations for navigation and displayUniform interface — Same Provider contract across all languages",{"id":1685,"title":1686,"titles":1687,"content":1688,"level":130},"/v0.0.3/learn/overview#what-it-enables","What It Enables",[1442],"Chisel is the chunking layer for code intelligence: Semantic search — Find code by meaning, not keywordsCode retrieval — Fetch relevant context for LLM promptsDocumentation generation — Extract structure for API docsCodebase understanding — Map relationships between components",{"id":1690,"title":1691,"titles":1692,"content":1693,"level":130},"/v0.0.3/learn/overview#next-steps","Next Steps",[1442],"Quickstart — Get productive in minutesConcepts — Understand the core abstractionsArchitecture — Learn how chisel works internally",{"id":1695,"title":1449,"titles":1696,"content":1697,"level":105},"/v0.0.3/learn/quickstart",[],"Get productive with chisel in minutes",{"id":1699,"title":1449,"titles":1700,"content":97,"level":105},"/v0.0.3/learn/quickstart#quickstart",[],{"id":1702,"title":1703,"titles":1704,"content":1705,"level":130},"/v0.0.3/learn/quickstart#installation","Installation",[1449],"Install the core package: go get github.com/zoobz-io/chisel Install providers for the languages you need: # Zero-dependency providers\ngo get github.com/zoobz-io/chisel/golang\ngo get github.com/zoobz-io/chisel/markdown\n\n# Tree-sitter providers\ngo get github.com/zoobz-io/chisel/typescript\ngo get github.com/zoobz-io/chisel/python\ngo get github.com/zoobz-io/chisel/rust Requires Go 1.24+.",{"id":1707,"title":1708,"titles":1709,"content":1710,"level":130},"/v0.0.3/learn/quickstart#basic-usage","Basic Usage",[1449],"package main\n\nimport (\n    \"context\"\n    \"fmt\"\n\n    \"github.com/zoobz-io/chisel\"\n    \"github.com/zoobz-io/chisel/golang\"\n)\n\nfunc main() {\n    // Create a provider\n    provider := golang.New()\n\n    source := []byte(`package math\n\n// Add returns the sum of two integers.\nfunc Add(a, b int) int {\n    return a + b\n}\n\n// Calculator performs arithmetic operations.\ntype Calculator struct {\n    value int\n}\n\n// Add adds n to the calculator's value.\nfunc (c *Calculator) Add(n int) {\n    c.value += n\n}\n`)\n\n    // Chunk the source\n    chunks, err := provider.Chunk(context.Background(), \"math.go\", source)\n    if err != nil {\n        panic(err)\n    }\n\n    // Inspect the results\n    for _, chunk := range chunks {\n        fmt.Printf(\"[%s] %s (lines %d-%d)\\n\",\n            chunk.Kind, chunk.Symbol, chunk.StartLine, chunk.EndLine)\n    }\n} Output: [function] Add (lines 3-6)\n[class] Calculator (lines 8-11)\n[method] Calculator.Add (lines 13-16)",{"id":1712,"title":1713,"titles":1714,"content":1715,"level":130},"/v0.0.3/learn/quickstart#multiple-languages","Multiple Languages",[1449],"Use the Chunker to route files to the appropriate provider: import (\n    \"github.com/zoobz-io/chisel\"\n    \"github.com/zoobz-io/chisel/golang\"\n    \"github.com/zoobz-io/chisel/typescript\"\n    \"github.com/zoobz-io/chisel/python\"\n)\n\n// Create a chunker with multiple providers\nc := chisel.New(\n    golang.New(),\n    typescript.New(),\n    typescript.NewJavaScript(),\n    python.New(),\n)\n\n// Chunk by language\ngoChunks, _ := c.Chunk(ctx, chisel.Go, \"main.go\", goSource)\ntsChunks, _ := c.Chunk(ctx, chisel.TypeScript, \"app.ts\", tsSource)\npyChunks, _ := c.Chunk(ctx, chisel.Python, \"utils.py\", pySource) See Providers Guide for language-specific details.",{"id":1717,"title":1718,"titles":1719,"content":1720,"level":130},"/v0.0.3/learn/quickstart#context-chains","Context Chains",[1449],"Methods and nested definitions include their parent context: source := []byte(`class UserService {\n    async getUser(id: string): Promise\u003CUser> {\n        return this.db.find(id);\n    }\n}`)\n\nchunks, _ := typescript.New().Chunk(ctx, \"service.ts\", source)\n\nfor _, c := range chunks {\n    if c.Kind == chisel.KindMethod {\n        fmt.Printf(\"%s in %v\\n\", c.Symbol, c.Context)\n        // getUser in [class UserService]\n    }\n} See Concepts for more on context preservation.",{"id":1722,"title":1723,"titles":1724,"content":1725,"level":130},"/v0.0.3/learn/quickstart#embedding-pipeline","Embedding Pipeline",[1449],"A typical pipeline: chunk → embed → store → search. // 1. Chunk the code\nchunks, _ := provider.Chunk(ctx, filename, source)\n\n// 2. Embed each chunk (using your embedder of choice)\nfor _, chunk := range chunks {\n    embedding := embedder.Embed(chunk.Content)\n\n    // 3. Store with metadata\n    store.Insert(Document{\n        Content:   chunk.Content,\n        Embedding: embedding,\n        Metadata: map[string]any{\n            \"symbol\":    chunk.Symbol,\n            \"kind\":      chunk.Kind,\n            \"file\":      filename,\n            \"startLine\": chunk.StartLine,\n            \"endLine\":   chunk.EndLine,\n            \"context\":   chunk.Context,\n        },\n    })\n}\n\n// 4. Search by meaning\nresults := store.Search(embedder.Embed(\"authentication logic\"))",{"id":1727,"title":1691,"titles":1728,"content":1729,"level":130},"/v0.0.3/learn/quickstart#next-steps",[1449],"Concepts — Understand chunks, kinds, and contextArchitecture — How chisel parses codeAPI Reference — Complete function signatures html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}html pre.shiki code .scyPU, html code.shiki .scyPU{--shiki-default:var(--shiki-placeholder)}html pre.shiki code .suWN2, html code.shiki .suWN2{--shiki-default:var(--shiki-tag)}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}",{"id":1731,"title":1116,"titles":1732,"content":1733,"level":105},"/v0.0.3/learn/concepts",[],"Core abstractions in chisel",{"id":1735,"title":1116,"titles":1736,"content":1737,"level":105},"/v0.0.3/learn/concepts#concepts",[],"Chisel is built around a few core abstractions: chunks, kinds, providers, and context. Understanding these helps you reason about what chisel extracts and why.",{"id":1739,"title":1740,"titles":1741,"content":1742,"level":130},"/v0.0.3/learn/concepts#chunks","Chunks",[1116],"A Chunk is a semantic unit of code. Unlike line-based splitting, chunks follow the natural boundaries of code: where functions start and end, where classes are defined, where documentation lives. type Chunk struct {\n    Content   string   // The actual source code\n    Symbol    string   // Name: \"Add\", \"UserService\", \"Config\"\n    Kind      Kind     // Category: function, method, class, etc.\n    StartLine int      // Where it begins (1-indexed)\n    EndLine   int      // Where it ends (1-indexed)\n    Context   []string // Parent chain: [\"class UserService\"]\n} Each chunk is self-contained. The Content field holds the complete source—including comments and documentation—so embeddings capture the full meaning. See Types Reference for the complete definition.",{"id":1744,"title":1745,"titles":1746,"content":1747,"level":130},"/v0.0.3/learn/concepts#kinds","Kinds",[1116],"Kind categorizes what a chunk represents. This lets you filter, group, or weight chunks differently in your pipeline. KindDescriptionExamplefunctionStandalone functionfunc Add(a, b int) intmethodFunction with receiver/selffunc (c *Calc) Add(n int)classClass or struct definitionclass UserService {}interfaceInterface or traitinterface Reader {}typeType alias or other typetype ID = stringenumEnumerationenum Status { Active }constantConstant declarationconst MaxSize = 100variableVariable declarationvar cache = map{}sectionMarkdown header## InstallationmodulePackage/file levelPackage documentation Not every language uses every kind. Go has no enums; Python has no interfaces. Chisel maps language constructs to the closest semantic equivalent. See Types Reference for the complete list.",{"id":1749,"title":1100,"titles":1750,"content":1751,"level":130},"/v0.0.3/learn/concepts#providers",[1116],"A Provider parses a specific language into chunks. Each provider understands its language's AST and extracts meaningful units. type Provider interface {\n    Chunk(ctx context.Context, filename string, content []byte) ([]Chunk, error)\n    Language() Language\n} Chisel ships with providers for: Go — Uses stdlib go/parser, zero external dependenciesMarkdown — Header-based splitting, zero dependenciesTypeScript/JavaScript — Tree-sitter parserPython — Tree-sitter parserRust — Tree-sitter parser The provider isolation is intentional. If you only need Go support, you don't pay for tree-sitter. Import only what you use. See Providers Guide for language-specific behavior.",{"id":1753,"title":988,"titles":1754,"content":1755,"level":130},"/v0.0.3/learn/concepts#context",[1116],"Context captures the parent chain for nested definitions. When you chunk a method, the context tells you which class it belongs to. class UserService {\n    private db: Database;\n\n    async getUser(id: string): Promise\u003CUser> {\n        return this.db.find(id);\n    }\n} The getUser chunk will have: Chunk{\n    Symbol:  \"getUser\",\n    Kind:    KindMethod,\n    Context: []string{\"class UserService\"},\n} Context flows downward. A method inside a class inside a module might have: Context: []string{\"module api\", \"class UserService\"} This enables queries like \"find all methods in UserService\" or \"show me everything in the api module.\"",{"id":1757,"title":1758,"titles":1759,"content":1760,"level":130},"/v0.0.3/learn/concepts#languages","Languages",[1116],"Language identifies which provider handles a file. Use it with the Chunker to route files automatically. const (\n    Go         Language = \"go\"\n    TypeScript Language = \"typescript\"\n    JavaScript Language = \"javascript\"\n    Python     Language = \"python\"\n    Rust       Language = \"rust\"\n    Markdown   Language = \"markdown\"\n) The Chunker maps languages to providers. If you're processing a single language, you can use the provider directly without the chunker.",{"id":1762,"title":1691,"titles":1763,"content":1764,"level":130},"/v0.0.3/learn/concepts#next-steps",[1116],"Architecture — How parsing works internallyProviders Guide — Language-specific detailsTypes Reference — Complete type definitions html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sfm-E, html code.shiki .sfm-E{--shiki-default:var(--shiki-variable)}",{"id":1766,"title":1132,"titles":1767,"content":1768,"level":105},"/v0.0.3/learn/architecture",[],"How chisel works internally",{"id":1770,"title":1132,"titles":1771,"content":1772,"level":105},"/v0.0.3/learn/architecture#architecture",[],"This document explains how chisel parses code internally. It's intended for contributors and users who want to understand the implementation or extend chisel with new providers.",{"id":1774,"title":1775,"titles":1776,"content":1777,"level":130},"/v0.0.3/learn/architecture#component-overview","Component Overview",[1132],"┌─────────────────────────────────────────────────────────┐\n│                        Chunker                          │\n│  ┌─────────────────────────────────────────────────┐   │\n│  │           providers map[Language]Provider        │   │\n│  └─────────────────────────────────────────────────┘   │\n│                          │                              │\n│     ┌────────────────────┼────────────────────┐        │\n│     ▼                    ▼                    ▼        │\n│ ┌────────┐         ┌──────────┐         ┌─────────┐   │\n│ │  Go    │         │TypeScript│         │  Rust   │   │\n│ │Provider│         │ Provider │         │Provider │   │\n│ └────┬───┘         └────┬─────┘         └────┬────┘   │\n│      │                  │                    │        │\n│      ▼                  ▼                    ▼        │\n│ ┌────────┐         ┌──────────┐         ┌─────────┐   │\n│ │go/parser│        │tree-sitter│        │tree-sitter│  │\n│ │ (stdlib)│        │  (cgo)   │         │  (cgo)  │   │\n│ └────────┘         └──────────┘         └─────────┘   │\n└─────────────────────────────────────────────────────────┘ The Chunker routes requests to the appropriate Provider based on language. Each provider uses language-specific parsing—stdlib for Go, tree-sitter for others.",{"id":1779,"title":1780,"titles":1781,"content":97,"level":130},"/v0.0.3/learn/architecture#parsing-strategies","Parsing Strategies",[1132],{"id":1783,"title":1784,"titles":1785,"content":1786,"level":136},"/v0.0.3/learn/architecture#go-provider","Go Provider",[1132,1780],"The Go provider uses the standard library's go/parser package. This gives us: Zero external dependenciesMature, well-tested parserAccess to Go's AST types The extraction walks the AST looking for: Package documentation (*ast.File.Doc)Function declarations (*ast.FuncDecl)Type declarations (*ast.GenDecl with token.TYPE) For methods, we extract the receiver type to build the context chain. // Simplified extraction\nfor _, decl := range file.Decls {\n    switch d := decl.(type) {\n    case *ast.FuncDecl:\n        // Extract function/method\n    case *ast.GenDecl:\n        if d.Tok == token.TYPE {\n            // Extract type (struct, interface, alias)\n        }\n    }\n}",{"id":1788,"title":1789,"titles":1790,"content":1791,"level":136},"/v0.0.3/learn/architecture#tree-sitter-providers","Tree-sitter Providers",[1132,1780],"TypeScript, Python, and Rust use tree-sitter via the go-tree-sitter bindings. Tree-sitter provides: Incremental parsing (not currently used, but available)Error recovery for malformed codeConsistent node types across languages Each provider walks the syntax tree recursively: func walkNode(node *sitter.Node, content []byte, ctx []string, chunks *[]Chunk) {\n    switch node.Type() {\n    case \"function_declaration\":\n        *chunks = append(*chunks, extractFunction(node, content, ctx))\n    case \"class_declaration\":\n        // Extract class, then walk children with updated context\n        newCtx := append(ctx, \"class \"+className)\n        for i := 0; i \u003C node.ChildCount(); i++ {\n            walkNode(node.Child(i), content, newCtx, chunks)\n        }\n    }\n    // Continue walking...\n}",{"id":1793,"title":1794,"titles":1795,"content":1796,"level":136},"/v0.0.3/learn/architecture#markdown-provider","Markdown Provider",[1132,1780],"The Markdown provider uses simple string scanning—no AST, no dependencies. It splits on headers: for i, line := range lines {\n    if strings.HasPrefix(line, \"#\") {\n        // Start new section\n    }\n} Each header starts a new section chunk. Content accumulates until the next header of equal or higher level.",{"id":1798,"title":1799,"titles":1800,"content":1801,"level":130},"/v0.0.3/learn/architecture#context-propagation","Context Propagation",[1132],"Context flows from parent to child during tree walking. When we enter a class, we push its name onto the context stack. Methods inside inherit that context. class UserService {           // ctx = []\n    getUser() {}              // ctx = [\"class UserService\"]\n\n    class Inner {             // ctx = [\"class UserService\"]\n        helper() {}           // ctx = [\"class UserService\", \"class Inner\"]\n    }\n} The context is copied (not shared) for each chunk to avoid mutation issues.",{"id":1803,"title":1804,"titles":1805,"content":1806,"level":130},"/v0.0.3/learn/architecture#design-qa","Design Q&A",[1132],"Why separate providers instead of one unified parser? Dependencies. Tree-sitter requires cgo and pulls in C libraries. Users who only need Go support shouldn't pay that cost. The workspace structure (go.work) isolates dependencies at the module level. Why not use tree-sitter for Go? The stdlib parser is battle-tested, has zero dependencies, and runs ~10x faster (see benchmarks). Tree-sitter would add complexity without benefit for Go. Why preserve the full source in Content? Embeddings need context. A function signature alone (\"func Add(a, b int) int\") is less meaningful than the full function with its documentation and body. We let the embedding model decide what matters. Why use Kind instead of language-specific types? Consistency. A Python class and a Go struct serve similar purposes. Normalizing to KindClass lets downstream tools treat them uniformly. Language-specific details can be recovered from the source.",{"id":1808,"title":1809,"titles":1810,"content":1811,"level":130},"/v0.0.3/learn/architecture#performance","Performance",[1132],"Benchmarks on a Ryzen 5 3600X (representative ~50-line files): ProviderTimeMemoryAllocationsGo32µs17KB402TypeScript313µs63KB579Python328µs63KB569Rust293µs61KB566Markdown4µs7KB45 The Go provider is ~10x faster than tree-sitter providers due to stdlib optimization. Markdown is fastest as it does no AST construction. For large files, tree-sitter's incremental parsing could be leveraged (not currently implemented).",{"id":1813,"title":1691,"titles":1814,"content":1815,"level":130},"/v0.0.3/learn/architecture#next-steps",[1132],"Providers Guide — Language-specific extraction detailsAPI Reference — Function signaturesTesting Guide — Testing code that uses chisel html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}",{"id":1817,"title":1818,"titles":1819,"content":1820,"level":105},"/v0.0.3/guides/providers","Providers Guide",[],"Language-specific chunking behavior",{"id":1822,"title":1818,"titles":1823,"content":1824,"level":105},"/v0.0.3/guides/providers#providers-guide",[],"Each language provider extracts semantic chunks according to that language's idioms. This guide covers language-specific behavior and what to expect from each provider.",{"id":1826,"title":228,"titles":1827,"content":1828,"level":130},"/v0.0.3/guides/providers#go",[1818],"Package: github.com/zoobz-io/chisel/golang Dependencies: None (uses stdlib go/parser) Extracts: ConstructKindSymbol FormatPackage docmodulePackage nameFunctionfunctionFunction nameMethodmethodReceiver.MethodStructclassType nameInterfaceinterfaceType nameType aliastypeType name Example: // Package auth provides authentication utilities.\npackage auth\n\n// User represents an authenticated user.\ntype User struct {\n    ID string\n}\n\n// Authenticate validates credentials.\nfunc Authenticate(u, p string) (*User, error) { ... }\n\n// Validate checks if a user session is valid.\nfunc (u *User) Validate() bool { ... } Produces: [module]    auth         (lines 1-2)\n[class]     User         (lines 4-7)\n[function]  Authenticate (lines 9-9)\n[method]    User.Validate (lines 11-11) Notes: Package documentation is extracted as a module chunkMethods include receiver type in symbol: User.ValidateDocumentation comments are included in chunk contentRequires syntactically valid Go (parse errors fail the entire file)",{"id":1830,"title":1831,"titles":1832,"content":1833,"level":130},"/v0.0.3/guides/providers#typescript","TypeScript",[1818],"Package: github.com/zoobz-io/chisel/typescript Dependencies: go-tree-sitter (cgo) Extracts: ConstructKindSymbol FormatFunction declarationfunctionFunction nameArrow functionfunctionVariable name or \u003Canonymous>ClassclassClass nameMethodmethodMethod nameInterfaceinterfaceInterface nameType aliastypeType name Example: interface User {\n    id: string;\n    email: string;\n}\n\nclass UserService {\n    async getUser(id: string): Promise\u003CUser> {\n        return this.db.find(id);\n    }\n}\n\nfunction createService(): UserService {\n    return new UserService();\n}\n\nconst helper = (x: number) => x * 2; Produces: [interface] User          (lines 1-4)\n[class]     UserService   (lines 6-10)\n[method]    getUser       (lines 7-9)   context: [class UserService]\n[function]  createService (lines 12-14)\n[function]  helper        (lines 16-16) Notes: Methods have their parent class in ContextArrow functions assigned to const use the variable nameAnonymous functions use \u003Canonymous> as symbol",{"id":1835,"title":1836,"titles":1837,"content":1838,"level":130},"/v0.0.3/guides/providers#javascript","JavaScript",[1818],"Package: github.com/zoobz-io/chisel/typescript (use NewJavaScript()) Dependencies: go-tree-sitter (cgo) Uses the same parser as TypeScript but configured for JavaScript. Behavior is identical except: No type annotationsNo interfaces or type aliases provider := typescript.NewJavaScript()\nchunks, err := provider.Chunk(ctx, \"app.js\", source)",{"id":1840,"title":1841,"titles":1842,"content":1843,"level":130},"/v0.0.3/guides/providers#python","Python",[1818],"Package: github.com/zoobz-io/chisel/python Dependencies: go-tree-sitter (cgo) Extracts: ConstructKindSymbol FormatFunctionfunctionFunction nameMethodmethodMethod nameClassclassClass nameDecorated functionfunctionFunction name Example: class UserService:\n    \"\"\"Manages user operations.\"\"\"\n\n    def __init__(self, db):\n        self.db = db\n\n    def get_user(self, user_id: str) -> User:\n        \"\"\"Fetch a user by ID.\"\"\"\n        return self.db.find(user_id)\n\n@dataclass\nclass User:\n    id: str\n    email: str\n\ndef create_service() -> UserService:\n    return UserService(Database()) Produces: [class]    UserService    (lines 1-9)\n[method]   __init__       (lines 4-5)    context: [class UserService]\n[method]   get_user       (lines 7-9)    context: [class UserService]\n[class]    User           (lines 11-14)\n[function] create_service (lines 16-17) Notes: Decorators are included in the chunk contentDocstrings are part of the chunk__init__ and other dunder methods are extracted as methods",{"id":1845,"title":1846,"titles":1847,"content":1848,"level":130},"/v0.0.3/guides/providers#rust","Rust",[1818],"Package: github.com/zoobz-io/chisel/rust Dependencies: go-tree-sitter (cgo) Extracts: ConstructKindSymbol FormatFunctionfunctionFunction nameMethod (in impl)methodMethod nameStructtypeStruct nameEnumenumEnum nameTraitinterfaceTrait nameImpl blockclassType nameModulemoduleModule name Example: pub struct User {\n    pub id: String,\n    pub email: String,\n}\n\nimpl User {\n    pub fn new(id: String, email: String) -> Self {\n        User { id, email }\n    }\n\n    pub fn validate(&self) -> bool {\n        !self.id.is_empty()\n    }\n}\n\ntrait Authenticatable {\n    fn authenticate(&self) -> bool;\n}\n\nenum Status {\n    Active,\n    Inactive,\n} Produces: [type]      User           (lines 1-4)\n[class]     User           (lines 6-14)   # impl block\n[method]    new            (lines 7-9)    context: [impl User]\n[method]    validate       (lines 11-13)  context: [impl User]\n[interface] Authenticatable (lines 16-18)\n[enum]      Status         (lines 20-23) Notes: Structs are type, impl blocks are classMethods know their impl block via ContextTraits map to interfaceEnums have their own kind",{"id":1850,"title":1851,"titles":1852,"content":1853,"level":130},"/v0.0.3/guides/providers#markdown","Markdown",[1818],"Package: github.com/zoobz-io/chisel/markdown Dependencies: None Extracts: ConstructKindSymbol FormatHeadersectionHeader text (without #) Example: # Installation\n\nInstall the package:\n\n```bash\ngo get github.com/example/pkg",{"id":1855,"title":1856,"titles":1857,"content":1858,"level":130},"/v0.0.3/guides/providers#configuration","Configuration",[1818],"Set the following environment variables:",{"id":1860,"title":1861,"titles":1862,"content":1863,"level":136},"/v0.0.3/guides/providers#required-variables","Required Variables",[1818,1856],"API_KEY: Your API key",{"id":1865,"title":1866,"titles":1867,"content":1868,"level":136},"/v0.0.3/guides/providers#optional-variables","Optional Variables",[1818,1856],"DEBUG: Enable debug mode Produces:\n\n```text\n[section] Installation        (lines 1-7)\n[section] Configuration       (lines 9-11)\n[section] Required Variables  (lines 13-15)\n[section] Optional Variables  (lines 17-19) Notes: Each header starts a new sectionSection content continues until the next header of equal or higher levelNested headers create nested sections (no context chain currently)",{"id":1870,"title":1691,"titles":1871,"content":1872,"level":130},"/v0.0.3/guides/providers#next-steps",[1818],"Testing Guide — Test code that uses chiselTroubleshooting — Common issuesAPI Reference — Function signatures html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}",{"id":1874,"title":1875,"titles":1876,"content":1877,"level":105},"/v0.0.3/guides/testing","Testing Guide",[],"Testing code that uses chisel",{"id":1879,"title":1875,"titles":1880,"content":1881,"level":105},"/v0.0.3/guides/testing#testing-guide",[],"This guide covers how to test code that uses chisel, including test helpers, fixtures, and mocking strategies.",{"id":1883,"title":1884,"titles":1885,"content":1886,"level":130},"/v0.0.3/guides/testing#test-helpers","Test Helpers",[1875],"Chisel provides test utilities in github.com/zoobz-io/chisel/testing: import (\n    \"testing\"\n\n    \"github.com/zoobz-io/chisel\"\n    chitesting \"github.com/zoobz-io/chisel/testing\"\n)\n\nfunc TestChunking(t *testing.T) {\n    chunks := getChunks() // your code\n\n    // Assert chunk count\n    chitesting.AssertChunkCount(t, chunks, 3)\n\n    // Assert symbol exists\n    chitesting.AssertHasSymbol(t, chunks, \"UserService\")\n\n    // Assert kind exists\n    chitesting.AssertHasKind(t, chunks, chisel.KindClass)\n}",{"id":1888,"title":1889,"titles":1890,"content":1891,"level":136},"/v0.0.3/guides/testing#available-helpers","Available Helpers",[1875,1884],"FunctionDescriptionAssertChunkCount(t, chunks, n)Fails if len(chunks) != nAssertHasSymbol(t, chunks, sym)Fails if no chunk has symbol symAssertHasKind(t, chunks, kind)Fails if no chunk has kind kindFindBySymbol(chunks, sym)Returns first chunk with symbol, or nilFindByKind(chunks, kind)Returns first chunk with kind, or nilCountByKind(chunks, kind)Returns count of chunks with kind",{"id":1893,"title":1894,"titles":1895,"content":1896,"level":130},"/v0.0.3/guides/testing#testing-chunk-output","Testing Chunk Output",[1875],"For detailed assertions, use FindBySymbol or FindByKind: func TestAuthenticateFunction(t *testing.T) {\n    source := []byte(`\nfunc Authenticate(user, pass string) (*User, error) {\n    // implementation\n}\n`)\n    provider := golang.New()\n    chunks, err := provider.Chunk(context.Background(), \"auth.go\", source)\n    if err != nil {\n        t.Fatal(err)\n    }\n\n    chunk := chitesting.FindBySymbol(chunks, \"Authenticate\")\n    if chunk == nil {\n        t.Fatal(\"Authenticate not found\")\n    }\n\n    if chunk.Kind != chisel.KindFunction {\n        t.Errorf(\"Kind = %v, want function\", chunk.Kind)\n    }\n\n    if chunk.StartLine != 2 {\n        t.Errorf(\"StartLine = %d, want 2\", chunk.StartLine)\n    }\n}",{"id":1898,"title":1899,"titles":1900,"content":1901,"level":130},"/v0.0.3/guides/testing#table-driven-tests","Table-Driven Tests",[1875],"For comprehensive coverage, use table-driven tests: func TestProviderChunking(t *testing.T) {\n    tests := []struct {\n        name     string\n        source   string\n        wantSyms []string\n        wantKind chisel.Kind\n    }{\n        {\n            name:     \"function\",\n            source:   \"func Add(a, b int) int { return a + b }\",\n            wantSyms: []string{\"Add\"},\n            wantKind: chisel.KindFunction,\n        },\n        {\n            name:     \"method\",\n            source:   \"func (c *Calc) Add(n int) { c.v += n }\",\n            wantSyms: []string{\"Calc.Add\"},\n            wantKind: chisel.KindMethod,\n        },\n    }\n\n    provider := golang.New()\n    for _, tt := range tests {\n        t.Run(tt.name, func(t *testing.T) {\n            src := \"package main\\n\" + tt.source\n            chunks, err := provider.Chunk(context.Background(), \"test.go\", []byte(src))\n            if err != nil {\n                t.Fatal(err)\n            }\n\n            for _, sym := range tt.wantSyms {\n                chitesting.AssertHasSymbol(t, chunks, sym)\n            }\n            chitesting.AssertHasKind(t, chunks, tt.wantKind)\n        })\n    }\n}",{"id":1903,"title":1904,"titles":1905,"content":1906,"level":130},"/v0.0.3/guides/testing#mocking-providers","Mocking Providers",[1875],"For unit testing code that consumes chunks, mock the provider: type mockProvider struct {\n    chunks []chisel.Chunk\n    err    error\n}\n\nfunc (m *mockProvider) Chunk(ctx context.Context, filename string, content []byte) ([]chisel.Chunk, error) {\n    return m.chunks, m.err\n}\n\nfunc (m *mockProvider) Language() chisel.Language {\n    return chisel.Go\n}\n\nfunc TestChunkProcessor(t *testing.T) {\n    mock := &mockProvider{\n        chunks: []chisel.Chunk{\n            {Symbol: \"Test\", Kind: chisel.KindFunction, StartLine: 1, EndLine: 5},\n        },\n    }\n\n    processor := NewProcessor(mock)\n    result := processor.Process(context.Background(), \"test.go\", []byte(\"...\"))\n\n    // Assert on result\n}",{"id":1908,"title":1909,"titles":1910,"content":1911,"level":130},"/v0.0.3/guides/testing#testing-error-handling","Testing Error Handling",[1875],"Test that your code handles parsing errors gracefully: func TestInvalidSource(t *testing.T) {\n    provider := golang.New()\n\n    // Invalid Go syntax\n    source := []byte(\"func broken( {\")\n    _, err := provider.Chunk(context.Background(), \"bad.go\", source)\n\n    if err == nil {\n        t.Error(\"expected error for invalid syntax\")\n    }\n}",{"id":1913,"title":1914,"titles":1915,"content":1916,"level":130},"/v0.0.3/guides/testing#fixture-files","Fixture Files",[1875],"For complex test cases, use fixture files: testdata/\n├── simple.go\n├── complex.go\n└── expected/\n    ├── simple.json\n    └── complex.json func TestFixtures(t *testing.T) {\n    files, _ := filepath.Glob(\"testdata/*.go\")\n    for _, file := range files {\n        t.Run(filepath.Base(file), func(t *testing.T) {\n            source, _ := os.ReadFile(file)\n            chunks, err := provider.Chunk(ctx, file, source)\n            if err != nil {\n                t.Fatal(err)\n            }\n\n            // Compare against expected output\n            expected := loadExpected(t, file)\n            assertChunksEqual(t, chunks, expected)\n        })\n    }\n}",{"id":1918,"title":1919,"titles":1920,"content":1921,"level":130},"/v0.0.3/guides/testing#benchmarking","Benchmarking",[1875],"Chisel includes benchmarks in testing/benchmarks/. Run them with: go test -bench=. github.com/zoobz-io/chisel/testing/benchmarks -benchmem To add benchmarks for your own code: func BenchmarkMyProcessor(b *testing.B) {\n    provider := golang.New()\n    source := loadLargeFile()\n\n    b.ResetTimer()\n    for i := 0; i \u003C b.N; i++ {\n        chunks, _ := provider.Chunk(context.Background(), \"large.go\", source)\n        processChunks(chunks)\n    }\n}",{"id":1923,"title":1691,"titles":1924,"content":1925,"level":130},"/v0.0.3/guides/testing#next-steps",[1875],"Troubleshooting — Common issues and solutionsAPI Reference — Function signatures html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .scyPU, html code.shiki .scyPU{--shiki-default:var(--shiki-placeholder)}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .suWN2, html code.shiki .suWN2{--shiki-default:var(--shiki-tag)}",{"id":1927,"title":1485,"titles":1928,"content":1929,"level":105},"/v0.0.3/guides/troubleshooting",[],"Common issues and solutions",{"id":1931,"title":1485,"titles":1932,"content":1933,"level":105},"/v0.0.3/guides/troubleshooting#troubleshooting",[],"Common issues when using chisel and how to resolve them.",{"id":1935,"title":1936,"titles":1937,"content":97,"level":130},"/v0.0.3/guides/troubleshooting#parse-errors","Parse Errors",[1485],{"id":1939,"title":1940,"titles":1941,"content":1942,"level":136},"/v0.0.3/guides/troubleshooting#parse-expected","\"parse: expected...\"",[1485,1936],"Symptom: Go provider returns parse error. Cause: Source code has syntax errors. Solution: The Go provider requires valid Go syntax. Unlike tree-sitter providers, it cannot recover from errors. // This fails\nsource := []byte(\"func broken( {\")\nchunks, err := provider.Chunk(ctx, \"test.go\", source)\n// err: parse: expected ')', found '{'\n\n// Fix the syntax first\nsource := []byte(\"func working() {}\")",{"id":1944,"title":1945,"titles":1946,"content":1947,"level":136},"/v0.0.3/guides/troubleshooting#empty-chunks-from-tree-sitter","Empty chunks from tree-sitter",[1485,1936],"Symptom: TypeScript/Python/Rust provider returns empty slice. Cause: File contains only syntax errors or unsupported constructs. Solution: Tree-sitter can parse partially valid code, but completely malformed files may yield no extractable chunks. Check that your source is valid for the target language.",{"id":1949,"title":1950,"titles":1951,"content":97,"level":130},"/v0.0.3/guides/troubleshooting#import-issues","Import Issues",[1485],{"id":1953,"title":1954,"titles":1955,"content":1956,"level":136},"/v0.0.3/guides/troubleshooting#cannot-find-package","\"cannot find package\"",[1485,1950],"Symptom: Import fails for a provider. Cause: Provider not installed. Solution: Install the specific provider: go get github.com/zoobz-io/chisel/golang\ngo get github.com/zoobz-io/chisel/typescript",{"id":1958,"title":1959,"titles":1960,"content":1961,"level":136},"/v0.0.3/guides/troubleshooting#cgo-errors-with-tree-sitter","CGO errors with tree-sitter",[1485,1950],"Symptom: Build fails with CGO errors when importing TypeScript/Python/Rust providers. Cause: Tree-sitter requires CGO. Solution: Ensure CGO is enabled: CGO_ENABLED=1Install a C compiler (gcc, clang)On macOS: xcode-select --installOn Linux: apt install build-essential or equivalent If you can't use CGO, stick to the Go and Markdown providers which have zero external dependencies.",{"id":1963,"title":1964,"titles":1965,"content":97,"level":130},"/v0.0.3/guides/troubleshooting#chunker-issues","Chunker Issues",[1485],{"id":1967,"title":1968,"titles":1969,"content":1970,"level":136},"/v0.0.3/guides/troubleshooting#no-provider-for-language","\"no provider for language\"",[1485,1964],"Symptom: Chunker.Chunk() returns error. Cause: No provider registered for the requested language. Solution: Register a provider when creating the chunker: // Wrong: no providers\nc := chisel.New()\nchunks, err := c.Chunk(ctx, chisel.Go, \"main.go\", source)\n// err: no provider for language: go\n\n// Right: register providers\nc := chisel.New(\n    golang.New(),\n    typescript.New(),\n)",{"id":1972,"title":1973,"titles":1974,"content":1975,"level":136},"/v0.0.3/guides/troubleshooting#wrong-language-specified","Wrong language specified",[1485,1964],"Symptom: Chunks don't match expected structure. Cause: Language doesn't match file content. Solution: Ensure the language matches the source: // Wrong: TypeScript source with Go language\nc.Chunk(ctx, chisel.Go, \"app.ts\", tsSource)\n\n// Right: match language to content\nc.Chunk(ctx, chisel.TypeScript, \"app.ts\", tsSource)",{"id":1977,"title":1978,"titles":1979,"content":97,"level":130},"/v0.0.3/guides/troubleshooting#unexpected-chunk-output","Unexpected Chunk Output",[1485],{"id":1981,"title":1982,"titles":1983,"content":1984,"level":136},"/v0.0.3/guides/troubleshooting#missing-chunks","Missing chunks",[1485,1978],"Symptom: Expected function/class not in output. Possible causes: Nested in unexpected structure — Check if it's inside a block we don't walkAnonymous construct — Arrow functions may use \u003Canonymous>Language-specific behavior — Check Providers Guide Debug approach: chunks, _ := provider.Chunk(ctx, filename, source)\nfor _, c := range chunks {\n    fmt.Printf(\"%s %s (lines %d-%d) ctx=%v\\n\",\n        c.Kind, c.Symbol, c.StartLine, c.EndLine, c.Context)\n}",{"id":1986,"title":1987,"titles":1988,"content":1989,"level":136},"/v0.0.3/guides/troubleshooting#unexpected-kind","Unexpected kind",[1485,1978],"Symptom: Struct shows as class, trait shows as interface. Cause: Chisel normalizes language constructs to semantic kinds. Solution: This is intentional. See Concepts: Kinds for the mapping rationale.",{"id":1991,"title":1992,"titles":1993,"content":1994,"level":136},"/v0.0.3/guides/troubleshooting#missing-context","Missing context",[1485,1978],"Symptom: Method has empty Context slice. Cause: Method is at top level, not inside a class/impl block. Solution: Context only applies to nested constructs: // No context (top-level)\nfunc TopLevel() {}\n\n// Has context\ntype Service struct{}\nfunc (s *Service) Method() {}  // Context: [\"type Service\"]",{"id":1996,"title":1997,"titles":1998,"content":97,"level":130},"/v0.0.3/guides/troubleshooting#performance-issues","Performance Issues",[1485],{"id":2000,"title":2001,"titles":2002,"content":2003,"level":136},"/v0.0.3/guides/troubleshooting#slow-parsing","Slow parsing",[1485,1997],"Symptom: Chunking takes too long. Possible causes: Very large files — Tree-sitter is O(n) but constant factors matterMany small files — Provider creation overhead Solutions: Reuse providers across files (they're stateless and thread-safe)For very large files, consider pre-splittingUse Go/Markdown providers where possible (faster than tree-sitter)",{"id":2005,"title":2006,"titles":2007,"content":2008,"level":136},"/v0.0.3/guides/troubleshooting#high-memory-usage","High memory usage",[1485,1997],"Symptom: Memory grows when processing many files. Solution: Chunks hold copies of source content. If you're processing many files: for _, file := range files {\n    chunks, _ := provider.Chunk(ctx, file.Name, file.Content)\n    process(chunks)\n    // chunks go out of scope here, eligible for GC\n} Don't accumulate all chunks in memory if you can process them incrementally.",{"id":2010,"title":2011,"titles":2012,"content":2013,"level":130},"/v0.0.3/guides/troubleshooting#getting-help","Getting Help",[1485],"If you encounter an issue not covered here: Check GitHub IssuesOpen a new issue with:\nGo versionChisel versionMinimal reproductionExpected vs actual output",{"id":2015,"title":1691,"titles":2016,"content":2017,"level":130},"/v0.0.3/guides/troubleshooting#next-steps",[1485],"Providers Guide — Language-specific behaviorArchitecture — How parsing works html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .scyPU, html code.shiki .scyPU{--shiki-default:var(--shiki-placeholder)}html pre.shiki code .suWN2, html code.shiki .suWN2{--shiki-default:var(--shiki-tag)}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}",{"id":2019,"title":2020,"titles":2021,"content":2022,"level":105},"/v0.0.3/integrations/vicky","Vicky Integration",[],"Using chisel with vicky for code search",{"id":2024,"title":2025,"titles":2026,"content":2027,"level":105},"/v0.0.3/integrations/vicky#vicky","Vicky",[],"Vicky is a code search and retrieval service that uses chisel for semantic code chunking.",{"id":2029,"title":2030,"titles":2031,"content":2032,"level":130},"/v0.0.3/integrations/vicky#the-pipeline","The Pipeline",[2025],"Repository → Enumerate Files → Chunk (chisel) → Embed (vex) → Store (pgvector) → Search Enumerate — Vicky clones/fetches the repositoryChunk — Chisel parses files into semantic unitsEmbed — Vex generates embeddings for each chunkStore — Chunks and embeddings go into PostgreSQL with pgvectorSearch — Queries are embedded and matched against stored chunks",{"id":2034,"title":2035,"titles":2036,"content":2037,"level":130},"/v0.0.3/integrations/vicky#what-chisel-provides","What Chisel Provides",[2025],"Vicky needsChisel providesSemantic boundariesChunks split at function/class boundariesSymbol nameschunk.Symbol for display and filteringKind classificationchunk.Kind for faceted searchSource locationschunk.StartLine, chunk.EndLine for navigationParent contextchunk.Context for hierarchical browsingEmbeddable contentchunk.Content with docs and implementation",{"id":2039,"title":1856,"titles":2040,"content":2041,"level":130},"/v0.0.3/integrations/vicky#configuration",[2025],"Vicky selects chisel providers based on file extension: ExtensionProvider.gogolang.New().ts, .tsxtypescript.New().js, .jsxtypescript.NewJavaScript().pypython.New().rsrust.New().mdmarkdown.New() Files with unrecognized extensions are skipped.",{"id":2043,"title":2044,"titles":2045,"content":2046,"level":130},"/v0.0.3/integrations/vicky#metadata-storage","Metadata Storage",[2025],"Vicky stores chunk metadata alongside embeddings: CREATE TABLE chunks (\n    id         UUID PRIMARY KEY,\n    repo_id    UUID REFERENCES repos(id),\n    file_path  TEXT NOT NULL,\n    symbol     TEXT,\n    kind       TEXT,\n    start_line INTEGER,\n    end_line   INTEGER,\n    context    TEXT[],\n    content    TEXT NOT NULL,\n    embedding  vector(1024)\n); This enables queries like: \"Find functions named Authenticate\"\"Show all classes in pkg/auth\"\"Methods in the UserService class\"",{"id":2048,"title":2049,"titles":2050,"content":2051,"level":130},"/v0.0.3/integrations/vicky#learn-more","Learn More",[2025],"Vicky RepositoryVicky Documentation html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"id":2053,"title":2054,"titles":2055,"content":2056,"level":105},"/v0.0.3/reference/api","API Reference",[],"Function signatures and behavior",{"id":2058,"title":2054,"titles":2059,"content":97,"level":105},"/v0.0.3/reference/api#api-reference",[],{"id":2061,"title":2062,"titles":2063,"content":97,"level":130},"/v0.0.3/reference/api#core-package","Core Package",[2054],{"id":2065,"title":634,"titles":2066,"content":2067,"level":136},"/v0.0.3/reference/api#new",[2054,2062],"func New(providers ...Provider) *Chunker Creates a new Chunker with the given providers. Each provider handles one language. Panics: Never. c := chisel.New(\n    golang.New(),\n    typescript.New(),\n    python.New(),\n)",{"id":2069,"title":2070,"titles":2071,"content":2072,"level":136},"/v0.0.3/reference/api#chunkerchunk","Chunker.Chunk",[2054,2062],"func (c *Chunker) Chunk(ctx context.Context, lang Language, filename string, content []byte) ([]Chunk, error) Routes the request to the appropriate provider and returns chunks. Errors: Returns error if no provider is registered for langReturns error if the provider fails to parse chunks, err := c.Chunk(ctx, chisel.Go, \"main.go\", source)\nif err != nil {\n    // Handle parse error or missing provider\n}",{"id":2074,"title":2075,"titles":2076,"content":2077,"level":136},"/v0.0.3/reference/api#chunkerregister","Chunker.Register",[2054,2062],"func (c *Chunker) Register(p Provider) Adds a provider to the chunker. If a provider for the same language exists, it is replaced. Panics: Never. c := chisel.New()\nc.Register(golang.New())\nc.Register(typescript.New())",{"id":2079,"title":2080,"titles":2081,"content":2082,"level":136},"/v0.0.3/reference/api#chunkerlanguages","Chunker.Languages",[2054,2062],"func (c *Chunker) Languages() []Language Returns all registered languages. Order is not guaranteed. Panics: Never. c := chisel.New(golang.New(), typescript.New())\nlangs := c.Languages()\n// langs contains chisel.Go and chisel.TypeScript",{"id":2084,"title":2085,"titles":2086,"content":2087,"level":136},"/v0.0.3/reference/api#chunkerhasprovider","Chunker.HasProvider",[2054,2062],"func (c *Chunker) HasProvider(lang Language) bool Returns true if a provider is registered for the language. Panics: Never. c := chisel.New(golang.New())\nc.HasProvider(chisel.Go)         // true\nc.HasProvider(chisel.TypeScript) // false",{"id":2089,"title":1784,"titles":2090,"content":2091,"level":130},"/v0.0.3/reference/api#go-provider",[2054],"Package: github.com/zoobz-io/chisel/golang",{"id":2093,"title":634,"titles":2094,"content":2095,"level":136},"/v0.0.3/reference/api#new-1",[2054,1784],"func New() *Provider Creates a new Go provider using stdlib go/parser. Panics: Never. provider := golang.New()",{"id":2097,"title":2098,"titles":2099,"content":2100,"level":136},"/v0.0.3/reference/api#providerchunk","Provider.Chunk",[2054,1784],"func (p *Provider) Chunk(ctx context.Context, filename string, content []byte) ([]Chunk, error) Parses Go source and extracts semantic chunks. Errors: Returns parse error if source is invalid Go chunks, err := provider.Chunk(ctx, \"main.go\", source)",{"id":2102,"title":2103,"titles":2104,"content":2105,"level":136},"/v0.0.3/reference/api#providerlanguage","Provider.Language",[2054,1784],"func (p *Provider) Language() Language Returns chisel.Go.",{"id":2107,"title":2108,"titles":2109,"content":2110,"level":130},"/v0.0.3/reference/api#typescript-provider","TypeScript Provider",[2054],"Package: github.com/zoobz-io/chisel/typescript",{"id":2112,"title":634,"titles":2113,"content":2114,"level":136},"/v0.0.3/reference/api#new-2",[2054,2108],"func New() *Provider Creates a TypeScript provider using tree-sitter. provider := typescript.New()",{"id":2116,"title":669,"titles":2117,"content":2118,"level":136},"/v0.0.3/reference/api#newjavascript",[2054,2108],"func NewJavaScript() *Provider Creates a JavaScript provider (same parser, different language identifier). provider := typescript.NewJavaScript()",{"id":2120,"title":2098,"titles":2121,"content":2122,"level":136},"/v0.0.3/reference/api#providerchunk-1",[2054,2108],"func (p *Provider) Chunk(ctx context.Context, filename string, content []byte) ([]Chunk, error) Parses TypeScript/JavaScript source and extracts chunks. Errors: Returns error on tree-sitter failure (rare)",{"id":2124,"title":2103,"titles":2125,"content":2126,"level":136},"/v0.0.3/reference/api#providerlanguage-1",[2054,2108],"func (p *Provider) Language() Language Returns chisel.TypeScript or chisel.JavaScript depending on constructor.",{"id":2128,"title":2129,"titles":2130,"content":2131,"level":130},"/v0.0.3/reference/api#python-provider","Python Provider",[2054],"Package: github.com/zoobz-io/chisel/python",{"id":2133,"title":634,"titles":2134,"content":2135,"level":136},"/v0.0.3/reference/api#new-3",[2054,2129],"func New() *Provider Creates a Python provider using tree-sitter. provider := python.New()",{"id":2137,"title":2098,"titles":2138,"content":2139,"level":136},"/v0.0.3/reference/api#providerchunk-2",[2054,2129],"func (p *Provider) Chunk(ctx context.Context, filename string, content []byte) ([]Chunk, error) Parses Python source and extracts chunks.",{"id":2141,"title":2103,"titles":2142,"content":2143,"level":136},"/v0.0.3/reference/api#providerlanguage-2",[2054,2129],"func (p *Provider) Language() Language Returns chisel.Python.",{"id":2145,"title":2146,"titles":2147,"content":2148,"level":130},"/v0.0.3/reference/api#rust-provider","Rust Provider",[2054],"Package: github.com/zoobz-io/chisel/rust",{"id":2150,"title":634,"titles":2151,"content":2152,"level":136},"/v0.0.3/reference/api#new-4",[2054,2146],"func New() *Provider Creates a Rust provider using tree-sitter. provider := rust.New()",{"id":2154,"title":2098,"titles":2155,"content":2156,"level":136},"/v0.0.3/reference/api#providerchunk-3",[2054,2146],"func (p *Provider) Chunk(ctx context.Context, filename string, content []byte) ([]Chunk, error) Parses Rust source and extracts chunks.",{"id":2158,"title":2103,"titles":2159,"content":2160,"level":136},"/v0.0.3/reference/api#providerlanguage-3",[2054,2146],"func (p *Provider) Language() Language Returns chisel.Rust.",{"id":2162,"title":1794,"titles":2163,"content":2164,"level":130},"/v0.0.3/reference/api#markdown-provider",[2054],"Package: github.com/zoobz-io/chisel/markdown",{"id":2166,"title":634,"titles":2167,"content":2168,"level":136},"/v0.0.3/reference/api#new-5",[2054,1794],"func New() *Provider Creates a Markdown provider that splits on headers. provider := markdown.New()",{"id":2170,"title":2098,"titles":2171,"content":2172,"level":136},"/v0.0.3/reference/api#providerchunk-4",[2054,1794],"func (p *Provider) Chunk(ctx context.Context, filename string, content []byte) ([]Chunk, error) Splits Markdown into sections based on headers. Errors: Never returns error (simple string parsing).",{"id":2174,"title":2103,"titles":2175,"content":2176,"level":136},"/v0.0.3/reference/api#providerlanguage-4",[2054,1794],"func (p *Provider) Language() Language Returns chisel.Markdown.",{"id":2178,"title":1884,"titles":2179,"content":2180,"level":130},"/v0.0.3/reference/api#test-helpers",[2054],"Package: github.com/zoobz-io/chisel/testing",{"id":2182,"title":2183,"titles":2184,"content":2185,"level":136},"/v0.0.3/reference/api#assertchunkcount","AssertChunkCount",[2054,1884],"func AssertChunkCount(t *testing.T, chunks []Chunk, want int) Fails the test if chunk count doesn't match.",{"id":2187,"title":2188,"titles":2189,"content":2190,"level":136},"/v0.0.3/reference/api#asserthassymbol","AssertHasSymbol",[2054,1884],"func AssertHasSymbol(t *testing.T, chunks []Chunk, symbol string) Fails the test if no chunk has the given symbol.",{"id":2192,"title":2193,"titles":2194,"content":2195,"level":136},"/v0.0.3/reference/api#asserthaskind","AssertHasKind",[2054,1884],"func AssertHasKind(t *testing.T, chunks []Chunk, kind Kind) Fails the test if no chunk has the given kind.",{"id":2197,"title":2198,"titles":2199,"content":2200,"level":136},"/v0.0.3/reference/api#findbysymbol","FindBySymbol",[2054,1884],"func FindBySymbol(chunks []Chunk, symbol string) *Chunk Returns first chunk with symbol, or nil if not found.",{"id":2202,"title":2203,"titles":2204,"content":2205,"level":136},"/v0.0.3/reference/api#findbykind","FindByKind",[2054,1884],"func FindByKind(chunks []Chunk, kind Kind) *Chunk Returns first chunk with kind, or nil if not found.",{"id":2207,"title":2208,"titles":2209,"content":2210,"level":136},"/v0.0.3/reference/api#countbykind","CountByKind",[2054,1884],"func CountByKind(chunks []Chunk, kind Kind) int Returns number of chunks with the given kind. html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}",{"id":2212,"title":2213,"titles":2214,"content":2215,"level":105},"/v0.0.3/reference/types","Types Reference",[],"Type definitions and constants",{"id":2217,"title":2213,"titles":2218,"content":97,"level":105},"/v0.0.3/reference/types#types-reference",[],{"id":2220,"title":213,"titles":2221,"content":2222,"level":130},"/v0.0.3/reference/types#chunk",[2213],"A semantic unit of code or documentation. type Chunk struct {\n    Content   string\n    Symbol    string\n    Kind      Kind\n    StartLine int\n    EndLine   int\n    Context   []string\n} FieldTypeDescriptionContentstringThe actual source code or text, including commentsSymbolstringName of the function, class, type, or sectionKindKindCategory of this chunk (function, method, class, etc.)StartLineint1-indexed starting line numberEndLineint1-indexed ending line numberContext[]stringParent chain, e.g. [\"class UserService\"] Notes: Content includes documentation comments attached to the constructSymbol for methods may include receiver: \"User.Validate\"Context is empty for top-level constructsLine numbers are 1-indexed (first line is 1, not 0)",{"id":2224,"title":325,"titles":2225,"content":2226,"level":130},"/v0.0.3/reference/types#kind",[2213],"Categorizes what a chunk represents. type Kind string\n\nconst (\n    KindFunction  Kind = \"function\"\n    KindMethod    Kind = \"method\"\n    KindClass     Kind = \"class\"\n    KindInterface Kind = \"interface\"\n    KindType      Kind = \"type\"\n    KindEnum      Kind = \"enum\"\n    KindConstant  Kind = \"constant\"\n    KindVariable  Kind = \"variable\"\n    KindSection   Kind = \"section\"\n    KindModule    Kind = \"module\"\n) ConstantValueDescriptionKindFunction\"function\"Standalone functionKindMethod\"method\"Function with receiver/selfKindClass\"class\"Class, struct, or impl blockKindInterface\"interface\"Interface, trait, or protocolKindType\"type\"Type alias or other type definitionKindEnum\"enum\"EnumerationKindConstant\"constant\"Constant declarationKindVariable\"variable\"Variable declarationKindSection\"section\"Markdown header/sectionKindModule\"module\"Package or file-level construct Language mappings: LanguageConstructKindGofuncfunctionGofunc (r *T)methodGotype T structclassGotype T interfaceinterfaceGotype T = UtypeTypeScriptfunctionfunctionTypeScriptclass methodmethodTypeScriptclassclassTypeScriptinterfaceinterfaceTypeScripttypetypePythondef (top-level)functionPythondef (in class)methodPythonclassclassRustfn (top-level)functionRustfn (in impl)methodRuststructtypeRustimplclassRusttraitinterfaceRustenumenumMarkdown# headersection",{"id":2228,"title":2229,"titles":2230,"content":2231,"level":130},"/v0.0.3/reference/types#language","Language",[2213],"Identifies a programming language. type Language string\n\nconst (\n    Go         Language = \"go\"\n    TypeScript Language = \"typescript\"\n    JavaScript Language = \"javascript\"\n    Python     Language = \"python\"\n    Rust       Language = \"rust\"\n    Markdown   Language = \"markdown\"\n) ConstantValueProvider PackageGo\"go\"chisel/golangTypeScript\"typescript\"chisel/typescriptJavaScript\"javascript\"chisel/typescriptPython\"python\"chisel/pythonRust\"rust\"chisel/rustMarkdown\"markdown\"chisel/markdown Notes: TypeScript and JavaScript use the same provider packageUse typescript.NewJavaScript() for JavaScript files",{"id":2233,"title":1203,"titles":2234,"content":2235,"level":130},"/v0.0.3/reference/types#provider",[2213],"Interface for language-specific parsers. type Provider interface {\n    Chunk(ctx context.Context, filename string, content []byte) ([]Chunk, error)\n    Language() Language\n} MethodDescriptionChunkParses content and returns semantic chunksLanguageReturns the language this provider handles Implementing a custom provider: type MyProvider struct{}\n\nfunc (p *MyProvider) Chunk(ctx context.Context, filename string, content []byte) ([]chisel.Chunk, error) {\n    // Parse content and extract chunks\n    return chunks, nil\n}\n\nfunc (p *MyProvider) Language() chisel.Language {\n    return \"mylang\"\n}",{"id":2237,"title":2238,"titles":2239,"content":2240,"level":130},"/v0.0.3/reference/types#chunker","Chunker",[2213],"Routes chunking requests to appropriate providers. type Chunker struct {\n    // contains filtered or unexported fields\n} Created with chisel.New(). See API Reference for methods. html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sfm-E, html code.shiki .sfm-E{--shiki-default:var(--shiki-variable)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}",[2242],{"title":2243,"path":2244,"stem":2245,"children":2246,"page":2259},"V003","/v0.0.3","v0.0.3",[2247,2260,2270,2277],{"title":1434,"path":2248,"stem":2249,"children":2250,"page":2259},"/v0.0.3/learn","v0.0.3/1.learn",[2251,2253,2255,2257],{"title":1442,"path":1667,"stem":2252,"description":1669},"v0.0.3/1.learn/1.overview",{"title":1449,"path":1695,"stem":2254,"description":1697},"v0.0.3/1.learn/2.quickstart",{"title":1116,"path":1731,"stem":2256,"description":1733},"v0.0.3/1.learn/3.concepts",{"title":1132,"path":1766,"stem":2258,"description":1768},"v0.0.3/1.learn/4.architecture",false,{"title":1465,"path":2261,"stem":2262,"children":2263,"page":2259},"/v0.0.3/guides","v0.0.3/2.guides",[2264,2266,2268],{"title":1818,"path":1817,"stem":2265,"description":1820},"v0.0.3/2.guides/1.providers",{"title":1875,"path":1874,"stem":2267,"description":1877},"v0.0.3/2.guides/2.testing",{"title":1485,"path":1927,"stem":2269,"description":1929},"v0.0.3/2.guides/3.troubleshooting",{"title":2271,"path":2272,"stem":2273,"children":2274,"page":2259},"Integrations","/v0.0.3/integrations","v0.0.3/3.integrations",[2275],{"title":2020,"path":2019,"stem":2276,"description":2022},"v0.0.3/3.integrations/1.vicky",{"title":1491,"path":2278,"stem":2279,"children":2280,"page":2259},"/v0.0.3/reference","v0.0.3/4.reference",[2281,2283],{"title":2054,"path":2053,"stem":2282,"description":2056},"v0.0.3/4.reference/1.api",{"title":2213,"path":2212,"stem":2284,"description":2215},"v0.0.3/4.reference/2.types",[2286],{"title":2243,"path":2244,"stem":2245,"children":2287,"page":2259},[2288,2294,2299,2302],{"title":1434,"path":2248,"stem":2249,"children":2289,"page":2259},[2290,2291,2292,2293],{"title":1442,"path":1667,"stem":2252},{"title":1449,"path":1695,"stem":2254},{"title":1116,"path":1731,"stem":2256},{"title":1132,"path":1766,"stem":2258},{"title":1465,"path":2261,"stem":2262,"children":2295,"page":2259},[2296,2297,2298],{"title":1818,"path":1817,"stem":2265},{"title":1875,"path":1874,"stem":2267},{"title":1485,"path":1927,"stem":2269},{"title":2271,"path":2272,"stem":2273,"children":2300,"page":2259},[2301],{"title":2020,"path":2019,"stem":2276},{"title":1491,"path":2278,"stem":2279,"children":2303,"page":2259},[2304,2305],{"title":2054,"path":2053,"stem":2282},{"title":2213,"path":2212,"stem":2284},[2307],{"title":2243,"path":2244,"stem":2245,"children":2308,"page":2259},[2309,2315,2320,2323],{"title":1434,"path":2248,"stem":2249,"children":2310,"page":2259},[2311,2312,2313,2314],{"title":1442,"path":1667,"stem":2252,"description":1669},{"title":1449,"path":1695,"stem":2254,"description":1697},{"title":1116,"path":1731,"stem":2256,"description":1733},{"title":1132,"path":1766,"stem":2258,"description":1768},{"title":1465,"path":2261,"stem":2262,"children":2316,"page":2259},[2317,2318,2319],{"title":1818,"path":1817,"stem":2265,"description":1820},{"title":1875,"path":1874,"stem":2267,"description":1877},{"title":1485,"path":1927,"stem":2269,"description":1929},{"title":2271,"path":2272,"stem":2273,"children":2321,"page":2259},[2322],{"title":2020,"path":2019,"stem":2276,"description":2022},{"title":1491,"path":2278,"stem":2279,"children":2324,"page":2259},[2325,2326],{"title":2054,"path":2053,"stem":2282,"description":2056},{"title":2213,"path":2212,"stem":2284,"description":2215},1776267061284]