Admin UI
Companions:
- Configuration — the admin config file, isomorphic schema boundary, and public-bundle isolation rules.
- Collections — collection layouts, columns, preview URLs, and list-view extension points.
- Configuration API — the exact
AdminConfigand registration contract.
Byline's admin interface is assembled from a small, framework-agnostic component kit and wired into a host application through a deliberately code-split registration path. This section is for readers extending the admin surface or integrating it into their own app.
The Singletons guide explains how the admin dashboard, editor, history view, and upload controls represent a one-document resource without list or create routes.
- UI Kit —
@byline/ui, the framework-agnostic React primitives the admin is built from, and how to consume them in your own UI. - Admin-config registration — how the admin/editor configuration is registered on the client, why it is code-split away from public routes, and the trade-offs behind the current approach.
- Collection groups — arranging dashboard collections into labelled groups, and filtering cards to the collections an administrator is allowed to read.
- Richtext field capabilities — how a Lexical field decides which structures it accepts, how that differs from which controls it shows, and what happens to stored content a field no longer supports.
Document API view
The collection editor's API view shows the loaded document as an expandable JSON tree. It initially opens the document root and the next level, leaving deeper content collapsed. The content-locale and population-depth controls reload the document with the selected options.
Copy JSON and Download JSON sit just before the locale and depth controls, as icon buttons with tooltips. They export the complete loaded payload, including collapsed branches, as formatted JSON. They reflect the current locale and population depth; they do not fetch other locales or additional related documents. The downloaded file is named after the collection, document, locale, and any population depth above zero, such as docs-<id>-fr-depth2.json. If the browser refuses clipboard access, use Download JSON. This view inspects a document returned by the admin transport; it does not introduce a public HTTP API.
Concurrent editing and recovery
The editor loads a coherent current document together with its document-wide revision. Every mutation uses that observation. If another editor, SDK client, scheduler or structural operation commits first, Byline rejects the older mutation before it changes persisted state.
The editor retains the local form and shows a persistent warning near the document actions. All mutation controls for that editing session are blocked, including Save, workflow status, path, advertised locales, schedules, duplicate, delete, locale and tree actions. The editor can inspect or copy unsaved text, then choose Reload and discard my changes to fetch a coherent current form. Ordinary navigation continues to use the unsaved-change guard.
A confirmed database lock conflict uses a separate reload-required message. A committed after-hook failure says that the write committed and must not be submitted again. Missing revision payloads from an old browser fail closed and also require reload. These outcomes are transported as typed errors; the admin does not classify them by matching translated text or display raw database messages.
Document-wide revisions intentionally make edits in separate content locales conflict. All eight shipped admin-language bundles include the recovery copy; adding another admin locale requires translating the complete documentConcurrency.* key set before it can provide the same recovery flow. Locale-grain merging and unsaved-work recovery across a reload are outside the current interface.