Skip to content

Commit 4daad78

Browse files
docs: fold the ui/ top-level docs into the root README, ROADMAP and CONTRIBUTING (#26080 slice 1) (#27001)
Part of #26080 Clause-②: no Metadata-protocol: none ## 维护者速读 - 改了什么:`ui/` 下的 README、ROADMAP、CONTRIBUTING、QUICK_REFERENCE 四份顶层文档并入根目录同名文档后删除;`ui/CHANGELOG.md` 保留为冻结历史并加一行说明;README 里的代码示例搬到 `ui/content/docs/guide/quick-start.md`。 - 为什么改:裁决 6417494426(A,「其他同意」)第 1 片:一个仓一套贡献说明和路线图,不再有两份入门步骤、两份 ROADMAP。 - 风险与回滚:纯文档和测试改动,外加 33 个 `@object-ui/*` 包 README 里的两条链接(指向已归档的 objectui 仓 → 指向本仓根目录),带 patch changeset;回滚就是 revert 本 PR。 - 先看:① `ui/scripts/check-doc-component-types.mjs` 等三个门禁把 `ROOT_PAGES` 清空(README 示例改由 content/docs 那条腿判);② `ui/scripts/__tests__/quick-reference-commands-4149.test.ts` 改读根 CONTRIBUTING 的 UI 小节;③ `CONTRIBUTING.md` 新增的 “UI Workspace (`ui/`)” 小节。 - 两分钟验证:在 `ui/` 下跑 `pnpm docs:check-links`,预期输出 `Links are valid across 13 scan roots.`。 - 需要你做的:无,席位落地。 ## What changes Slice 1 of ruling A on #26080 (comment 6417494426), verbatim: 「其他同意」. The four `ui/` top-level documents are folded into the repository root and deleted. - **Root `README.md`** gains an "ObjectUI (`ui/`)" subsection under *Hack on the framework*: a workspace description (not a product pitch: no badge row, no three-product block, no links to the archived repository), the hero screenshot, and the two start paths. - **Root `CONTRIBUTING.md`** gains a "UI Workspace (`ui/`)" section: the UI-only delta of the old `ui/CONTRIBUTING.md` and the whole of `ui/QUICK_REFERENCE.md` (turbo commands, the vitest-from-`ui/` rule and the guard text, examples, layout, docs conventions). A second Package Directory block lists every `@object-ui/*` package, and the License section says contributions under `ui/` are MIT. The root's own setup steps are kept and not duplicated; the stale parts of the old file (fork-from-objectui, the `.objectstack-sha` pin, the `pnpm-merge` driver, objectui's own CI and coverage thresholds) are not carried over. - **Root `ROADMAP.md`**: the Console bullet and the documentation rule no longer send readers to the sibling `../objectui` repository, and a short "ObjectUI (`ui/`)" section carries the old pointer file's content. - **`ui/content/docs/guide/quick-start.md`** takes the README's code examples: an "Expression Scope" section ("Basic Usage") and "Copy-Paste Schemas" (Contact Form, Data Grid, Dashboard, Kanban Board). The README's ObjectStack-adapter and custom-`DataSource` snippets are not moved: the quick-start's "Connect a Data Source" and `guide/data-source.md` already carry them. - **`ui/CHANGELOG.md`** stays, with a one-line frozen-history header. - **Gates and pins retargeted, none deleted.** `ROOT_PAGES` is emptied in `check-doc-component-types`, `check-doc-snippet-types` and `check-doc-fence-languages` (the guard over it stays); `check-doc-json-fences` drops its root-README leg and that leg's anchor; `check-doc-links` drops the four `SCAN_ROOTS` rows. The pins that asserted the README fences (`page-body-single-node-8310`, `page-body-arity-8310`, `readme-kanban-example-8256`, the 7115 pins in three gate suites) assert the same fences on the quick-start page; `quick-reference-commands-4149` holds the root CONTRIBUTING's UI section to the same anchors (ui scripts, ui workspace packages, paths spelled `ui/...` and resolved in the tree); `object-calendar-container-by-reference-6152` stops adding the deleted README to its corpus. Fixtures that stood a root README / CONTRIBUTING / ROADMAP / QUICK_REFERENCE on the disk rule now use `AGENTS.md`, `CLAUDE.md` and `CHANGELOG.md`, the root-level rows that remain. The `markdown-test-inputs` ledger is re-adjudicated against the scanner. - **Links repointed.** 71 links in 36 files to `objectstack-ai/objectui/blob/main/CONTRIBUTING.md` / `ROADMAP.md` (the archived repository; the link gate resolved them against the deleted `ui/` files) now point at this repository's root documents, and so do the relative links in `ui/apps/console/README.md`, `ui/packages/plugin-gantt/ROADMAP.md`, `ui/packages/vscode-extension/{README,DESIGN}.md`, `ui/.changeset/README.md` and `ui/CHANGELOG.md` (a relative path out of `ui/` is refused by the link gate). Three anti-vacuity floors over judged-link counts move down by the measured amount, each with its reason in the comment. - **One example fixed in place.** Moving "Basic Usage" into `content/docs` put it under the objectui#11436 walk, which reds a taught `page` node that writes `title` with no `pageType` (a record page draws no heading). The README had taught that shape unseen; the example now says `pageType: "app"`. The 8310 pins assert substrings that are unchanged. - **Changeset** `ui/.changeset/26080-readme-contributing-links.md`: `patch` for the 33 published packages whose shipped `README.md` changed. No code, export or behaviour changes. Not touched: `ui/lychee.toml` and `ui/turbo.objectui.json` keep live readers (re-confirmed on this head: `ui/scripts/workspace-root.mjs` reads `turbo.objectui.json`, with `ui/scripts/__tests__/helpers/turbo-inputs.ts` and `workspace-root.test.ts`; `ui/scripts/__tests__/check-links-workflow.test.ts` reads `ui/lychee.toml`), so the ruling's delete condition does not hold and they stay on the card. `ui/.claude/**`, the `ui/docs/adr` index prefix, `ui/AGENTS.md` and every governed path are untouched (`check-governed-merges --test`: 0 of 71 paths governed). Overlap: draft PR #26365 edits `ui/README.md` (drops the `@object-ui/plugin-ai` row) and `ui/QUICK_REFERENCE.md` (the `packages/*` count). This PR deletes both files, which subsumes those two hunks; the `plugin-ai` row now lives in the root CONTRIBUTING's ObjectUI package directory, so whichever of the two lands second removes it there. #26073's edits (root README Community line, `ROADMAP.md:4`, `CONTRIBUTING.md:114`) are in regions this PR does not touch. ## Tests <details><summary>ui scripts suite and the affected package tests, on head 70e7d98</summary> `os-verify-lock.sh -c 'cd ui && pnpm exec vitest run --maxWorkers=2 scripts/ ...'` plus the four retargeted package tests, `page-node-headings-drawn-11436`, `registered-types-validate-ratchet-10859` and the tests the ledger lists as readers of the edited pages: ```text Test Files 187 passed | 2 skipped (189) Tests 5349 passed | 2 skipped (5351) os-verify-lock: VERDICT command-exit 0 ``` `pnpm --dir ui run type-check:scripts` (tsc over the scripts and their tests): exit 0. </details> ## Acceptance notes - `ui/.gitattributes` still routes `pnpm-lock.yaml` through a `pnpm-merge` driver, and its comment cites the deleted CONTRIBUTING section that defined the driver; `ui/` has no `pnpm-lock.yaml`, so the line matches nothing. Dead config of the same family as `ui/lychee.toml`; left for the card's remaining item. `ui/content/docs/guide/ci-cd-pipeline.md` (its "Lockfile Merge Driver" passage) still describes that CONTRIBUTING instruction. - `ui/scripts/setup.sh` advertises `pnpm build`, `pnpm lint` and `pnpm create-plugin`, which `ui/package.json` does not declare. Only its two "read this file" lines are repointed here. - `ui/.changeset/README.md` cites `.github/workflows/changeset-release.yml`, which is gone from `ui/`. - Package READMEs still link issues and examples in the archived objectui repository; only the CONTRIBUTING / ROADMAP links, which the link gate resolves into this tree, are repointed. - The README's comparison table against other renderers and its "Why Object UI" form snippet are not carried over (a product pitch, per the card's brand note 6416758216); the four Shadcn / backend / control / typed bullets are folded into the root README paragraph. ## Verification <details><summary>Local gates: dispatch-gates derivation, 27 families, each exit code captured before any pipe</summary> `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran`: `27 derived famil(ies) accounted for — 27 run, 0 NOT-MEASURED (a DERIVED zero — all 27 recorded an exit code and none of them is 3)`. Every family exited 0: check-adr-links (+ self-test), check-closing-keyword-parity (+ self-test), check-comment-mask-corpus, check-sdui-manifest (+ self-test), spec check:duration-unit-keys, check:cross-package-test-inputs, check:dispatcher-error-vocabulary, check:doc-anchors, check:driver-memory-census, check:engine-double-contract, check:gitlink-declared, check:nul-bytes, check:published-files, check:query-options-erasure, check:refd-timer-probe, check:skill-identifier-liveness, check:test-source-alias, check:tier-file-adoption, check:type-check-coverage, check:type-check-debt, check:undeclared-dep-imports, check:watch-hint-literal, check:where-matcher, and the ui scripts vitest run above. The check:* families ran on 657dff2; the last commit touches only the quick-start page and one test file, and nul-bytes, doc-anchors and cross-package-test-inputs were re-run on 70e7d98 (exit 0). Also on 70e7d98, each exit 0: ui `check:doc-types`, `check:doc-fences`, `docs:check-links` (`Links are valid across 13 scan roots.`), `markdown-test-inputs.mjs --audit` (`107 candidate test files, all adjudicated; 71 declared entries, all present.`), `check-doc-expression-carriage.mjs`, and the ui changeset gates (`check-changeset-fixed`, `check-changeset-no-major`, `check-changeset-claims`, `check-pending-changeset-literals`). NOT MEASURED locally: ui `check:doc-json` and `check:doc-snippets` (they need the ui package builds); CI's `Lint UI` / `Test UI` run them. The full farm is CI's. </details> --- _Generated by [Claude Code](https://claude.ai/code/session_01QSeKYmTYfaPbLQD4BJfomW)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 4eb1140 commit 4daad78

71 files changed

Lines changed: 839 additions & 1623 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
---
2+
'@object-ui/auth': patch
3+
'@object-ui/collaboration': patch
4+
'@object-ui/components': patch
5+
'@object-ui/console': patch
6+
'@object-ui/core': patch
7+
'@object-ui/create-plugin': patch
8+
'@object-ui/data-objectstack': patch
9+
'@object-ui/fields': patch
10+
'@object-ui/i18n': patch
11+
'@object-ui/layout': patch
12+
'@object-ui/mobile': patch
13+
'@object-ui/permissions': patch
14+
'@object-ui/plugin-ai': patch
15+
'@object-ui/plugin-calendar': patch
16+
'@object-ui/plugin-charts': patch
17+
'@object-ui/plugin-chatbot': patch
18+
'@object-ui/plugin-dashboard': patch
19+
'@object-ui/plugin-designer': patch
20+
'@object-ui/plugin-detail': patch
21+
'@object-ui/plugin-editor': patch
22+
'@object-ui/plugin-form': patch
23+
'@object-ui/plugin-gantt': patch
24+
'@object-ui/plugin-grid': patch
25+
'@object-ui/plugin-kanban': patch
26+
'@object-ui/plugin-list': patch
27+
'@object-ui/plugin-map': patch
28+
'@object-ui/plugin-markdown': patch
29+
'@object-ui/plugin-report': patch
30+
'@object-ui/plugin-timeline': patch
31+
'@object-ui/plugin-view': patch
32+
'@object-ui/providers': patch
33+
'@object-ui/react': patch
34+
'@object-ui/types': patch
35+
---
36+
37+
docs: the README's Contributing Guide and Roadmap links point at the ObjectStack repository (objectstack#26080)
38+
39+
Every package README linked its "Contributing Guide" and "Roadmap" to `CONTRIBUTING.md` and `ROADMAP.md` in the archived `objectstack-ai/objectui` repository. Those documents now live at the root of `objectstack-ai/objectstack`, which is where the links point; the `@object-ui/console` README's roadmap links move there too. No code, export or behaviour changes.
40+
41+
Clause-②: no
42+
Metadata-protocol: none

‎CONTRIBUTING.md‎

Lines changed: 181 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ each with its pointer.
2121
- [Making a Change](#making-a-change)
2222
- [Human Minimum](#human-minimum)
2323
- [Where Things Live](#where-things-live)
24+
- [UI Workspace (`ui/`)](#ui-workspace-ui)
2425
- [Package Directory](#package-directory)
2526
- [Pull Request Process](#pull-request-process)
2627
- [Community](#community)
@@ -197,11 +198,117 @@ same list.
197198
| `content/docs/references/` | Generated from the Zod schemas by `packages/spec/scripts/build-docs.ts`. Never edit it by hand. |
198199
| `content/docs/releases/` | Written at release time from changesets. Never edit it in a code pull request. |
199200
| `examples/` | The example apps. The *Examples* table in the [package directory](#package-directory) describes each one. |
201+
| `ui/` | ObjectUI: the `@object-ui/*` packages, the Console's source and the objectui.org docs site. [UI Workspace](#ui-workspace-ui) below covers working there. |
200202
| [ARCHITECTURE.md](./ARCHITECTURE.md) | Design details, the plugin lifecycle and the dependency graph. |
201203

202204
AGENTS.md (*Documentation Guardrails*) has the rules for every docs path, including what a
203205
new page needs before it shows up in the navigation.
204206

207+
## UI Workspace (`ui/`)
208+
209+
`ui/` holds ObjectUI, the view layer: the `@object-ui/*` packages, the Console
210+
(`ui/apps/console`) and the objectui.org docs site (`ui/apps/site`). It is a member of this
211+
workspace, so the root `pnpm install` above installs it too, and
212+
[ui/AGENTS.md](./ui/AGENTS.md) adds that tree's own rules to AGENTS.md: the spec-first and
213+
contract-first commandments, Shadcn-native styling, actions as data. Its code is MIT-licensed
214+
([License](#license)). What follows is only what differs from the rest of this guide.
215+
216+
### UI commands
217+
218+
Run these from `ui/`:
219+
220+
```bash
221+
pnpm exec turbo run build --filter='./*/*' --filter='!@object-ui/site' # Build every ui package (turbo, parallel & cached)
222+
pnpm exec turbo run type-check --filter='./*/*' # Run tsc --noEmit across the ui packages (turbo)
223+
pnpm exec turbo run lint --filter='./*/*' # Run eslint across the ui packages (turbo)
224+
pnpm dev # The Console's Vite dev server, on :5180
225+
pnpm site:dev # The docs site, on http://localhost:3000
226+
pnpm docs:check-links # The internal-link check CI runs on ui docs
227+
pnpm test:e2e # End-to-end tests (playwright)
228+
```
229+
230+
turbo resolves a relative filter against the directory it is launched from, so the filter above
231+
selects every package under `ui/packages/`, `ui/apps/` and `ui/examples/`. The tree has no
232+
`build`, `type-check` or `lint` script of its own, because a `turbo run` in a member's script
233+
would nest inside the root's. The ui packages spell the type-check task `type-check`, with a
234+
hyphen. The Console dev server proxies its API calls to a backend as
235+
[Getting Started](#getting-started) describes.
236+
237+
### UI tests
238+
239+
Run vitest **from `ui/`**, with paths written relative to it and **no `--`** before them:
240+
241+
```bash
242+
pnpm test # Run every vitest project (CI runs this)
243+
pnpm exec vitest run packages/core/ # Run a single package's tests
244+
pnpm exec vitest run packages/core/src/<file>.test.ts # Run a single test file
245+
pnpm exec vitest run apps/console/ # Run just the Console's tests
246+
```
247+
248+
`pnpm --filter <pkg> test` and `turbo run test` are fine too: every package's `test` script
249+
names the ui root (`vitest run --root ../.. packages/<pkg>/`), so they run the same single
250+
config CI does. What is still wrong is `cd packages/x && pnpm exec vitest`, and a path behind
251+
`--`. Each of those moves vitest's root into a package, where the `unit` / `dom` / `dom-heavy`
252+
projects match nothing and only `ui/apps/console` resolves: foreign files pass, your package
253+
never runs, and the output is green. A guard **exits non-zero** on them and prints the
254+
correct invocation. It is wired into every file vitest can pick up as a config:
255+
`ui/vitest.config.mts`, `ui/apps/console/vitest.config.ts`, and every
256+
`ui/packages/<pkg>/vite.config.ts`. The rejection looks like this:
257+
258+
```
259+
vitest 调用被拒绝:从包目录跑 vitest 会静默跑错测试集 (objectui#3378)
260+
...
261+
正确跑法 —— 一律在【仓库根目录】执行,路径前【不要】加 `--`:
262+
pnpm exec vitest run packages/<pkg>/src/<file>.test.ts # 只跑一个文件
263+
pnpm exec vitest run packages/<pkg>/ # 只跑一个包
264+
pnpm test # 全量(CI 跑的就是它)
265+
```
266+
267+
Its "repository root" is `ui/`. The guard is `ui/scripts/vitest-invocation-guard.mjs`.
268+
269+
### UI examples
270+
271+
No directory under `ui/examples/` is a dev server: `hello-world` is a snippet to paste into
272+
your own Vite or Next.js app (copy its app component and its schema), and `schema-catalog` is
273+
a data package, the canonical JSON schemas the docs render, a smoke test mounts and AI agents
274+
use as a few-shot corpus. Neither declares a `dev` script.
275+
[`ui/examples/README.md`](./ui/examples/README.md) is the index. The app to run is the Console
276+
(`pnpm dev` above).
277+
278+
### UI layout
279+
280+
| Path | Purpose |
281+
| --- | --- |
282+
| `ui/packages/*` | The published `@object-ui/*` packages, plus the private `vscode-extension`, `test-support` (test-only, never released), `runner` (workspace demo app, never released) and `app-shell` (the Console's shell and views, no longer published after 18.2.0) |
283+
| `ui/apps/console` | The Console app (Vite + React), which `pnpm console:build` builds into the `@objectstack/console` package |
284+
| `ui/apps/site` | The public docs site at <https://www.objectui.org> (fumadocs) |
285+
| `ui/examples/*` | The snippet and the schema catalog, see [UI examples](#ui-examples) |
286+
| `ui/content/docs/` | The docs site's pages |
287+
| `ui/docs/` | Internal engineering material (ADRs, audits); not part of the site |
288+
| `ui/e2e/` | Playwright end-to-end tests |
289+
290+
The [package directory](#package-directory) lists every `@object-ui/*` package by layer.
291+
292+
### UI documentation
293+
294+
The docs site's pages live in `ui/content/docs/`, and a page's path below it becomes its
295+
route under the site's /docs base, so an internal link between pages is written
296+
`[Quick Start](/docs/guide/quick-start)`, with the prefix. `ui/docs/` is not part of the site.
297+
298+
- **A code block in an ADR or a dated audit is a specimen, not an example to copy.** Fence it
299+
`plaintext`, never `ts` / `tsx`: a gate compiles the code fences of `ui/content/docs/`, and
300+
a record edited until it compiles says something it never said. Code a reader may copy
301+
belongs in `ui/content/docs/` or the skills tree.
302+
- **A `json` fence must pass a strict `JSON.parse`.** A block annotated with comments or
303+
trailing commas is fenced `jsonc`, and must still be one JSON document once those are
304+
removed; a `${…}` expression stays on one line inside its string.
305+
- **Internal links are checked offline.** `pnpm docs:check-links` resolves every relative
306+
path and site route against the checkout, and CI runs it on every change.
307+
308+
ObjectUI's [Quick Start](./ui/content/docs/guide/quick-start.md) and
309+
[Component Registry](./ui/content/docs/guide/component-registry.md) guides are the place to
310+
start when you add a component.
311+
205312
## Package Directory
206313

207314
<details>
@@ -331,6 +438,77 @@ new page needs before it shows up in the navigation.
331438

332439
</details>
333440

441+
<details>
442+
<summary><b>Everything in <code>ui/packages/</code></b> (ObjectUI, <code>@object-ui/*</code>, MIT), grouped by dependency weight — click to expand.</summary>
443+
444+
Atoms and fields stay light; heavy widgets live in lazy-loaded plugins.
445+
446+
#### Core
447+
448+
| Package | Description |
449+
| :--- | :--- |
450+
| [`@object-ui/types`](ui/packages/types) | Pure TypeScript definitions — the protocol layer |
451+
| [`@object-ui/core`](ui/packages/core) | Registry, validation, expression evaluation; zero React |
452+
| [`@object-ui/react`](ui/packages/react) | React bindings and `SchemaRenderer` |
453+
| [`@object-ui/components`](ui/packages/components) | Standard UI components (Tailwind + Shadcn) |
454+
| [`@object-ui/fields`](ui/packages/fields) | Field renderers and registry |
455+
| [`@object-ui/layout`](ui/packages/layout) | Layout components with React Router integration |
456+
457+
#### Application shell
458+
459+
| Package | Description |
460+
| :--- | :--- |
461+
| [`@object-ui/app-shell`](ui/packages/app-shell) | The Console's shell, views and Studio; a private workspace package, last published to npm as 18.2.0 |
462+
| [`@object-ui/providers`](ui/packages/providers) | The upload adapter context the file and image fields upload through |
463+
| [`@object-ui/auth`](ui/packages/auth) | `AuthProvider`, `useAuth`, `AuthGuard`, sign-in forms |
464+
| [`@object-ui/permissions`](ui/packages/permissions) | Object / field / row-level permission guards and hooks |
465+
| [`@object-ui/i18n`](ui/packages/i18n) | Language packs, RTL layout, date and currency formatting |
466+
| [`@object-ui/mobile`](ui/packages/mobile) | Responsive components, PWA support, touch gestures |
467+
| [`@object-ui/collaboration`](ui/packages/collaboration) | Presence, live cursors, conflict resolution, comment threads |
468+
| [`@object-ui/console`](ui/apps/console) | Fork-ready runtime console with the full plugin set, shipped as a Hono plugin |
469+
470+
#### Data adapters
471+
472+
| Package | Description |
473+
| :--- | :--- |
474+
| [`@object-ui/data-objectstack`](ui/packages/data-objectstack) | ObjectStack data adapter |
475+
476+
#### Plugins (lazy-loaded)
477+
478+
| Package | Description |
479+
| :--- | :--- |
480+
| [`@object-ui/plugin-view`](ui/packages/plugin-view) | ObjectQL-integrated object views (grid, form, detail) |
481+
| [`@object-ui/plugin-grid`](ui/packages/plugin-grid) | Advanced data grid |
482+
| [`@object-ui/plugin-form`](ui/packages/plugin-form) | Advanced form components |
483+
| [`@object-ui/plugin-detail`](ui/packages/plugin-detail) | Detail pages with sections, tabs, and related lists |
484+
| [`@object-ui/plugin-list`](ui/packages/plugin-list) | Unified list view with view-type switching |
485+
| [`@object-ui/plugin-kanban`](ui/packages/plugin-kanban) | Kanban boards with drag-and-drop (dnd-kit) |
486+
| [`@object-ui/plugin-calendar`](ui/packages/plugin-calendar) | Calendar views |
487+
| [`@object-ui/plugin-gantt`](ui/packages/plugin-gantt) | Gantt charts |
488+
| [`@object-ui/plugin-timeline`](ui/packages/plugin-timeline) | Timelines |
489+
| [`@object-ui/plugin-tree`](ui/packages/plugin-tree) | Tree and tree-grid views |
490+
| [`@object-ui/plugin-map`](ui/packages/plugin-map) | Map visualization |
491+
| [`@object-ui/plugin-charts`](ui/packages/plugin-charts) | Charts powered by Recharts |
492+
| [`@object-ui/plugin-dashboard`](ui/packages/plugin-dashboard) | Dashboard layouts and widgets |
493+
| [`@object-ui/plugin-report`](ui/packages/plugin-report) | Pivot tables, grouped aggregations, printable reports |
494+
| [`@object-ui/plugin-designer`](ui/packages/plugin-designer) | Visual page, data-model, process, and report designers |
495+
| [`@object-ui/plugin-editor`](ui/packages/plugin-editor) | Rich text editor powered by Monaco |
496+
| [`@object-ui/plugin-markdown`](ui/packages/plugin-markdown) | Markdown rendering |
497+
| [`@object-ui/plugin-chatbot`](ui/packages/plugin-chatbot) | Chatbot interface |
498+
| [`@object-ui/plugin-ai`](ui/packages/plugin-ai) | Schema generation and conversational assistants (Vercel AI SDK) |
499+
500+
#### Tooling
501+
502+
| Package | Description |
503+
| :--- | :--- |
504+
| [`@object-ui/cli`](ui/packages/cli) | Scaffold, develop, build, and validate schema-driven apps |
505+
| [`@object-ui/create-plugin`](ui/packages/create-plugin) | Scaffold a new Object UI plugin |
506+
| [`@object-ui/runner`](ui/packages/runner) | Universal application runner for testing schemas (private workspace app, not published) |
507+
| [`@object-ui/react-runtime`](ui/packages/react-runtime) | Trusted runtime execution for `kind: 'react'` pages |
508+
| [`vscode-extension`](ui/packages/vscode-extension) | IntelliSense and live preview for schema files |
509+
510+
</details>
511+
334512
## Pull Request Process
335513

336514
### Before Submitting
@@ -376,6 +554,8 @@ that code lives.
376554
## License
377555

378556
By contributing, you agree that your contributions will be licensed under the
379-
Apache License, Version 2.0 (see [LICENSE](./LICENSE) and [LICENSING.md](./LICENSING.md)).
557+
Apache License, Version 2.0 (see [LICENSE](./LICENSE) and [LICENSING.md](./LICENSING.md)),
558+
except contributions under `ui/`, which are licensed under the MIT License
559+
([ui/LICENSE](./ui/LICENSE)).
380560

381561
**Thank you for contributing to ObjectStack! 🚀**

‎README.md‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,31 @@ capability — drivers, server, auth, security, automation, AI — is a plugin.
233233
Design details, the plugin lifecycle state machine, and the dependency graph are
234234
in [ARCHITECTURE.md](./ARCHITECTURE.md).
235235

236+
### ObjectUI (`ui/`)
237+
238+
`ui/` is the view layer of ObjectStack: a schema-driven React renderer that turns a JSON
239+
schema or ObjectStack metadata into production React UI, usable on its own through the
240+
MIT-licensed `@object-ui/*` packages, and the source of the Console. Its components follow
241+
Shadcn's DOM structure and Tailwind utilities, it talks to any backend through one
242+
`DataSource` interface, heavy views (grid, kanban, calendar, gantt, dashboards, visual
243+
designers) are lazy-loaded plugins, and every schema is a TypeScript type in
244+
`@object-ui/types`, derived from `@objectstack/spec`. It builds on ideas from
245+
[Amis](https://github.com/baidu/amis), [Formily](https://github.com/alibaba/formily),
246+
[shadcn/ui](https://ui.shadcn.com/) and [Tailwind CSS](https://tailwindcss.com/).
247+
248+
<p align="center">
249+
<img src="ui/docs/screenshots/hero-sdui.png" alt="A kanban JSON schema on the left renders into a live kanban board on the right">
250+
</p>
251+
252+
| You want to… | Start here | Install |
253+
| :--- | :--- | :--- |
254+
| Render a JSON schema inside your React app | [Quick Start](./ui/content/docs/guide/quick-start.md) | `npm install @object-ui/react @object-ui/components` |
255+
| Build a UI from a JSON file, no React code at all | [`@object-ui/cli`](./ui/packages/cli) | `npm install -g @object-ui/cli` |
256+
257+
The guides are published at [objectui.org](https://www.objectui.org); working on `ui/` itself
258+
is covered in [CONTRIBUTING.md](./CONTRIBUTING.md#ui-workspace-ui), and its packages are listed
259+
in the [package directory](./CONTRIBUTING.md#package-directory).
260+
236261
### CLI
237262

238263
The CLI binary ships as both `os` and `objectstack`; `os --help` lists everything.

‎ROADMAP.md‎

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ docs, adapters, services, plugins, and the bundled console integration.
2121
`environment`, not `project`: `OS_ENVIRONMENT_ID`,
2222
`X-Environment-Id`, `/api/v1/environments/:environmentId`, and
2323
`environment_id`.
24-
- **Console UI:** framework serves the published ObjectUI console bundle from
25-
`packages/console`; active UI source development happens in sibling repo
26-
`../objectui`.
24+
- **Console UI:** framework serves the ObjectUI console bundle from
25+
`packages/console`; its source is the `ui/` workspace of this repository
26+
(`ui/apps/console` and the `@object-ui/*` packages), and `pnpm console:build`
27+
builds it into `packages/console`.
2728
- **Cloud publishing:** CLI publish/rollback target
2829
`/api/v1/cloud/environments/:environment/...` endpoints when pointed at an
2930
ObjectOS Cloud control plane.
@@ -53,8 +54,26 @@ docs, adapters, services, plugins, and the bundled console integration.
5354
- Use `environment` for runtime/deployment identity.
5455
- Use `project` only for npm/monorepo/project-folder meaning, or when quoting
5556
historical ADR text.
56-
- Link to sibling UI work as `../objectui` or the ObjectUI repo, not
57-
`apps/studio`.
57+
- Link to UI work by its path under `ui/`, never the archived ObjectUI
58+
repository, `../objectui` or `apps/studio`.
59+
60+
---
61+
62+
## ObjectUI (`ui/`)
63+
64+
The view layer is planned and tracked like the rest of this repository; plans and
65+
their status live where they are tracked, not in this file:
66+
67+
- **Open work:** [issues](https://github.com/objectstack-ai/objectstack/issues),
68+
filtered by the `area:*` labels for one feature axis and by `priority:*` for order.
69+
- **Release targets:** [milestones](https://github.com/objectstack-ai/objectstack/milestones)
70+
and the `target:*` labels.
71+
- **What has shipped:** each `@object-ui/*` package's own `CHANGELOG.md`;
72+
[ui/CHANGELOG.md](ui/CHANGELOG.md) is the frozen history of ObjectUI's own releases.
73+
- **Design decisions:** the ADRs in [ui/docs/adr](ui/docs/adr) for the view layer.
74+
75+
ObjectUI's long-form roadmap stopped at v3.3.2 (May 2026); it is in the git history of
76+
`ui/ROADMAP.md`.
5877

5978
---
6079

‎ui/.changeset/README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,6 @@ that input when you need the current title instead of memorising one.
107107
## Learn More
108108
109109
- [Full Changesets Documentation](https://github.com/changesets/changesets)
110-
- [Object UI Contributing Guide](../CONTRIBUTING.md#versioning-and-releases)
110+
- [Contributing Guide, step 5: changesets](https://github.com/objectstack-ai/objectstack/blob/main/CONTRIBUTING.md#making-a-change)
111111
- [Common Questions](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
112112

‎ui/CHANGELOG.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Changelog
22

3+
> **Frozen history.** This file is no longer updated: current `@object-ui/*` history is each package's own `CHANGELOG.md`, and the plan is the repository [ROADMAP.md](https://github.com/objectstack-ai/objectstack/blob/main/ROADMAP.md).
4+
35
This file is a **hand-curated summary** of notable changes across the monorepo. It is
46
updated at release time by whoever cuts the release — it is not generated. The `Auto
57
Changelog` workflow (`.github/workflows/changelog.yml`) exists to regenerate it with

0 commit comments

Comments
 (0)