[{"data":1,"prerenderedAt":4057},["ShallowReactive",2],{"search-sections-scio":3,"nav-scio":265,"content-tree-scio":292,"footer-resources":304,"content-/v0.0.5/reference/api":1833,"surround-/v0.0.5/reference/api":4055},[4,10,15,21,26,32,37,42,47,52,57,61,66,70,75,80,85,90,95,100,104,107,112,117,122,127,132,137,142,147,152,157,160,165,169,174,178,183,188,192,197,202,207,210,214,219,224,229,233,237,242,246,251,255,260],{"id":5,"title":6,"titles":7,"content":8,"level":9},"/v0.0.5/overview","Overview",[],"URI-based data catalog with atomic operations",1,{"id":11,"title":12,"titles":13,"content":14,"level":9},"/v0.0.5/overview#scio","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":16,"title":17,"titles":18,"content":19,"level":20},"/v0.0.5/overview#what-scio-does","What scio Does",[12],"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",2,{"id":22,"title":23,"titles":24,"content":25,"level":20},"/v0.0.5/overview#core-concepts","Core Concepts",[12],"",{"id":27,"title":28,"titles":29,"content":30,"level":31},"/v0.0.5/overview#uri-addressing","URI Addressing",[12,23],"Every data access point is addressed by a URI: VariantPatternExampledb://table/keydb://users/123kv://store/keykv://sessions/abcbcs://bucket/pathbcs://docs/reports/q4.pdf",3,{"id":33,"title":34,"titles":35,"content":36,"level":31},"/v0.0.5/overview#atomic-operations","Atomic Operations",[12,23],"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":38,"title":39,"titles":40,"content":41,"level":31},"/v0.0.5/overview#spec-tracking","Spec Tracking",[12,23],"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":43,"title":44,"titles":45,"content":46,"level":20},"/v0.0.5/overview#use-cases","Use Cases",[12],"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":48,"title":49,"titles":50,"content":51,"level":20},"/v0.0.5/overview#dependencies","Dependencies",[12],"scio builds on the zoobzio ecosystem: atom — Type-segregated struct decompositiongrub — Provider-agnostic storageedamame — SQL query execution",{"id":53,"title":54,"titles":55,"content":56,"level":9},"/v0.0.5/learn/quickstart","Quick Start",[],"Get started with scio in 5 minutes",{"id":58,"title":54,"titles":59,"content":60,"level":9},"/v0.0.5/learn/quickstart#quick-start",[],"This guide gets you started with scio in 5 minutes.",{"id":62,"title":63,"titles":64,"content":65,"level":20},"/v0.0.5/learn/quickstart#installation","Installation",[54],"go get github.com/zoobz-io/scio",{"id":67,"title":68,"titles":69,"content":25,"level":20},"/v0.0.5/learn/quickstart#basic-usage","Basic Usage",[54],{"id":71,"title":72,"titles":73,"content":74,"level":31},"/v0.0.5/learn/quickstart#_1-create-a-scio-instance","1. Create a scio Instance",[54,68],"import \"github.com/zoobz-io/scio\"\n\ns := scio.New()",{"id":76,"title":77,"titles":78,"content":79,"level":31},"/v0.0.5/learn/quickstart#_2-register-resources","2. Register Resources",[54,68],"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":81,"title":82,"titles":83,"content":84,"level":31},"/v0.0.5/learn/quickstart#_3-perform-operations","3. Perform Operations",[54,68],"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":86,"title":87,"titles":88,"content":89,"level":31},"/v0.0.5/learn/quickstart#_4-query-databases","4. Query Databases",[54,68],"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":91,"title":92,"titles":93,"content":94,"level":31},"/v0.0.5/learn/quickstart#_5-introspect-the-topology","5. Introspect the Topology",[54,68],"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":96,"title":97,"titles":98,"content":99,"level":20},"/v0.0.5/learn/quickstart#next-steps","Next Steps",[54],"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":101,"title":23,"titles":102,"content":103,"level":9},"/v0.0.5/learn/concepts",[],"Understanding scio's core abstractions",{"id":105,"title":23,"titles":106,"content":25,"level":9},"/v0.0.5/learn/concepts#core-concepts",[],{"id":108,"title":109,"titles":110,"content":111,"level":20},"/v0.0.5/learn/concepts#uri-scheme","URI Scheme",[23],"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":113,"title":114,"titles":115,"content":116,"level":31},"/v0.0.5/learn/concepts#variant-semantics","Variant Semantics",[23,109],"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":118,"title":119,"titles":120,"content":121,"level":20},"/v0.0.5/learn/concepts#resources","Resources",[23],"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":123,"title":124,"titles":125,"content":126,"level":31},"/v0.0.5/learn/concepts#metadata","Metadata",[23,119],"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":128,"title":129,"titles":130,"content":131,"level":20},"/v0.0.5/learn/concepts#specs-and-type-identity","Specs and Type Identity",[23],"scio tracks type information via specs (from the atom library). When you register a resource, its spec is captured.",{"id":133,"title":134,"titles":135,"content":136,"level":31},"/v0.0.5/learn/concepts#fqdn-identity","FQDN Identity",[23,129],"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":138,"title":139,"titles":140,"content":141,"level":31},"/v0.0.5/learn/concepts#spec-relationships","Spec Relationships",[23,129],"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":143,"title":144,"titles":145,"content":146,"level":20},"/v0.0.5/learn/concepts#the-catalog","The Catalog",[23],"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":148,"title":149,"titles":150,"content":151,"level":20},"/v0.0.5/learn/concepts#operations","Operations",[23],"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":153,"title":154,"titles":155,"content":156,"level":9},"/v0.0.5/learn/architecture","Architecture",[],"How scio fits in your system",{"id":158,"title":154,"titles":159,"content":25,"level":9},"/v0.0.5/learn/architecture#architecture",[],{"id":161,"title":162,"titles":163,"content":164,"level":20},"/v0.0.5/learn/architecture#system-position","System Position",[154],"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":166,"title":167,"titles":168,"content":25,"level":20},"/v0.0.5/learn/architecture#data-flow","Data Flow",[154],{"id":170,"title":171,"titles":172,"content":173,"level":31},"/v0.0.5/learn/architecture#registration","Registration",[154,167],"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":175,"title":149,"titles":176,"content":177,"level":31},"/v0.0.5/learn/architecture#operations",[154,167],"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":179,"title":180,"titles":181,"content":182,"level":20},"/v0.0.5/learn/architecture#thread-safety","Thread Safety",[154],"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":184,"title":185,"titles":186,"content":187,"level":20},"/v0.0.5/learn/architecture#error-handling","Error Handling",[154],"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":189,"title":190,"titles":191,"content":25,"level":20},"/v0.0.5/learn/architecture#integration-patterns","Integration Patterns",[154],{"id":193,"title":194,"titles":195,"content":196,"level":31},"/v0.0.5/learn/architecture#service-layer","Service Layer",[154,190],"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":198,"title":199,"titles":200,"content":201,"level":31},"/v0.0.5/learn/architecture#middleware","Middleware",[154,190],"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":203,"title":204,"titles":205,"content":206,"level":9},"/v0.0.5/reference/api","API Reference",[],"Complete API documentation for scio",{"id":208,"title":204,"titles":209,"content":25,"level":9},"/v0.0.5/reference/api#api-reference",[],{"id":211,"title":212,"titles":213,"content":25,"level":20},"/v0.0.5/reference/api#types","Types",[204],{"id":215,"title":216,"titles":217,"content":218,"level":31},"/v0.0.5/reference/api#variant","Variant",[204,212],"type Variant string\n\nconst (\n    VariantDatabase Variant = \"db\"\n    VariantStore    Variant = \"kv\"\n    VariantBucket   Variant = \"bcs\"\n    VariantIndex    Variant = \"idx\"\n)",{"id":220,"title":221,"titles":222,"content":223,"level":31},"/v0.0.5/reference/api#uri","URI",[204,212],"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":225,"title":226,"titles":227,"content":228,"level":31},"/v0.0.5/reference/api#resource","Resource",[204,212],"type Resource struct {\n    URI      string\n    Variant  Variant\n    Name     string\n    Spec     atom.Spec\n    Metadata Metadata\n}",{"id":230,"title":124,"titles":231,"content":232,"level":31},"/v0.0.5/reference/api#metadata",[204,212],"type Metadata struct {\n    Description string\n    Version     string\n    Tags        map[string]string\n}",{"id":234,"title":235,"titles":236,"content":25,"level":20},"/v0.0.5/reference/api#scio","Scio",[204],{"id":238,"title":239,"titles":240,"content":241,"level":31},"/v0.0.5/reference/api#constructor","Constructor",[204,235],"func New() *Scio",{"id":243,"title":171,"titles":244,"content":245,"level":31},"/v0.0.5/reference/api#registration",[204,235],"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":247,"title":248,"titles":249,"content":250,"level":31},"/v0.0.5/reference/api#registration-options","Registration Options",[204,235],"func WithDescription(desc string) RegistrationOption\nfunc WithVersion(ver string) RegistrationOption\nfunc WithTag(key, value string) RegistrationOption",{"id":252,"title":149,"titles":253,"content":254,"level":31},"/v0.0.5/reference/api#operations",[204,235],"// 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":256,"title":257,"titles":258,"content":259,"level":31},"/v0.0.5/reference/api#catalog","Catalog",[204,235],"// 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":261,"title":262,"titles":263,"content":264,"level":20},"/v0.0.5/reference/api#errors","Errors",[204],"// 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)}",[266],{"title":267,"path":268,"stem":269,"children":270,"page":284},"V005","/v0.0.5","v0.0.5",[271,273,285],{"title":6,"path":5,"stem":272,"description":8},"v0.0.5/1.overview",{"title":274,"path":275,"stem":276,"children":277,"page":284},"Learn","/v0.0.5/learn","v0.0.5/2.learn",[278,280,282],{"title":54,"path":53,"stem":279,"description":56},"v0.0.5/2.learn/1.quickstart",{"title":23,"path":101,"stem":281,"description":103},"v0.0.5/2.learn/2.concepts",{"title":154,"path":153,"stem":283,"description":156},"v0.0.5/2.learn/3.architecture",false,{"title":286,"path":287,"stem":288,"children":289,"page":284},"Reference","/v0.0.5/reference","v0.0.5/5.reference",[290],{"title":204,"path":203,"stem":291,"description":206},"v0.0.5/5.reference/1.api",[293],{"title":267,"path":268,"stem":269,"children":294,"page":284},[295,296,301],{"title":6,"path":5,"stem":272},{"title":274,"path":275,"stem":276,"children":297,"page":284},[298,299,300],{"title":54,"path":53,"stem":279},{"title":23,"path":101,"stem":281},{"title":154,"path":153,"stem":283},{"title":286,"path":287,"stem":288,"children":302,"page":284},[303],{"title":204,"path":203,"stem":291},[305,1416,1561],{"id":306,"title":307,"body":308,"description":25,"extension":1409,"icon":1410,"meta":1411,"navigation":436,"path":1412,"seo":1413,"stem":1414,"__hash__":1415},"resources/readme.md","README",{"type":309,"value":310,"toc":1396},"minimark",[311,314,384,387,390,395,398,716,720,737,740,743,1218,1222,1295,1299,1334,1338,1342,1359,1362,1369,1373,1381,1385,1392],[312,313,12],"h1",{"id":12},[315,316,317,328,336,344,352,360,368,376],"p",{},[318,319,323],"a",{"href":320,"rel":321},"https://github.com/zoobz-io/scio/actions/workflows/ci.yml",[322],"nofollow",[324,325],"img",{"alt":326,"src":327},"CI","https://github.com/zoobz-io/scio/actions/workflows/ci.yml/badge.svg",[318,329,332],{"href":330,"rel":331},"https://codecov.io/gh/zoobz-io/scio",[322],[324,333],{"alt":334,"src":335},"codecov","https://codecov.io/gh/zoobz-io/scio/branch/main/graph/badge.svg",[318,337,340],{"href":338,"rel":339},"https://goreportcard.com/report/github.com/zoobz-io/scio",[322],[324,341],{"alt":342,"src":343},"Go Report Card","https://goreportcard.com/badge/github.com/zoobz-io/scio",[318,345,348],{"href":346,"rel":347},"https://github.com/zoobz-io/scio/actions/workflows/codeql.yml",[322],[324,349],{"alt":350,"src":351},"CodeQL","https://github.com/zoobz-io/scio/actions/workflows/codeql.yml/badge.svg",[318,353,356],{"href":354,"rel":355},"https://pkg.go.dev/github.com/zoobz-io/scio",[322],[324,357],{"alt":358,"src":359},"Go Reference","https://pkg.go.dev/badge/github.com/zoobz-io/scio.svg",[318,361,364],{"href":362,"rel":363},"https://opensource.org/licenses/MIT",[322],[324,365],{"alt":366,"src":367},"License: MIT","https://img.shields.io/badge/License-MIT-yellow.svg",[318,369,372],{"href":370,"rel":371},"https://go.dev/",[322],[324,373],{"alt":374,"src":375},"Go Version","https://img.shields.io/github/go-mod/go-version/zoobz-io/scio",[318,377,380],{"href":378,"rel":379},"https://github.com/zoobz-io/scio/releases",[322],[324,381],{"alt":382,"src":383},"Release","https://img.shields.io/github/v/release/zoobz-io/scio",[315,385,386],{},"URI-based data catalog with atomic operations for Go.",[315,388,389],{},"scio is the system's authoritative map of data sources — it knows where data lives and provides type-agnostic access via atoms.",[391,392,394],"h2",{"id":393},"the-map","The Map",[315,396,397],{},"scio registers storage resources and routes operations through URIs:",[399,400,404],"pre",{"className":401,"code":402,"language":403,"meta":25,"style":25},"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",[405,406,407,432,438,444,475,501,527,532,538,572,598,603,609,649,654,660,676,697],"code",{"__ignoreMap":25},[408,409,411,415,418,421,425,429],"span",{"class":410,"line":9},"line",[408,412,414],{"class":413},"sh8_p","s",[408,416,417],{"class":413}," :=",[408,419,420],{"class":413}," scio",[408,422,424],{"class":423},"sq5bi",".",[408,426,428],{"class":427},"s5klm","New",[408,430,431],{"class":423},"()\n",[408,433,434],{"class":410,"line":20},[408,435,437],{"emptyLinePlaceholder":436},true,"\n",[408,439,440],{"class":410,"line":31},[408,441,443],{"class":442},"sLkEo","// Register resources (user code provides typed grub wrappers)\n",[408,445,447,449,451,454,457,461,464,467,469,472],{"class":410,"line":446},4,[408,448,414],{"class":413},[408,450,424],{"class":423},[408,452,453],{"class":427},"RegisterDatabase",[408,455,456],{"class":423},"(",[408,458,460],{"class":459},"sxAnc","\"db://users\"",[408,462,463],{"class":423},",",[408,465,466],{"class":413}," usersDB",[408,468,424],{"class":423},[408,470,471],{"class":427},"Atomic",[408,473,474],{"class":423},"())\n",[408,476,478,480,482,485,487,490,492,495,497,499],{"class":410,"line":477},5,[408,479,414],{"class":413},[408,481,424],{"class":423},[408,483,484],{"class":427},"RegisterStore",[408,486,456],{"class":423},[408,488,489],{"class":459},"\"kv://sessions\"",[408,491,463],{"class":423},[408,493,494],{"class":413}," sessionsStore",[408,496,424],{"class":423},[408,498,471],{"class":427},[408,500,474],{"class":423},[408,502,504,506,508,511,513,516,518,521,523,525],{"class":410,"line":503},6,[408,505,414],{"class":413},[408,507,424],{"class":423},[408,509,510],{"class":427},"RegisterBucket",[408,512,456],{"class":423},[408,514,515],{"class":459},"\"bcs://documents\"",[408,517,463],{"class":423},[408,519,520],{"class":413}," docsBucket",[408,522,424],{"class":423},[408,524,471],{"class":427},[408,526,474],{"class":423},[408,528,530],{"class":410,"line":529},7,[408,531,437],{"emptyLinePlaceholder":436},[408,533,535],{"class":410,"line":534},8,[408,536,537],{"class":442},"// Operations via URI — scio routes to the right provider\n",[408,539,541,544,546,549,551,554,556,559,561,564,566,569],{"class":410,"line":540},9,[408,542,543],{"class":413},"atom",[408,545,463],{"class":423},[408,547,548],{"class":413}," _",[408,550,417],{"class":413},[408,552,553],{"class":413}," s",[408,555,424],{"class":423},[408,557,558],{"class":427},"Get",[408,560,456],{"class":423},[408,562,563],{"class":413},"ctx",[408,565,463],{"class":423},[408,567,568],{"class":459}," \"db://users/123\"",[408,570,571],{"class":423},")\n",[408,573,575,577,579,582,584,586,588,591,593,596],{"class":410,"line":574},10,[408,576,414],{"class":413},[408,578,424],{"class":423},[408,580,581],{"class":427},"Set",[408,583,456],{"class":423},[408,585,563],{"class":413},[408,587,463],{"class":423},[408,589,590],{"class":459}," \"kv://sessions/abc\"",[408,592,463],{"class":423},[408,594,595],{"class":413}," sessionAtom",[408,597,571],{"class":423},[408,599,601],{"class":410,"line":600},11,[408,602,437],{"emptyLinePlaceholder":436},[408,604,606],{"class":410,"line":605},12,[408,607,608],{"class":442},"// Query databases\n",[408,610,612,615,617,619,621,623,625,628,630,632,634,637,639,642,644,647],{"class":410,"line":611},13,[408,613,614],{"class":413},"results",[408,616,463],{"class":423},[408,618,548],{"class":413},[408,620,417],{"class":413},[408,622,553],{"class":413},[408,624,424],{"class":423},[408,626,627],{"class":427},"Query",[408,629,456],{"class":423},[408,631,563],{"class":413},[408,633,463],{"class":423},[408,635,636],{"class":459}," \"db://users\"",[408,638,463],{"class":423},[408,640,641],{"class":413}," stmt",[408,643,463],{"class":423},[408,645,646],{"class":413}," params",[408,648,571],{"class":423},[408,650,652],{"class":410,"line":651},14,[408,653,437],{"emptyLinePlaceholder":436},[408,655,657],{"class":410,"line":656},15,[408,658,659],{"class":442},"// Introspect the topology\n",[408,661,663,665,667,670,673],{"class":410,"line":662},16,[408,664,414],{"class":413},[408,666,424],{"class":423},[408,668,669],{"class":427},"Sources",[408,671,672],{"class":423},"()",[408,674,675],{"class":442},"                    // all registered resources\n",[408,677,679,681,683,686,688,691,694],{"class":410,"line":678},17,[408,680,414],{"class":413},[408,682,424],{"class":423},[408,684,685],{"class":427},"FindBySpec",[408,687,456],{"class":423},[408,689,690],{"class":413},"spec",[408,692,693],{"class":423},")",[408,695,696],{"class":442},"             // resources sharing a type\n",[408,698,700,702,704,707,709,711,713],{"class":410,"line":699},18,[408,701,414],{"class":413},[408,703,424],{"class":423},[408,705,706],{"class":427},"Related",[408,708,456],{"class":423},[408,710,460],{"class":459},[408,712,693],{"class":423},[408,714,715],{"class":442},"        // other resources with same spec\n",[391,717,719],{"id":718},"install","Install",[399,721,725],{"className":722,"code":723,"language":724,"meta":25,"style":25},"language-bash shiki shiki-themes","go get github.com/zoobz-io/scio\n","bash",[405,726,727],{"__ignoreMap":25},[408,728,729,731,734],{"class":410,"line":9},[408,730,403],{"class":427},[408,732,733],{"class":459}," get",[408,735,736],{"class":459}," github.com/zoobz-io/scio\n",[315,738,739],{},"Requires Go 1.24 or higher.",[391,741,54],{"id":742},"quick-start",[399,744,746],{"className":401,"code":745,"language":403,"meta":25,"style":25},"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",[405,747,748,758,762,771,776,781,785,790,795,799,803,816,821,836,840,845,873,891,912,918,936,950,956,961,979,984,990,1018,1031,1042,1047,1052,1058,1087,1112,1117,1123,1155,1207,1212],{"__ignoreMap":25},[408,749,750,754],{"class":410,"line":9},[408,751,753],{"class":752},"sUt3r","package",[408,755,757],{"class":756},"sYBwO"," main\n",[408,759,760],{"class":410,"line":20},[408,761,437],{"emptyLinePlaceholder":436},[408,763,764,767],{"class":410,"line":31},[408,765,766],{"class":752},"import",[408,768,770],{"class":769},"soy-K"," (\n",[408,772,773],{"class":410,"line":446},[408,774,775],{"class":459},"    \"context\"\n",[408,777,778],{"class":410,"line":477},[408,779,780],{"class":459},"    \"fmt\"\n",[408,782,783],{"class":410,"line":503},[408,784,437],{"emptyLinePlaceholder":436},[408,786,787],{"class":410,"line":529},[408,788,789],{"class":459},"    \"github.com/zoobz-io/grub\"\n",[408,791,792],{"class":410,"line":534},[408,793,794],{"class":459},"    \"github.com/zoobz-io/scio\"\n",[408,796,797],{"class":410,"line":540},[408,798,571],{"class":769},[408,800,801],{"class":410,"line":574},[408,802,437],{"emptyLinePlaceholder":436},[408,804,805,808,811,813],{"class":410,"line":600},[408,806,807],{"class":752},"func",[408,809,810],{"class":427}," main",[408,812,672],{"class":423},[408,814,815],{"class":423}," {\n",[408,817,818],{"class":410,"line":605},[408,819,820],{"class":442},"    // Create scio instance\n",[408,822,823,826,828,830,832,834],{"class":410,"line":611},[408,824,825],{"class":413},"    s",[408,827,417],{"class":413},[408,829,420],{"class":413},[408,831,424],{"class":423},[408,833,428],{"class":427},[408,835,431],{"class":423},[408,837,838],{"class":410,"line":651},[408,839,437],{"emptyLinePlaceholder":436},[408,841,842],{"class":410,"line":656},[408,843,844],{"class":442},"    // Register a database (assumes usersDB is a grub.Database[User])\n",[408,846,847,850,852,854,856,858,860,862,864,866,868,870],{"class":410,"line":662},[408,848,849],{"class":413},"    err",[408,851,417],{"class":413},[408,853,553],{"class":413},[408,855,424],{"class":423},[408,857,453],{"class":427},[408,859,456],{"class":423},[408,861,460],{"class":459},[408,863,463],{"class":423},[408,865,466],{"class":413},[408,867,424],{"class":423},[408,869,471],{"class":427},[408,871,872],{"class":423},"(),\n",[408,874,875,878,880,883,885,888],{"class":410,"line":678},[408,876,877],{"class":413},"        scio",[408,879,424],{"class":423},[408,881,882],{"class":427},"WithDescription",[408,884,456],{"class":423},[408,886,887],{"class":459},"\"User accounts\"",[408,889,890],{"class":423},"),\n",[408,892,893,895,897,900,902,905,907,910],{"class":410,"line":699},[408,894,877],{"class":413},[408,896,424],{"class":423},[408,898,899],{"class":427},"WithTag",[408,901,456],{"class":423},[408,903,904],{"class":459},"\"owner\"",[408,906,463],{"class":423},[408,908,909],{"class":459}," \"auth-team\"",[408,911,890],{"class":423},[408,913,915],{"class":410,"line":914},19,[408,916,917],{"class":423},"    )\n",[408,919,921,925,928,931,934],{"class":410,"line":920},20,[408,922,924],{"class":923},"sW3Qg","    if",[408,926,927],{"class":413}," err",[408,929,930],{"class":923}," !=",[408,932,933],{"class":752}," nil",[408,935,815],{"class":423},[408,937,939,943,945,948],{"class":410,"line":938},21,[408,940,942],{"class":941},"skxcq","        panic",[408,944,456],{"class":423},[408,946,947],{"class":413},"err",[408,949,571],{"class":423},[408,951,953],{"class":410,"line":952},22,[408,954,955],{"class":423},"    }\n",[408,957,959],{"class":410,"line":958},23,[408,960,437],{"emptyLinePlaceholder":436},[408,962,964,967,969,972,974,977],{"class":410,"line":963},24,[408,965,966],{"class":413},"    ctx",[408,968,417],{"class":413},[408,970,971],{"class":413}," context",[408,973,424],{"class":423},[408,975,976],{"class":427},"Background",[408,978,431],{"class":423},[408,980,982],{"class":410,"line":981},25,[408,983,437],{"emptyLinePlaceholder":436},[408,985,987],{"class":410,"line":986},26,[408,988,989],{"class":442},"    // Get a record\n",[408,991,993,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016],{"class":410,"line":992},27,[408,994,995],{"class":413},"    atom",[408,997,463],{"class":423},[408,999,927],{"class":413},[408,1001,417],{"class":413},[408,1003,553],{"class":413},[408,1005,424],{"class":423},[408,1007,558],{"class":427},[408,1009,456],{"class":423},[408,1011,563],{"class":413},[408,1013,463],{"class":423},[408,1015,568],{"class":459},[408,1017,571],{"class":423},[408,1019,1021,1023,1025,1027,1029],{"class":410,"line":1020},28,[408,1022,924],{"class":923},[408,1024,927],{"class":413},[408,1026,930],{"class":923},[408,1028,933],{"class":752},[408,1030,815],{"class":423},[408,1032,1034,1036,1038,1040],{"class":410,"line":1033},29,[408,1035,942],{"class":941},[408,1037,456],{"class":423},[408,1039,947],{"class":413},[408,1041,571],{"class":423},[408,1043,1045],{"class":410,"line":1044},30,[408,1046,955],{"class":423},[408,1048,1050],{"class":410,"line":1049},31,[408,1051,437],{"emptyLinePlaceholder":436},[408,1053,1055],{"class":410,"line":1054},32,[408,1056,1057],{"class":442},"    // Access fields via typed maps\n",[408,1059,1061,1064,1066,1069,1071,1073,1075,1078,1081,1084],{"class":410,"line":1060},33,[408,1062,1063],{"class":413},"    fmt",[408,1065,424],{"class":423},[408,1067,1068],{"class":427},"Println",[408,1070,456],{"class":423},[408,1072,543],{"class":413},[408,1074,424],{"class":423},[408,1076,1077],{"class":413},"Strings",[408,1079,1080],{"class":423},"[",[408,1082,1083],{"class":459},"\"email\"",[408,1085,1086],{"class":423},"])\n",[408,1088,1090,1092,1094,1096,1098,1100,1102,1105,1107,1110],{"class":410,"line":1089},34,[408,1091,1063],{"class":413},[408,1093,424],{"class":423},[408,1095,1068],{"class":427},[408,1097,456],{"class":423},[408,1099,543],{"class":413},[408,1101,424],{"class":423},[408,1103,1104],{"class":413},"Ints",[408,1106,1080],{"class":423},[408,1108,1109],{"class":459},"\"age\"",[408,1111,1086],{"class":423},[408,1113,1115],{"class":410,"line":1114},35,[408,1116,437],{"emptyLinePlaceholder":436},[408,1118,1120],{"class":410,"line":1119},36,[408,1121,1122],{"class":442},"    // Find related resources\n",[408,1124,1126,1129,1131,1133,1136,1138,1141,1143,1145,1147,1149,1151,1153],{"class":410,"line":1125},37,[408,1127,1128],{"class":923},"    for",[408,1130,548],{"class":413},[408,1132,463],{"class":423},[408,1134,1135],{"class":413}," r",[408,1137,417],{"class":413},[408,1139,1140],{"class":923}," range",[408,1142,553],{"class":413},[408,1144,424],{"class":423},[408,1146,706],{"class":427},[408,1148,456],{"class":423},[408,1150,460],{"class":459},[408,1152,693],{"class":423},[408,1154,815],{"class":423},[408,1156,1158,1161,1163,1166,1168,1171,1175,1178,1180,1182,1186,1189,1191,1193,1195,1197,1199,1201,1203,1205],{"class":410,"line":1157},38,[408,1159,1160],{"class":413},"        fmt",[408,1162,424],{"class":423},[408,1164,1165],{"class":427},"Printf",[408,1167,456],{"class":423},[408,1169,1170],{"class":459},"\"Related: ",[408,1172,1174],{"class":1173},"scyPU","%s",[408,1176,1177],{"class":459}," (",[408,1179,1174],{"class":1173},[408,1181,693],{"class":459},[408,1183,1185],{"class":1184},"suWN2","\\n",[408,1187,1188],{"class":459},"\"",[408,1190,463],{"class":423},[408,1192,1135],{"class":413},[408,1194,424],{"class":423},[408,1196,221],{"class":413},[408,1198,463],{"class":423},[408,1200,1135],{"class":413},[408,1202,424],{"class":423},[408,1204,216],{"class":413},[408,1206,571],{"class":423},[408,1208,1210],{"class":410,"line":1209},39,[408,1211,955],{"class":423},[408,1213,1215],{"class":410,"line":1214},40,[408,1216,1217],{"class":423},"}\n",[391,1219,1221],{"id":1220},"uri-semantics","URI Semantics",[1223,1224,1225,1240],"table",{},[1226,1227,1228],"thead",{},[1229,1230,1231,1234,1237],"tr",{},[1232,1233,216],"th",{},[1232,1235,1236],{},"Pattern",[1232,1238,1239],{},"Example",[1241,1242,1243,1261,1278],"tbody",{},[1229,1244,1245,1251,1256],{},[1246,1247,1248],"td",{},[405,1249,1250],{},"db://",[1246,1252,1253],{},[405,1254,1255],{},"table/key",[1246,1257,1258],{},[405,1259,1260],{},"db://users/123",[1229,1262,1263,1268,1273],{},[1246,1264,1265],{},[405,1266,1267],{},"kv://",[1246,1269,1270],{},[405,1271,1272],{},"store/key",[1246,1274,1275],{},[405,1276,1277],{},"kv://sessions/abc",[1229,1279,1280,1285,1290],{},[1246,1281,1282],{},[405,1283,1284],{},"bcs://",[1246,1286,1287],{},[405,1288,1289],{},"bucket/path",[1246,1291,1292],{},[405,1293,1294],{},"bcs://docs/reports/q4.pdf",[391,1296,1298],{"id":1297},"why-scio","Why scio?",[1300,1301,1302,1310,1316,1322,1328],"ul",{},[1303,1304,1305,1309],"li",{},[1306,1307,1308],"strong",{},"URI-based routing"," — logical addressing decoupled from physical storage",[1303,1311,1312,1315],{},[1306,1313,1314],{},"Type-agnostic"," — operates on atoms, never needs to know your types",[1303,1317,1318,1321],{},[1306,1319,1320],{},"Topology awareness"," — knows what resources exist and their relationships",[1303,1323,1324,1327],{},[1306,1325,1326],{},"Spec tracking"," — auto-detects when multiple resources share the same type",[1303,1329,1330,1333],{},[1306,1331,1332],{},"Metadata support"," — annotate resources for system use (LLM context, ownership, versioning)",[391,1335,1337],{"id":1336},"documentation","Documentation",[1339,1340,274],"h3",{"id":1341},"learn",[1300,1343,1344,1349,1354],{},[1303,1345,1346],{},[318,1347,54],{"href":1348},"docs/learn/quickstart",[1303,1350,1351],{},[318,1352,23],{"href":1353},"docs/learn/concepts",[1303,1355,1356],{},[318,1357,154],{"href":1358},"docs/learn/architecture",[1339,1360,286],{"id":1361},"reference",[1300,1363,1364],{},[1303,1365,1366],{},[318,1367,204],{"href":1368},"docs/reference/api",[391,1370,1372],{"id":1371},"contributing","Contributing",[315,1374,1375,1376,1380],{},"See ",[318,1377,1379],{"href":1378},"CONTRIBUTING","CONTRIBUTING.md"," for development setup and guidelines.",[391,1382,1384],{"id":1383},"license","License",[315,1386,1387,1388,1391],{},"MIT License - see ",[318,1389,1390],{"href":1390},"LICENSE"," for details.",[1393,1394,1395],"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":25,"searchDepth":20,"depth":20,"links":1397},[1398,1399,1400,1401,1402,1403,1407,1408],{"id":393,"depth":20,"text":394},{"id":718,"depth":20,"text":719},{"id":742,"depth":20,"text":54},{"id":1220,"depth":20,"text":1221},{"id":1297,"depth":20,"text":1298},{"id":1336,"depth":20,"text":1337,"children":1404},[1405,1406],{"id":1341,"depth":31,"text":274},{"id":1361,"depth":31,"text":286},{"id":1371,"depth":20,"text":1372},{"id":1383,"depth":20,"text":1384},"md","book-open",{},"/readme",{"title":307,"description":25},"readme","kRSrXlj1emliC0ptWcFgX8aARGPhAUxZrHq7zVS40kc",{"id":1417,"title":1418,"body":1419,"description":25,"extension":1409,"icon":1555,"meta":1556,"navigation":436,"path":1557,"seo":1558,"stem":1559,"__hash__":1560},"resources/security.md","Security",{"type":309,"value":1420,"toc":1548},[1421,1425,1429,1451,1455,1458,1487,1491,1494,1520,1524,1527,1541,1545],[312,1422,1424],{"id":1423},"security-policy","Security Policy",[391,1426,1428],{"id":1427},"supported-versions","Supported Versions",[1223,1430,1431,1441],{},[1226,1432,1433],{},[1229,1434,1435,1438],{},[1232,1436,1437],{},"Version",[1232,1439,1440],{},"Supported",[1241,1442,1443],{},[1229,1444,1445,1448],{},[1246,1446,1447],{},"Latest",[1246,1449,1450],{},"✅",[391,1452,1454],{"id":1453},"reporting-a-vulnerability","Reporting a Vulnerability",[315,1456,1457],{},"We take security vulnerabilities seriously. If you discover a security issue, please follow these steps:",[1459,1460,1461,1467,1470],"ol",{},[1303,1462,1463,1466],{},[1306,1464,1465],{},"DO NOT"," create a public GitHub issue",[1303,1468,1469],{},"Email security details to the maintainers",[1303,1471,1472,1473],{},"Include:\n",[1300,1474,1475,1478,1481,1484],{},[1303,1476,1477],{},"Description of the vulnerability",[1303,1479,1480],{},"Steps to reproduce",[1303,1482,1483],{},"Potential impact",[1303,1485,1486],{},"Suggested fix (if available)",[391,1488,1490],{"id":1489},"security-best-practices","Security Best Practices",[315,1492,1493],{},"When using Scio:",[1459,1495,1496,1502,1508,1514],{},[1303,1497,1498,1501],{},[1306,1499,1500],{},"URI Validation",": Scio parses URIs to route operations. Ensure URIs are properly validated before passing to Scio to prevent injection attacks.",[1303,1503,1504,1507],{},[1306,1505,1506],{},"Spec Exposure",": Be aware that type metadata (field names, types) is accessible via the catalog. Review your struct definitions for information disclosure.",[1303,1509,1510,1513],{},[1306,1511,1512],{},"Provider Security",": Scio delegates storage operations to grub providers. Ensure your underlying storage (databases, caches, blob stores) are properly secured.",[1303,1515,1516,1519],{},[1306,1517,1518],{},"Access Control",": Scio does not implement authentication or authorization. Implement appropriate access controls in your application layer.",[391,1521,1523],{"id":1522},"security-features","Security Features",[315,1525,1526],{},"Scio is designed with security in mind:",[1300,1528,1529,1532,1535,1538],{},[1303,1530,1531],{},"No direct network operations (delegated to providers)",[1303,1533,1534],{},"No file system operations (delegated to providers)",[1303,1536,1537],{},"Type-safe operations through atoms",[1303,1539,1540],{},"URI scheme validation prevents variant injection",[391,1542,1544],{"id":1543},"acknowledgments","Acknowledgments",[315,1546,1547],{},"We appreciate responsible disclosure of security vulnerabilities.",{"title":25,"searchDepth":20,"depth":20,"links":1549},[1550,1551,1552,1553,1554],{"id":1427,"depth":20,"text":1428},{"id":1453,"depth":20,"text":1454},{"id":1489,"depth":20,"text":1490},{"id":1522,"depth":20,"text":1523},{"id":1543,"depth":20,"text":1544},"shield",{},"/security",{"title":1418,"description":25},"security","2bCaIpy1G_8DOL_WIU9ofOx1s6HHbLRCTQC2FQbP2PE",{"id":1562,"title":1372,"body":1563,"description":1571,"extension":1409,"icon":405,"meta":1829,"navigation":436,"path":1830,"seo":1831,"stem":1371,"__hash__":1832},"resources/contributing.md",{"type":309,"value":1564,"toc":1817},[1565,1569,1572,1576,1614,1618,1622,1633,1637,1693,1697,1717,1721,1738,1742,1756,1760,1763,1807,1811,1814],[312,1566,1568],{"id":1567},"contributing-to-scio","Contributing to Scio",[315,1570,1571],{},"Thank you for your interest in contributing to Scio! We welcome contributions from the community.",[391,1573,1575],{"id":1574},"getting-started","Getting Started",[1459,1577,1578,1581,1587,1593,1596,1602,1608,1611],{},[1303,1579,1580],{},"Fork the repository",[1303,1582,1583,1584],{},"Clone your fork: ",[405,1585,1586],{},"git clone https://github.com/your-username/scio.git",[1303,1588,1589,1590],{},"Create a new branch: ",[405,1591,1592],{},"git checkout -b feature/your-feature-name",[1303,1594,1595],{},"Make your changes",[1303,1597,1598,1599],{},"Run tests: ",[405,1600,1601],{},"make test",[1303,1603,1604,1605],{},"Run linters: ",[405,1606,1607],{},"make lint",[1303,1609,1610],{},"Commit your changes with a descriptive message",[1303,1612,1613],{},"Push to your fork and submit a pull request",[391,1615,1617],{"id":1616},"development-setup","Development Setup",[1339,1619,1621],{"id":1620},"prerequisites","Prerequisites",[1300,1623,1624,1627],{},[1303,1625,1626],{},"Go 1.24 or higher",[1303,1628,1629,1630,693],{},"golangci-lint (install with ",[405,1631,1632],{},"make install-tools",[1339,1634,1636],{"id":1635},"running-tests","Running Tests",[399,1638,1640],{"className":722,"code":1639,"language":724,"meta":25,"style":25},"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",[405,1641,1642,1653,1663,1673,1683],{"__ignoreMap":25},[408,1643,1644,1647,1650],{"class":410,"line":9},[408,1645,1646],{"class":427},"make",[408,1648,1649],{"class":459}," test",[408,1651,1652],{"class":442},"        # Run all tests\n",[408,1654,1655,1657,1660],{"class":410,"line":20},[408,1656,1646],{"class":427},[408,1658,1659],{"class":459}," test-bench",[408,1661,1662],{"class":442},"  # Run benchmarks\n",[408,1664,1665,1667,1670],{"class":410,"line":31},[408,1666,1646],{"class":427},[408,1668,1669],{"class":459}," coverage",[408,1671,1672],{"class":442},"    # Generate coverage report\n",[408,1674,1675,1677,1680],{"class":410,"line":446},[408,1676,1646],{"class":427},[408,1678,1679],{"class":459}," lint",[408,1681,1682],{"class":442},"        # Run linters\n",[408,1684,1685,1687,1690],{"class":410,"line":477},[408,1686,1646],{"class":427},[408,1688,1689],{"class":459}," check",[408,1691,1692],{"class":442},"       # Run tests and lint\n",[391,1694,1696],{"id":1695},"code-style","Code Style",[1300,1698,1699,1702,1708,1711,1714],{},[1303,1700,1701],{},"Follow standard Go conventions",[1303,1703,1704,1705],{},"Ensure all code passes ",[405,1706,1707],{},"golangci-lint",[1303,1709,1710],{},"Write tests for new functionality",[1303,1712,1713],{},"Keep test coverage above 70%",[1303,1715,1716],{},"Document exported functions and types",[391,1718,1720],{"id":1719},"pull-request-process","Pull Request Process",[1459,1722,1723,1726,1729,1732,1735],{},[1303,1724,1725],{},"Ensure all tests pass",[1303,1727,1728],{},"Update documentation if needed",[1303,1730,1731],{},"Add entries to CHANGELOG.md if applicable",[1303,1733,1734],{},"Ensure your PR description clearly describes the problem and solution",[1303,1736,1737],{},"Link any relevant issues",[391,1739,1741],{"id":1740},"testing-guidelines","Testing Guidelines",[1300,1743,1744,1747,1750,1753],{},[1303,1745,1746],{},"Each source file should have a corresponding test file",[1303,1748,1749],{},"Write both positive and negative test cases",[1303,1751,1752],{},"Use table-driven tests where appropriate",[1303,1754,1755],{},"Ensure tests are deterministic and don't depend on external services",[391,1757,1759],{"id":1758},"commit-message-format","Commit Message Format",[315,1761,1762],{},"Use conventional commits format:",[1300,1764,1765,1771,1777,1783,1789,1795,1801],{},[1303,1766,1767,1770],{},[405,1768,1769],{},"feat:"," New feature",[1303,1772,1773,1776],{},[405,1774,1775],{},"fix:"," Bug fix",[1303,1778,1779,1782],{},[405,1780,1781],{},"docs:"," Documentation changes",[1303,1784,1785,1788],{},[405,1786,1787],{},"test:"," Test additions or changes",[1303,1790,1791,1794],{},[405,1792,1793],{},"refactor:"," Code refactoring",[1303,1796,1797,1800],{},[405,1798,1799],{},"perf:"," Performance improvements",[1303,1802,1803,1806],{},[405,1804,1805],{},"chore:"," Maintenance tasks",[391,1808,1810],{"id":1809},"questions","Questions?",[315,1812,1813],{},"Feel free to open an issue for any questions or concerns.",[1393,1815,1816],{},"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":25,"searchDepth":20,"depth":20,"links":1818},[1819,1820,1824,1825,1826,1827,1828],{"id":1574,"depth":20,"text":1575},{"id":1616,"depth":20,"text":1617,"children":1821},[1822,1823],{"id":1620,"depth":31,"text":1621},{"id":1635,"depth":31,"text":1636},{"id":1695,"depth":20,"text":1696},{"id":1719,"depth":20,"text":1720},{"id":1740,"depth":20,"text":1741},{"id":1758,"depth":20,"text":1759},{"id":1809,"depth":20,"text":1810},{},"/contributing",{"title":1372,"description":1571},"jHq_O7tUmrQ8X_M--QYOJA8SRdXBEs-QXkruRyt5JLQ",{"id":1834,"title":204,"author":1835,"body":1836,"description":206,"extension":1409,"meta":4047,"navigation":436,"path":203,"published":4048,"readtime":4049,"seo":4050,"stem":291,"tags":4051,"updated":4053,"__hash__":4054},"scio/v0.0.5/5.reference/1.api.md","zoobzio",{"type":309,"value":1837,"toc":4031},[1838,1841,1844,1847,1930,1933,2062,2065,2128,2131,2184,2186,2189,2209,2212,2411,2414,2479,2482,3403,3406,3711,3714,4028],[312,1839,204],{"id":1840},"api-reference",[391,1842,212],{"id":1843},"types",[1339,1845,216],{"id":1846},"variant",[399,1848,1850],{"className":401,"code":1849,"language":403,"meta":25,"style":25},"type Variant string\n\nconst (\n    VariantDatabase Variant = \"db\"\n    VariantStore    Variant = \"kv\"\n    VariantBucket   Variant = \"bcs\"\n    VariantIndex    Variant = \"idx\"\n)\n",[405,1851,1852,1863,1867,1874,1888,1901,1914,1926],{"__ignoreMap":25},[408,1853,1854,1857,1860],{"class":410,"line":9},[408,1855,1856],{"class":752},"type",[408,1858,1859],{"class":756}," Variant",[408,1861,1862],{"class":756}," string\n",[408,1864,1865],{"class":410,"line":20},[408,1866,437],{"emptyLinePlaceholder":436},[408,1868,1869,1872],{"class":410,"line":31},[408,1870,1871],{"class":752},"const",[408,1873,770],{"class":423},[408,1875,1876,1880,1882,1885],{"class":410,"line":446},[408,1877,1879],{"class":1878},"sfm-E","    VariantDatabase",[408,1881,1859],{"class":756},[408,1883,1884],{"class":413}," =",[408,1886,1887],{"class":459}," \"db\"\n",[408,1889,1890,1893,1896,1898],{"class":410,"line":477},[408,1891,1892],{"class":1878},"    VariantStore",[408,1894,1895],{"class":756},"    Variant",[408,1897,1884],{"class":413},[408,1899,1900],{"class":459}," \"kv\"\n",[408,1902,1903,1906,1909,1911],{"class":410,"line":503},[408,1904,1905],{"class":1878},"    VariantBucket",[408,1907,1908],{"class":756},"   Variant",[408,1910,1884],{"class":413},[408,1912,1913],{"class":459}," \"bcs\"\n",[408,1915,1916,1919,1921,1923],{"class":410,"line":529},[408,1917,1918],{"class":1878},"    VariantIndex",[408,1920,1895],{"class":756},[408,1922,1884],{"class":413},[408,1924,1925],{"class":459}," \"idx\"\n",[408,1927,1928],{"class":410,"line":534},[408,1929,571],{"class":423},[1339,1931,221],{"id":1932},"uri",[399,1934,1936],{"className":401,"code":1935,"language":403,"meta":25,"style":25},"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\n",[405,1937,1938,1950,1958,1969,1980,1984,1988,2019,2041],{"__ignoreMap":25},[408,1939,1940,1942,1945,1948],{"class":410,"line":9},[408,1941,1856],{"class":752},[408,1943,1944],{"class":756}," URI",[408,1946,1947],{"class":752}," struct",[408,1949,815],{"class":423},[408,1951,1952,1955],{"class":410,"line":20},[408,1953,1895],{"class":1954},"sBGCq",[408,1956,1957],{"class":756},"  Variant\n",[408,1959,1960,1963,1966],{"class":410,"line":31},[408,1961,1962],{"class":1954},"    Resource",[408,1964,1965],{"class":756}," string",[408,1967,1968],{"class":442},"  // table, store, or bucket name\n",[408,1970,1971,1974,1977],{"class":410,"line":446},[408,1972,1973],{"class":1954},"    Key",[408,1975,1976],{"class":756},"      string",[408,1978,1979],{"class":442},"  // record key or blob path\n",[408,1981,1982],{"class":410,"line":477},[408,1983,1217],{"class":423},[408,1985,1986],{"class":410,"line":503},[408,1987,437],{"emptyLinePlaceholder":436},[408,1989,1990,1992,1995,1997,2001,2003,2005,2007,2010,2012,2014,2017],{"class":410,"line":529},[408,1991,807],{"class":752},[408,1993,1994],{"class":427}," ParseURI",[408,1996,456],{"class":423},[408,1998,2000],{"class":1999},"sSYET","raw",[408,2002,1965],{"class":756},[408,2004,693],{"class":423},[408,2006,1177],{"class":423},[408,2008,2009],{"class":923},"*",[408,2011,221],{"class":756},[408,2013,463],{"class":423},[408,2015,2016],{"class":756}," error",[408,2018,571],{"class":423},[408,2020,2021,2023,2025,2028,2030,2032,2034,2037,2039],{"class":410,"line":534},[408,2022,807],{"class":752},[408,2024,1177],{"class":423},[408,2026,2027],{"class":1999},"u ",[408,2029,2009],{"class":923},[408,2031,221],{"class":756},[408,2033,693],{"class":423},[408,2035,2036],{"class":427}," String",[408,2038,672],{"class":423},[408,2040,1862],{"class":756},[408,2042,2043,2045,2047,2049,2051,2053,2055,2058,2060],{"class":410,"line":540},[408,2044,807],{"class":752},[408,2046,1177],{"class":423},[408,2048,2027],{"class":1999},[408,2050,2009],{"class":923},[408,2052,221],{"class":756},[408,2054,693],{"class":423},[408,2056,2057],{"class":427}," ResourceURI",[408,2059,672],{"class":423},[408,2061,1862],{"class":756},[1339,2063,226],{"id":2064},"resource",[399,2066,2068],{"className":401,"code":2067,"language":403,"meta":25,"style":25},"type Resource struct {\n    URI      string\n    Variant  Variant\n    Name     string\n    Spec     atom.Spec\n    Metadata Metadata\n}\n",[405,2069,2070,2081,2089,2095,2103,2116,2124],{"__ignoreMap":25},[408,2071,2072,2074,2077,2079],{"class":410,"line":9},[408,2073,1856],{"class":752},[408,2075,2076],{"class":756}," Resource",[408,2078,1947],{"class":752},[408,2080,815],{"class":423},[408,2082,2083,2086],{"class":410,"line":20},[408,2084,2085],{"class":1954},"    URI",[408,2087,2088],{"class":756},"      string\n",[408,2090,2091,2093],{"class":410,"line":31},[408,2092,1895],{"class":1954},[408,2094,1957],{"class":756},[408,2096,2097,2100],{"class":410,"line":446},[408,2098,2099],{"class":1954},"    Name",[408,2101,2102],{"class":756},"     string\n",[408,2104,2105,2108,2111,2113],{"class":410,"line":477},[408,2106,2107],{"class":1954},"    Spec",[408,2109,2110],{"class":756},"     atom",[408,2112,424],{"class":423},[408,2114,2115],{"class":756},"Spec\n",[408,2117,2118,2121],{"class":410,"line":503},[408,2119,2120],{"class":1954},"    Metadata",[408,2122,2123],{"class":756}," Metadata\n",[408,2125,2126],{"class":410,"line":529},[408,2127,1217],{"class":423},[1339,2129,124],{"id":2130},"metadata",[399,2132,2134],{"className":401,"code":2133,"language":403,"meta":25,"style":25},"type Metadata struct {\n    Description string\n    Version     string\n    Tags        map[string]string\n}\n",[405,2135,2136,2147,2154,2161,2180],{"__ignoreMap":25},[408,2137,2138,2140,2143,2145],{"class":410,"line":9},[408,2139,1856],{"class":752},[408,2141,2142],{"class":756}," Metadata",[408,2144,1947],{"class":752},[408,2146,815],{"class":423},[408,2148,2149,2152],{"class":410,"line":20},[408,2150,2151],{"class":1954},"    Description",[408,2153,1862],{"class":756},[408,2155,2156,2159],{"class":410,"line":31},[408,2157,2158],{"class":1954},"    Version",[408,2160,2102],{"class":756},[408,2162,2163,2166,2169,2171,2174,2177],{"class":410,"line":446},[408,2164,2165],{"class":1954},"    Tags",[408,2167,2168],{"class":752},"        map",[408,2170,1080],{"class":423},[408,2172,2173],{"class":756},"string",[408,2175,2176],{"class":423},"]",[408,2178,2179],{"class":756},"string\n",[408,2181,2182],{"class":410,"line":477},[408,2183,1217],{"class":423},[391,2185,235],{"id":12},[1339,2187,239],{"id":2188},"constructor",[399,2190,2192],{"className":401,"code":2191,"language":403,"meta":25,"style":25},"func New() *Scio\n",[405,2193,2194],{"__ignoreMap":25},[408,2195,2196,2198,2201,2203,2206],{"class":410,"line":9},[408,2197,807],{"class":752},[408,2199,2200],{"class":427}," New",[408,2202,672],{"class":423},[408,2204,2205],{"class":923}," *",[408,2207,2208],{"class":756},"Scio\n",[1339,2210,171],{"id":2211},"registration",[399,2213,2215],{"className":401,"code":2214,"language":403,"meta":25,"style":25},"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\n",[405,2216,2217,2270,2317,2364],{"__ignoreMap":25},[408,2218,2219,2221,2223,2226,2228,2230,2232,2235,2237,2239,2241,2243,2246,2249,2251,2254,2256,2259,2262,2265,2267],{"class":410,"line":9},[408,2220,807],{"class":752},[408,2222,1177],{"class":423},[408,2224,2225],{"class":1999},"s ",[408,2227,2009],{"class":923},[408,2229,235],{"class":756},[408,2231,693],{"class":423},[408,2233,2234],{"class":427}," RegisterDatabase",[408,2236,456],{"class":423},[408,2238,1932],{"class":1999},[408,2240,1965],{"class":756},[408,2242,463],{"class":423},[408,2244,2245],{"class":1999}," db",[408,2247,2248],{"class":756}," grub",[408,2250,424],{"class":423},[408,2252,2253],{"class":756},"AtomicDatabase",[408,2255,463],{"class":423},[408,2257,2258],{"class":1999}," opts",[408,2260,2261],{"class":923}," ...",[408,2263,2264],{"class":756},"RegistrationOption",[408,2266,693],{"class":423},[408,2268,2269],{"class":756}," error\n",[408,2271,2272,2274,2276,2278,2280,2282,2284,2287,2289,2291,2293,2295,2298,2300,2302,2305,2307,2309,2311,2313,2315],{"class":410,"line":20},[408,2273,807],{"class":752},[408,2275,1177],{"class":423},[408,2277,2225],{"class":1999},[408,2279,2009],{"class":923},[408,2281,235],{"class":756},[408,2283,693],{"class":423},[408,2285,2286],{"class":427}," RegisterStore",[408,2288,456],{"class":423},[408,2290,1932],{"class":1999},[408,2292,1965],{"class":756},[408,2294,463],{"class":423},[408,2296,2297],{"class":1999}," store",[408,2299,2248],{"class":756},[408,2301,424],{"class":423},[408,2303,2304],{"class":756},"AtomicStore",[408,2306,463],{"class":423},[408,2308,2258],{"class":1999},[408,2310,2261],{"class":923},[408,2312,2264],{"class":756},[408,2314,693],{"class":423},[408,2316,2269],{"class":756},[408,2318,2319,2321,2323,2325,2327,2329,2331,2334,2336,2338,2340,2342,2345,2347,2349,2352,2354,2356,2358,2360,2362],{"class":410,"line":31},[408,2320,807],{"class":752},[408,2322,1177],{"class":423},[408,2324,2225],{"class":1999},[408,2326,2009],{"class":923},[408,2328,235],{"class":756},[408,2330,693],{"class":423},[408,2332,2333],{"class":427}," RegisterBucket",[408,2335,456],{"class":423},[408,2337,1932],{"class":1999},[408,2339,1965],{"class":756},[408,2341,463],{"class":423},[408,2343,2344],{"class":1999}," bucket",[408,2346,2248],{"class":756},[408,2348,424],{"class":423},[408,2350,2351],{"class":756},"AtomicBucket",[408,2353,463],{"class":423},[408,2355,2258],{"class":1999},[408,2357,2261],{"class":923},[408,2359,2264],{"class":756},[408,2361,693],{"class":423},[408,2363,2269],{"class":756},[408,2365,2366,2368,2370,2372,2374,2376,2378,2381,2383,2385,2387,2389,2392,2394,2396,2399,2401,2403,2405,2407,2409],{"class":410,"line":446},[408,2367,807],{"class":752},[408,2369,1177],{"class":423},[408,2371,2225],{"class":1999},[408,2373,2009],{"class":923},[408,2375,235],{"class":756},[408,2377,693],{"class":423},[408,2379,2380],{"class":427}," RegisterIndex",[408,2382,456],{"class":423},[408,2384,1932],{"class":1999},[408,2386,1965],{"class":756},[408,2388,463],{"class":423},[408,2390,2391],{"class":1999}," index",[408,2393,2248],{"class":756},[408,2395,424],{"class":423},[408,2397,2398],{"class":756},"AtomicIndex",[408,2400,463],{"class":423},[408,2402,2258],{"class":1999},[408,2404,2261],{"class":923},[408,2406,2264],{"class":756},[408,2408,693],{"class":423},[408,2410,2269],{"class":756},[1339,2412,248],{"id":2413},"registration-options",[399,2415,2417],{"className":401,"code":2416,"language":403,"meta":25,"style":25},"func WithDescription(desc string) RegistrationOption\nfunc WithVersion(ver string) RegistrationOption\nfunc WithTag(key, value string) RegistrationOption\n",[405,2418,2419,2438,2456],{"__ignoreMap":25},[408,2420,2421,2423,2426,2428,2431,2433,2435],{"class":410,"line":9},[408,2422,807],{"class":752},[408,2424,2425],{"class":427}," WithDescription",[408,2427,456],{"class":423},[408,2429,2430],{"class":1999},"desc",[408,2432,1965],{"class":756},[408,2434,693],{"class":423},[408,2436,2437],{"class":756}," RegistrationOption\n",[408,2439,2440,2442,2445,2447,2450,2452,2454],{"class":410,"line":20},[408,2441,807],{"class":752},[408,2443,2444],{"class":427}," WithVersion",[408,2446,456],{"class":423},[408,2448,2449],{"class":1999},"ver",[408,2451,1965],{"class":756},[408,2453,693],{"class":423},[408,2455,2437],{"class":756},[408,2457,2458,2460,2463,2465,2468,2470,2473,2475,2477],{"class":410,"line":31},[408,2459,807],{"class":752},[408,2461,2462],{"class":427}," WithTag",[408,2464,456],{"class":423},[408,2466,2467],{"class":1999},"key",[408,2469,463],{"class":423},[408,2471,2472],{"class":1999}," value",[408,2474,1965],{"class":756},[408,2476,693],{"class":423},[408,2478,2437],{"class":756},[1339,2480,149],{"id":2481},"operations",[399,2483,2485],{"className":401,"code":2484,"language":403,"meta":25,"style":25},"// 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)\n",[405,2486,2487,2492,2546,2596,2633,2679,2683,2688,2768,2844,2848,2853,2915,2919,2924,2976,2980,2985,3037,3098,3135,3180,3258,3335],{"__ignoreMap":25},[408,2488,2489],{"class":410,"line":9},[408,2490,2491],{"class":442},"// Common operations\n",[408,2493,2494,2496,2498,2500,2502,2504,2506,2509,2511,2513,2515,2517,2520,2522,2525,2527,2529,2531,2533,2535,2537,2540,2542,2544],{"class":410,"line":20},[408,2495,807],{"class":752},[408,2497,1177],{"class":423},[408,2499,2225],{"class":1999},[408,2501,2009],{"class":923},[408,2503,235],{"class":756},[408,2505,693],{"class":423},[408,2507,2508],{"class":427}," Get",[408,2510,456],{"class":423},[408,2512,563],{"class":1999},[408,2514,971],{"class":756},[408,2516,424],{"class":423},[408,2518,2519],{"class":756},"Context",[408,2521,463],{"class":423},[408,2523,2524],{"class":1999}," uri",[408,2526,1965],{"class":756},[408,2528,693],{"class":423},[408,2530,1177],{"class":423},[408,2532,2009],{"class":923},[408,2534,543],{"class":756},[408,2536,424],{"class":423},[408,2538,2539],{"class":756},"Atom",[408,2541,463],{"class":423},[408,2543,2016],{"class":756},[408,2545,571],{"class":423},[408,2547,2548,2550,2552,2554,2556,2558,2560,2563,2565,2567,2569,2571,2573,2575,2577,2579,2581,2584,2586,2588,2590,2592,2594],{"class":410,"line":31},[408,2549,807],{"class":752},[408,2551,1177],{"class":423},[408,2553,2225],{"class":1999},[408,2555,2009],{"class":923},[408,2557,235],{"class":756},[408,2559,693],{"class":423},[408,2561,2562],{"class":427}," Set",[408,2564,456],{"class":423},[408,2566,563],{"class":1999},[408,2568,971],{"class":756},[408,2570,424],{"class":423},[408,2572,2519],{"class":756},[408,2574,463],{"class":423},[408,2576,2524],{"class":1999},[408,2578,1965],{"class":756},[408,2580,463],{"class":423},[408,2582,2583],{"class":1999}," data",[408,2585,2205],{"class":923},[408,2587,543],{"class":756},[408,2589,424],{"class":423},[408,2591,2539],{"class":756},[408,2593,693],{"class":423},[408,2595,2269],{"class":756},[408,2597,2598,2600,2602,2604,2606,2608,2610,2613,2615,2617,2619,2621,2623,2625,2627,2629,2631],{"class":410,"line":446},[408,2599,807],{"class":752},[408,2601,1177],{"class":423},[408,2603,2225],{"class":1999},[408,2605,2009],{"class":923},[408,2607,235],{"class":756},[408,2609,693],{"class":423},[408,2611,2612],{"class":427}," Delete",[408,2614,456],{"class":423},[408,2616,563],{"class":1999},[408,2618,971],{"class":756},[408,2620,424],{"class":423},[408,2622,2519],{"class":756},[408,2624,463],{"class":423},[408,2626,2524],{"class":1999},[408,2628,1965],{"class":756},[408,2630,693],{"class":423},[408,2632,2269],{"class":756},[408,2634,2635,2637,2639,2641,2643,2645,2647,2650,2652,2654,2656,2658,2660,2662,2664,2666,2668,2670,2673,2675,2677],{"class":410,"line":477},[408,2636,807],{"class":752},[408,2638,1177],{"class":423},[408,2640,2225],{"class":1999},[408,2642,2009],{"class":923},[408,2644,235],{"class":756},[408,2646,693],{"class":423},[408,2648,2649],{"class":427}," Exists",[408,2651,456],{"class":423},[408,2653,563],{"class":1999},[408,2655,971],{"class":756},[408,2657,424],{"class":423},[408,2659,2519],{"class":756},[408,2661,463],{"class":423},[408,2663,2524],{"class":1999},[408,2665,1965],{"class":756},[408,2667,693],{"class":423},[408,2669,1177],{"class":423},[408,2671,2672],{"class":756},"bool",[408,2674,463],{"class":423},[408,2676,2016],{"class":756},[408,2678,571],{"class":423},[408,2680,2681],{"class":410,"line":503},[408,2682,437],{"emptyLinePlaceholder":436},[408,2684,2685],{"class":410,"line":529},[408,2686,2687],{"class":442},"// Database operations\n",[408,2689,2690,2692,2694,2696,2698,2700,2702,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2725,2728,2730,2733,2735,2737,2740,2742,2744,2746,2749,2751,2754,2756,2758,2760,2762,2764,2766],{"class":410,"line":534},[408,2691,807],{"class":752},[408,2693,1177],{"class":423},[408,2695,2225],{"class":1999},[408,2697,2009],{"class":923},[408,2699,235],{"class":756},[408,2701,693],{"class":423},[408,2703,2704],{"class":427}," Query",[408,2706,456],{"class":423},[408,2708,563],{"class":1999},[408,2710,971],{"class":756},[408,2712,424],{"class":423},[408,2714,2519],{"class":756},[408,2716,463],{"class":423},[408,2718,2524],{"class":1999},[408,2720,1965],{"class":756},[408,2722,463],{"class":423},[408,2724,641],{"class":1999},[408,2726,2727],{"class":756}," edamame",[408,2729,424],{"class":423},[408,2731,2732],{"class":756},"QueryStatement",[408,2734,463],{"class":423},[408,2736,646],{"class":1999},[408,2738,2739],{"class":752}," map",[408,2741,1080],{"class":423},[408,2743,2173],{"class":756},[408,2745,2176],{"class":423},[408,2747,2748],{"class":756},"any",[408,2750,693],{"class":423},[408,2752,2753],{"class":423}," ([]",[408,2755,2009],{"class":923},[408,2757,543],{"class":756},[408,2759,424],{"class":423},[408,2761,2539],{"class":756},[408,2763,463],{"class":423},[408,2765,2016],{"class":756},[408,2767,571],{"class":423},[408,2769,2770,2772,2774,2776,2778,2780,2782,2785,2787,2789,2791,2793,2795,2797,2799,2801,2803,2805,2807,2809,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,2832,2834,2836,2838,2840,2842],{"class":410,"line":540},[408,2771,807],{"class":752},[408,2773,1177],{"class":423},[408,2775,2225],{"class":1999},[408,2777,2009],{"class":923},[408,2779,235],{"class":756},[408,2781,693],{"class":423},[408,2783,2784],{"class":427}," Select",[408,2786,456],{"class":423},[408,2788,563],{"class":1999},[408,2790,971],{"class":756},[408,2792,424],{"class":423},[408,2794,2519],{"class":756},[408,2796,463],{"class":423},[408,2798,2524],{"class":1999},[408,2800,1965],{"class":756},[408,2802,463],{"class":423},[408,2804,641],{"class":1999},[408,2806,2727],{"class":756},[408,2808,424],{"class":423},[408,2810,2811],{"class":756},"SelectStatement",[408,2813,463],{"class":423},[408,2815,646],{"class":1999},[408,2817,2739],{"class":752},[408,2819,1080],{"class":423},[408,2821,2173],{"class":756},[408,2823,2176],{"class":423},[408,2825,2748],{"class":756},[408,2827,693],{"class":423},[408,2829,1177],{"class":423},[408,2831,2009],{"class":923},[408,2833,543],{"class":756},[408,2835,424],{"class":423},[408,2837,2539],{"class":756},[408,2839,463],{"class":423},[408,2841,2016],{"class":756},[408,2843,571],{"class":423},[408,2845,2846],{"class":410,"line":574},[408,2847,437],{"emptyLinePlaceholder":436},[408,2849,2850],{"class":410,"line":600},[408,2851,2852],{"class":442},"// Store operations\n",[408,2854,2855,2857,2859,2861,2863,2865,2867,2870,2872,2874,2876,2878,2880,2882,2884,2886,2888,2890,2892,2894,2896,2898,2900,2903,2906,2908,2911,2913],{"class":410,"line":605},[408,2856,807],{"class":752},[408,2858,1177],{"class":423},[408,2860,2225],{"class":1999},[408,2862,2009],{"class":923},[408,2864,235],{"class":756},[408,2866,693],{"class":423},[408,2868,2869],{"class":427}," SetWithTTL",[408,2871,456],{"class":423},[408,2873,563],{"class":1999},[408,2875,971],{"class":756},[408,2877,424],{"class":423},[408,2879,2519],{"class":756},[408,2881,463],{"class":423},[408,2883,2524],{"class":1999},[408,2885,1965],{"class":756},[408,2887,463],{"class":423},[408,2889,2583],{"class":1999},[408,2891,2205],{"class":923},[408,2893,543],{"class":756},[408,2895,424],{"class":423},[408,2897,2539],{"class":756},[408,2899,463],{"class":423},[408,2901,2902],{"class":1999}," ttl",[408,2904,2905],{"class":756}," time",[408,2907,424],{"class":423},[408,2909,2910],{"class":756},"Duration",[408,2912,693],{"class":423},[408,2914,2269],{"class":756},[408,2916,2917],{"class":410,"line":611},[408,2918,437],{"emptyLinePlaceholder":436},[408,2920,2921],{"class":410,"line":651},[408,2922,2923],{"class":442},"// Bucket operations\n",[408,2925,2926,2928,2930,2932,2934,2936,2938,2941,2943,2945,2947,2949,2951,2953,2955,2957,2959,2962,2964,2967,2969,2972,2974],{"class":410,"line":656},[408,2927,807],{"class":752},[408,2929,1177],{"class":423},[408,2931,2225],{"class":1999},[408,2933,2009],{"class":923},[408,2935,235],{"class":756},[408,2937,693],{"class":423},[408,2939,2940],{"class":427}," Put",[408,2942,456],{"class":423},[408,2944,563],{"class":1999},[408,2946,971],{"class":756},[408,2948,424],{"class":423},[408,2950,2519],{"class":756},[408,2952,463],{"class":423},[408,2954,2524],{"class":1999},[408,2956,1965],{"class":756},[408,2958,463],{"class":423},[408,2960,2961],{"class":1999}," obj",[408,2963,2205],{"class":923},[408,2965,2966],{"class":756},"grub",[408,2968,424],{"class":423},[408,2970,2971],{"class":756},"AtomicObject",[408,2973,693],{"class":423},[408,2975,2269],{"class":756},[408,2977,2978],{"class":410,"line":662},[408,2979,437],{"emptyLinePlaceholder":436},[408,2981,2982],{"class":410,"line":678},[408,2983,2984],{"class":442},"// Index operations\n",[408,2986,2987,2989,2991,2993,2995,2997,2999,3002,3004,3006,3008,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028,3031,3033,3035],{"class":410,"line":699},[408,2988,807],{"class":752},[408,2990,1177],{"class":423},[408,2992,2225],{"class":1999},[408,2994,2009],{"class":923},[408,2996,235],{"class":756},[408,2998,693],{"class":423},[408,3000,3001],{"class":427}," GetVector",[408,3003,456],{"class":423},[408,3005,563],{"class":1999},[408,3007,971],{"class":756},[408,3009,424],{"class":423},[408,3011,2519],{"class":756},[408,3013,463],{"class":423},[408,3015,2524],{"class":1999},[408,3017,1965],{"class":756},[408,3019,693],{"class":423},[408,3021,1177],{"class":423},[408,3023,2009],{"class":923},[408,3025,2966],{"class":756},[408,3027,424],{"class":423},[408,3029,3030],{"class":756},"AtomicVector",[408,3032,463],{"class":423},[408,3034,2016],{"class":756},[408,3036,571],{"class":423},[408,3038,3039,3041,3043,3045,3047,3049,3051,3054,3056,3058,3060,3062,3064,3066,3068,3070,3072,3075,3078,3081,3083,3086,3088,3090,3092,3094,3096],{"class":410,"line":914},[408,3040,807],{"class":752},[408,3042,1177],{"class":423},[408,3044,2225],{"class":1999},[408,3046,2009],{"class":923},[408,3048,235],{"class":756},[408,3050,693],{"class":423},[408,3052,3053],{"class":427}," UpsertVector",[408,3055,456],{"class":423},[408,3057,563],{"class":1999},[408,3059,971],{"class":756},[408,3061,424],{"class":423},[408,3063,2519],{"class":756},[408,3065,463],{"class":423},[408,3067,2524],{"class":1999},[408,3069,1965],{"class":756},[408,3071,463],{"class":423},[408,3073,3074],{"class":1999}," vector",[408,3076,3077],{"class":423}," []",[408,3079,3080],{"class":756},"float32",[408,3082,463],{"class":423},[408,3084,3085],{"class":1999}," metadata",[408,3087,2205],{"class":923},[408,3089,543],{"class":756},[408,3091,424],{"class":423},[408,3093,2539],{"class":756},[408,3095,693],{"class":423},[408,3097,2269],{"class":756},[408,3099,3100,3102,3104,3106,3108,3110,3112,3115,3117,3119,3121,3123,3125,3127,3129,3131,3133],{"class":410,"line":920},[408,3101,807],{"class":752},[408,3103,1177],{"class":423},[408,3105,2225],{"class":1999},[408,3107,2009],{"class":923},[408,3109,235],{"class":756},[408,3111,693],{"class":423},[408,3113,3114],{"class":427}," DeleteVector",[408,3116,456],{"class":423},[408,3118,563],{"class":1999},[408,3120,971],{"class":756},[408,3122,424],{"class":423},[408,3124,2519],{"class":756},[408,3126,463],{"class":423},[408,3128,2524],{"class":1999},[408,3130,1965],{"class":756},[408,3132,693],{"class":423},[408,3134,2269],{"class":756},[408,3136,3137,3139,3141,3143,3145,3147,3149,3152,3154,3156,3158,3160,3162,3164,3166,3168,3170,3172,3174,3176,3178],{"class":410,"line":938},[408,3138,807],{"class":752},[408,3140,1177],{"class":423},[408,3142,2225],{"class":1999},[408,3144,2009],{"class":923},[408,3146,235],{"class":756},[408,3148,693],{"class":423},[408,3150,3151],{"class":427}," VectorExists",[408,3153,456],{"class":423},[408,3155,563],{"class":1999},[408,3157,971],{"class":756},[408,3159,424],{"class":423},[408,3161,2519],{"class":756},[408,3163,463],{"class":423},[408,3165,2524],{"class":1999},[408,3167,1965],{"class":756},[408,3169,693],{"class":423},[408,3171,1177],{"class":423},[408,3173,2672],{"class":756},[408,3175,463],{"class":423},[408,3177,2016],{"class":756},[408,3179,571],{"class":423},[408,3181,3182,3184,3186,3188,3190,3192,3194,3197,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3226,3229,3231,3234,3236,3238,3240,3242,3244,3246,3248,3250,3252,3254,3256],{"class":410,"line":952},[408,3183,807],{"class":752},[408,3185,1177],{"class":423},[408,3187,2225],{"class":1999},[408,3189,2009],{"class":923},[408,3191,235],{"class":756},[408,3193,693],{"class":423},[408,3195,3196],{"class":427}," SearchVectors",[408,3198,456],{"class":423},[408,3200,563],{"class":1999},[408,3202,971],{"class":756},[408,3204,424],{"class":423},[408,3206,2519],{"class":756},[408,3208,463],{"class":423},[408,3210,2524],{"class":1999},[408,3212,1965],{"class":756},[408,3214,463],{"class":423},[408,3216,3074],{"class":1999},[408,3218,3077],{"class":423},[408,3220,3080],{"class":756},[408,3222,463],{"class":423},[408,3224,3225],{"class":1999}," k",[408,3227,3228],{"class":756}," int",[408,3230,463],{"class":423},[408,3232,3233],{"class":1999}," filter",[408,3235,2205],{"class":923},[408,3237,543],{"class":756},[408,3239,424],{"class":423},[408,3241,2539],{"class":756},[408,3243,693],{"class":423},[408,3245,2753],{"class":423},[408,3247,2966],{"class":756},[408,3249,424],{"class":423},[408,3251,3030],{"class":756},[408,3253,463],{"class":423},[408,3255,2016],{"class":756},[408,3257,571],{"class":423},[408,3259,3260,3262,3264,3266,3268,3270,3272,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293,3295,3297,3299,3301,3303,3305,3307,3309,3311,3314,3316,3319,3321,3323,3325,3327,3329,3331,3333],{"class":410,"line":958},[408,3261,807],{"class":752},[408,3263,1177],{"class":423},[408,3265,2225],{"class":1999},[408,3267,2009],{"class":923},[408,3269,235],{"class":756},[408,3271,693],{"class":423},[408,3273,3274],{"class":427}," QueryVectors",[408,3276,456],{"class":423},[408,3278,563],{"class":1999},[408,3280,971],{"class":756},[408,3282,424],{"class":423},[408,3284,2519],{"class":756},[408,3286,463],{"class":423},[408,3288,2524],{"class":1999},[408,3290,1965],{"class":756},[408,3292,463],{"class":423},[408,3294,3074],{"class":1999},[408,3296,3077],{"class":423},[408,3298,3080],{"class":756},[408,3300,463],{"class":423},[408,3302,3225],{"class":1999},[408,3304,3228],{"class":756},[408,3306,463],{"class":423},[408,3308,3233],{"class":1999},[408,3310,2205],{"class":923},[408,3312,3313],{"class":756},"vecna",[408,3315,424],{"class":423},[408,3317,3318],{"class":756},"Filter",[408,3320,693],{"class":423},[408,3322,2753],{"class":423},[408,3324,2966],{"class":756},[408,3326,424],{"class":423},[408,3328,3030],{"class":756},[408,3330,463],{"class":423},[408,3332,2016],{"class":756},[408,3334,571],{"class":423},[408,3336,3337,3339,3341,3343,3345,3347,3349,3352,3354,3356,3358,3360,3362,3364,3366,3368,3370,3372,3374,3376,3378,3380,3382,3385,3387,3389,3391,3393,3395,3397,3399,3401],{"class":410,"line":963},[408,3338,807],{"class":752},[408,3340,1177],{"class":423},[408,3342,2225],{"class":1999},[408,3344,2009],{"class":923},[408,3346,235],{"class":756},[408,3348,693],{"class":423},[408,3350,3351],{"class":427}," FilterVectors",[408,3353,456],{"class":423},[408,3355,563],{"class":1999},[408,3357,971],{"class":756},[408,3359,424],{"class":423},[408,3361,2519],{"class":756},[408,3363,463],{"class":423},[408,3365,2524],{"class":1999},[408,3367,1965],{"class":756},[408,3369,463],{"class":423},[408,3371,3233],{"class":1999},[408,3373,2205],{"class":923},[408,3375,3313],{"class":756},[408,3377,424],{"class":423},[408,3379,3318],{"class":756},[408,3381,463],{"class":423},[408,3383,3384],{"class":1999}," limit",[408,3386,3228],{"class":756},[408,3388,693],{"class":423},[408,3390,2753],{"class":423},[408,3392,2966],{"class":756},[408,3394,424],{"class":423},[408,3396,3030],{"class":756},[408,3398,463],{"class":423},[408,3400,2016],{"class":756},[408,3402,571],{"class":423},[1339,3404,257],{"id":3405},"catalog",[399,3407,3409],{"className":401,"code":3408,"language":403,"meta":25,"style":25},"// 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\n",[405,3410,3411,3416,3440,3463,3486,3509,3532,3536,3541,3581,3615,3645,3674,3678,3683],{"__ignoreMap":25},[408,3412,3413],{"class":410,"line":9},[408,3414,3415],{"class":442},"// Topology queries\n",[408,3417,3418,3420,3422,3424,3426,3428,3430,3433,3435,3437],{"class":410,"line":20},[408,3419,807],{"class":752},[408,3421,1177],{"class":423},[408,3423,2225],{"class":1999},[408,3425,2009],{"class":923},[408,3427,235],{"class":756},[408,3429,693],{"class":423},[408,3431,3432],{"class":427}," Sources",[408,3434,672],{"class":423},[408,3436,3077],{"class":423},[408,3438,3439],{"class":756},"Resource\n",[408,3441,3442,3444,3446,3448,3450,3452,3454,3457,3459,3461],{"class":410,"line":31},[408,3443,807],{"class":752},[408,3445,1177],{"class":423},[408,3447,2225],{"class":1999},[408,3449,2009],{"class":923},[408,3451,235],{"class":756},[408,3453,693],{"class":423},[408,3455,3456],{"class":427}," Databases",[408,3458,672],{"class":423},[408,3460,3077],{"class":423},[408,3462,3439],{"class":756},[408,3464,3465,3467,3469,3471,3473,3475,3477,3480,3482,3484],{"class":410,"line":446},[408,3466,807],{"class":752},[408,3468,1177],{"class":423},[408,3470,2225],{"class":1999},[408,3472,2009],{"class":923},[408,3474,235],{"class":756},[408,3476,693],{"class":423},[408,3478,3479],{"class":427}," Stores",[408,3481,672],{"class":423},[408,3483,3077],{"class":423},[408,3485,3439],{"class":756},[408,3487,3488,3490,3492,3494,3496,3498,3500,3503,3505,3507],{"class":410,"line":477},[408,3489,807],{"class":752},[408,3491,1177],{"class":423},[408,3493,2225],{"class":1999},[408,3495,2009],{"class":923},[408,3497,235],{"class":756},[408,3499,693],{"class":423},[408,3501,3502],{"class":427}," Buckets",[408,3504,672],{"class":423},[408,3506,3077],{"class":423},[408,3508,3439],{"class":756},[408,3510,3511,3513,3515,3517,3519,3521,3523,3526,3528,3530],{"class":410,"line":503},[408,3512,807],{"class":752},[408,3514,1177],{"class":423},[408,3516,2225],{"class":1999},[408,3518,2009],{"class":923},[408,3520,235],{"class":756},[408,3522,693],{"class":423},[408,3524,3525],{"class":427}," Indexes",[408,3527,672],{"class":423},[408,3529,3077],{"class":423},[408,3531,3439],{"class":756},[408,3533,3534],{"class":410,"line":529},[408,3535,437],{"emptyLinePlaceholder":436},[408,3537,3538],{"class":410,"line":534},[408,3539,3540],{"class":442},"// Spec queries\n",[408,3542,3543,3545,3547,3549,3551,3553,3555,3558,3560,3562,3564,3566,3568,3570,3572,3575,3577,3579],{"class":410,"line":540},[408,3544,807],{"class":752},[408,3546,1177],{"class":423},[408,3548,2225],{"class":1999},[408,3550,2009],{"class":923},[408,3552,235],{"class":756},[408,3554,693],{"class":423},[408,3556,3557],{"class":427}," Spec",[408,3559,456],{"class":423},[408,3561,1932],{"class":1999},[408,3563,1965],{"class":756},[408,3565,693],{"class":423},[408,3567,1177],{"class":423},[408,3569,543],{"class":756},[408,3571,424],{"class":423},[408,3573,3574],{"class":756},"Spec",[408,3576,463],{"class":423},[408,3578,2016],{"class":756},[408,3580,571],{"class":423},[408,3582,3583,3585,3587,3589,3591,3593,3595,3598,3600,3602,3605,3607,3609,3611,3613],{"class":410,"line":574},[408,3584,807],{"class":752},[408,3586,1177],{"class":423},[408,3588,2225],{"class":1999},[408,3590,2009],{"class":923},[408,3592,235],{"class":756},[408,3594,693],{"class":423},[408,3596,3597],{"class":427}," FindBySpec",[408,3599,456],{"class":423},[408,3601,690],{"class":1999},[408,3603,3604],{"class":756}," atom",[408,3606,424],{"class":423},[408,3608,3574],{"class":756},[408,3610,693],{"class":423},[408,3612,3077],{"class":423},[408,3614,3439],{"class":756},[408,3616,3617,3619,3621,3623,3625,3627,3629,3632,3634,3637,3639,3641,3643],{"class":410,"line":600},[408,3618,807],{"class":752},[408,3620,1177],{"class":423},[408,3622,2225],{"class":1999},[408,3624,2009],{"class":923},[408,3626,235],{"class":756},[408,3628,693],{"class":423},[408,3630,3631],{"class":427}," FindByField",[408,3633,456],{"class":423},[408,3635,3636],{"class":1999},"field",[408,3638,1965],{"class":756},[408,3640,693],{"class":423},[408,3642,3077],{"class":423},[408,3644,3439],{"class":756},[408,3646,3647,3649,3651,3653,3655,3657,3659,3662,3664,3666,3668,3670,3672],{"class":410,"line":605},[408,3648,807],{"class":752},[408,3650,1177],{"class":423},[408,3652,2225],{"class":1999},[408,3654,2009],{"class":923},[408,3656,235],{"class":756},[408,3658,693],{"class":423},[408,3660,3661],{"class":427}," Related",[408,3663,456],{"class":423},[408,3665,1932],{"class":1999},[408,3667,1965],{"class":756},[408,3669,693],{"class":423},[408,3671,3077],{"class":423},[408,3673,3439],{"class":756},[408,3675,3676],{"class":410,"line":611},[408,3677,437],{"emptyLinePlaceholder":436},[408,3679,3680],{"class":410,"line":651},[408,3681,3682],{"class":442},"// Resource lookup\n",[408,3684,3685,3687,3689,3691,3693,3695,3697,3699,3701,3703,3705,3707,3709],{"class":410,"line":656},[408,3686,807],{"class":752},[408,3688,1177],{"class":423},[408,3690,2225],{"class":1999},[408,3692,2009],{"class":923},[408,3694,235],{"class":756},[408,3696,693],{"class":423},[408,3698,2076],{"class":427},[408,3700,456],{"class":423},[408,3702,1932],{"class":1999},[408,3704,1965],{"class":756},[408,3706,693],{"class":423},[408,3708,2205],{"class":923},[408,3710,3439],{"class":756},[391,3712,262],{"id":3713},"errors",[399,3715,3717],{"className":401,"code":3716,"language":403,"meta":25,"style":25},"// 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\n",[405,3718,3719,3724,3749,3772,3794,3816,3839,3862,3884,3906,3910,3915,3932,3948,3964,3980,3996,4012],{"__ignoreMap":25},[408,3720,3721],{"class":410,"line":9},[408,3722,3723],{"class":442},"// scio errors\n",[408,3725,3726,3729,3732,3735,3738,3740,3742,3744,3747],{"class":410,"line":20},[408,3727,3728],{"class":752},"var",[408,3730,3731],{"class":413}," ErrInvalidURI",[408,3733,3734],{"class":413},"       =",[408,3736,3737],{"class":413}," errors",[408,3739,424],{"class":423},[408,3741,428],{"class":427},[408,3743,456],{"class":423},[408,3745,3746],{"class":459},"\"invalid URI\"",[408,3748,571],{"class":423},[408,3750,3751,3753,3756,3759,3761,3763,3765,3767,3770],{"class":410,"line":31},[408,3752,3728],{"class":752},[408,3754,3755],{"class":413}," ErrUnknownVariant",[408,3757,3758],{"class":413},"   =",[408,3760,3737],{"class":413},[408,3762,424],{"class":423},[408,3764,428],{"class":427},[408,3766,456],{"class":423},[408,3768,3769],{"class":459},"\"unknown variant\"",[408,3771,571],{"class":423},[408,3773,3774,3776,3779,3781,3783,3785,3787,3789,3792],{"class":410,"line":446},[408,3775,3728],{"class":752},[408,3777,3778],{"class":413}," ErrResourceNotFound",[408,3780,1884],{"class":413},[408,3782,3737],{"class":413},[408,3784,424],{"class":423},[408,3786,428],{"class":427},[408,3788,456],{"class":423},[408,3790,3791],{"class":459},"\"resource not found\"",[408,3793,571],{"class":423},[408,3795,3796,3798,3801,3803,3805,3807,3809,3811,3814],{"class":410,"line":477},[408,3797,3728],{"class":752},[408,3799,3800],{"class":413}," ErrResourceExists",[408,3802,3758],{"class":413},[408,3804,3737],{"class":413},[408,3806,424],{"class":423},[408,3808,428],{"class":427},[408,3810,456],{"class":423},[408,3812,3813],{"class":459},"\"resource already exists\"",[408,3815,571],{"class":423},[408,3817,3818,3820,3823,3826,3828,3830,3832,3834,3837],{"class":410,"line":503},[408,3819,3728],{"class":752},[408,3821,3822],{"class":413}," ErrVariantMismatch",[408,3824,3825],{"class":413},"  =",[408,3827,3737],{"class":413},[408,3829,424],{"class":423},[408,3831,428],{"class":427},[408,3833,456],{"class":423},[408,3835,3836],{"class":459},"\"variant mismatch\"",[408,3838,571],{"class":423},[408,3840,3841,3843,3846,3849,3851,3853,3855,3857,3860],{"class":410,"line":529},[408,3842,3728],{"class":752},[408,3844,3845],{"class":413}," ErrKeyRequired",[408,3847,3848],{"class":413},"      =",[408,3850,3737],{"class":413},[408,3852,424],{"class":423},[408,3854,428],{"class":427},[408,3856,456],{"class":423},[408,3858,3859],{"class":459},"\"key required\"",[408,3861,571],{"class":423},[408,3863,3864,3866,3869,3871,3873,3875,3877,3879,3882],{"class":410,"line":534},[408,3865,3728],{"class":752},[408,3867,3868],{"class":413}," ErrKeyNotExpected",[408,3870,3758],{"class":413},[408,3872,3737],{"class":413},[408,3874,424],{"class":423},[408,3876,428],{"class":427},[408,3878,456],{"class":423},[408,3880,3881],{"class":459},"\"key not expected\"",[408,3883,571],{"class":423},[408,3885,3886,3888,3891,3893,3895,3897,3899,3901,3904],{"class":410,"line":540},[408,3887,3728],{"class":752},[408,3889,3890],{"class":413}," ErrInvalidUUID",[408,3892,3848],{"class":413},[408,3894,3737],{"class":413},[408,3896,424],{"class":423},[408,3898,428],{"class":427},[408,3900,456],{"class":423},[408,3902,3903],{"class":459},"\"invalid UUID\"",[408,3905,571],{"class":423},[408,3907,3908],{"class":410,"line":574},[408,3909,437],{"emptyLinePlaceholder":436},[408,3911,3912],{"class":410,"line":600},[408,3913,3914],{"class":442},"// Re-exported from grub\n",[408,3916,3917,3919,3922,3925,3927,3929],{"class":410,"line":605},[408,3918,3728],{"class":752},[408,3920,3921],{"class":413}," ErrNotFound",[408,3923,3924],{"class":413},"        =",[408,3926,2248],{"class":413},[408,3928,424],{"class":423},[408,3930,3931],{"class":413},"ErrNotFound\n",[408,3933,3934,3936,3939,3941,3943,3945],{"class":410,"line":611},[408,3935,3728],{"class":752},[408,3937,3938],{"class":413}," ErrDuplicate",[408,3940,3734],{"class":413},[408,3942,2248],{"class":413},[408,3944,424],{"class":423},[408,3946,3947],{"class":413},"ErrDuplicate\n",[408,3949,3950,3952,3955,3957,3959,3961],{"class":410,"line":651},[408,3951,3728],{"class":752},[408,3953,3954],{"class":413}," ErrConflict",[408,3956,3924],{"class":413},[408,3958,2248],{"class":413},[408,3960,424],{"class":423},[408,3962,3963],{"class":413},"ErrConflict\n",[408,3965,3966,3968,3971,3973,3975,3977],{"class":410,"line":656},[408,3967,3728],{"class":752},[408,3969,3970],{"class":413}," ErrConstraint",[408,3972,3848],{"class":413},[408,3974,2248],{"class":413},[408,3976,424],{"class":423},[408,3978,3979],{"class":413},"ErrConstraint\n",[408,3981,3982,3984,3987,3989,3991,3993],{"class":410,"line":662},[408,3983,3728],{"class":752},[408,3985,3986],{"class":413}," ErrInvalidKey",[408,3988,3848],{"class":413},[408,3990,2248],{"class":413},[408,3992,424],{"class":423},[408,3994,3995],{"class":413},"ErrInvalidKey\n",[408,3997,3998,4000,4003,4005,4007,4009],{"class":410,"line":678},[408,3999,3728],{"class":752},[408,4001,4002],{"class":413}," ErrReadOnly",[408,4004,3924],{"class":413},[408,4006,2248],{"class":413},[408,4008,424],{"class":423},[408,4010,4011],{"class":413},"ErrReadOnly\n",[408,4013,4014,4016,4019,4021,4023,4025],{"class":410,"line":699},[408,4015,3728],{"class":752},[408,4017,4018],{"class":413}," ErrTTLNotSupported",[408,4020,1884],{"class":413},[408,4022,2248],{"class":413},[408,4024,424],{"class":423},[408,4026,4027],{"class":413},"ErrTTLNotSupported\n",[1393,4029,4030],{},"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)}",{"title":25,"searchDepth":20,"depth":20,"links":4032},[4033,4039,4046],{"id":1843,"depth":20,"text":212,"children":4034},[4035,4036,4037,4038],{"id":1846,"depth":31,"text":216},{"id":1932,"depth":31,"text":221},{"id":2064,"depth":31,"text":226},{"id":2130,"depth":31,"text":124},{"id":12,"depth":20,"text":235,"children":4040},[4041,4042,4043,4044,4045],{"id":2188,"depth":31,"text":239},{"id":2211,"depth":31,"text":171},{"id":2413,"depth":31,"text":248},{"id":2481,"depth":31,"text":149},{"id":3405,"depth":31,"text":257},{"id":3713,"depth":20,"text":262},{},"2025-01-11T00:00:00.000Z",null,{"title":204,"description":206},[4052,1361],"api","2026-01-12T00:00:00.000Z","lOwjKwnutdtilAx9nOm6x1H3RGFMNEuVJECo5baIFiE",[4056,4049],{"title":154,"path":153,"stem":283,"description":156,"children":-1},1776192966931]