Now available · Cloud or self-hosted

Three things you’ll never have to build again.

Versioned documents. Hierarchical trees. Multi-tenant isolation. All in one API. Share it with your team and your AI agents — open to every agent, private to yours.

// npm install @usewren/client
import { WrenClient } from "@usewren/client";

const wren = new WrenClient({ baseUrl: "https://…", apiKey: "wren_…" });

// 1. Documents — create in a collection
const doc = await wren.documents.create("events", { name: "Masters 2026" });

// 2. Versions — every update creates a new one
await wren.documents.update("events", doc.id, { name: "Masters 2026", champion: "Scheffler" });
await wren.labels.set("events", doc.id, "published");

// 3. Trees — attach to any path, fetch the whole branch in one call
await wren.trees.set("site", "/2026/masters", doc.id);
const bundle = await wren.trees.getFull("site", { label: "published" });

Collections, versions, trees.

Three primitives that compose. Pick the ones you need — they all come together.

Schema-free documents

POST any JSON object into a collection. Attach a JSON Schema later if you want validation. Bring binary assets along for the ride.

Versioned by default

Every mutation creates a new version. Roll back, diff, or time-travel to any point. No extra setup.

Label snapshots

Pin any version as published, draft, or staging. Serve different audiences from the same document.

Trees bundle hierarchy

Organize documents into named paths. Fetch whole subtrees with ?full=true. Make a tree public with one rule — only its published versions.

Query your data

Filter, project, and aggregate across documents. Return only the fields you need. Materialized queries auto-refresh on write.

wren.js data binding

Drop <script src="/wren.js"> into any HTML page. Web components like <wren-list> bind your data declaratively — no framework needed.

Built for AI agents

A built-in MCP server and llms.txt. Agents read your public data with no key and work in your private data as you — every write reversible. How it works →

Deploy, preview, promote

wren deploy to a preview, check it, then promote the whole site in one transaction. Roll back the same way.

Work together

Invite people by email straight into groups like Editors or Viewers. Admins can view the org as a member to help — and every change made that way is recorded as such.

Open to every agent. Private to yours.

One server, one MCP endpoint. What you publish, anyone’s agent can find and use. What you keep private, only your agents reach — with your permissions, and nothing they do is permanent.

Public data, no key

Any agent can connect to /mcp without signing up, see who publishes what, and read published sites and collections. Always the released version, never your drafts.

Private data, as you

“Sign in with WREN” from Claude, Cursor or VS Code, pick the org, and the agent works with your groups’ access. Or give it an API key. Revoke either at any time.

Safe to let it write

Agent writes land as new versions labeled preview. Review the diff, promote what’s good, roll back what isn’t. Nothing is overwritten.

# Read anyone’s public data — no account needed
claude mcp add --transport http wren-public https://wren.aemwip.com/mcp

# Work in your own org — opens a browser to sign in and choose the org
claude mcp add --transport http wren https://wren.aemwip.com/mcp/login

Set up Claude Code, Cursor or VS Code →

Three primitives. One API.

Each one is useful on its own — together they replace a week of plumbing.

1

Collections hold your data

POST any JSON object. Schema-free by default, or attach a JSON Schema when you’re ready to lock it down. Binary uploads are first-class.

2

Versions remember everything

Every write creates a version. Diff, roll back, or pin a label to serve a specific snapshot to your clients.

3

Trees give you structure

Organize documents into a named hierarchy. Fetch a single path, bundle a subtree, or expose the whole thing as public URLs.

A handful of endpoints. Documents, versions, trees.

The full API is documented at /docs. Here’s the shape of it.

bash
# Create a document
curl -X POST /api/v1/events \
  -d '{"name": "Masters 2026"}'

# Update (creates version 2)
curl -X PUT /api/v1/events/abc \
  -d '{"name": "Masters 2026", "champion": "Scheffler"}'

# Pin a label
curl -X POST /api/v1/events/abc/labels \
  -d '{"label": "published"}'

# Attach to a tree path
curl -X PUT /api/v1/tree/site/2026/masters \
  -d '{"documentId": "abc"}'

# Bundle the published snapshot of the whole site tree
curl /api/v1/tree/site?full=true&label=published

First-class TypeScript & Python clients.

Documents, versions, labels, trees. Full types. Zero extra dependencies. Works in Node, Bun, and async Python.

TypeScript & JavaScript npm install @usewren/client
import { WrenClient } from "@usewren/client";

const wren = new WrenClient({ baseUrl, apiKey });

// Documents
const doc = await wren.documents.create("events", data);

// Versions & labels
const hist = await wren.versions.list("events", doc.id);
await wren.labels.set("events", doc.id, "published");

// Trees
await wren.trees.set("site", "/2026/masters", doc.id);
const bundle = await wren.trees.getFull("site");
Python pip install usewren-client
from wren import WrenClient, AsyncWrenClient

# Sync — documents, versions, trees
with WrenClient(base_url, api_key=key) as wren:
    doc = wren.documents.create("events", data)
    wren.labels.set("events", doc.id, "published")
    wren.trees.set("site", "/2026/masters", doc.id)

# Async
async with AsyncWrenClient(base_url, api_key=key) as wren:
    bundle = await wren.trees.get_full("site")

Start free. Scale when you’re ready.

Every plan includes the full API, Admin UI, versioning, labels, trees, and binary assets.

Free

$0/month

For personal projects and experiments.

  • 1 organization
  • 3 collections
  • 1 000 documents
  • 100 MB storage
  • 10 000 API requests / day
  • Community support
Get started

Enterprise

Custom

For production workloads and compliance.

  • Unlimited organizations
  • Unlimited collections
  • Unlimited documents
  • Unlimited storage
  • Unlimited API requests
  • Unlimited collaborators
  • SSO & audit logging
  • Self-hosted or managed
  • Dedicated support & SLA
Contact us