Skip to content

Visual editor (Live Studio)

Every HTML artifact gets a chat-first WYSIWYG studio at /a/{slug}/edit. It is separate from the live viewer at /a/{slug}/. Non-HTML artifacts (Markdown, TXT, JSON, CSV) open the source editor at the same URL instead.

For a plain-English walkthrough aimed at non-technical users, see The editor.

URLPurposeAccess
/a/{slug}/editVisual studio — Agent, Inspect, Data railOwner, named editor collaborator, or workspace owner/admin (session required)
/a/{slug}/Live viewer — canonical share URLBased on artifact visibility
/p/{slug}/Live viewer alias (same serve path as /a/)Based on artifact visibility

Unauthenticated requests to /a/{slug}/edit redirect to Google login with redirect=/a/{slug}/edit.

Live Studio is gated by the module.visual_editor feature flag per workspace (default on). When disabled, /a/{slug}/edit returns a friendly unavailable page and edit controls in the home UI are greyed out.

Who can edit: the artifact owner (including linked accounts), a collaborator with the editor or owner role, or a workspace owner / admin on the artifact’s workspace. Plain workspace members still need an explicit editor collaborator invite — membership alone does not grant edit access.

The editor renders the artifact HTML in a sandboxed canvas iframe beside a glass studio rail:

Mode / panelWhat it does
AgentAI chat that sees the manifest and data model, keeps conversation history, streams prose, and proposes HTML patches (apply / reject)
InspectSelect a canvas element; edit style and ShareOut behavior inline — bindings, conditionals, actions, form fields, links/transitions, charts, templates
DataManifest data model (sources / tables / json), live row counts, inline JSON CRUD

Footer panels (open from the toolbar; share one glass surface with the rail):

PanelWhat it does
OutlineDocument structure (pages, sections, tabs)
DetailsRename, visibility, collaborators, delete
ValidationHTML spec compliance check (same rules as publish-time editor_readiness)
Version historyBrowse and roll back to previous publishes
ShareCopy link, embed code
ConnectWorkspace data connectors; add REST connections from the UI
Metrics & alertsFollowable metrics and threshold rules for this artifact
InboxInbound email captured by this artifact

Canvas edits write real data-shareout-* attributes. Changes flow through undo/redo → autosave draft → collab broadcast.

The studio chrome is a floating rail beside the canvas with a compact validity pill for spec warnings. The rail collapses to a peek tab; selecting a canvas element auto-switches to Inspect (disabled until something is selected). A persistent agent input strip stays available across modes.

Edit-Lite (Home tab)Live Studio (/a/{slug}/edit)
Best forQuick text, images, links, blocksBindings, data model, collab, full Inspect
SurfaceView/Edit toggle on an artifact tab in HomeDedicated editor URL
CollabSingle-player draftYjs multi-editor
AIRewrite selection in property panelFull agent with HTML patches

Same draft/publish API under /v1/artifacts/{id}/editor/*; Edit-Lite opens full editor ↗ when you need studio tools.

The visual editor resolves all SDK reads from manifest default values — json, tables, and live connectors (sources.connections.<name>.default). There is no live network fetch or warehouse query in the studio. An artifact that gates its UI behind await sdk.table(...).exec() or sdk.connection(...).query() still renders and stays editable when defaults are declared; a source with no default previews empty.

The studio reads the artifact’s HTML spec — it cannot infer structure. Without compliance, owners see empty Data and Outline panels and no binding autocomplete, even though the published page works fine in the viewer.

Studio featureRequired declaration
Data tab sources<script type="shareout/manifest">
Binding autocompleteManifest sources entries
Outline navigationdata-shareout-page, data-shareout-section, tabs
Inspect behavior editorsdata-shareout-binding, data-shareout-action, data-shareout-if, etc.
Template add/removedata-shareout-template

Verify compliance before publishing: HTML spec overview.

The studio autosaves edits as a draft. Drafts are separate from published versions — the live viewer continues serving the last published state until the owner explicitly publishes from the studio.

Draft concurrency is guarded by an optimistic check: POST /editor/draft accepts a baseUpdatedAt timestamp from the last load. A stale value returns 409 DRAFT_CONFLICT instead of overwriting a save made in another tab or by a collaborator.

Multiple editor collaborators can work simultaneously. Edits are broadcast via a Yjs WebSocket connection (/editor/ws). Draft saves are serialized with optimistic concurrency — a conflicting save is rejected rather than silently merged.

Owners bypass the access policy and see all data during authoring. Viewer-role collaborators are subject to the policy.

Agents normally create or update artifacts via POST /v1/publish. The studio also exposes authenticated routes under /v1/artifacts/{id}/editor/*:

RoutePurpose
GET /editorLoad editor state (html, draftUpdatedAt, collaborators, assets, …)
GET /editor/draftFetch current draft
POST /editor/draftSave draft (accepts baseUpdatedAt for optimistic concurrency)
DELETE /editor/draftDiscard draft
POST /editor/publishPublish from studio
GET /editor/historyVersion history list
POST /editor/rollbackRoll back to a previous version
POST /editor/uploadAsset upload
POST /editor/chat/{mode}Agent chat (SSE stream)
GET/POST /editor/sdk/{type}/{action}SDK config editors (sheets, github, realtime, slides, …)
WebSocket /editor/wsYjs collaboration channel
  • .so- classes + shareout.css — visual styling, preserved through every save.
  • data-shareout-* attributes — what the studio reads and edits.

These two layers are independent: changing visual styles in Inspect does not alter behavior attributes, and re-publishing updated data does not touch styling.

The visual studio described here covers general HTML artifacts. Slides and dashboards modules use their own editor/published artifact pair (/a/ editor + /p/ published viewer). See the slides and dashboards sections.