Skip to content

PLEX

Build apps out of plugins that extend each other through typed contributions.

PLEX is an agentic framework for building apps out of plugins. An app is little more than the plugins it loads: each plugin adds types, views, actions and settings, and plugins extend each other through typed contributions instead of imports.

A plugin is a set of modules. Each module activates on an event, such as startup or the first time a view is needed, and contributes capabilities: typed values such as a React component for a surface, a handler for an operation, or nodes for the navigation graph. Other modules look capabilities up, so one plugin can render inside another plugin’s view or add an action to another plugin’s objects without either knowing about the other. Plugins and modules explains the pieces.

The packages are @dxos/app-framework, which holds plugins, modules, capabilities and surfaces, and @dxos/app-toolkit, which adds what a workspace app needs: App Graph, layout, settings and the standard surface roles.

Composer is a local-first workspace built entirely with PLEX. Its navigation tree, the deck of open items, the settings page and the assistant are all plugins, written against the same API a third-party plugin uses. A plugin from outside DXOS has the same powers as a built-in one, which is why these pages use Composer as the place your plugin runs.

ECHO is the database under every PLEX app. A plugin’s data is ECHO objects in spaces, so it syncs between a user’s devices and the people they share with, merges concurrent edits, and works offline, without the plugin doing anything for it. Agents read and write the same objects through the same queries. Spaces and Objects and relations explain the model.

The four demos below are small PLEX apps built from Composer’s own plugins. Each runs two peers, Alice and Bob, on one space in the page. The text above each demo says which plugins render it and how they work together. Use the switch on a peer to take it offline, or the toolbar to show one peer or both.

Collaborative editor

Each peer runs a small PLEX app: the core plugins, the Space plugin and the Markdown plugin. The Markdown plugin defines the document type and contributes the editor as a surface for it. The app asks for an article surface for the document and renders whichever plugin answers, so nothing else in the app knows about markdown. The editor takes extensions too: the Mermaid plugin contributes one through the Markdown plugin’s extension capability, and it draws each mermaid block as a live diagram. A plugin of your own can add custom widgets to the editor the same way.

Table and board

The Table plugin and the Kanban plugin each contribute a surface for their own view type, and both views point at the same companies. Neither plugin imports the other or knows the company type: each reads the fields its view names from the schema. Another plugin that adds a view over the same query shows the same data and the same edits.

Graph explorer

Two plugins split the work. The Explorer plugin renders the graph and, when a node is hovered, asks for a card for that object. The Preview plugin answers with card surfaces for companies and people. The explorer shows any object some plugin has a card for, so a new type gets a card by adding one surface.

Infinite canvas

The Illustrator plugin owns the drawing type, and the Canvas plugin draws it. Canvas contributes a variant provider capability, which Illustrator looks up when it renders a drawing. Another renderer could contribute its own variant, and the same drawings would open in it with no change to Illustrator. The canvas’s tools are extensible too: other plugins add element kinds and library items through its NodeType and LibraryItem capabilities. Build with a coding agent has prompts for building a plugin like that.

These are examples, not the limits. Composer’s own navigation, settings and assistant are plugins too, so a plugin of your own can add anything a built-in one can: new types and views, actions, widgets inside another plugin’s editor, or a whole new kind of app.

  • Why PLEX? for what an app made of plugins gives you.
  • Build with a coding agent to have Claude Code, Codex or Cursor build a plugin and load it into your Composer.
  • Create a plugin to start the learning path, which builds the Stash plugin by hand over five pages.