Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 26 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,25 @@
![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue.svg)
[![Docs](https://img.shields.io/badge/docs-objectstack.ai-0a0a0a.svg)](https://objectstack.ai/docs)

> ## Apps small enough for AI to hold whole.
> ## The ontology is the software.
>
> **One executable business ontology.** AI writes it, the runtime runs it, agents
> operate it, you own it.
>
> 本体即软件。一份可执行的业务本体。AI 写,运行时跑,Agent 用,归你所有。
>
> ObjectStack turns the whole app — data model, UI, workflows, permissions —
> into typed metadata that fits in a single context window. Agents read it
> whole, reason it whole, refactor it whole.
> into typed metadata that fits in a single context window: apps small enough
> for AI to hold whole. Agents read it whole, reason it whole, refactor it whole.
>
> That metadata is your **business ontology** — an open, versioned definition of
> your objects, permissions, and flows that you own, not code scattered across a
> framework. Strict TypeScript, Zod schemas, and a validation gate catch the
> agent's mistakes at authoring time; the runtime derives the database, REST API,
> UI, and MCP server, and enforces permissions and audit on every call.
> your objects, relations, actions, permissions, flows, and agent and tool
> definitions that you own, not code scattered across a framework. It is
> executable, not a knowledge-representation ontology: no inheritance, no
> axioms, no reasoner. Strict TypeScript, Zod schemas, and a validation gate
> catch the agent's mistakes at authoring time; the runtime derives the
> database, REST API, UI, and MCP server, and enforces permissions and audit on
> every call.

`Fits in an agent's context` · `Typed, validated, governed` · `Self-host anywhere` · Apache-2.0

Expand Down Expand Up @@ -152,7 +160,7 @@ The reason this works is the same reason TypeScript was the right host language:
**an agent's errors become located, corrective text it can read and fix itself**,
in seconds — instead of a silent runtime failure nobody traces back.

The other half is size. The bundled example CRM — [`examples/app-crm`](./examples/app-crm):
The other half is size: apps small enough for AI to hold whole. The bundled example CRM — [`examples/app-crm`](./examples/app-crm):
objects, views, a dashboard, a lead-conversion flow, permission sets, actions,
translations — is small enough for an agent to load end-to-end, reason about
every dependency, and refactor across data, API, UI, and permissions in one
Expand All @@ -163,9 +171,18 @@ hoping. Measure it yourself:
find examples/app-crm/src -name '*.ts' -not -name '*.test.ts' | xargs cat | wc -l
```

> Your objects, permissions, and flows are your business ontology — and the
> The ontology is the software. Your objects, relations, actions, permissions,
> flows, and agent and tool definitions are your business ontology — and the
> definition layer of the AI era should be an open protocol you own.
> [Read why](https://www.objectos.ai/en/blog/ai-ontology-open-protocol/).
>
> What that does and does not mean: the ontology is *executable*, so it is
> validated rather than reasoned over — there is no object inheritance, no
> axioms and no reasoner. It is not a semantic layer over your existing systems
> (federating an external datasource is read-only by default and early). Views,
> dashboards, apps, and translations are projections of the ontology, not part
> of it. And code does not disappear: it moves into the runtime — hooks, action
> bodies, CEL, and constrained JSX.

## Your app is AI-operable, for free

Expand Down
29 changes: 17 additions & 12 deletions apps/docs/app/[lang]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ const mono = IBM_Plex_Mono({

const HOME_TITLE = 'Metadata framework for AI-written apps';
const HOME_DESCRIPTION =
'ObjectStack turns the whole app — data model, UI, workflows, permissions — into typed metadata that fits in a single context window.';
'One executable business ontology. AI writes it, the runtime runs it, agents operate it, you own it. The whole app — data model, UI, workflows, permissions — is typed metadata small enough for AI to hold whole.';

/**
* The homepage's metadata. Its social card is the shared hero cover,
Expand Down Expand Up @@ -212,15 +212,16 @@ export default function HomePage() {
className="mx-auto mt-5 max-w-3xl text-[2.6rem]/[1.06] font-bold tracking-tight text-balance md:text-6xl/[1.04]"
style={{ fontFamily: 'var(--l-display)' }}
>
Apps small enough{' '}
The ontology{' '}
<span className="block bg-gradient-to-r from-indigo-500 to-purple-500 bg-clip-text text-transparent dark:from-indigo-400 dark:to-purple-400">
for AI to hold whole.
is the software.
</span>
</h1>
<p className="mx-auto mt-6 max-w-2xl text-lg text-fd-muted-foreground text-pretty">
ObjectStack turns the whole app — data model, UI, workflows, permissions — into
typed metadata that fits in a single context window. Agents read it whole, reason
it whole, refactor it whole.
One executable business ontology. AI writes it, the runtime runs it, agents operate
it, you own it. The whole app — data model, UI, workflows, permissions — is typed
metadata small enough for AI to hold whole: agents read it whole, reason it whole,
refactor it whole.
</p>
<div className="mt-8 flex flex-wrap items-center justify-center gap-3">
<Link
Expand Down Expand Up @@ -294,10 +295,12 @@ export default function HomePage() {
{/* ── what that metadata is, in prose ──────────────────── */}
<section className="relative mx-auto w-full max-w-5xl px-6 pt-12 md:pt-14">
<p className="text-base text-fd-muted-foreground text-pretty">
That metadata is your business ontology — an open, versioned definition you own.
Strict TypeScript, Zod schemas, and a validation gate catch the agent&apos;s mistakes
at authoring time, and the runtime derives the database, REST API, UI, and MCP
server — permissions and audit enforced on every call.
That metadata is your business ontology — an open, versioned definition of your
objects, relations, actions, permissions, flows, and agent and tool definitions that
you own. It is executable, not a knowledge-representation ontology: no inheritance,
no axioms, no reasoner. Strict TypeScript, Zod schemas, and a validation gate catch
the agent&apos;s mistakes at authoring time, and the runtime derives the database,
REST API, UI, and MCP server — permissions and audit enforced on every call.
</p>
</section>

Expand Down Expand Up @@ -447,8 +450,10 @@ export default function HomePage() {
<section className="relative mx-auto w-full max-w-6xl px-6 pt-8 pb-20 md:pb-28">
<div className="rounded-xl border border-fd-border bg-fd-card/60 px-6 py-8 text-center md:px-10">
<p className="mx-auto max-w-2xl text-sm text-fd-muted-foreground text-pretty">
Your objects, permissions, and flows are your business ontology — the definition
layer of the AI era should be an open protocol you own.{' '}
The ontology is the software. Your objects, relations, actions, permissions, and
flows are your business ontology — views, dashboards, apps, and translations are
projections of it, and the definition layer of the AI era should be an open
protocol you own.{' '}
<a
href="https://www.objectos.ai/en/blog/ai-ontology-open-protocol/"
className="inline-flex items-center gap-1 font-medium text-fd-foreground underline underline-offset-4 transition-colors hover:text-fd-primary"
Expand Down
5 changes: 5 additions & 0 deletions content/docs/concepts/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,11 @@ From this single definition, ObjectStack automatically:
2. **The API is a Consequence** — REST endpoints appear automatically from object definitions
3. **The Schema is the Application** — Your entire business logic lives in metadata files

In the enterprise-AI vocabulary, the ontology is the software: the core (objects,
relations, actions, permissions, flows, agent and tool definitions) is what the runtime
executes, and views, dashboards, apps, and translations are projections of it. See
[Business Ontology](/docs/getting-started/glossary#business-ontology).

### When to Use Metadata-Driven

✅ **Great for:** CRUD apps, SaaS platforms, admin panels, rapid prototyping, multi-tenant systems
Expand Down
8 changes: 8 additions & 0 deletions content/docs/concepts/metadata-driven.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,14 @@ Your entire business logic lives in:

The Kernel simply **interprets** these definitions.

In the enterprise-AI vocabulary, the ontology is the software. The ontology core is
objects, relations, actions, permissions, flows, and agent and tool definitions; views,
dashboards, apps, and translations are projections of it, not ontology. The ontology is
executable, so it is validated rather than reasoned over — there is no inheritance, no
axioms and no reasoner — and code does not disappear, it moves into the runtime (hooks,
action bodies, CEL, constrained JSX). See
[Business Ontology](/docs/getting-started/glossary#business-ontology).

### 4. The Tool Surface is Generated

**Traditional:** Every AI tool is manually described and wired to custom queries
Expand Down
22 changes: 20 additions & 2 deletions content/docs/getting-started/glossary.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,20 @@ arrived from that vocabulary, this is the term's referent here: the **Source** y
which the runtime derives the database schema, REST API, UI, and MCP server. See
[Metadata-Driven Development](/docs/concepts/metadata-driven).

The word is worth stating explicitly because ObjectStack's differs from the hosted
ontologies the category otherwise means by it, on two points:
The slogan this reduces to is **the ontology is the software**, and the word is worth
stating explicitly because ObjectStack's differs from what the term otherwise means, in
two directions.

**Against a knowledge ontology** (OWL, RDF, a knowledge graph): a knowledge ontology
*describes* a domain, is read-only to the systems that consult it, and is *reasoned over*
by an inference engine. An executable ontology *defines* the app, is *run* by the
runtime, and is *validated* rather than reasoned. ObjectStack has no object inheritance,
no axioms and no reasoner (the `abstract` key was removed from the spec for exactly that
reason, ADR-0049), and it is not a semantic layer over your existing systems —
federating an external datasource is read-only by default and early (see
[External Datasources](/docs/data-modeling/external-datasources)).

**Against a hosted ontology** (a graph held inside a vendor's system), on two points:

* **You own the definition.** It lives in your repository as ordinary TypeScript,
versioned in your VCS and reviewable as a diff, in a format specified and licensed
Expand All @@ -104,6 +116,12 @@ ontologies the category otherwise means by it, on two points:
of behaviour implemented somewhere else, so it cannot drift from the system it
describes.

**Core and projections.** The ontology core is objects, relations, actions,
permissions, flows, and agent and tool definitions. Views, dashboards, apps, and
translations are *projections* of that core — authored in metadata too, but not
ontology. And code does not disappear: it moves into the runtime, as hooks, action
bodies, CEL expressions, and constrained JSX.

Distinct from **semantic layer**, which in these docs means the narrower analytics
`dataset` layer (ADR-0021) that reports and dashboards bind to — see
[Analytics & Datasets](/docs/data-modeling/analytics).
Expand Down
Loading