Tinybase
Skill ComeOnOliver/skillshub/skills/TerminalSkills/skills/tinybase
π§ The right skill, one API call. AI agent skills registry with token-efficient skill resolution. 5,000+ skills from 500+ top repos.From the repository description
npx -y skills add ComeOnOliver/skillshub --skill tinybaseAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
4.2 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
TinyBase β Reactive Data Store for Local-First Apps
You are an expert in TinyBase, the reactive data store for local-first applications. You help developers build offline-capable apps with structured tables, automatic reactivity, CRDT-based sync, persistence to IndexedDB/SQLite/Postgres, and relationship modeling β providing a complete client-side database that syncs across devices without a custom backend.
Core Capabilities
Store
import { createStore, createQueries, createRelationships } from "tinybase";
import { createLocalPersister } from "tinybase/persisters/persister-browser";
// Create store with tables
const store = createStore()
.setTablesSchema({
todos: {
text: { type: "string" },
done: { type: "boolean", default: false },
priority: { type: "number", default: 0 },
categoryId: { type: "string" },
},
categories: {
name: { type: "string" },
color: { type: "string" },
},
});
// Add data
store.setRow("todos", "t1", { text: "Build app", done: false, priority: 1, categoryId: "c1" });
store.setRow("todos", "t2", { text: "Ship it", done: false, priority: 2, categoryId: "c1" });
store.setRow("categories", "c1", { name: "Work", color: "#3b82f6" });
// Queries
const queries = createQueries(store);
queries.setQueryDefinition("activeTodos", "todos",
({ select, where, order }) => {
select("text");
select("priority");
where("done", false);
order("priority", true); // Descending
},
);
// Relationships
const relationships = createRelationships(store);
relationships.setRelationshipDefinition("todoCategory", "todos", "categories", "categoryId");
// Reactivity β listener fires on any change
store.addRowListener("todos", null, (store, tableId, rowId) => {
console.log(`Todo ${rowId} changed:`, store.getRow(tableId, rowId!));
});
// Persist to IndexedDB
const persister = createLocalPersister(store, "my-app");
await persister.startAutoLoad(); // Load on startup
await persister.startAutoSave(); // Save on every change
React Integration
import { Provider, useRow, useTable, useResultTable, useCell } from "tinybase/ui-react";
function App() {
return (
<Provider store={store} queries={queries}>
<TodoList />
</Provider>
);
}
function TodoList() {
const activeTodos = useResultTable("activeTodos"); // Auto-updates on data change
return (
<ul>
{Object.entries(activeTodos).map(([id, todo]) => (
<TodoItem key={id} id={id} />
))}
</ul>
);
}
function TodoItem({ id }: { id: string }) {
const done = useCell("todos", id, "done"); // Subscribes to single cell
const text = useCell("todos", id, "text");
return (
<li onClick={() => store.setCell("todos", id, "done", !done)}
style={{ textDecoration: done ? "line-through" : "none" }}>
{text}
</li>
);
}
CRDT Sync
import { createWsSynchronizer } from "tinybase/synchronizers/synchronizer-ws-client";
import { createMergeableStore } from "tinybase";
// Mergeable store (CRDT-based, conflict-free)
const store = createMergeableStore();
// Sync via WebSocket
const synchronizer = createWsSynchronizer(store, new WebSocket("wss://sync.example.com"));
await synchronizer.startSync();
// Now any device with the same store syncs automatically
// Offline changes merge cleanly when reconnected
Installation
npm install tinybase
Best Practices
- Local-first β Data lives on the client; works offline, syncs when online; instant UI responses
- Fine-grained reactivity β Use
useCellfor single value subscriptions; only re-renders what changed - CRDT sync β Use MergeableStore for multi-device sync; conflicts resolve automatically
- Queries β Define queries with select/where/order; reactive, auto-update when underlying data changes
- Relationships β Model foreign keys with
setRelationshipDefinition; navigate between tables - Persistence β Auto-save to IndexedDB, SQLite (via OPFS), or remote Postgres; seamless persistence
- Tiny bundle β Core is ~5KB gzipped; add only the modules you need (queries, relationships, sync)
- Schema validation β Define table schemas for type safety; rejects invalid data at write time
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.