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.