PLUGmil

← blog ·

One shell, or it is not a platform

architectureplugdesk

PLUG is not a folder of programs that happen to share a prefix. The distinction is enforced by one rule: PlugDesk is the only shell.

Not "the primary shell". The only one. No Plug App Shell, no PlugDesk Admin Shell, no NP4D shell, no second launcher dashboard. A product that needs its own window chrome to be usable has not been ported yet.

What the rule buys

A product appears in the suite by shipping a module manifest. The shell reads the manifest and renders a tab. Nothing else happens.

The test is blunt: if PlugDesk source had to change for a product's tab to appear, the port failed. That is Gate 13 of the fourteen portability gates, and it is binary — "largely satisfied" is a fail.

The same rule cuts the other way. Products do not import each other's internals. from plug_terminal_host.internal import … is an architecture error, not a shortcut. What is allowed is HTTP, WebSocket, the event bus, or a declared manifest dependency. A contract can be versioned and tested at the boundary; an internal import cannot.

What it costs

Every product has to work twice: standalone on its own, and embedded as a module. That is more work than picking one. It is the price of the property that matters more — a product can be used by someone who wants only that product, and by someone running the whole suite, without two codebases.

Tauri 2 and Rust are the canonical desktop basis. Existing Electron products keep running as legacy_standalone or external_process_adapter and each carries a porting task pack. A new Electron product is not a discussion, it is a blocker.

Changing any of this needs an ADR. Not an exception in the code.