What is Ramose?
Ramose is a database for TypeScript applications that need to work locally, synchronize in realtime, and expose the same product safely to AI agents.
You define three things in code:
- a schema describing entities, traits, fields, and relations;
- a policy deciding which facts and operations each principal may use;
- operations containing every authoritative change the product can make.
From that model, your web app gets typed local queries, durable offline mutations, and synchronization. Your deployment also gets one MCP endpoint with describe, query, mutate, and changeset. Restricted agent credentials omit mutate and prepare work for human approval. See Review agent changes.
query · mutate · offline describe · query · mutate The unusual part
Section titled “The unusual part”Ramose treats one typed database graph as the shared model for the application, its offline replica, authorization, operations, and MCP. Relations stay directly queryable instead of becoming database-routing boundaries.
What the application feels like
Section titled “What the application feels like”const tasks = useQuery( projectDb.query.from(Task).where({ done: false }).orderBy(Task.createdAt),)
task.mutate.setDone({ done: true })Queries run against a complete authorized local database. A cached answer can render before the network is available. Mutations are queued durably, may project an immediate local result, and are committed by the server through the operation you declared.
Where Ramose fits
Section titled “Where Ramose fits”Choose Ramose when you want:
- an offline-first or realtime product without building a cache and sync protocol;
- one coherent authorization model for related application data;
- application and agent access governed by the same rules;
- typed history, relations, and operations without running a managed database service;
- deployment into your own Cloudflare account.
Do not choose it for ad-hoc SQL analytics, full-text search, or a workload that exceeds a single database writer’s throughput. Ramose is pre-release and intentionally optimizes for fresh applications over compatibility with earlier APIs.