Tablinum – Local-first database for the browser Tablinum, a local-first database for the browser, has been released as an npm package, offering encrypted sync via NIP-59 and built-in collaboration with zero backend. The database stores data in IndexedDB, syncs to Nostr relays with end-to-end encryption, and provides TypeScript inference and reactive bindings for Svelte. Encrypted sync. Built-in collaboration. Zero backend. $ npm install tablinum Every record is gift-wrapped with NIP-59 encryption. The relay stores and forwards encrypted blobs — it never sees your data. A complete toolkit for local-first applications Your app works offline. All data lives on your device in IndexedDB. No server required, no loading spinners. Data syncs to Nostr relays, encrypted end-to-end with NIP-59 gift wrapping. Relay operators cannot read your data. Share databases with invite links. Key rotation on member removal — like changing locks when a roommate moves out. Define schemas with collection and field. builders. Full TypeScript inference from schema to query results. First-class reactive bindings using async runes. Queries inside $derived await ... auto-update when data changes. Effect-based structured logging with timing spans. From full debug output to complete silence in one config line. Use the Effect API for full control, or the Svelte API for reactive simplicity js import { Tablinum, collection, field } from "tablinum/svelte"; const schema = { todos: collection "todos", { title: field.string , done: field.boolean , }, { indices: "done" } , }; export const db = new Tablinum { schema, relays: "wss://relay.example.com" , } ; export const todos = db.collection "todos" ; js