OpenStation
OpenStation Gutenberg editor sidecar preview
by Daniel López Sánchez · github.com/regionallyfamous/sidecar · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/regionallyfamous/sidecar/releases/download/sidecar-openstation-1.1.0-2026-08-18/openstation.zipReadme
WP OpenStation
A WordPress plugin that reimagines /wp-admin as a desktop operating system. Admin screens open as draggable, resizable, minimizable windows on a desktop, with a left-edge dock built from the admin menu. Purely opt-in per user — the classic admin stays untouched for everyone else, and deactivating the plugin restores vanilla Core exactly.
Zero Core patches. Every feature is wired through public WordPress hooks.
Demo
Contents
- Demo
- Current State
- Still ahead
- Repository layout
- Bundled extensions
- How to run it
- Requirements
- For plugin authors
- License
Current State
-
Per-user opt-in Admin-bar toggle sets the
desktop_mode_modeuser meta. A dedicated/openstation/portal URL auto-enables OpenStation for first-time visitors (gated byopenstation_portal_auto_enable) and theadmin_initredirect sends opted-in users from/wp-admin/to the portal (openstation_admin_redirect_to_portal). -
Desktop shell Fixed-viewport desktop that overlays
/wp-admin: wallpaper area, unified dock (placement picked in OS Settings — left / right / bottom, default bottom), right-column widget layer, and full windowing system.openstation_mode_init,openstation_shell_before/_after, and theopenstation_shell_configfilter are the main extension points. -
Window system — iframe + native Iframe windows load admin pages with
?openstation_chromeless=1(chromeless mode). Native windows render directly in the parent DOM viaopenstation_register_window()/wp.os.registerWindow()— multi-tab native windows are supported throughopenstation_register_window_tab(). Both types share drag, resize, minimize, maximize, close, fullscreen, and detach-to-new-tab. -
Gutenberg Sidebar Window Gutenberg editor windows gain a title-bar launch chooser for Post settings, Block settings, and plugin sidebars discovered from Gutenberg's own complementary-area toggles. Choosing an entry opens it in a real sibling OpenStation window. The companion keeps an always-visible Sidebar panel selector directly below its title bar, so choosing another panel switches the existing companion in place without returning to the source window. While the pair is connected, Gutenberg's own Settings and plugin-sidebar buttons in the source editor also switch that same companion instead of reopening the parked source sidebar. The source stays floating and parks its sidebar; an ephemeral iframe-backed companion opens directly against its inline end at the measured Gutenberg sidebar width (320px fallback) and the same height. The shell shifts or minimally narrows the source only when the connected pair would otherwise leave the desktop. The companion loads the same post URL and hides its duplicate canvas so only Gutenberg's complementary area remains beneath narrow connected OpenStation chrome. This is an attached pair, not a full-screen split. A true sibling requires a second Gutenberg document, with a separate data registry, undo history, dirty state, and autosave lifecycle; OpenStation does not synchronize those two editor instances.
-
Dock One unified rail hosting every admin menu — core and plugin alike — plus shell-level system tiles. Placement (left / right / bottom) is the user's OS Settings preference. Core menus are ordered before plugin menus; per-item hiding via
openstation_dock_placement('hidden'). Per-item multi-window support viaopenstation_dock_item_multi. Letter-badge icon fallback for plugins without icon art. -
Virtual desktops (“Spaces”) Multiple desktops per user, each with its own window set. Overview grid (zoom-out view) surfaces the Spaces switcher, thumbnails, and create/close controls.
-
Arrange & snap Admin-bar Arrange menu: Cascade, Tile, Overview, Snap to grid. Plugins contribute custom entries via
openstation_arrange_menu_itemsand react to clicks viaos.arrange.custom-action. Tile grid dimensions and snap cell size are both filterable. -
Wallpaper registry Server- and client-side registration (
openstation_register_wallpaper()/wp.os.registerWallpaper()). CSS presets + canvas (WebGL/2D) wallpapers with collision-aware surface data (wp.os.getWallpaperSurfaces()) for snow/rain/physics effects. In-panelrenderEditorcallback for custom controls, shared vendor-module loader (pixijspre-registered). -
Widgets Right-column floating cards, optionally draggable / resizable outside the column.
openstation_register_widget()/wp.os.registerWidget(). Built-in clock. User placement persists per-user inlocalStorage. -
Desktop icons Wallpaper-layer shortcuts via
openstation_register_icon()— targets a registered native window or an admin URL. -
AI Assistant + slash commands Cmd+K palette backed by an OpenAI agentic loop whose
search_posts/search_pages/search_commentstools run WordPress's native keyword search. Admin-configured API key + model picker. The only automatic AI analysis is comment spam scoring (on comment save), which feeds the comments-window spam score; posts, pages, and terms are not analyzed.wp.os.registerCommand()adds slash commands with autocomplete (suggest()), confirm dialogs (ctx.confirm()), and full lifecycle hooks (before-run/after-run/error). Built-in/open [window]is extensible viaos.open-command.items. -
Palette registry Cmd+K cycles through all registered palettes (
wp.os.registerPalette()) — the AI assistant is palette 0 by default; additional plugin overlays share the shortcut. -
Cross-frame drag bridge Media-library attachments drag across iframe boundaries via coordinated postMessage. Site-wide toggle through the Extended Options REST endpoint.
-
Toast notifications Shell-level toasts rendered via the
<os-toast>component. Plugins register their own tone/icon via theopenstation_toast_typesfilter. Iframe pages raise a toast through theos-notificationbridge message — it survives the iframe's own lifecycle. -
OS Settings Native-window settings panel: wallpaper picker (with HD-only media filter), accent color swatches + custom gradient editor, dock size slider, AI platform config, and per-user default-on-startup window. Persisted via
/desktop-mode/v1/os-settings. -
Session persistence Full window stack (including desktops, focus, state) is debounce-saved to
/desktop-mode/v1/sessionand restored without layout flicker. Viewport-shrink clamping keeps off-screen windows reachable. -
postMessage bridge Typed messages for title changes, navigation (same-origin validated), focus, color-scheme sync, screen-meta panels (Screen Options / Help), external-link capture, iframe-ready handshake, and observability (
iframe-error,iframe-network). -
UI component library ~25
<os-*>web components (os-button,os-menu,os-panel,os-range-field,os-swatch,os-toast,os-tabs, …) available to plugin authors — rendered server-side viaopenstation_component()or imported in TS. -
i18n Full gettext coverage across PHP and TypeScript; Spanish translation shipped. Strings go through
wp.i18n(__,_x,_n,sprintf) directly — no shell-specific re-export. -
Component registration API Stable
openstation_register_*functions for windows, widgets, wallpapers, icons, and window tabs. All returntrue/WP_Errorwith documented error codes. -
Public hook API Comprehensive PHP and JS hook surface — dock items, placement, multi-window, native-window lifecycle, widget lifecycle, wallpaper lifecycle + surfaces, window lifecycle, iframe observability, arrange actions, virtual-desktop transitions, palette registration, command lifecycle, batch close, AI prompt + model + post-type filters, accents, toast types, default wallpaper. See
docs/hooks-reference.mdanddocs/javascript-reference.md.
Still ahead
- Mobile (phone OS) — purpose-built home-screen grid, full-screen apps, app switcher, gesture nav, bottom tab bar.
- Tablet hybrid — split view, slide-over, horizontal dock.
wp.os.mode = 'desktop' | 'tablet' | 'mobile'surface. - Cross-window drag & drop (the North Star) — extend the current drag bridge to Media → Gutenberg block insertion, with pluggable mime-type negotiation.
- Polish — color-scheme-aware variables across all shell surfaces, View Transitions API animations, full a11y audit (ARIA, focus traps, keyboard nav).
- …and a whole lot more hooks, filters, and actions — every new surface lands with its own extension points, so this list keeps growing.
See docs/architecture.md for how the pieces fit together and docs/hooks-reference.md for the hook surface (current and planned).
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| sidecar-openstation-1.1.0-2026-08-18 | Aug 18, 2026 | openstation.zip | 8 |
| sidecar-connected-inspector-1.1.0-2026-08-17-r7 | Aug 18, 2026 | openstation.zip | 5 |
| sidecar-connected-inspector-1.1.0-2026-08-17-r6 | Aug 18, 2026 | openstation.zip | 1 |
| sidecar-connected-inspector-1.1.0-2026-08-17-r5 | Aug 18, 2026 | openstation.zip | 5 |
| sidecar-connected-inspector-1.1.0-2026-08-17-r4 | Aug 18, 2026 | openstation.zip | 4 |
| sidecar-connected-inspector-1.1.0-2026-08-17-r3 | Aug 18, 2026 | openstation.zip | 2 |
| sidecar-connected-inspector-1.1.0-2026-08-17-r2 | Aug 18, 2026 | openstation.zip | 5 |
| sidecar-connected-inspector-1.1.0-2026-08-17 | Aug 18, 2026 | openstation.zip | 2 |
| sidebar-window-native-buttons-1.1.0-2026-08-17 | Aug 18, 2026 | openstation.zip | 3 |
| sidebar-window-panel-selector-1.1.0-2026-08-17 | Aug 18, 2026 | openstation.zip | 3 |
| sidebar-window-chooser-jetpack-1.1.0-2026-08-17 | Aug 18, 2026 | openstation.zip | 8 |
| sidebar-window-connected-1.1.0-2026-08-17-r3 | Aug 18, 2026 | openstation.zip | 3 |
| sidebar-window-connected-1.1.0-2026-08-17-r2 | Aug 18, 2026 | openstation.zip | 1 |
| sidebar-window-connected-1.1.0-2026-08-17 | Aug 18, 2026 | openstation.zip | 2 |
| sidebar-window-external-preview-2026-08-17 | Aug 17, 2026 | openstation.zip | 6 |
| sidebar-window-preview-2026-08-17 | Aug 17, 2026 | openstation.zip | 4 |
| editor-sidecar-preview-2026-08-17-2 | Aug 17, 2026 | openstation.zip | 3 |
| ci-artifacts | Aug 17, 2026 | pr-2-72d0772abc2d7f2e6eefe1e45a2f51654ea3d461.zip | 0 |
| ci-artifacts | Aug 17, 2026 | pr-1-6ecfd759c7480e7dad72aafb19885974677a1832.zip | 0 |
| ci-artifacts | Aug 17, 2026 | pr-3-b8a2f04c8e69a4dfc533578d0ba081ee81664224.zip | 0 |
| ci-artifacts | Aug 17, 2026 | pr-4-be94c7b225e27b775d6476bd3c2453f6466ee54c.zip | 0 |
| ci-artifacts | Aug 17, 2026 | pr-4-005b5d7c1b05278b13554788ce38e8e4855d972f.zip | 0 |
| ci-artifacts | Aug 17, 2026 | pr-4-c30c91889bf0a2950553118d4e26f286b1b9c87d.zip | 0 |
| ci-artifacts | Aug 17, 2026 | pr-4-fe74662f532ccff4d0b32e9fe1aac4ac26d0f53f.zip | 0 |
| ci-artifacts | Aug 17, 2026 | pr-4-0cb154e03bb878a7073016446038335b7060ddb7.zip | 0 |
Active-site estimate ≈10 comes from the sidebar-window-chooser-jetpack-1.1.0-2026-08-17 cohort. Method.