yaks.app

Technical details

This page explains how yaks.app hosts apps, stores data, runs code, controls access, and applies limits. For setup and everyday use, see Help.

Where it runs

yaks.app runs on Cloudflare. The platform uses one Cloudflare Worker, and app code runs in a Cloudflare data centre near the visitor.

Cloudflare supplies capacity as traffic changes, without a dedicated server for each app. An app with no traffic uses no compute.

Data storage

Each app has its own SQLite database inside a Cloudflare Durable Object. App databases are not shared.

The platform restricts each app to its own database when it handles a request. Your signed-in assistant can access your apps on your behalf.

Photos and files are stored in Cloudflare R2 under an app-specific prefix. Files are addressed by a hash of their contents, so uploading the same file twice stores one copy. The database stores file metadata; R2 stores the bytes.

Structured app data uses a graph of entities and components. Apps can declare their own components. See the developer guide for the data model.

Serving app files

An app consists of index.html and related CSS, JavaScript, image, and other files. There is no required framework or build step.

Files are served from R2 through Cloudflare's cache. A cached file can be returned from the edge without reading R2. Paths without a file extension receive index.html, which supports client-side routing and direct loads of nested URLs.

Each deployment creates a version, and the last twenty are kept. A rollback restores an earlier set of files as a new version. Rollbacks do not change saved app data.

Server-side code

Apps can receive webhooks or call APIs without exposing credentials in browser code. A worker.js file runs as a Cloudflare Worker in a Workers for Platforms namespace. App requests reach that worker first; a 404 response falls back to the app's files.

App code never receives your yaks.app sign-in session. The platform uses a token valid for sixty seconds and scoped to one app database and one visitor. It removes the token before app code receives the request. App secrets are stored separately and do not appear in app files.

Connectors and MCP

The MCP endpoint is https://yaks.app/mcp and uses Streamable HTTP. It supports Claude connectors, ChatGPT custom connectors, Claude Code, and other MCP clients. No yaks.app-specific client package is required.

Authentication uses OAuth with dynamic client registration. Accounts have no password; yaks.app emails a six-digit code and stores the browser session in a signed cookie. Only a keyed digest of the code is stored.

App pages do not use MCP. They import a client from their own URL and access the app database through query, apply, search, subscribe over a WebSocket for live updates, and upload for files.

Access levels

Each app has one of three access levels, which can be changed:

Invitations use email addresses and apply to the whole space, not one app. Members can be owners, editors, or viewers. Only members can change app files; the Open level applies to app data, not code.

Custom domains

A space, or one app in it, can use a domain you own in addition to yourname.yaks.app. On the space, the domain serves it the way that address does: your front page at / and each app at /appname/. On an app, that app answers at the root of the domain. It's a Cloudflare for SaaS custom hostname. Add a CNAME record at your registrar pointing to origin.saas.yaks.app. Cloudflare issues and renews the TLS certificate.

Your assistant can report whether the DNS record is visible, the hostname is accepted, and the certificate is issued. DNS standards do not allow a CNAME on a bare domain such as ourbookclub.com. Cloudflare's free DNS plan supports CNAME flattening for this case.

Limits

The free plan allows five apps, 1 GB of app data, and 100 emails a month. Plus allows unlimited apps, 10 GB of app data, 50 GB of photos and files, and 2,500 emails a month. Visits are reported against 50,000 a month on Free and 1,000,000 on Plus, but are not refused. Operations that exceed a limit are refused, but existing apps and data are not deleted. Your assistant receives a notice when usage reaches 80% of a limit.

The email limit counts incoming and outgoing messages, and only SENDING stops when the limit is reached. Incoming messages are still delivered. The count resets on the first day of each month.

The optional built-in builder includes five builds a month on Free and 100 on Plus. A build counts when it deploys an app, not per message. Apps built or changed through your connected agent do not use this allowance.

When something must be compiled — Rust to WebAssembly, say — the builder can run it in a Linux container and copy the result into your app. The container comes with Rust 1.98.1 (and wasm-bindgen 0.2.128, wasm-opt 132), Python 3.13.15 with pip, Go 1.27.1, Zig 0.16.0 — which is also its C and C++ compiler — and Deno 2.9.1 alongside Node and Bun. Anything else the builder installs for that session with apt or a download. One build gets 10 minutes of container time; past that the build says so and keeps whatever it has already shipped. The container is destroyed when the build ends, and everything in it with it.

Visits are counted but not refused. Apps remain available after the plan's monthly visit amount is exceeded. The pricing page has both plans in full.

These limits apply to both plans:

Current limitations

Exporting data

Ask your assistant to export an app: give me everything in the recipe box as a file. It can read the app's data and files and return them directly. No separate export request is required.

For a copy of what we hold about you, or to close your account, write to hello@yaks.app. The privacy page says what we keep and for how long.

More technical documentation

The developer guide documents the data model, queries, files, sharing, server-side code, and error handling.

Report an error on this page to hello@yaks.app.