[{"data":1,"prerenderedAt":1846},["ShallowReactive",2],{"highlight:import \"github.com/zoobz-io/scio\"\n\ns := scio.New()\n\n// Register resources — scio routes by URI scheme\ns.RegisterDatabase(\"db://users\", usersDB.Atomic())\ns.RegisterStore(\"kv://sessions\", sessionsStore.Atomic())\ns.RegisterBucket(\"bcs://documents\", docsBucket.Atomic())\n\n// Uniform access via URI\natom, _ := s.Get(ctx, \"db://users/123\")\ns.Set(ctx, \"kv://sessions/abc\", sessionAtom)\ns.Put(ctx, \"bcs://documents/report.pdf\", data)\n\n// Query databases through the catalog\nresults, _ := s.Query(ctx, \"db://users\", stmt, params)\n\n// Introspect the topology\ns.Sources()                    // all registered resources\ns.FindBySpec(userSpec)         // resources sharing a type\ns.FindByField(\"email\")        // resources with an email field\ns.Related(\"db://users\")       // other resources holding User data":3,"footer-resources":4,"search-sections-scio":1546,"nav-scio":1797,"content-tree-scio":1822,"content-table-nav-scio":1834},"\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-keyword)\">import\u003C/span>\u003Cspan style=\"color:var(--shiki-string)\"> \"github.com/zoobz-io/scio\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">s\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> :=\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> scio\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\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-comment)\">// Register resources — scio routes by URI scheme\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">s\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">RegisterDatabase\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(\u003C/span>\u003Cspan style=\"color:var(--shiki-string)\">\"db://users\"\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> usersDB\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Atomic\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">())\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">s\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">RegisterStore\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(\u003C/span>\u003Cspan style=\"color:var(--shiki-string)\">\"kv://sessions\"\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> sessionsStore\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Atomic\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">())\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">s\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">RegisterBucket\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(\u003C/span>\u003Cspan style=\"color:var(--shiki-string)\">\"bcs://documents\"\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> docsBucket\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Atomic\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-comment)\">// Uniform access via URI\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">atom\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> _\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> :=\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> s\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Get\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)\"> \"db://users/123\"\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">s\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Set\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)\"> \"kv://sessions/abc\"\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> sessionAtom\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">s\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Put\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)\"> \"bcs://documents/report.pdf\"\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> data\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-comment)\">// Query databases through the catalog\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">results\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> _\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> :=\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> s\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Query\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)\"> \"db://users\"\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> stmt\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">,\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\"> params\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-comment)\">// Introspect the topology\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">s\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Sources\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">()\u003C/span>\u003Cspan style=\"color:var(--shiki-comment)\">                    // all registered resources\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">s\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">FindBySpec\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(\u003C/span>\u003Cspan style=\"color:var(--shiki-text)\">userSpec\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">)\u003C/span>\u003Cspan style=\"color:var(--shiki-comment)\">         // resources sharing a type\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">s\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">FindByField\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(\u003C/span>\u003Cspan style=\"color:var(--shiki-string)\">\"email\"\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">)\u003C/span>\u003Cspan style=\"color:var(--shiki-comment)\">        // resources with an email field\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-text)\">s\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">.\u003C/span>\u003Cspan style=\"color:var(--shiki-function)\">Related\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">(\u003C/span>\u003Cspan style=\"color:var(--shiki-string)\">\"db://users\"\u003C/span>\u003Cspan style=\"color:var(--shiki-punctuation)\">)\u003C/span>\u003Cspan style=\"color:var(--shiki-comment)\">       // other resources holding User data\u003C/span>\u003C/span>",[5,1129,1274],{"id":6,"title":7,"body":8,"description":105,"extension":1122,"icon":1123,"meta":1124,"navigation":140,"path":1125,"seo":1126,"stem":1127,"__hash__":1128},"resources/readme.md","README",{"type":9,"value":10,"toc":1109},"minimark",[11,15,85,88,91,96,99,421,425,442,445,449,926,930,1003,1007,1042,1046,1051,1070,1074,1082,1086,1094,1098,1105],[12,13,14],"h1",{"id":14},"scio",[16,17,18,29,37,45,53,61,69,77],"p",{},[19,20,24],"a",{"href":21,"rel":22},"https://github.com/zoobz-io/scio/actions/workflows/ci.yml",[23],"nofollow",[25,26],"img",{"alt":27,"src":28},"CI","https://github.com/zoobz-io/scio/actions/workflows/ci.yml/badge.svg",[19,30,33],{"href":31,"rel":32},"https://codecov.io/gh/zoobz-io/scio",[23],[25,34],{"alt":35,"src":36},"codecov","https://codecov.io/gh/zoobz-io/scio/branch/main/graph/badge.svg",[19,38,41],{"href":39,"rel":40},"https://goreportcard.com/report/github.com/zoobz-io/scio",[23],[25,42],{"alt":43,"src":44},"Go Report Card","https://goreportcard.com/badge/github.com/zoobz-io/scio",[19,46,49],{"href":47,"rel":48},"https://github.com/zoobz-io/scio/actions/workflows/codeql.yml",[23],[25,50],{"alt":51,"src":52},"CodeQL","https://github.com/zoobz-io/scio/actions/workflows/codeql.yml/badge.svg",[19,54,57],{"href":55,"rel":56},"https://pkg.go.dev/github.com/zoobz-io/scio",[23],[25,58],{"alt":59,"src":60},"Go Reference","https://pkg.go.dev/badge/github.com/zoobz-io/scio.svg",[19,62,65],{"href":63,"rel":64},"https://opensource.org/licenses/MIT",[23],[25,66],{"alt":67,"src":68},"License: MIT","https://img.shields.io/badge/License-MIT-yellow.svg",[19,70,73],{"href":71,"rel":72},"https://go.dev/",[23],[25,74],{"alt":75,"src":76},"Go Version","https://img.shields.io/github/go-mod/go-version/zoobz-io/scio",[19,78,81],{"href":79,"rel":80},"https://github.com/zoobz-io/scio/releases",[23],[25,82],{"alt":83,"src":84},"Release","https://img.shields.io/github/v/release/zoobz-io/scio",[16,86,87],{},"URI-based data catalog with atomic operations for Go.",[16,89,90],{},"scio is the system's authoritative map of data sources — it knows where data lives and provides type-agnostic access via atoms.",[92,93,95],"h2",{"id":94},"the-map","The Map",[16,97,98],{},"scio registers storage resources and routes operations through URIs:",[100,101,106],"pre",{"className":102,"code":103,"language":104,"meta":105,"style":105},"language-go shiki shiki-themes","s := scio.New()\n\n// Register resources (user code provides typed grub wrappers)\ns.RegisterDatabase(\"db://users\", usersDB.Atomic())\ns.RegisterStore(\"kv://sessions\", sessionsStore.Atomic())\ns.RegisterBucket(\"bcs://documents\", docsBucket.Atomic())\n\n// Operations via URI — scio routes to the right provider\natom, _ := s.Get(ctx, \"db://users/123\")\ns.Set(ctx, \"kv://sessions/abc\", sessionAtom)\n\n// Query databases\nresults, _ := s.Query(ctx, \"db://users\", stmt, params)\n\n// Introspect the topology\ns.Sources()                    // all registered resources\ns.FindBySpec(spec)             // resources sharing a type\ns.Related(\"db://users\")        // other resources with same spec\n","go","",[107,108,109,135,142,149,180,206,232,237,243,277,303,308,314,354,359,365,381,402],"code",{"__ignoreMap":105},[110,111,114,118,121,124,128,132],"span",{"class":112,"line":113},"line",1,[110,115,117],{"class":116},"sh8_p","s",[110,119,120],{"class":116}," :=",[110,122,123],{"class":116}," scio",[110,125,127],{"class":126},"sq5bi",".",[110,129,131],{"class":130},"s5klm","New",[110,133,134],{"class":126},"()\n",[110,136,138],{"class":112,"line":137},2,[110,139,141],{"emptyLinePlaceholder":140},true,"\n",[110,143,145],{"class":112,"line":144},3,[110,146,148],{"class":147},"sLkEo","// Register resources (user code provides typed grub wrappers)\n",[110,150,152,154,156,159,162,166,169,172,174,177],{"class":112,"line":151},4,[110,153,117],{"class":116},[110,155,127],{"class":126},[110,157,158],{"class":130},"RegisterDatabase",[110,160,161],{"class":126},"(",[110,163,165],{"class":164},"sxAnc","\"db://users\"",[110,167,168],{"class":126},",",[110,170,171],{"class":116}," usersDB",[110,173,127],{"class":126},[110,175,176],{"class":130},"Atomic",[110,178,179],{"class":126},"())\n",[110,181,183,185,187,190,192,195,197,200,202,204],{"class":112,"line":182},5,[110,184,117],{"class":116},[110,186,127],{"class":126},[110,188,189],{"class":130},"RegisterStore",[110,191,161],{"class":126},[110,193,194],{"class":164},"\"kv://sessions\"",[110,196,168],{"class":126},[110,198,199],{"class":116}," sessionsStore",[110,201,127],{"class":126},[110,203,176],{"class":130},[110,205,179],{"class":126},[110,207,209,211,213,216,218,221,223,226,228,230],{"class":112,"line":208},6,[110,210,117],{"class":116},[110,212,127],{"class":126},[110,214,215],{"class":130},"RegisterBucket",[110,217,161],{"class":126},[110,219,220],{"class":164},"\"bcs://documents\"",[110,222,168],{"class":126},[110,224,225],{"class":116}," docsBucket",[110,227,127],{"class":126},[110,229,176],{"class":130},[110,231,179],{"class":126},[110,233,235],{"class":112,"line":234},7,[110,236,141],{"emptyLinePlaceholder":140},[110,238,240],{"class":112,"line":239},8,[110,241,242],{"class":147},"// Operations via URI — scio routes to the right provider\n",[110,244,246,249,251,254,256,259,261,264,266,269,271,274],{"class":112,"line":245},9,[110,247,248],{"class":116},"atom",[110,250,168],{"class":126},[110,252,253],{"class":116}," _",[110,255,120],{"class":116},[110,257,258],{"class":116}," s",[110,260,127],{"class":126},[110,262,263],{"class":130},"Get",[110,265,161],{"class":126},[110,267,268],{"class":116},"ctx",[110,270,168],{"class":126},[110,272,273],{"class":164}," \"db://users/123\"",[110,275,276],{"class":126},")\n",[110,278,280,282,284,287,289,291,293,296,298,301],{"class":112,"line":279},10,[110,281,117],{"class":116},[110,283,127],{"class":126},[110,285,286],{"class":130},"Set",[110,288,161],{"class":126},[110,290,268],{"class":116},[110,292,168],{"class":126},[110,294,295],{"class":164}," \"kv://sessions/abc\"",[110,297,168],{"class":126},[110,299,300],{"class":116}," sessionAtom",[110,302,276],{"class":126},[110,304,306],{"class":112,"line":305},11,[110,307,141],{"emptyLinePlaceholder":140},[110,309,311],{"class":112,"line":310},12,[110,312,313],{"class":147},"// Query databases\n",[110,315,317,320,322,324,326,328,330,333,335,337,339,342,344,347,349,352],{"class":112,"line":316},13,[110,318,319],{"class":116},"results",[110,321,168],{"class":126},[110,323,253],{"class":116},[110,325,120],{"class":116},[110,327,258],{"class":116},[110,329,127],{"class":126},[110,331,332],{"class":130},"Query",[110,334,161],{"class":126},[110,336,268],{"class":116},[110,338,168],{"class":126},[110,340,341],{"class":164}," \"db://users\"",[110,343,168],{"class":126},[110,345,346],{"class":116}," stmt",[110,348,168],{"class":126},[110,350,351],{"class":116}," params",[110,353,276],{"class":126},[110,355,357],{"class":112,"line":356},14,[110,358,141],{"emptyLinePlaceholder":140},[110,360,362],{"class":112,"line":361},15,[110,363,364],{"class":147},"// Introspect the topology\n",[110,366,368,370,372,375,378],{"class":112,"line":367},16,[110,369,117],{"class":116},[110,371,127],{"class":126},[110,373,374],{"class":130},"Sources",[110,376,377],{"class":126},"()",[110,379,380],{"class":147},"                    // all registered resources\n",[110,382,384,386,388,391,393,396,399],{"class":112,"line":383},17,[110,385,117],{"class":116},[110,387,127],{"class":126},[110,389,390],{"class":130},"FindBySpec",[110,392,161],{"class":126},[110,394,395],{"class":116},"spec",[110,397,398],{"class":126},")",[110,400,401],{"class":147},"             // resources sharing a type\n",[110,403,405,407,409,412,414,416,418],{"class":112,"line":404},18,[110,406,117],{"class":116},[110,408,127],{"class":126},[110,410,411],{"class":130},"Related",[110,413,161],{"class":126},[110,415,165],{"class":164},[110,417,398],{"class":126},[110,419,420],{"class":147},"        // other resources with same spec\n",[92,422,424],{"id":423},"install","Install",[100,426,430],{"className":427,"code":428,"language":429,"meta":105,"style":105},"language-bash shiki shiki-themes","go get github.com/zoobz-io/scio\n","bash",[107,431,432],{"__ignoreMap":105},[110,433,434,436,439],{"class":112,"line":113},[110,435,104],{"class":130},[110,437,438],{"class":164}," get",[110,440,441],{"class":164}," github.com/zoobz-io/scio\n",[16,443,444],{},"Requires Go 1.24 or higher.",[92,446,448],{"id":447},"quick-start","Quick Start",[100,450,452],{"className":102,"code":451,"language":104,"meta":105,"style":105},"package main\n\nimport (\n    \"context\"\n    \"fmt\"\n\n    \"github.com/zoobz-io/grub\"\n    \"github.com/zoobz-io/scio\"\n)\n\nfunc main() {\n    // Create scio instance\n    s := scio.New()\n\n    // Register a database (assumes usersDB is a grub.Database[User])\n    err := s.RegisterDatabase(\"db://users\", usersDB.Atomic(),\n        scio.WithDescription(\"User accounts\"),\n        scio.WithTag(\"owner\", \"auth-team\"),\n    )\n    if err != nil {\n        panic(err)\n    }\n\n    ctx := context.Background()\n\n    // Get a record\n    atom, err := s.Get(ctx, \"db://users/123\")\n    if err != nil {\n        panic(err)\n    }\n\n    // Access fields via typed maps\n    fmt.Println(atom.Strings[\"email\"])\n    fmt.Println(atom.Ints[\"age\"])\n\n    // Find related resources\n    for _, r := range s.Related(\"db://users\") {\n        fmt.Printf(\"Related: %s (%s)\\n\", r.URI, r.Variant)\n    }\n}\n",[107,453,454,464,468,477,482,487,491,496,501,505,509,522,527,542,546,551,579,597,618,624,642,656,662,667,685,690,696,724,737,748,753,758,764,793,818,823,829,861,915,920],{"__ignoreMap":105},[110,455,456,460],{"class":112,"line":113},[110,457,459],{"class":458},"sUt3r","package",[110,461,463],{"class":462},"sYBwO"," main\n",[110,465,466],{"class":112,"line":137},[110,467,141],{"emptyLinePlaceholder":140},[110,469,470,473],{"class":112,"line":144},[110,471,472],{"class":458},"import",[110,474,476],{"class":475},"soy-K"," (\n",[110,478,479],{"class":112,"line":151},[110,480,481],{"class":164},"    \"context\"\n",[110,483,484],{"class":112,"line":182},[110,485,486],{"class":164},"    \"fmt\"\n",[110,488,489],{"class":112,"line":208},[110,490,141],{"emptyLinePlaceholder":140},[110,492,493],{"class":112,"line":234},[110,494,495],{"class":164},"    \"github.com/zoobz-io/grub\"\n",[110,497,498],{"class":112,"line":239},[110,499,500],{"class":164},"    \"github.com/zoobz-io/scio\"\n",[110,502,503],{"class":112,"line":245},[110,504,276],{"class":475},[110,506,507],{"class":112,"line":279},[110,508,141],{"emptyLinePlaceholder":140},[110,510,511,514,517,519],{"class":112,"line":305},[110,512,513],{"class":458},"func",[110,515,516],{"class":130}," main",[110,518,377],{"class":126},[110,520,521],{"class":126}," {\n",[110,523,524],{"class":112,"line":310},[110,525,526],{"class":147},"    // Create scio instance\n",[110,528,529,532,534,536,538,540],{"class":112,"line":316},[110,530,531],{"class":116},"    s",[110,533,120],{"class":116},[110,535,123],{"class":116},[110,537,127],{"class":126},[110,539,131],{"class":130},[110,541,134],{"class":126},[110,543,544],{"class":112,"line":356},[110,545,141],{"emptyLinePlaceholder":140},[110,547,548],{"class":112,"line":361},[110,549,550],{"class":147},"    // Register a database (assumes usersDB is a grub.Database[User])\n",[110,552,553,556,558,560,562,564,566,568,570,572,574,576],{"class":112,"line":367},[110,554,555],{"class":116},"    err",[110,557,120],{"class":116},[110,559,258],{"class":116},[110,561,127],{"class":126},[110,563,158],{"class":130},[110,565,161],{"class":126},[110,567,165],{"class":164},[110,569,168],{"class":126},[110,571,171],{"class":116},[110,573,127],{"class":126},[110,575,176],{"class":130},[110,577,578],{"class":126},"(),\n",[110,580,581,584,586,589,591,594],{"class":112,"line":383},[110,582,583],{"class":116},"        scio",[110,585,127],{"class":126},[110,587,588],{"class":130},"WithDescription",[110,590,161],{"class":126},[110,592,593],{"class":164},"\"User accounts\"",[110,595,596],{"class":126},"),\n",[110,598,599,601,603,606,608,611,613,616],{"class":112,"line":404},[110,600,583],{"class":116},[110,602,127],{"class":126},[110,604,605],{"class":130},"WithTag",[110,607,161],{"class":126},[110,609,610],{"class":164},"\"owner\"",[110,612,168],{"class":126},[110,614,615],{"class":164}," \"auth-team\"",[110,617,596],{"class":126},[110,619,621],{"class":112,"line":620},19,[110,622,623],{"class":126},"    )\n",[110,625,627,631,634,637,640],{"class":112,"line":626},20,[110,628,630],{"class":629},"sW3Qg","    if",[110,632,633],{"class":116}," err",[110,635,636],{"class":629}," !=",[110,638,639],{"class":458}," nil",[110,641,521],{"class":126},[110,643,645,649,651,654],{"class":112,"line":644},21,[110,646,648],{"class":647},"skxcq","        panic",[110,650,161],{"class":126},[110,652,653],{"class":116},"err",[110,655,276],{"class":126},[110,657,659],{"class":112,"line":658},22,[110,660,661],{"class":126},"    }\n",[110,663,665],{"class":112,"line":664},23,[110,666,141],{"emptyLinePlaceholder":140},[110,668,670,673,675,678,680,683],{"class":112,"line":669},24,[110,671,672],{"class":116},"    ctx",[110,674,120],{"class":116},[110,676,677],{"class":116}," context",[110,679,127],{"class":126},[110,681,682],{"class":130},"Background",[110,684,134],{"class":126},[110,686,688],{"class":112,"line":687},25,[110,689,141],{"emptyLinePlaceholder":140},[110,691,693],{"class":112,"line":692},26,[110,694,695],{"class":147},"    // Get a record\n",[110,697,699,702,704,706,708,710,712,714,716,718,720,722],{"class":112,"line":698},27,[110,700,701],{"class":116},"    atom",[110,703,168],{"class":126},[110,705,633],{"class":116},[110,707,120],{"class":116},[110,709,258],{"class":116},[110,711,127],{"class":126},[110,713,263],{"class":130},[110,715,161],{"class":126},[110,717,268],{"class":116},[110,719,168],{"class":126},[110,721,273],{"class":164},[110,723,276],{"class":126},[110,725,727,729,731,733,735],{"class":112,"line":726},28,[110,728,630],{"class":629},[110,730,633],{"class":116},[110,732,636],{"class":629},[110,734,639],{"class":458},[110,736,521],{"class":126},[110,738,740,742,744,746],{"class":112,"line":739},29,[110,741,648],{"class":647},[110,743,161],{"class":126},[110,745,653],{"class":116},[110,747,276],{"class":126},[110,749,751],{"class":112,"line":750},30,[110,752,661],{"class":126},[110,754,756],{"class":112,"line":755},31,[110,757,141],{"emptyLinePlaceholder":140},[110,759,761],{"class":112,"line":760},32,[110,762,763],{"class":147},"    // Access fields via typed maps\n",[110,765,767,770,772,775,777,779,781,784,787,790],{"class":112,"line":766},33,[110,768,769],{"class":116},"    fmt",[110,771,127],{"class":126},[110,773,774],{"class":130},"Println",[110,776,161],{"class":126},[110,778,248],{"class":116},[110,780,127],{"class":126},[110,782,783],{"class":116},"Strings",[110,785,786],{"class":126},"[",[110,788,789],{"class":164},"\"email\"",[110,791,792],{"class":126},"])\n",[110,794,796,798,800,802,804,806,808,811,813,816],{"class":112,"line":795},34,[110,797,769],{"class":116},[110,799,127],{"class":126},[110,801,774],{"class":130},[110,803,161],{"class":126},[110,805,248],{"class":116},[110,807,127],{"class":126},[110,809,810],{"class":116},"Ints",[110,812,786],{"class":126},[110,814,815],{"class":164},"\"age\"",[110,817,792],{"class":126},[110,819,821],{"class":112,"line":820},35,[110,822,141],{"emptyLinePlaceholder":140},[110,824,826],{"class":112,"line":825},36,[110,827,828],{"class":147},"    // Find related resources\n",[110,830,832,835,837,839,842,844,847,849,851,853,855,857,859],{"class":112,"line":831},37,[110,833,834],{"class":629},"    for",[110,836,253],{"class":116},[110,838,168],{"class":126},[110,840,841],{"class":116}," r",[110,843,120],{"class":116},[110,845,846],{"class":629}," range",[110,848,258],{"class":116},[110,850,127],{"class":126},[110,852,411],{"class":130},[110,854,161],{"class":126},[110,856,165],{"class":164},[110,858,398],{"class":126},[110,860,521],{"class":126},[110,862,864,867,869,872,874,877,881,884,886,888,892,895,897,899,901,904,906,908,910,913],{"class":112,"line":863},38,[110,865,866],{"class":116},"        fmt",[110,868,127],{"class":126},[110,870,871],{"class":130},"Printf",[110,873,161],{"class":126},[110,875,876],{"class":164},"\"Related: ",[110,878,880],{"class":879},"scyPU","%s",[110,882,883],{"class":164}," (",[110,885,880],{"class":879},[110,887,398],{"class":164},[110,889,891],{"class":890},"suWN2","\\n",[110,893,894],{"class":164},"\"",[110,896,168],{"class":126},[110,898,841],{"class":116},[110,900,127],{"class":126},[110,902,903],{"class":116},"URI",[110,905,168],{"class":126},[110,907,841],{"class":116},[110,909,127],{"class":126},[110,911,912],{"class":116},"Variant",[110,914,276],{"class":126},[110,916,918],{"class":112,"line":917},39,[110,919,661],{"class":126},[110,921,923],{"class":112,"line":922},40,[110,924,925],{"class":126},"}\n",[92,927,929],{"id":928},"uri-semantics","URI Semantics",[931,932,933,948],"table",{},[934,935,936],"thead",{},[937,938,939,942,945],"tr",{},[940,941,912],"th",{},[940,943,944],{},"Pattern",[940,946,947],{},"Example",[949,950,951,969,986],"tbody",{},[937,952,953,959,964],{},[954,955,956],"td",{},[107,957,958],{},"db://",[954,960,961],{},[107,962,963],{},"table/key",[954,965,966],{},[107,967,968],{},"db://users/123",[937,970,971,976,981],{},[954,972,973],{},[107,974,975],{},"kv://",[954,977,978],{},[107,979,980],{},"store/key",[954,982,983],{},[107,984,985],{},"kv://sessions/abc",[937,987,988,993,998],{},[954,989,990],{},[107,991,992],{},"bcs://",[954,994,995],{},[107,996,997],{},"bucket/path",[954,999,1000],{},[107,1001,1002],{},"bcs://docs/reports/q4.pdf",[92,1004,1006],{"id":1005},"why-scio","Why scio?",[1008,1009,1010,1018,1024,1030,1036],"ul",{},[1011,1012,1013,1017],"li",{},[1014,1015,1016],"strong",{},"URI-based routing"," — logical addressing decoupled from physical storage",[1011,1019,1020,1023],{},[1014,1021,1022],{},"Type-agnostic"," — operates on atoms, never needs to know your types",[1011,1025,1026,1029],{},[1014,1027,1028],{},"Topology awareness"," — knows what resources exist and their relationships",[1011,1031,1032,1035],{},[1014,1033,1034],{},"Spec tracking"," — auto-detects when multiple resources share the same type",[1011,1037,1038,1041],{},[1014,1039,1040],{},"Metadata support"," — annotate resources for system use (LLM context, ownership, versioning)",[92,1043,1045],{"id":1044},"documentation","Documentation",[1047,1048,1050],"h3",{"id":1049},"learn","Learn",[1008,1052,1053,1058,1064],{},[1011,1054,1055],{},[19,1056,448],{"href":1057},"docs/learn/quickstart",[1011,1059,1060],{},[19,1061,1063],{"href":1062},"docs/learn/concepts","Core Concepts",[1011,1065,1066],{},[19,1067,1069],{"href":1068},"docs/learn/architecture","Architecture",[1047,1071,1073],{"id":1072},"reference","Reference",[1008,1075,1076],{},[1011,1077,1078],{},[19,1079,1081],{"href":1080},"docs/reference/api","API Reference",[92,1083,1085],{"id":1084},"contributing","Contributing",[16,1087,1088,1089,1093],{},"See ",[19,1090,1092],{"href":1091},"CONTRIBUTING","CONTRIBUTING.md"," for development setup and guidelines.",[92,1095,1097],{"id":1096},"license","License",[16,1099,1100,1101,1104],{},"MIT License - see ",[19,1102,1103],{"href":1103},"LICENSE"," for details.",[1106,1107,1108],"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 .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}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 .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 .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)}",{"title":105,"searchDepth":137,"depth":137,"links":1110},[1111,1112,1113,1114,1115,1116,1120,1121],{"id":94,"depth":137,"text":95},{"id":423,"depth":137,"text":424},{"id":447,"depth":137,"text":448},{"id":928,"depth":137,"text":929},{"id":1005,"depth":137,"text":1006},{"id":1044,"depth":137,"text":1045,"children":1117},[1118,1119],{"id":1049,"depth":144,"text":1050},{"id":1072,"depth":144,"text":1073},{"id":1084,"depth":137,"text":1085},{"id":1096,"depth":137,"text":1097},"md","book-open",{},"/readme",{"title":7,"description":105},"readme","kRSrXlj1emliC0ptWcFgX8aARGPhAUxZrHq7zVS40kc",{"id":1130,"title":1131,"body":1132,"description":105,"extension":1122,"icon":1268,"meta":1269,"navigation":140,"path":1270,"seo":1271,"stem":1272,"__hash__":1273},"resources/security.md","Security",{"type":9,"value":1133,"toc":1261},[1134,1138,1142,1164,1168,1171,1200,1204,1207,1233,1237,1240,1254,1258],[12,1135,1137],{"id":1136},"security-policy","Security Policy",[92,1139,1141],{"id":1140},"supported-versions","Supported Versions",[931,1143,1144,1154],{},[934,1145,1146],{},[937,1147,1148,1151],{},[940,1149,1150],{},"Version",[940,1152,1153],{},"Supported",[949,1155,1156],{},[937,1157,1158,1161],{},[954,1159,1160],{},"Latest",[954,1162,1163],{},"✅",[92,1165,1167],{"id":1166},"reporting-a-vulnerability","Reporting a Vulnerability",[16,1169,1170],{},"We take security vulnerabilities seriously. If you discover a security issue, please follow these steps:",[1172,1173,1174,1180,1183],"ol",{},[1011,1175,1176,1179],{},[1014,1177,1178],{},"DO NOT"," create a public GitHub issue",[1011,1181,1182],{},"Email security details to the maintainers",[1011,1184,1185,1186],{},"Include:\n",[1008,1187,1188,1191,1194,1197],{},[1011,1189,1190],{},"Description of the vulnerability",[1011,1192,1193],{},"Steps to reproduce",[1011,1195,1196],{},"Potential impact",[1011,1198,1199],{},"Suggested fix (if available)",[92,1201,1203],{"id":1202},"security-best-practices","Security Best Practices",[16,1205,1206],{},"When using Scio:",[1172,1208,1209,1215,1221,1227],{},[1011,1210,1211,1214],{},[1014,1212,1213],{},"URI Validation",": Scio parses URIs to route operations. Ensure URIs are properly validated before passing to Scio to prevent injection attacks.",[1011,1216,1217,1220],{},[1014,1218,1219],{},"Spec Exposure",": Be aware that type metadata (field names, types) is accessible via the catalog. Review your struct definitions for information disclosure.",[1011,1222,1223,1226],{},[1014,1224,1225],{},"Provider Security",": Scio delegates storage operations to grub providers. Ensure your underlying storage (databases, caches, blob stores) are properly secured.",[1011,1228,1229,1232],{},[1014,1230,1231],{},"Access Control",": Scio does not implement authentication or authorization. Implement appropriate access controls in your application layer.",[92,1234,1236],{"id":1235},"security-features","Security Features",[16,1238,1239],{},"Scio is designed with security in mind:",[1008,1241,1242,1245,1248,1251],{},[1011,1243,1244],{},"No direct network operations (delegated to providers)",[1011,1246,1247],{},"No file system operations (delegated to providers)",[1011,1249,1250],{},"Type-safe operations through atoms",[1011,1252,1253],{},"URI scheme validation prevents variant injection",[92,1255,1257],{"id":1256},"acknowledgments","Acknowledgments",[16,1259,1260],{},"We appreciate responsible disclosure of security vulnerabilities.",{"title":105,"searchDepth":137,"depth":137,"links":1262},[1263,1264,1265,1266,1267],{"id":1140,"depth":137,"text":1141},{"id":1166,"depth":137,"text":1167},{"id":1202,"depth":137,"text":1203},{"id":1235,"depth":137,"text":1236},{"id":1256,"depth":137,"text":1257},"shield",{},"/security",{"title":1131,"description":105},"security","2bCaIpy1G_8DOL_WIU9ofOx1s6HHbLRCTQC2FQbP2PE",{"id":1275,"title":1085,"body":1276,"description":1284,"extension":1122,"icon":107,"meta":1542,"navigation":140,"path":1543,"seo":1544,"stem":1084,"__hash__":1545},"resources/contributing.md",{"type":9,"value":1277,"toc":1530},[1278,1282,1285,1289,1327,1331,1335,1346,1350,1406,1410,1430,1434,1451,1455,1469,1473,1476,1520,1524,1527],[12,1279,1281],{"id":1280},"contributing-to-scio","Contributing to Scio",[16,1283,1284],{},"Thank you for your interest in contributing to Scio! We welcome contributions from the community.",[92,1286,1288],{"id":1287},"getting-started","Getting Started",[1172,1290,1291,1294,1300,1306,1309,1315,1321,1324],{},[1011,1292,1293],{},"Fork the repository",[1011,1295,1296,1297],{},"Clone your fork: ",[107,1298,1299],{},"git clone https://github.com/your-username/scio.git",[1011,1301,1302,1303],{},"Create a new branch: ",[107,1304,1305],{},"git checkout -b feature/your-feature-name",[1011,1307,1308],{},"Make your changes",[1011,1310,1311,1312],{},"Run tests: ",[107,1313,1314],{},"make test",[1011,1316,1317,1318],{},"Run linters: ",[107,1319,1320],{},"make lint",[1011,1322,1323],{},"Commit your changes with a descriptive message",[1011,1325,1326],{},"Push to your fork and submit a pull request",[92,1328,1330],{"id":1329},"development-setup","Development Setup",[1047,1332,1334],{"id":1333},"prerequisites","Prerequisites",[1008,1336,1337,1340],{},[1011,1338,1339],{},"Go 1.24 or higher",[1011,1341,1342,1343,398],{},"golangci-lint (install with ",[107,1344,1345],{},"make install-tools",[1047,1347,1349],{"id":1348},"running-tests","Running Tests",[100,1351,1353],{"className":427,"code":1352,"language":429,"meta":105,"style":105},"make test        # Run all tests\nmake test-bench  # Run benchmarks\nmake coverage    # Generate coverage report\nmake lint        # Run linters\nmake check       # Run tests and lint\n",[107,1354,1355,1366,1376,1386,1396],{"__ignoreMap":105},[110,1356,1357,1360,1363],{"class":112,"line":113},[110,1358,1359],{"class":130},"make",[110,1361,1362],{"class":164}," test",[110,1364,1365],{"class":147},"        # Run all tests\n",[110,1367,1368,1370,1373],{"class":112,"line":137},[110,1369,1359],{"class":130},[110,1371,1372],{"class":164}," test-bench",[110,1374,1375],{"class":147},"  # Run benchmarks\n",[110,1377,1378,1380,1383],{"class":112,"line":144},[110,1379,1359],{"class":130},[110,1381,1382],{"class":164}," coverage",[110,1384,1385],{"class":147},"    # Generate coverage report\n",[110,1387,1388,1390,1393],{"class":112,"line":151},[110,1389,1359],{"class":130},[110,1391,1392],{"class":164}," lint",[110,1394,1395],{"class":147},"        # Run linters\n",[110,1397,1398,1400,1403],{"class":112,"line":182},[110,1399,1359],{"class":130},[110,1401,1402],{"class":164}," check",[110,1404,1405],{"class":147},"       # Run tests and lint\n",[92,1407,1409],{"id":1408},"code-style","Code Style",[1008,1411,1412,1415,1421,1424,1427],{},[1011,1413,1414],{},"Follow standard Go conventions",[1011,1416,1417,1418],{},"Ensure all code passes ",[107,1419,1420],{},"golangci-lint",[1011,1422,1423],{},"Write tests for new functionality",[1011,1425,1426],{},"Keep test coverage above 70%",[1011,1428,1429],{},"Document exported functions and types",[92,1431,1433],{"id":1432},"pull-request-process","Pull Request Process",[1172,1435,1436,1439,1442,1445,1448],{},[1011,1437,1438],{},"Ensure all tests pass",[1011,1440,1441],{},"Update documentation if needed",[1011,1443,1444],{},"Add entries to CHANGELOG.md if applicable",[1011,1446,1447],{},"Ensure your PR description clearly describes the problem and solution",[1011,1449,1450],{},"Link any relevant issues",[92,1452,1454],{"id":1453},"testing-guidelines","Testing Guidelines",[1008,1456,1457,1460,1463,1466],{},[1011,1458,1459],{},"Each source file should have a corresponding test file",[1011,1461,1462],{},"Write both positive and negative test cases",[1011,1464,1465],{},"Use table-driven tests where appropriate",[1011,1467,1468],{},"Ensure tests are deterministic and don't depend on external services",[92,1470,1472],{"id":1471},"commit-message-format","Commit Message Format",[16,1474,1475],{},"Use conventional commits format:",[1008,1477,1478,1484,1490,1496,1502,1508,1514],{},[1011,1479,1480,1483],{},[107,1481,1482],{},"feat:"," New feature",[1011,1485,1486,1489],{},[107,1487,1488],{},"fix:"," Bug fix",[1011,1491,1492,1495],{},[107,1493,1494],{},"docs:"," Documentation changes",[1011,1497,1498,1501],{},[107,1499,1500],{},"test:"," Test additions or changes",[1011,1503,1504,1507],{},[107,1505,1506],{},"refactor:"," Code refactoring",[1011,1509,1510,1513],{},[107,1511,1512],{},"perf:"," Performance improvements",[1011,1515,1516,1519],{},[107,1517,1518],{},"chore:"," Maintenance tasks",[92,1521,1523],{"id":1522},"questions","Questions?",[16,1525,1526],{},"Feel free to open an issue for any questions or concerns.",[1106,1528,1529],{},"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 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);}",{"title":105,"searchDepth":137,"depth":137,"links":1531},[1532,1533,1537,1538,1539,1540,1541],{"id":1287,"depth":137,"text":1288},{"id":1329,"depth":137,"text":1330,"children":1534},[1535,1536],{"id":1333,"depth":144,"text":1334},{"id":1348,"depth":144,"text":1349},{"id":1408,"depth":137,"text":1409},{"id":1432,"depth":137,"text":1433},{"id":1453,"depth":137,"text":1454},{"id":1471,"depth":137,"text":1472},{"id":1522,"depth":137,"text":1523},{},"/contributing",{"title":1085,"description":1284},"jHq_O7tUmrQ8X_M--QYOJA8SRdXBEs-QXkruRyt5JLQ",[1547,1552,1556,1561,1564,1569,1574,1579,1584,1589,1593,1597,1602,1606,1611,1616,1621,1626,1631,1636,1640,1643,1648,1653,1658,1663,1668,1673,1678,1683,1688,1692,1695,1700,1704,1709,1713,1718,1723,1727,1732,1737,1741,1744,1748,1752,1756,1761,1765,1769,1774,1778,1783,1787,1792],{"id":1548,"title":1549,"titles":1550,"content":1551,"level":113},"/v0.0.5/overview","Overview",[],"URI-based data catalog with atomic operations",{"id":1553,"title":14,"titles":1554,"content":1555,"level":113},"/v0.0.5/overview#scio",[],"scio is a URI-based data catalog with atomic operations for Go. It serves as the authoritative map of data sources in your system, providing topology intelligence and type-agnostic access via atoms.",{"id":1557,"title":1558,"titles":1559,"content":1560,"level":137},"/v0.0.5/overview#what-scio-does","What scio Does",[14],"Registers storage resources — Accepts atomic providers from grub (databases, stores, buckets)Routes operations via URI — db://users/123, kv://sessions/abc, bcs://docs/report.pdfProvides topology intelligence — Knows what resources exist, where, and their relationshipsEnables type-agnostic access — Works with atoms, never needs to know your types",{"id":1562,"title":1063,"titles":1563,"content":105,"level":137},"/v0.0.5/overview#core-concepts",[14],{"id":1565,"title":1566,"titles":1567,"content":1568,"level":144},"/v0.0.5/overview#uri-addressing","URI Addressing",[14,1063],"Every data access point is addressed by a URI: VariantPatternExampledb://table/keydb://users/123kv://store/keykv://sessions/abcbcs://bucket/pathbcs://docs/reports/q4.pdf",{"id":1570,"title":1571,"titles":1572,"content":1573,"level":144},"/v0.0.5/overview#atomic-operations","Atomic Operations",[14,1063],"scio operates on atoms — type-segregated data structures from the atom library. This enables infrastructure code to work with data without knowing user types.",{"id":1575,"title":1576,"titles":1577,"content":1578,"level":144},"/v0.0.5/overview#spec-tracking","Spec Tracking",[14,1063],"When resources are registered, scio tracks their specs (type metadata). This enables: Finding all resources that share a typeDiscovering related resourcesField-based resource discovery",{"id":1580,"title":1581,"titles":1582,"content":1583,"level":137},"/v0.0.5/overview#use-cases","Use Cases",[14],"Service infrastructure — Route data access without coupling to user typesData pipelines — Process data across multiple storage backends uniformlySystem introspection — Understand the data topology of your applicationLLM integration — Provide context about available data sources",{"id":1585,"title":1586,"titles":1587,"content":1588,"level":137},"/v0.0.5/overview#dependencies","Dependencies",[14],"scio builds on the zoobzio ecosystem: atom — Type-segregated struct decompositiongrub — Provider-agnostic storageedamame — SQL query execution",{"id":1590,"title":448,"titles":1591,"content":1592,"level":113},"/v0.0.5/learn/quickstart",[],"Get started with scio in 5 minutes",{"id":1594,"title":448,"titles":1595,"content":1596,"level":113},"/v0.0.5/learn/quickstart#quick-start",[],"This guide gets you started with scio in 5 minutes.",{"id":1598,"title":1599,"titles":1600,"content":1601,"level":137},"/v0.0.5/learn/quickstart#installation","Installation",[448],"go get github.com/zoobz-io/scio",{"id":1603,"title":1604,"titles":1605,"content":105,"level":137},"/v0.0.5/learn/quickstart#basic-usage","Basic Usage",[448],{"id":1607,"title":1608,"titles":1609,"content":1610,"level":144},"/v0.0.5/learn/quickstart#_1-create-a-scio-instance","1. Create a scio Instance",[448,1604],"import \"github.com/zoobz-io/scio\"\n\ns := scio.New()",{"id":1612,"title":1613,"titles":1614,"content":1615,"level":144},"/v0.0.5/learn/quickstart#_2-register-resources","2. Register Resources",[448,1604],"Register your grub providers with scio using URIs: // Assuming you have grub resources\nusersDB, _ := grub.NewDatabase[User](db, \"users\", \"id\", renderer)\nsessionsStore := grub.NewStore[Session](redisProvider)\n\n// Register with scio\ns.RegisterDatabase(\"db://users\", usersDB.Atomic())\ns.RegisterStore(\"kv://sessions\", sessionsStore.Atomic())",{"id":1617,"title":1618,"titles":1619,"content":1620,"level":144},"/v0.0.5/learn/quickstart#_3-perform-operations","3. Perform Operations",[448,1604],"Access data via URIs: ctx := context.Background()\n\n// Get a record\natom, err := s.Get(ctx, \"db://users/123\")\nif err != nil {\n    // Handle error\n}\n\n// Access fields\nemail := atom.Strings[\"email\"]\nage := atom.Ints[\"age\"]\n\n// Set a record\ns.Set(ctx, \"kv://sessions/abc\", sessionAtom)\n\n// Check existence\nexists, _ := s.Exists(ctx, \"db://users/123\")\n\n// Delete\ns.Delete(ctx, \"db://users/123\")",{"id":1622,"title":1623,"titles":1624,"content":1625,"level":144},"/v0.0.5/learn/quickstart#_4-query-databases","4. Query Databases",[448,1604],"For database resources, use query operations: // Query all records\nresults, _ := s.Query(ctx, \"db://users\", grub.QueryAll, nil)\n\n// Query with parameters\nstmt := edamame.NewQueryStatement(...)\nresults, _ := s.Query(ctx, \"db://users\", stmt, map[string]any{\n    \"status\": \"active\",\n})",{"id":1627,"title":1628,"titles":1629,"content":1630,"level":144},"/v0.0.5/learn/quickstart#_5-introspect-the-topology","5. Introspect the Topology",[448,1604],"Discover what resources exist: // All resources\nfor _, r := range s.Sources() {\n    fmt.Printf(\"%s (%s)\\n\", r.URI, r.Variant)\n}\n\n// Find resources by spec\nrelated := s.FindBySpec(userSpec)\n\n// Find resources by field\nwithEmail := s.FindByField(\"email\")",{"id":1632,"title":1633,"titles":1634,"content":1635,"level":137},"/v0.0.5/learn/quickstart#next-steps","Next Steps",[448],"Core Concepts — Understand URIs, specs, and the catalogArchitecture — How scio fits in your system html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}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 .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 .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}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)}",{"id":1637,"title":1063,"titles":1638,"content":1639,"level":113},"/v0.0.5/learn/concepts",[],"Understanding scio's core abstractions",{"id":1641,"title":1063,"titles":1642,"content":105,"level":113},"/v0.0.5/learn/concepts#core-concepts",[],{"id":1644,"title":1645,"titles":1646,"content":1647,"level":137},"/v0.0.5/learn/concepts#uri-scheme","URI Scheme",[1063],"scio uses URIs to address data. Each URI has three components: variant://resource/key Variant — The storage type (db, kv, bcs)Resource — The logical name (table, store, bucket)Key — The record identifier or path",{"id":1649,"title":1650,"titles":1651,"content":1652,"level":144},"/v0.0.5/learn/concepts#variant-semantics","Variant Semantics",[1063,1645],"Each variant has specific parsing rules: VariantResourceKeydb://Table nameRecord keykv://Store nameCache keybcs://Bucket nameFull object path For blob storage, the key can contain slashes: bcs://documents/reports/2024/q4/summary.pdf\n└─ bucket ──┘ └─────── key (full path) ──────┘",{"id":1654,"title":1655,"titles":1656,"content":1657,"level":137},"/v0.0.5/learn/concepts#resources","Resources",[1063],"A resource is a registered data source: type Resource struct {\n    URI      string      // Full URI (e.g., \"db://users\")\n    Variant  Variant     // Storage type\n    Name     string      // Resource name\n    Spec     atom.Spec   // Type metadata\n    Metadata Metadata    // Annotations\n}",{"id":1659,"title":1660,"titles":1661,"content":1662,"level":144},"/v0.0.5/learn/concepts#metadata","Metadata",[1063,1655],"Resources can be annotated with metadata: s.RegisterDatabase(\"db://users\", db.Atomic(),\n    scio.WithDescription(\"User accounts table\"),\n    scio.WithVersion(\"1.2\"),\n    scio.WithTag(\"owner\", \"auth-team\"),\n    scio.WithTag(\"pii\", \"true\"),\n)",{"id":1664,"title":1665,"titles":1666,"content":1667,"level":137},"/v0.0.5/learn/concepts#specs-and-type-identity","Specs and Type Identity",[1063],"scio tracks type information via specs (from the atom library). When you register a resource, its spec is captured.",{"id":1669,"title":1670,"titles":1671,"content":1672,"level":144},"/v0.0.5/learn/concepts#fqdn-identity","FQDN Identity",[1063,1665],"Types are identified by their fully qualified domain name (FQDN): github.com/myapp/models.User Two resources share a type if they have the same FQDN.",{"id":1674,"title":1675,"titles":1676,"content":1677,"level":144},"/v0.0.5/learn/concepts#spec-relationships","Spec Relationships",[1063,1665],"scio auto-detects when multiple resources share a spec: // Both use the User type\ns.RegisterDatabase(\"db://users\", usersDB.Atomic())\ns.RegisterStore(\"kv://user-cache\", userCache.Atomic())\n\n// Find related resources\nrelated := s.Related(\"db://users\")\n// Returns: [{URI: \"kv://user-cache\", ...}]",{"id":1679,"title":1680,"titles":1681,"content":1682,"level":137},"/v0.0.5/learn/concepts#the-catalog","The Catalog",[1063],"The catalog provides introspection over registered resources: // Topology queries\ns.Sources()              // All resources\ns.Databases()            // All db:// resources\ns.Stores()               // All kv:// resources\ns.Buckets()              // All bcs:// resources\n\n// Spec queries\ns.Spec(\"db://users\")     // Get spec for a resource\ns.FindBySpec(spec)       // Find resources by spec\ns.FindByField(\"email\")   // Find resources containing field\ns.Related(\"db://users\")  // Find resources sharing the same spec",{"id":1684,"title":1685,"titles":1686,"content":1687,"level":137},"/v0.0.5/learn/concepts#operations","Operations",[1063],"Operations are dispatched based on URI variant: OperationDatabaseStoreBucketGet✓✓✓Set✓✓—Delete✓✓✓Exists✓✓✓Query✓——Select✓——SetWithTTL—✓—Put——✓ 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 .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}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)}",{"id":1689,"title":1069,"titles":1690,"content":1691,"level":113},"/v0.0.5/learn/architecture",[],"How scio fits in your system",{"id":1693,"title":1069,"titles":1694,"content":105,"level":113},"/v0.0.5/learn/architecture#architecture",[],{"id":1696,"title":1697,"titles":1698,"content":1699,"level":137},"/v0.0.5/learn/architecture#system-position","System Position",[1069],"scio sits between your application logic and storage providers: Application Layer\n       │\n       ▼\n    ┌─────┐\n    │scio │  ← URI routing, catalog, spec tracking\n    └──┬──┘\n       │\n       ▼\n┌──────────────┐\n│ grub Atomic  │  ← Type-agnostic interfaces\n│  Interfaces  │\n└──────┬───────┘\n       │\n       ▼\n┌──────────────┐\n│    grub      │  ← Typed wrappers\n│   Wrappers   │\n└──────┬───────┘\n       │\n       ▼\n┌──────────────┐\n│  Providers   │  ← Redis, PostgreSQL, S3, etc.\n└──────────────┘",{"id":1701,"title":1702,"titles":1703,"content":105,"level":137},"/v0.0.5/learn/architecture#data-flow","Data Flow",[1069],{"id":1705,"title":1706,"titles":1707,"content":1708,"level":144},"/v0.0.5/learn/architecture#registration","Registration",[1069,1702],"User Code                    scio                     grub\n    │                          │                        │\n    │  NewDatabase[User]()     │                        │\n    │ ─────────────────────────┼───────────────────────▶│\n    │                          │                        │\n    │  .Atomic()               │                        │\n    │ ─────────────────────────┼───────────────────────▶│\n    │                          │   AtomicDatabase       │\n    │                          │◀───────────────────────│\n    │                          │                        │\n    │  RegisterDatabase()      │                        │\n    │ ────────────────────────▶│                        │\n    │                          │  Store by URI          │\n    │                          │  Track spec            │",{"id":1710,"title":1685,"titles":1711,"content":1712,"level":144},"/v0.0.5/learn/architecture#operations",[1069,1702],"Caller                       scio                   Provider\n   │                           │                        │\n   │  Get(\"db://users/123\")    │                        │\n   │ ─────────────────────────▶│                        │\n   │                           │  Parse URI             │\n   │                           │  Lookup provider       │\n   │                           │                        │\n   │                           │  Get(ctx, \"123\")       │\n   │                           │───────────────────────▶│\n   │                           │                        │\n   │                           │       *atom.Atom       │\n   │       *atom.Atom          │◀───────────────────────│\n   │◀──────────────────────────│                        │",{"id":1714,"title":1715,"titles":1716,"content":1717,"level":137},"/v0.0.5/learn/architecture#thread-safety","Thread Safety",[1069],"scio uses sync.RWMutex for thread-safe access: Registration operations acquire write lockRead operations (Get, Exists, catalog queries) acquire read lockMultiple readers can operate concurrently",{"id":1719,"title":1720,"titles":1721,"content":1722,"level":137},"/v0.0.5/learn/architecture#error-handling","Error Handling",[1069],"scio uses semantic errors: // scio-specific errors\nscio.ErrInvalidURI       // URI parsing failed\nscio.ErrUnknownVariant   // Unknown scheme\nscio.ErrResourceNotFound // Resource not registered\nscio.ErrResourceExists   // Duplicate registration\nscio.ErrVariantMismatch  // Wrong operation for variant\nscio.ErrKeyRequired      // Missing key in URI\nscio.ErrKeyNotExpected   // Key provided but not used (Query/Select)\n\n// Passed through from grub\nscio.ErrNotFound         // Record doesn't exist\nscio.ErrDuplicate        // Key already exists",{"id":1724,"title":1725,"titles":1726,"content":105,"level":137},"/v0.0.5/learn/architecture#integration-patterns","Integration Patterns",[1069],{"id":1728,"title":1729,"titles":1730,"content":1731,"level":144},"/v0.0.5/learn/architecture#service-layer","Service Layer",[1069,1725],"type UserService struct {\n    catalog *scio.Scio\n}\n\nfunc (s *UserService) GetUser(ctx context.Context, id string) (*atom.Atom, error) {\n    return s.catalog.Get(ctx, \"db://users/\"+id)\n}",{"id":1733,"title":1734,"titles":1735,"content":1736,"level":144},"/v0.0.5/learn/architecture#middleware","Middleware",[1069,1725],"func DataContextMiddleware(s *scio.Scio) func(http.Handler) http.Handler {\n    return func(next http.Handler) http.Handler {\n        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n            ctx := context.WithValue(r.Context(), \"scio\", s)\n            next.ServeHTTP(w, r.WithContext(ctx))\n        })\n    }\n} 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 .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 .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 .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}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 .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}",{"id":1738,"title":1081,"titles":1739,"content":1740,"level":113},"/v0.0.5/reference/api",[],"Complete API documentation for scio",{"id":1742,"title":1081,"titles":1743,"content":105,"level":113},"/v0.0.5/reference/api#api-reference",[],{"id":1745,"title":1746,"titles":1747,"content":105,"level":137},"/v0.0.5/reference/api#types","Types",[1081],{"id":1749,"title":912,"titles":1750,"content":1751,"level":144},"/v0.0.5/reference/api#variant",[1081,1746],"type Variant string\n\nconst (\n    VariantDatabase Variant = \"db\"\n    VariantStore    Variant = \"kv\"\n    VariantBucket   Variant = \"bcs\"\n    VariantIndex    Variant = \"idx\"\n)",{"id":1753,"title":903,"titles":1754,"content":1755,"level":144},"/v0.0.5/reference/api#uri",[1081,1746],"type URI struct {\n    Variant  Variant\n    Resource string  // table, store, or bucket name\n    Key      string  // record key or blob path\n}\n\nfunc ParseURI(raw string) (*URI, error)\nfunc (u *URI) String() string\nfunc (u *URI) ResourceURI() string",{"id":1757,"title":1758,"titles":1759,"content":1760,"level":144},"/v0.0.5/reference/api#resource","Resource",[1081,1746],"type Resource struct {\n    URI      string\n    Variant  Variant\n    Name     string\n    Spec     atom.Spec\n    Metadata Metadata\n}",{"id":1762,"title":1660,"titles":1763,"content":1764,"level":144},"/v0.0.5/reference/api#metadata",[1081,1746],"type Metadata struct {\n    Description string\n    Version     string\n    Tags        map[string]string\n}",{"id":1766,"title":1767,"titles":1768,"content":105,"level":137},"/v0.0.5/reference/api#scio","Scio",[1081],{"id":1770,"title":1771,"titles":1772,"content":1773,"level":144},"/v0.0.5/reference/api#constructor","Constructor",[1081,1767],"func New() *Scio",{"id":1775,"title":1706,"titles":1776,"content":1777,"level":144},"/v0.0.5/reference/api#registration",[1081,1767],"func (s *Scio) RegisterDatabase(uri string, db grub.AtomicDatabase, opts ...RegistrationOption) error\nfunc (s *Scio) RegisterStore(uri string, store grub.AtomicStore, opts ...RegistrationOption) error\nfunc (s *Scio) RegisterBucket(uri string, bucket grub.AtomicBucket, opts ...RegistrationOption) error\nfunc (s *Scio) RegisterIndex(uri string, index grub.AtomicIndex, opts ...RegistrationOption) error",{"id":1779,"title":1780,"titles":1781,"content":1782,"level":144},"/v0.0.5/reference/api#registration-options","Registration Options",[1081,1767],"func WithDescription(desc string) RegistrationOption\nfunc WithVersion(ver string) RegistrationOption\nfunc WithTag(key, value string) RegistrationOption",{"id":1784,"title":1685,"titles":1785,"content":1786,"level":144},"/v0.0.5/reference/api#operations",[1081,1767],"// Common operations\nfunc (s *Scio) Get(ctx context.Context, uri string) (*atom.Atom, error)\nfunc (s *Scio) Set(ctx context.Context, uri string, data *atom.Atom) error\nfunc (s *Scio) Delete(ctx context.Context, uri string) error\nfunc (s *Scio) Exists(ctx context.Context, uri string) (bool, error)\n\n// Database operations\nfunc (s *Scio) Query(ctx context.Context, uri string, stmt edamame.QueryStatement, params map[string]any) ([]*atom.Atom, error)\nfunc (s *Scio) Select(ctx context.Context, uri string, stmt edamame.SelectStatement, params map[string]any) (*atom.Atom, error)\n\n// Store operations\nfunc (s *Scio) SetWithTTL(ctx context.Context, uri string, data *atom.Atom, ttl time.Duration) error\n\n// Bucket operations\nfunc (s *Scio) Put(ctx context.Context, uri string, obj *grub.AtomicObject) error\n\n// Index operations\nfunc (s *Scio) GetVector(ctx context.Context, uri string) (*grub.AtomicVector, error)\nfunc (s *Scio) UpsertVector(ctx context.Context, uri string, vector []float32, metadata *atom.Atom) error\nfunc (s *Scio) DeleteVector(ctx context.Context, uri string) error\nfunc (s *Scio) VectorExists(ctx context.Context, uri string) (bool, error)\nfunc (s *Scio) SearchVectors(ctx context.Context, uri string, vector []float32, k int, filter *atom.Atom) ([]grub.AtomicVector, error)\nfunc (s *Scio) QueryVectors(ctx context.Context, uri string, vector []float32, k int, filter *vecna.Filter) ([]grub.AtomicVector, error)\nfunc (s *Scio) FilterVectors(ctx context.Context, uri string, filter *vecna.Filter, limit int) ([]grub.AtomicVector, error)",{"id":1788,"title":1789,"titles":1790,"content":1791,"level":144},"/v0.0.5/reference/api#catalog","Catalog",[1081,1767],"// Topology queries\nfunc (s *Scio) Sources() []Resource\nfunc (s *Scio) Databases() []Resource\nfunc (s *Scio) Stores() []Resource\nfunc (s *Scio) Buckets() []Resource\nfunc (s *Scio) Indexes() []Resource\n\n// Spec queries\nfunc (s *Scio) Spec(uri string) (atom.Spec, error)\nfunc (s *Scio) FindBySpec(spec atom.Spec) []Resource\nfunc (s *Scio) FindByField(field string) []Resource\nfunc (s *Scio) Related(uri string) []Resource\n\n// Resource lookup\nfunc (s *Scio) Resource(uri string) *Resource",{"id":1793,"title":1794,"titles":1795,"content":1796,"level":137},"/v0.0.5/reference/api#errors","Errors",[1081],"// scio errors\nvar ErrInvalidURI       = errors.New(\"invalid URI\")\nvar ErrUnknownVariant   = errors.New(\"unknown variant\")\nvar ErrResourceNotFound = errors.New(\"resource not found\")\nvar ErrResourceExists   = errors.New(\"resource already exists\")\nvar ErrVariantMismatch  = errors.New(\"variant mismatch\")\nvar ErrKeyRequired      = errors.New(\"key required\")\nvar ErrKeyNotExpected   = errors.New(\"key not expected\")\nvar ErrInvalidUUID      = errors.New(\"invalid UUID\")\n\n// Re-exported from grub\nvar ErrNotFound        = grub.ErrNotFound\nvar ErrDuplicate       = grub.ErrDuplicate\nvar ErrConflict        = grub.ErrConflict\nvar ErrConstraint      = grub.ErrConstraint\nvar ErrInvalidKey      = grub.ErrInvalidKey\nvar ErrReadOnly        = grub.ErrReadOnly\nvar ErrTTLNotSupported = grub.ErrTTLNotSupported 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 .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 .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 .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 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)}",[1798],{"title":1799,"path":1800,"stem":1801,"children":1802,"page":1815},"V005","/v0.0.5","v0.0.5",[1803,1805,1816],{"title":1549,"path":1548,"stem":1804,"description":1551},"v0.0.5/1.overview",{"title":1050,"path":1806,"stem":1807,"children":1808,"page":1815},"/v0.0.5/learn","v0.0.5/2.learn",[1809,1811,1813],{"title":448,"path":1590,"stem":1810,"description":1592},"v0.0.5/2.learn/1.quickstart",{"title":1063,"path":1637,"stem":1812,"description":1639},"v0.0.5/2.learn/2.concepts",{"title":1069,"path":1689,"stem":1814,"description":1691},"v0.0.5/2.learn/3.architecture",false,{"title":1073,"path":1817,"stem":1818,"children":1819,"page":1815},"/v0.0.5/reference","v0.0.5/5.reference",[1820],{"title":1081,"path":1738,"stem":1821,"description":1740},"v0.0.5/5.reference/1.api",[1823],{"title":1799,"path":1800,"stem":1801,"children":1824,"page":1815},[1825,1826,1831],{"title":1549,"path":1548,"stem":1804},{"title":1050,"path":1806,"stem":1807,"children":1827,"page":1815},[1828,1829,1830],{"title":448,"path":1590,"stem":1810},{"title":1063,"path":1637,"stem":1812},{"title":1069,"path":1689,"stem":1814},{"title":1073,"path":1817,"stem":1818,"children":1832,"page":1815},[1833],{"title":1081,"path":1738,"stem":1821},[1835],{"title":1799,"path":1800,"stem":1801,"children":1836,"page":1815},[1837,1838,1843],{"title":1549,"path":1548,"stem":1804,"description":1551},{"title":1050,"path":1806,"stem":1807,"children":1839,"page":1815},[1840,1841,1842],{"title":448,"path":1590,"stem":1810,"description":1592},{"title":1063,"path":1637,"stem":1812,"description":1639},{"title":1069,"path":1689,"stem":1814,"description":1691},{"title":1073,"path":1817,"stem":1818,"children":1844,"page":1815},[1845],{"title":1081,"path":1738,"stem":1821,"description":1740},1776192966478]