go-store/README.md
Virgil a6001b92ef
All checks were successful
Security Scan / security (push) Successful in 9s
Test / test (push) Successful in 1m26s
refactor(store): adopt AX-friendly public names
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-30 13:51:58 +00:00

2 KiB

Go Reference License: EUPL-1.2 Go Version

go-store

Group-namespaced SQLite key-value store with TTL expiry, namespace isolation, quota enforcement, and a reactive event system. Backed by a pure-Go SQLite driver (no CGO), uses WAL mode for concurrent reads, and enforces a single connection to ensure pragma consistency. Supports scoped stores for multi-tenant use, Watch/Unwatch subscriptions, and OnChange callbacks — the designed integration point for go-ws real-time streaming.

Module: dappco.re/go/core/store Licence: EUPL-1.2 Language: Go 1.25

Quick Start

import (
    "fmt"
    "time"

    "dappco.re/go/core/store"
)

func main() {
    st, err := store.New("/path/to/store.db") // or store.New(":memory:")
    if err != nil {
        panic(err)
    }
    defer st.Close()

    st.Set("config", "theme", "dark")
    st.SetWithTTL("session", "token", "abc123", 24*time.Hour)
    val, err := st.Get("config", "theme")
    fmt.Println(val, err)

    // Watch for mutations
    w := st.Watch("config", "*")
    defer st.Unwatch(w)
    go func() {
        for e := range w.Events {
            fmt.Println(e.Type, e.Key)
        }
    }()

    // Scoped store for tenant isolation
    sc, _ := store.NewScoped(st, "tenant-42")
    sc.Set("prefs", "locale", "en-GB")
}

Documentation

  • Architecture — storage layer, group/key model, TTL expiry, event system, namespace isolation
  • Development Guide — prerequisites, test patterns, benchmarks, adding methods
  • Project History — completed phases, known limitations, future considerations

Build & Test

go test ./...
go test -race ./...
go test -bench=. ./...
go build ./...

Licence

European Union Public Licence 1.2 — see LICENCE for details.