All articles

App Development

App Development

Build apps and plugins for rumahl — the manifest, Apps vs. Plugins, the ora.* SDK and publishing to the Store.

7 min readUpdated: 20 August 2026

rumahl provides a secure, isolated environment for extending the platform. This document is the starting point for building apps and plugins.

Apps vs. Plugins

AppsPlugins
RuntimeOwn Docker containerrumahl runtime sandbox
LanguageAnyJavaScript / TypeScript
Best forServices, databases, web UIsWidgets, automations, AI tools
Resource limitsContainer-levelStrict sandbox limits
Managed byrumahl-supervisorrumahl runtime

Decision guide: need a database, background processes or your own UI? Build an App. Want a widget, an automation or an ORA tool? Build a Plugin.

The app manifest

Every app declares itself in a manifest.json — name, permissions and lifecycle hooks:

json
{
  "name": "my-app",
  "version": "1.0.0",
  "permissions": ["AppStorageRead", "AppStorageWrite"],
  "lifecycle_hooks": {
    "hooks": [{ "event": "on_system_event", "filter": "security.*" }]
  }
}

The reference example is the Notes app (apps/examples/apps/rumahl-notes) — it demonstrates app storage, health checks and app token auth.

The ora.* SDK surface

ModulePurpose
ora.notificationsSend user notifications
ora.filesList, upload, move, restore files
ora.storageApp-scoped key-value storage
ora.clipboardClipboard history, pin, clear
ora.permissionsRuntime permission requests
ora.jobsCreate and track system jobs
ora.secretsApp-scoped credential vault
ora.users / ora.devicesUser and device information
ora.homeAutomation control
ora.system.eventsSubscribe to system events
js
import { rumahlClient } from "rumahl-sdk";

const ora = rumahlClient({ baseUrl: "http://localhost:8126" });
ora.setAppId("my-app");

await ora.notifications.send({ title: "Backup done", message: "All good" });
const { files } = await ora.files.list({ folderId: null });

Security & permissions

  • Every SDK call is permission-checked at the API gateway — before your code runs
  • Request permissions at runtime with ora.permissions.request(...) — the user sees an allow/deny dialog
  • Store credentials in the secrets vault, never in the bundle or in logs
  • Destructive operations require explicit user confirmation

Publishing to the Store

  1. 1Register as a developer in the developer dashboard
  1. 1Submit your app — the review checks safety, privacy, content and quality
  1. 1Answer the review; rejections are reasoned and appealable within 14 days
  1. 1Keep your app maintained — updates and security patches are expected

Tip: the full rules live in the Developer Agreement, Review Guidelines and Content Policy under /legal/app-store.

On this page

Didn't solve your problem? Contact us — we're happy to help.