Skip to content

Commit 335c473

Browse files
docs(concepts): add How ObjectStack compares and When to use ObjectStack (#22247)
Fixes #22240 Clause-②: no Two hand-written positioning pages under Core Concepts, English only, plus the wiring the card's Part C names. Docs-only: no `packages/**`, no `apps/docs/**`, no `content/blog/**`, no `README.md`, no `content/docs/references/**`, no `content/docs/releases/**`, no `CHANGELOG.md`, no binaries. ## What changed | File | Change | | :--- | :--- | | `content/docs/concepts/compare.mdx` | new, How ObjectStack compares (Part A) | | `content/docs/concepts/when-to-use.mdx` | new, When to use ObjectStack, and when not to (Part B) | | `content/docs/concepts/meta.json` | `compare`, `when-to-use` inserted after `ontology` | | `content/docs/concepts/ontology.mdx` | one pointer sentence closing "What it is not", one closing the page; nothing else | | `content/docs/concepts/index.mdx` | one sentence naming both pages, in the paragraph that introduces the ontology | | `scripts/docs-audit/handwritten-docs.json` | regenerated by `node scripts/docs-audit/check-audit-scope.mjs --write` (+2 added, -0 removed); not hand-edited | ## Measurements (head e0c7be1) | Page | Body words (`wc -w` after frontmatter) | `description` chars | `title` chars | | :--- | :--- | :--- | :--- | | compare.mdx | 1074 | 155 | 64 | | when-to-use.mdx | 870 | 152 | 40 | Both descriptions are real summaries inside the 110 to 160 range. ## Facts about ObjectStack, and where they come from - Federation: early and read-only by default, writes behind a double opt-in, per `content/docs/data-modeling/external-datasources.mdx` (section 5) and the existing wording on `concepts/ontology`. - Agent access: the MCP server is on by default, objects are tools, actions are tools only when the author exposes them (`ai.exposed`), permissions decide what an agent may call, per `ai/connect-mcp` and `ai/actions-as-tools`. - No number appears on either page. See the CRM-size note under Acceptance notes. ## Vendor facts dropped or narrowed (the card's rule: drop rather than guess) 1. Operational ontologies: "open-source reference implementations of the same pattern exist" is dropped. I could not trace it to a named public source. 2. Metadata platforms: "most of which added MCP servers in 2025 and 2026" is narrowed to "Several of them now offer MCP servers". Public docs confirm MCP servers for Salesforce (hosted MCP servers), NocoBase (MCP plugin), Twenty (marked alpha), Payload (MCP plugin) and Frappe (an experimental package). I found no first-party Odoo server, and the dates are not confirmed for every product. 3. Metadata platforms: "their metadata is configuration held in a database and authored in a UI" is narrowed to "In most of these platforms ...; where it is code, as with the Payload Config or Odoo's modules, it is framework code". Payload is configured in TypeScript and Odoo models are Python modules, so the card's sentence was not true of every named example. 4. AWS Context is named as a category example, with no availability status: public sources disagree on preview versus GA. 5. Microsoft Fabric IQ: "in preview" is kept behind "As of late 2026". The Learn overview marks the Ontology item as preview. No star counts, market claims, analyst quotes, "the only" or "the first" appear. Products are named only as examples after the category is described. The table carries one line saying each cell reads a category as a whole. ## Gates (all on head e0c7be1, exit code captured before any pipe) - `pnpm --filter @objectstack/docs build` under `scripts/pm/os-verify-lock.sh`: `VERDICT command-exit 0` (held the lock 84s). Both pages render: `/en/docs/concepts/compare` and `/en/docs/concepts/when-to-use` are emitted. - `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (no paths) derives 50 commands. All 50 exit 0. `--ran` reconciliation over a record carrying exit codes reports: 50 derived, 50 run, 0 NOT-MEASURED, 0 UNRUN, a derived zero. - These include `check:doc-anchors`, `check:doc-authoring`, `check:docs-audit-scope`, `check:docs-redirects`, `check:docs-single-h1`, `check:docs-transcript-drift`, `check:published-readme-links`, `check:nul-bytes`, `check:role-word`, `check-doc-frontmatter`, `check-doc-route-spelling --advisory`, `check-section-landing-index`, and the lint package's `check:doc-formula-expressions` and `check:doc-security-posture`. - I also ran four that were named in the dispatch but are not in the derivation: `check:docs-locale-catch-all`, `check:page-declaration-shape`, and `check-docs-nav-label` (self-test and real run). All exit 0. - An earlier round on a prior head had two problems. First, three gates exited 3 with PREREQUISITE NOT MET, which measures nothing; they went green after their packages were built (`@objectstack/formula`, `@objectstack/lint`, `@objectstack/client`, `@objectstack/client-react`). Second, `check:role-word` exited 1 because the five-questions list used the reserved word for access. It now uses the permission-set vocabulary of ADR-0090. - NOT MEASURED locally: the lychee link check (CI only), the Test Core and type-check lanes (no TypeScript touched), and the `Build Docs` CI job itself. The local docs build runs the same package script. ## Acceptance notes - **Measured CRM size: card premise vs. the tree.** The card allows one number, "the example CRM's size as the ontology page states it". `concepts/ontology` states no size. The figure lives on `concepts/metadata-driven` and `getting-started/how-ai-development-works` (1,792 lines across 31 files). That figure has drifted: the page's own count command, run on 3ae5966, prints 1,929 lines across 31 files. So `when-to-use` states no number and links to the measurement section instead. The drift is reported to the dispatching seat. It is outside this PR's file surface. - **Try it link.** The card's "Try it (quick-start)" points at a page that calls itself "the map, not a starting point" and sends builders to Build with Claude Code. "Try it" therefore links Build with Claude Code, and the quick-start page (Anatomy of an ObjectStack App) is linked beside it. - **Opening paragraph.** Two of the five sections the card asks for (metadata platforms, AI code generation) do not use the word "ontology". The opening says "three that use the word and two that answer the same question without it" rather than "four kinds of ontology and ObjectStack is a fifth". - Changeset: none. Nothing publishes. `packages/**` is untouched, and no published package's `files[]` ships `content/` or `scripts/docs-audit/`. --- _Generated by [Claude Code](https://claude.ai/code/session_011hRnra93sK5Q2gTYYTbdJR)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 7518ee3 commit 335c473

6 files changed

Lines changed: 237 additions & 0 deletions

File tree

‎content/docs/concepts/compare.mdx‎

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
---
2+
title: How ObjectStack compares — ontologies, semantic layers, low-code
3+
navTitle: How It Compares
4+
description: "ObjectStack beside knowledge ontologies, semantic layers, operational ontologies, metadata platforms and AI codegen: what each does well, where it differs."
5+
---
6+
7+
The word *ontology* covers several different kinds of thing in 2026, and the products
8+
that use it solve different problems. This page sets ObjectStack beside the five kinds
9+
of thing a reader is most likely to weigh it against — three that use the word and two
10+
that answer the same question without it. For each: what it is, what it is good at, and
11+
the one difference that matters. ObjectStack is none of the five; what it is instead,
12+
an executable business ontology, is defined on [Business Ontology](/docs/concepts/ontology).
13+
14+
## Knowledge ontologies
15+
16+
**What it is.** RDF and OWL, the W3C standards for describing a domain as statements,
17+
classes, properties and axioms, and the tools built on them, such as the Protégé editor. A
18+
reasoner infers facts nobody stored and checks that the whole description is
19+
consistent.
20+
21+
**What it is good at.** Shared vocabularies across organisations, integrating data that
22+
was never designed to fit together, and answering questions by inference.
23+
24+
**The difference.** A knowledge ontology describes a domain; nothing runs it as an
25+
application. ObjectStack's ontology has no axioms and no reasoner. It is validated, then
26+
run.
27+
28+
## Semantic and context layers over existing data
29+
30+
**What it is.** A layer that makes data living elsewhere legible to agents and
31+
analysts: business names, metrics, relationships and context over warehouses,
32+
lakehouses and operational databases. As of late 2026 the category includes the ontology
33+
item in Microsoft Fabric IQ (in preview), Databricks Genie with Unity Catalog metric
34+
views, Snowflake semantic views, AWS Context and Google Cloud Knowledge Catalog; in open
35+
source, metric semantic layers and agent memory graphs.
36+
37+
**What it is good at.** Consistent meaning over a large existing data estate, without
38+
moving the data. These layers are read-mostly; some add rules and actions on top.
39+
40+
**The difference.** The system of record stays where it was. ObjectStack's ontology is
41+
the system: the database, API, UI and agent tools are derived from it.
42+
43+
## Operational ontologies over existing systems
44+
45+
**What it is.** Objects, links, actions and permissions defined over data integrated
46+
from other systems, with edits written back. The Palantir Ontology is the reference: an
47+
action type packages edits to objects and links with its validation and side effects,
48+
and writeback keeps those edits in sync with the underlying data.
49+
50+
**What it is good at.** One governed model of objects and actions across many large
51+
systems that stay where they are, so people and agents can act on operational decisions
52+
in one place.
53+
54+
**The difference.** It is still a layer over systems that live elsewhere and, in
55+
Palantir's case, a proprietary platform. ObjectStack derives the database schema, API,
56+
UI and MCP tools from the definition, and it is Apache-2.0.
57+
58+
## Metadata-driven application platforms
59+
60+
**What it is.** Platforms where metadata generates tables, APIs and UI — the closest
61+
relatives. Salesforce's metadata is the ancestor; open-source cousins include Frappe
62+
Framework with ERPNext, Odoo, NocoBase, Payload and Twenty. Several of them now offer MCP
63+
servers, so agents can reach them too.
64+
65+
**What it is good at.** Building business applications quickly on a proven runtime, with
66+
packaged apps, modules and integrations to start from.
67+
68+
**The difference.** Where the definition lives, and who it is written for. In most of
69+
these platforms metadata is configuration stored in the platform's database and edited
70+
through its UI; where it is code, as with the Payload Config or Odoo's modules, it is
71+
framework code. ObjectStack's definition is typed, declarative TypeScript in your
72+
repository — versioned and reviewed as a diff, checked by `os validate` before it runs,
73+
and shaped for an AI to write.
74+
75+
## AI code generation
76+
77+
**What it is.** An agent writes a conventional codebase from a prompt: a schema,
78+
handlers, components, the glue between them.
79+
80+
**What it is good at.** It has no runtime ceiling. Anything code can do, it can produce.
81+
82+
**The difference.** The output is still code. It grows, its layers drift apart, and
83+
past a certain size no agent can hold it whole. Tests and type-checkers check the code
84+
against itself; nothing checks it against a definition of the business, because there is
85+
none. ObjectStack keeps the definition and moves the code into the runtime, and its gate
86+
rejects a wrong definition when it is written, not when it fails in production.
87+
88+
## Side by side
89+
90+
Each cell reads a category as a whole; individual products vary.
91+
92+
| | Executable | AI-writable | Agent-operable | You own it | Is the system itself |
93+
| :--- | :--- | :--- | :--- | :--- | :--- |
94+
| **Knowledge ontologies** | No — reasoned over | Possible | Query only | Yes — open standards | No |
95+
| **Semantic and context layers** | No — queried | Possible | Read-mostly | Varies | No — a layer |
96+
| **Operational ontologies** | Actions only | Possible | Yes | Mostly vendor-held | No — a layer |
97+
| **Metadata-driven platforms** | Yes | Varies | Often, via MCP | Varies | Yes |
98+
| **AI code generation** | Yes | Yes | If you build it | Yes | Yes |
99+
| **ObjectStack** | Yes | Yes — gated | Yes — by default | Yes — Apache-2.0 | Yes |
100+
101+
## Where the others are stronger
102+
103+
- **Existing data and legacy systems — semantic and context layers, operational
104+
ontologies.** When the data already lives in a warehouse, a lakehouse and a dozen
105+
operational systems, these start where you are. ObjectStack's
106+
[federation](/docs/data-modeling/external-datasources) is early and read-only by
107+
default; it is not a way to put one model over an existing estate.
108+
- **Reasoning over heterogeneous data — knowledge ontologies.** Inferring facts nobody
109+
stored, classifying by axioms, checking consistency, aligning vocabularies across
110+
organisations: a reasoner does this, and ObjectStack has none.
111+
- **Algorithm-heavy work and unusual interfaces — code.** An optimiser, a simulation, a
112+
canvas editor, a game: write code. ObjectStack can wrap an algorithm as an
113+
[action](/docs/ai/actions-as-tools), but its interface is server-driven from metadata,
114+
and an interface unlike any business app is easier to build directly.
115+
- **Ecosystem maturity and integrations — the metadata platforms.** Salesforce, Odoo and
116+
ERPNext bring years of production use, packaged applications, app marketplaces and
117+
implementation partners. ObjectStack is younger; expect to build more of it yourself.
118+
119+
## In one sentence
120+
121+
**One executable business ontology. AI writes it, the runtime runs it, agents operate
122+
it, you own it.** What that means, and what it does not, is on
123+
[Business Ontology](/docs/concepts/ontology); the argument is the essay
124+
[The Ontology Is the Software](/blog/the-ontology-is-the-software). Whether it fits your
125+
case is on [When to use ObjectStack](/docs/concepts/when-to-use).

‎content/docs/concepts/index.mdx‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ In the enterprise-AI vocabulary, the ontology is the software: the core (objects
9898
relations, actions, permissions, flows, agent and tool definitions) is what the runtime
9999
executes, and views, dashboards, apps, and translations are projections of it. See
100100
[Business Ontology](/docs/getting-started/glossary#business-ontology).
101+
[How ObjectStack compares](/docs/concepts/compare) sets it beside the other things called
102+
an ontology, and [When to use ObjectStack](/docs/concepts/when-to-use) says where it fits.
101103

102104
### When to Use Metadata-Driven
103105

‎content/docs/concepts/meta.json‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
"architecture",
55
"metadata-driven",
66
"ontology",
7+
"compare",
8+
"when-to-use",
79
"metadata-lifecycle",
810
"design-principles",
911
"north-star"

‎content/docs/concepts/ontology.mdx‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ bounds what an agent must hold to reason about the business: the core, not every
5656
- **Not a formal ontology in the philosophical sense.** It makes no claim about what
5757
exists in general. It is one business's application, defined precisely enough to run.
5858

59+
For these and the other things ObjectStack is weighed against, side by side, see
60+
[How ObjectStack compares](/docs/concepts/compare).
61+
5962
## How the runtime executes it
6063

6164
```text
@@ -98,3 +101,6 @@ surface as a human — never raw SQL or scraped UI. See
98101
Size is what makes both halves work. An app whose definition fits in one context window
99102
is one an agent can read whole, reason about whole, and refactor whole — apps small
100103
enough for AI to hold whole.
104+
105+
Whether that fits your business, and what to settle before you start, is on
106+
[When to use ObjectStack](/docs/concepts/when-to-use).
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
---
2+
title: When to use ObjectStack, and when not to
3+
navTitle: When to Use It
4+
description: "Where ObjectStack fits today and where it does not, the five questions to answer before you start, and what you get in the first weeks and after a year."
5+
---
6+
7+
ObjectStack is for business applications whose definition you want to own, that AI
8+
writes and agents operate. This page says where that fits today, where it does not,
9+
and what to settle before you start. What the word means is on
10+
[Business Ontology](/docs/concepts/ontology); how this differs from other things called
11+
an ontology is on [How ObjectStack compares](/docs/concepts/compare).
12+
13+
## A good fit
14+
15+
- **New business applications.** CRM, ticketing, approvals, operations and internal
16+
tools. Objects, relations, actions, permissions and flows are most of what these apps
17+
are, and they are exactly what the ontology declares.
18+
- **Teams small enough that one person, or a few, can define the business.** An agent
19+
writes the definition; someone still has to know what it should say. The fewer people
20+
who must agree on it, the faster the loop runs.
21+
- **ISVs shipping many vertical apps.** Each vertical is a definition on the same
22+
runtime. What differs between them is the definition, not the stack underneath it.
23+
- **The long tail of departmental apps around a core ERP.** The spreadsheets and
24+
low-code forms that track what the ERP does not — vendor onboarding, inspections,
25+
internal requests — are small, specific and change often. Each one becomes a typed
26+
definition in a repository instead of a file that gets emailed around.
27+
- **Back offices meant to be operated by agents from day one.** Every deployment is an
28+
MCP server, on by default: objects are tools, the actions an author exposes are tools,
29+
and permissions decide what an agent may call. See
30+
[Connect an MCP Client](/docs/ai/connect-mcp).
31+
32+
## Not a fit today
33+
34+
- **Replacing the core ERP or finance system of a large enterprise.** A general ledger,
35+
consolidation, tax and payroll carry regulation and edge cases that packaged systems
36+
already encode. Build around that core, not instead of it.
37+
- **Workloads whose value is integrating many existing systems.** ObjectStack can
38+
federate an external database as a datasource, but federation is early and read-only
39+
by default; writes need an explicit opt-in on both the datasource and the object. See
40+
[External Datasources](/docs/data-modeling/external-datasources). When the job is
41+
mostly making existing systems legible to agents, a layer over those systems fits
42+
better.
43+
- **Analytics over data lakes.** The [analytics layer](/docs/data-modeling/analytics)
44+
defines metrics over the app's own objects for its reports and dashboards. It is not
45+
built to query a lake.
46+
- **Algorithm-heavy domains, such as pricing or scheduling — unless the algorithm is
47+
wrapped as an action.** The ontology declares what can be done; it does not express an
48+
optimiser. Write the algorithm as code behind an
49+
[action](/docs/ai/actions-as-tools), and permissions, audit and agent access apply to
50+
it like any other action.
51+
- **Workloads that require a certified platform.** ObjectStack is open-source software
52+
you deploy and operate, and it carries no compliance certification of its own. Where a
53+
workload must run on a certified platform, certifying your deployment is work you own.
54+
55+
## Five questions before you start
56+
57+
The ontology is one sentence with five parts. Answer them for your business:
58+
59+
1. **What we have** — the objects and their fields.
60+
2. **How it relates** — the lookups and master-detail links between them.
61+
3. **What can be done** — the actions a user or an agent may take on a record.
62+
4. **Who may do it** — permission sets, row-level and field-level security, sharing.
63+
5. **What happens when** — record triggers, scheduled jobs, approvals, workflows.
64+
65+
If the team can answer them, the ontology is a day's work, because an agent does the
66+
writing. If it cannot, no tool helps yet, this one included. The first investment is
67+
answering these five questions, not installing anything.
68+
69+
## What you get and when
70+
71+
**In the first weeks.** One definition instead of four copies: the database schema,
72+
the API, the UI and the agent tools are derived from it, so a requirement changes in one
73+
place. Apps in days: an agent writes the definition, `os validate` rejects what would
74+
fail at runtime, and you review a small diff in the Console. The MCP surface is on by
75+
default, so agents connect under the same permissions as the people who use the app.
76+
77+
**After a year.** The ontology is an asset in your repository: ordinary TypeScript,
78+
versioned, reviewed as diffs, and run by an Apache-2.0 runtime. It does not depend on one
79+
model — any coding agent can write it and any MCP client can operate it. Every change
80+
passes the same gate before it runs.
81+
82+
**Later.** Operations that grow without headcount growing with them, because agents
83+
act through the same governed surface as people. Cheap experiments, because a new object
84+
or flow is a reviewed diff rather than a project. Cheap replication across entities — a
85+
new subsidiary, region or brand starts from a copy of the definition, not a rebuild.
86+
87+
All of this rests on the definition staying small enough for an agent to read whole;
88+
[the example CRM's measurement](/docs/concepts/metadata-driven#4-small-enough-to-fit-in-an-agents-context)
89+
shows what that looks like.
90+
91+
## Next steps
92+
93+
- **Try it** — [Build with Claude Code](/docs/getting-started/build-with-claude-code)
94+
walks the loop end to end, and
95+
[Anatomy of an ObjectStack App](/docs/getting-started/quick-start) shows how to read
96+
what the agent writes.
97+
- [Example Apps](/docs/getting-started/examples) — run a CRM and a kitchen-sink app.
98+
- [Business Ontology](/docs/concepts/ontology) — what the definition is.
99+
- [How ObjectStack compares](/docs/concepts/compare) — the other things called an
100+
ontology, and where they are stronger.

‎scripts/docs-audit/handwritten-docs.json‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,14 @@
6464
"content/docs/capabilities/request-template.mdx",
6565
"content/docs/capabilities/views.mdx",
6666
"content/docs/concepts/architecture.mdx",
67+
"content/docs/concepts/compare.mdx",
6768
"content/docs/concepts/design-principles.mdx",
6869
"content/docs/concepts/index.mdx",
6970
"content/docs/concepts/metadata-driven.mdx",
7071
"content/docs/concepts/metadata-lifecycle.mdx",
7172
"content/docs/concepts/north-star.mdx",
7273
"content/docs/concepts/ontology.mdx",
74+
"content/docs/concepts/when-to-use.mdx",
7375
"content/docs/data-modeling/analytics.mdx",
7476
"content/docs/data-modeling/drivers.mdx",
7577
"content/docs/data-modeling/external-datasources.mdx",

0 commit comments

Comments
 (0)