Apps

✓ verified v0.0.505

Plexi apps are sandboxed processes that render into panes via PGAP. They can be written in any language, but the Python SDK is the primary development path.

🚧 SDK not yet on PyPI
The Python SDK ships bundled with Plexi and is available automatically once you install the app. A standalone pip install plexi-sdk package is coming — this page will be updated when it's live.

Create an App

From inside any directory:

plexi app init my-app

This scaffolds a new app folder with:

my-app/
  manifest.toml    ← capabilities, entry point, metadata
  main.py          ← your app code

Run an App

Pass the path to the app folder:

plexi app run ./my-app

The focused pane switches to app mode and starts rendering your app. Use this during development — no install step required.

The Render Loop

Subclass App and override on_render. The host calls it on every tick:

from plexi_sdk import App, RenderContext


class MyApp(App):
    def on_render(self, ctx: RenderContext) -> None:
        ctx.text("Hello from my-app", color="#f0f3f6")


MyApp().run()

Capabilities

Declare what your app needs in manifest.toml:

[app.capabilities]
capabilities = ["secrets.read", "net.http"]

The host enforces these at launch. An app that didn’t declare secrets.read cannot read any secret, even if it requests one.

Common capabilities: secrets.read, net.http, fs.read, fs.write, ai.query, audio.record, timer.

Logging

Use self.emit.info(), self.emit.warn(), self.emit.error() from any method. Log lines are tagged app::my-app in the host log.

from plexi_sdk import App, RenderContext


class MyApp(App):
    async def on_init(self, ctx: RenderContext) -> None:
        self.emit.info("my-app initialized")

    def on_render(self, ctx: RenderContext) -> None:
        ctx.text("Hello from my-app", color="#f0f3f6")


MyApp().run()

See also: PGAP, Secrets