Build desktop and mobile apps with the web technologies you know.
Oro brings HTML, CSS, and JavaScript to native applications on Linux, macOS, Windows,
Android, and iOS. Your interface runs in the platform's WebView, backed by a C++ runtime
that exposes native capabilities through JavaScript modules. The oroc CLI takes you from
your first window to building, packaging, and updating your app.
Website · API reference · Examples · Contributing
Oro Runtime v0.2.1 is available on npm
and as release archives.
The project is in active development in the 0.x series: incompatible public API
changes require a minor release, while compatible fixes use a patch release.
See the changelog when upgrading.
Recent work includes:
- Native platform services. Backend discovery through
oro:platform, authentication-bound keys, password-provider selection, foreground and deferred native work, UnifiedPush, and launcher integration on Android and Linux. - Android declarative workflows. Bundled HTTPS read, checkpoint, and notification workflows without application native sources. These workflows and historical protected-import executors currently have Android backends only; they do not run arbitrary background JavaScript.
- Developer tooling and distribution. Project-aware language-server integration, a VS Code client, read-only SDK support, and expanded package installation and consumer-build checks. Version 0.2.1 hardens offline npm package verification and Android editor qualification.
Feature availability varies by platform. Use oro:platform and each feature's
support/status probes before offering native operations. The
native platform inventory distinguishes implemented,
missing, and restricted backends; runtime limitations cover
TLS, USB/HID/Bluetooth, AI, and device-validation gaps.
- Web interfaces, native capabilities. Work with windows, files, networking, secure
storage, and workers through
oro:*imports. Extend the runtime with native code when your application needs more. - Data and compute on the device. Build with SQLite, peer-to-peer connections through Iroh, and local model inference. Keep application logic close to the user's data.
- A shared toolchain across platforms. Create projects, inspect configuration, build
apps, and prepare releases with one CLI and an explicit
oro.tomlconfiguration. - Discoverable by people and agents. Generated TypeScript declarations, searchable CLI help, installed manuals, and an MCP server make the runtime accessible from your editor, terminal, and automation tools.
Install the CLI with Node.js 22 or newer:
npm install --global @oro-computer/runtime
oroc --versionInstalling from npm selects the matching native package for your host. For a specific
release, append its version, for example @oro-computer/[email protected].
With oroc installed, create and launch your first app:
oroc init my-app
cd my-app
oroc build --run .Edit your app's HTML, CSS, and JavaScript, and configure its build in oro.toml.
Use oroc help <query> to find your next step—for example, oroc help updates or
oroc help ios signing. Native builds require the toolchain and SDKs for the target platform.
Inside an Oro app, import native functionality as ES modules. For example, query a SQLite database directly from JavaScript:
import { open } from 'oro:sqlite'
const db = open(':memory:')
db.exec('CREATE TABLE notes (body TEXT)')
db.exec('INSERT INTO notes (body) VALUES (?)', {
params: ['Hello from Oro'],
})
const { rows } = db.exec('SELECT body FROM notes')
console.log(rows[0].body)
db.close()Explore oro:application, oro:fs/promises,
oro:secure-storage, and the full API reference.
The runtime ships TypeScript declarations for editor completion and type checking.
Published packages cover the following development hosts and bundled SDK targets:
| Development host | Architectures | Additional SDK artifacts |
|---|---|---|
| Linux | x64, arm64 | Android on x64 |
| macOS | x64, arm64 | iOS device and Simulator |
| Windows | x64 | Desktop only |
Target mobile builds with oroc build --platform=android . or
oroc build --platform=ios . using the appropriate host and SDKs. Platform APIs and device
support vary; see current capabilities and limitations.
CI covers desktop hosts, Android Emulator, and iOS Simulator flows. Simulator and emulator coverage does not establish physical-device or hardware-service support.
Oro provides a language-server wrapper for JavaScript/
TypeScript, Android Kotlin, C/C++/Objective-C, and Swift, plus a
VS Code client. Use the directory containing oro.toml as the
editor's project root and install the language-server backends you need separately.
Windows C-family language-server integration remains unavailable; JavaScript/
TypeScript editing and native compilation-model export are supported there.
Connect an MCP client to your app workspace to search runtime documentation, inspect configuration, and invoke build and run tools:
oroc mcp --stdioThe CLI also supports structured JSON output on applicable subcommands and separate log files for automation. See the MCP guide for client setup, HTTP transport, and embedded application servers.
Source development requires Node.js 22+, pnpm 11, Python 3, a C++20 compiler, and the native SDKs for your targets. From the repository root, install the JavaScript dependencies:
corepack enable
pnpm install --frozen-lockfileFor a desktop-only runtime, use Bash on Linux or macOS:
NO_ANDROID=1 NO_IOS=1 ./bin/install.shOr PowerShell on Windows:
$env:NO_ANDROID = "1"
$env:NO_IOS = "1"
.\bin\install.ps1 -yesdepsNO_ANDROID and NO_IOS are independent presence switches: any non-empty value—including
0 or false—disables only the named mobile target family. Leave a variable unset to include
that target. Read the source-build guide for platform details and
Contributing for local linking, debug builds, and validation.
| Resource | What you will find |
|---|---|
| JavaScript APIs | Modules, methods, examples, and types |
| CLI reference | Build, run, package, update, and inspection commands |
| Configuration | oro.toml settings and their behavior |
| Examples | Applications and focused integrations |
| Architecture | How the WebView, IPC bridge, and native services fit together |
| Native platform support | Backend availability, runtime probes, and qualification scope |
| Declarative workflows | Android background reads, checkpoints, and notifications |
| Android native integration | Back handling, periodic work, maintenance and encrypted push |
| Linux native integration | Native execution, scheduling, push, and desktop integration |
| Language servers | Editor setup, compilation models, and backend requirements |
| Changelog | Release notes and compatibility changes |
Questions or a reproducible bug? Start with Support. Contributions are welcome; see Contributing and the Code of Conduct. Report vulnerabilities through Security.
Oro Runtime is licensed under Apache 2.0. See NOTICE and third-party notices for attribution.