Building Rome Apps

A short guide to choosing, structuring, and shipping Rome Apps.

Agent-readable version: Markdown · llms.txt

Rome Apps extend a private Rome environment with durable product surfaces: actions, app-private agents, skills, hooks, routines, databases, HTTP APIs, and web UIs. This page is the high-level guide. Use it to choose the right shape for an app, then follow the linked detail pages when you are implementing.

Design Guidelines

Build an app when the user needs a place that owns state, not just a one-shot workflow. A good Rome App has a clear product surface, saves user-facing records before it starts long-running work, and still shows useful state after the user refreshes, leaves, or comes back tomorrow.

Use these rules as the default:

  • Give important app views stable URLs, including detail pages that can be shared and reopened.
  • Keep the first screen focused on saved state and the main actions the user can take next.
  • Treat UI-triggered long work as a saved job with a visible status, not as a browser request that must stay open.
  • Design mobile-first. Rome apps run inside the dashboard on phones as well as desktop.
  • Check existing open-source SVG icon sets before drawing or adapting a custom app icon.
  • Write App Store listing copy for users, not for implementers. Keep technical details in source docs and commits.
  • Use Title Case display names rather than the kebab-case appId.

See Design Guidelines for the full deep-link, state, mobile, icon, and README rules.

General Architecture

Every app starts with an app.yaml manifest. The manifest declares the app identity and lists only the artifacts the app actually ships. The daemon loads declared artifacts from the built app root, so the source tree, manifest, and build output must stay aligned.

Read the architecture in this order:

  • Quickstart: decide whether the request should be an app, scaffold it, install it, and iterate from a git-tracked source tree.
  • App Structure & app.yaml: understand the root files, src/ layout, manifest fields, validation rules, and how appId relates to URLs, paths, and database table prefixes.
  • Build, Install & Iterate: separate local CLI feedback from daemon installs, and use system:app_management for the running app lifecycle.
  • Capabilities: choose which artifacts your app needs instead of keeping every scaffolded feature.

Apps communicate with Rome through public SDKs and platform registries, not by importing Rome Core source. Backend code uses @rome-os/app-runtime; frontend code uses @rome-os/app-web-sdk. Other app functionality should be reached through registered actions, app APIs, events, routines, or the app's own database layer.

The SDK packages

The docs are organized by capability, not by package. If you're arriving from npm, this is where each package entry point is documented:

ImportWhat it coversDocumented in
@rome-os/app-runtimeBackend SDK: actions, agents, hooks, database, HTTP API, WebSockets, routines & events, favors, telemetryActions, Agents, Hooks, Database, HTTP API, WebSockets, Routines, Events, Favor Request Actions, Telemetry
@rome-os/app-runtime caller gating (requireVisitor)Enforcing who may call an app-api routePublic Access & Caller Identity
@rome-os/app-runtime/browserDriving the agent browser over CDP from backend codeBrowser Automation
@rome-os/app-web-sdkFrontend SDK: bootstrap, fetchAppApi, routing & deep links, host context, inline components, visitor sign-in UIWeb UI, Public Access & Caller Identity
@rome-os/app-web-sdk/stylesThe style layer: Tailwind + host theme tokensWeb UI → Styling
@rome-os/app-web-sdk/configCustomizing the rslib buildBuild, Install & Iterate
rome CLI (ships with @rome-os/app-web-sdk)Local build/dev, version bumps, App Store publishingBuild, Install & Iterate, App Store Submission

API References

Start with the capability page that matches what you are building:

  • Actions: define typed operations that agents, routines, webhooks, and other app code can run.
  • Agents: add app-private LLM agents when the app needs its own persistent collaborator.
  • Skills: ship plain-language instructions that agents load only when relevant.
  • Hooks: react to runtime events such as incoming channel messages.
  • Routines: schedule actions to run later or repeatedly.
  • Events: publish and consume domain events on the event bus.
  • Database & Migrations: store app state with Drizzle tables and migrations.
  • HTTP API: serve app-owned endpoints under the app API path.
  • WebSockets: upgrade app API requests to live WebSocket connections.
  • Web UI: mount a React surface inside the dashboard and call app APIs from the browser.
  • Favor Request Actions: require favor payment before dispatching selected hosted actions.
  • Browser Automation: drive the agent browser over CDP from backend code.
  • Telemetry: add app spans to the instance's traces.

When the app is ready to distribute, use the App Store Submission checklist.

On this page