One WordPress.
A different admin for everyone.
WP Admin Workspaces replaces wp-admin with a configurable, React-based admin workspace — driven by a single workspace.json file.
A writer, a developer, a client, and a site manager don't need the same dashboard. Declare which screens exist, how navigation is structured, the branding, and the keyboard shortcuts. Swap the file, swap the experience. Same data, same plugins, same REST API underneath.
What it does
The admin, as configuration
Every surface of the admin is declared in JSON and rendered by a design-system-neutral kernel. No forking wp-admin, no rebuilding screens by hand.
Configurable screens & menu
An id-keyed map of screens plus an engine-agnostic menu tree. Add, hide, rename, reorder, or restrict any screen from one file.
Swappable engines
Three engines ship: a flagship sidebar layout, a mobile-first single pane, and a windowed desktop compositor. The renderer is a manifest choice.
Capability-aware
Four-layer capability gating with OR-semantic permissions and trust tiers. Navigation prunes screens a user can't reach — automatically.
Cascade resolver
Six origins (core → engine → plugin → site → role → user) merge like theme.json — declare only the deltas. Per-role and per-user workspaces fall out of the same mechanism.
REST-only, built on WPDS
Every screen reads and writes through the WordPress REST API and renders with the WordPress Design System. Anything the API can't do yet falls back to the native screen in an iframe.
Branding, theming & commands
DTCG token overrides, theme.json-shaped styling, a Cmd/Ctrl+K command palette, and bindable keyboard shortcuts — all declarative.
How it works
Three artifacts, three jobs
Apps and engines ship their own manifests; the install only declares decisions. The runtime reads this shape directly — there's no intermediate build step.
app.json
What an app is
ARIA role, requested platform services, capability floor, config schema, slots, and DataView baseline. Ships with the app's code.
engine.json
What an engine provides
Region templates, chrome modes, slots, the menu renderer, a default region tree, and default styles. Ships with the engine's code.
workspace.json
The install decisions
Which engine, which screens, the menu tree, commands, branding, and token overrides. This is the one file you author.
The whole config
A workspace is a delta
Drop an workspace.json at wp-content/workspace.json. Like theme.json over core's defaults, you declare only what changes — everything else falls through from the baseline.
- Pick the mobile-first engine with one key.
- Rename Posts → “Stories” without touching PHP.
- Gate the screen on a capability; nav prunes the rest.
- Visit
/wp-admin/— the workspace replaces classic wp-admin at the URL level.
{ "$schema": "…/docs/schemas/workspace.json", "version": 3, "$wpds": "6.9", "name": "writers-room", "engine": "core:single-pane", "default-screen": "posts", "screens": { "posts": { "label": "Stories", "icon": "post", "path": "/posts", "app": "core:posts", "config": { "postType": "post" }, "permissions": { "capabilities": [ "edit_posts" ] } } } }
Rendering
Bundled engines
The engine is the renderer — the chrome, the layout, the navigation idiom. Choosing one is a single line in the workspace. Engines are pluggable; the kernel itself is design-system-neutral.
| Engine | Idiom |
|---|---|
core:default | Flagship — dark chrome, expandable tree sidebar, elevated cards. |
core:single-pane | Mobile-first — appbar plus a collapsible navigation drawer. |
core:desktop | Windowed — compositor, dock, and draggable / resizable window frames. |
Shipped workspaces: wp-admin-default (mirrors stock wp-admin), single-pane-demo, and desktop-demo.
Get started
Install in a few minutes
The plugin ships the wp-admin-default baseline. With no workspace.json present, wp-admin stays classic and untouched — the file is both the trigger and the configuration.
On WordPress 6.7–6.9 only: activate the Gutenberg plugin first (it supplies a private-API allowlist those versions lack). WordPress 7.0+ ships it in core — no extra plugin needed.
Install WP Admin Workspaces: upload wp-admin-workspaces.zip via Plugins → Add New → Upload Plugin, or build from source with npm install && npm run build.
Turn the workspace on: copy a starter template to wp-content/workspace.json, e.g. cp workspaces/single-pane-demo.json wp-content/workspace.json — then edit it down to your deltas.
Visit /wp-admin/. Press Cmd/Ctrl + K for the command palette. A Classic wp-admin escape hatch stays in the admin bar.
Documentation
Read the references
Author-facing guides and the JSON Schemas that power editor autocomplete and validation.
workspace.json reference
The workspace file — every block, every key, with examples.
Open reference →app.json reference
Ship a React app that mounts inside a region. Roles, config schema, DataView baselines.
Open reference →engine.json reference
Build a renderer — region templates, modes, slots, menu renderer, default styles.
Open reference →Customizing the default workspace
A worked walkthrough of tailoring the flagship core:default workspace.
JSON Schemas
Schema 2020-12 for admin / app / engine / tokens. Point your $schema here.
README & architecture
The full picture: cascade, capability gating, theming, project structure.
Read the README →Make the admin fit the person using it.
Grab the source, copy a starter workspace, and reshape wp-admin with one file.