Skip to content
Dee Wan 1.0 is not yet released (pre-MVP). See the 1.0 product boundary.

Sites

One installation can hold many sites. Each site has its own content, models, media, settings, roles and plugins. Content stays isolated unless its source explicitly grants a published public shared reference. An account belongs to the installation, and a grant gives it a role on one site. See People and access.

Only a superadmin can create a site.

  1. Open Settings → Site. Under Create a site, press New site.
  2. Enter a Name. The Slug fills in from the name; you can edit it before you create the site.
  3. Enter the Domain: the hostname the public API answers on for this site, such as www.example.com.
  4. Under What is this site for?, choose Website or Blog. This cannot be changed later. See Blog sites.
  5. Press Create site.

Name, slug and domain are all required. Each slug and each domain can belong to only one site, even when that site is inactive. A taken slug or domain is refused.

The Slug cannot be changed after creation. The name and the domain can.

Creating a site writes the site record only. Dee Wan does not set up DNS or a Worker route. Until the domain routes to the public Worker, the site is not served there. The screen says so after creation. See First site to published content.

A new site starts with the default editorial workflow, one default language and the built-in roles.

The site switcher in the sidebar shows the site you are working on. Open it and choose from Switch site. It lists active sites. Manage sites & access opens Settings.

The admin reloads after a switch, because every screen belongs to one site. When there is more than one site, Settings → Site also shows Current site with a button per site.

Press Ctrl/Cmd+K, or choose Search in the top bar, then type a screen name and press Enter. It lists only the screens and Settings sections your role can open. Escape closes it and returns focus. In the page editor, Ctrl/Cmd+K opens the section gallery instead; use Search there.

Open Settings → Site, edit Name or Domain, and press Save changes. You need the site settings permission (site:settings). The built-in admin role has it, and so does a superadmin.

A new domain moves the public API to that hostname in one step. Dee Wan does not set up DNS or a Worker route for the new name. Do that yourself, as at creation.

A site served by its managed design changes its address elsewhere: Change address in Settings → Source & delivery → Site template. See Change address.

  1. Open Settings → Site on the site you want to stop.
  2. Press Deactivate site at the bottom of the site details.
  3. Read the confirmation and press Deactivate site again.

You need site:settings, or must be a superadmin. When this is the only active site you can reach, the confirmation says that you can reactivate it from the start screen.

What stops at once:

  • The public API on the site’s domain answers 404. Anything that reads this site through the CMS public API, such as a renderer, gets no content.
  • Website forms on the site take no submissions.
  • Nobody can work on its content or settings: not in the admin, not through the management API or MCP, and not through plugins. This includes superadmins.
  • The site leaves Switch site for everyone. Only people who can reactivate it still see it, in Settings → Site and on the start screen. Everyone else no longer sees it at all.

What waits until the site is active again:

  • queued website form deliveries and the erasing of form values past their retention date
  • outbound webhook retries
  • import jobs, content planner runs and the Trash purge

Because erasure is paused, a deactivated site keeps submitted form values past their erase date until it is active again.

What fails: plugin work that comes due while the site is inactive is refused. For example, a Scheduling schedule that comes due is refused and not retried.

Nothing is deleted. Content, media, settings, grants and plugin installations stay as they were. The slug and domain stay reserved for this site.

Whoever may deactivate a site may reactivate it: a superadmin, or a person whose role on that site has site:settings, such as the built-in admin role. GET /api/sites lists an inactive site only to these people. People whose role on that site lacks site:settings, such as the built-in editor and viewer roles, do not see it, and their grants stay. When a grant is removed, the inactive site leaves that person’s list too.

Seeing an inactive site does not open it. Switch site lists active sites only, and nobody can work on the site’s content until it is active again.

From Settings, while at least one other site is active:

  1. Open Settings → Site on an active site. The page is there for anyone who can reactivate a listed site, even if their role on the current site is only editor or viewer.
  2. Under Current site, an inactive site has a greyed-out button with an inactive badge. Press Reactivate next to it.
  3. The site is active again. Choose it under Current site or in Switch site to work on it.

When every site you can see is inactive, the admin opens a start screen that says Every site is inactive. It lists each site you can reactivate, with its domain and a Reactivate button. Pressing it reactivates that site and opens it. If the server refuses, for example because your grant was removed in the meantime, the reason shows under the list.

A person whose every site is inactive, and who cannot reactivate any of them, sees No sites yet. and is asked to contact an administrator. A superadmin or an administrator of that site can bring it back.

Content was kept. Media, settings, grants and plugin installations are as they were. The waiting work listed above resumes, including the erasure of form values past their erase date. Plugin work that was refused while the site was inactive is not retried.

Give people access to the site in People and access.

Open Settings → Site → Shared content on the source site. Choose Content type, Entry, Destination site, Languages, then Share. This action requires site:settings on both sites and permission to update the source entry. No destination membership or source editing access is granted to destination editors.

Enable Shared references (sharedReferences) on the destination model-level relation field. Component fields cannot enable it (shared_reference_component_unavailable). Only nonhierarchical manyToOne and manyToMany fields accept shared targets. Ordinary relation targets remain in their own site. Choose an explicit shared target in the relation picker.

Delivery reads the source site’s current published public projection. Private fields and private models are excluded. Revoke, unpublishing, a disallowed language or an obsolete grant revision makes the reference unresolved; no old title is returned. The source remains its owner, including when sites use separate databases. Cross-database validation is rechecked on delivery; it does not claim one atomic transaction across sites.

Shared relations cannot combine sharedReferences with contextual target filterChoices; definition and runtime checks return shared_reference_choice_unavailable. Select-option conditions may still inspect whether a shared relation has a value.

A response resolves at most 128 distinct shared grant/language identities. Repeated references, including sync data and changes, reuse one current projection. Reduce the list or sync page size after shared_reference_limit.

Native bundle review checks the destination’s compatible current grants and apply rechecks them. Another destination or an unavailable grant returns shared_reference_destination_mismatch; references are never silently removed. A detached backend cannot enforce live cross-site grant custody, so generation refuses effective shared references with shared_references_require_live_delivery. Remove or replace those references before generating it.


Unreleased / pre-MVP; no stable version
Source revision: fe23db481c422b40e317b92fc98116b4c0c26a87 (modified checkout)
Build date (UTC): 2026-10-18T09:22:34.630Z
Upgrade target: unavailable: modified checkout. Release notes