Publish A Dotabase To The Web

Publish selected views of a Dotabase as an anonymous public page, share the link, and read the same publication back through CLI and REST.

Publishing produces two surfaces: a public page anyone can open without signing in, and a public data surface any agent can read. Both are served from the same publication record, so a visitor and an agent see the same rows and the same properties.

A publication names exactly what is public — the Dotabase, the view or views to serve, the properties that may be shown, and the public slug. Nothing outside that list leaves the workspace.

Before You Start

  • You need three inputs: the 's id, the id of each saved you want to publish, and the exact property keys visitors may see.
  • Authority. Publishing, editing, and unpublishing require workspace settings management; comment moderation requires row-update rights. See Access and Tenancy for how that authority is resolved.
  • The publication is tenant-scoped, but the slug is globally unique across the platform. A slug already taken is a conflict, not a silent overwrite.

1. Gather The ids

Read the Dotabase, then list its saved views:

CODE
dots dotabases describe reading-list
dots views list reading-list

Publish views you have already shaped for an outside reader. A view carries its own filters, sorts, grouping, and property order, and the public page renders it as configured, so filtering a view to the rows you want shown is how you control which rows appear. Views and Lenses covers what a saved view holds.

2. Publish

CODE
dots publications publish \
  --dotabase <dotabase-uuid> \
  --slug reading-list \
  --view <view-uuid> \
  --property title \
  --property status \
  --property body \
  --reactions
  • --dotabase takes the Dotabase's UUID, not its slug.
  • --slug is the public URL token: lowercase letters, digits, and hyphens, with no leading or trailing hyphen.
  • --view is repeatable; at least one is required. Each one adds a view to the public page.
  • --property is repeatable and is the whitelist. Only the keys you name are serialized; every other property is stripped, and relation targets are never followed into rows you did not publish. The reserved key body opts the row body in.
  • --reactions / --comments (and their --no- forms) turn public reactions and comments on or off. --calendar-property names the whitelisted date property a public calendar view should use.

Confirm it landed:

CODE
dots publications list

The published page is served by the app itself, outside the login gate, at /roadmap/<slug> and /embed/<slug> — on the hosted platform, https://app.mydots.ai/roadmap/reading-list. Open it in a logged-out browser and confirm the views render and only the whitelisted properties appear.

The served page is frame-locked, so framing it inside another site is refused — verify by navigating to it directly rather than by embedding it.

4. Read It As An Agent

The same publication is a machine surface with no credential involved. From a terminal, the dots public family reads it:

CODE
dots public manifest reading-list
dots public rows reading-list <view-uuid>
dots public get reading-list READ-1
dots public search reading-list "behavioural economics"

The manifest returns the publication's name, its published views, the whitelisted property schema, and the engagement configuration — enough for a client to know what it may ask for before asking. dots public graph <slug> <human-id> walks the neighbour graph around one published row, spanning every publication the same company has published and projecting each node through its own whitelist. No credential is read or sent; point the commands at another instance with --api-url=https://app.mydots.ai/api/v1.

The same plane is reachable through the REST namespace under /api/v1/public/publications/{slug}/. Some deployments also enable the anonymous Model Context Protocol endpoint at POST /api/v1/public/mcp. Check the deployed /llms.txt Agent surface section: it lists MCP only when an anonymous initialize request succeeds. Public reads carry cache headers and an ETag, so a repeated fetch of unchanged content is a cheap 304.

5. Take It Offline

CODE
dots publications unpublish <publication-id>

The publication row is retained and its status flips to unpublished; public reads deny immediately. Because the retired row keeps the slug, publishing something new on the same slug while it exists is a conflict — change the slug or bring the original back.

What Stays Private

The public plane fails closed. An unknown slug, an unpublished publication, a view outside the publication, a foreign or archived row, an empty whitelist, and a disabled reactions or comments surface all return the same non-disclosing "not found". A caller cannot tell which of those it hit, so probing the public surface reveals nothing about the structure behind it.

Publish A Dotabase To The Web · This page in the graph

Connected Records11

Documented by
Mentions
DOT
References
11 connections.