Skip to main content
Zite.js is the framework for building business operating systems — the internal tools, portals, admin consoles, and workflows a company runs on. Every Zite app is a Zite.js app: real TypeScript in a workspace monorepo that you and your agents can read and extend. The framework assumes one database per workspace. Tables, roles, and row-level rules are defined once on that database, and the typed client applies them on every call — so an app is mostly the screens and the workflows, not an access layer you rebuild each time.

The surface

Platform code is imported through zitejs/* aliases. They’re generated into your workspace from its schema and workflows, which is why they know your table and workflow names: Workflows can also receive inbound webhooks, and the workspace’s roles and row-level rules live in zite.permissions.json.

A workflow

A backend workflow is one file. It reads the database through the typed client, and the frontend calls it with a generated, typed caller:

Who writes it

An agent connected to the Zite MCP scaffolds apps, writes the code, and publishes them from a cloud sandbox. The output is not a black box — it’s the monorepo above, which you can read, review, and edit like any other TypeScript project.
Don’t confuse the two clients. The zite client from zitejs/db is generated inside a Zite app. The Zite client imported from the package root is for calling the Database API from outside Zite with an API key — see the JavaScript SDK.

Next

Project structure

How a workspace is laid out, and which files are generated.

Database client

Query and mutate your tables with the typed zite client.