Orbit OS Platform
Orbit OS is an operating system for embedded Linux and IoT devices. It provides a complete runtime platform — from hardware access to application lifecycle, remote control, OTA updates, and Edge AI — out of the box.
Applications are packaged as signed .orb files and executed by Gravity RT, the unified runtime at the heart of Orbit OS. The same API works for local development and production deployments.
Core principle: one runtime, one API, for every device, every language, every use case.
System Overview
The diagram below shows the full Orbit OS stack — from hardware up through Gravity RT, the application layer, and the remote management plane.
⚙️ Gravity RT
Gravity RT is the execution core of Orbit OS — the single layer through which all applications and system services run. It is always active, extremely lightweight, and acts as the supervisor for everything on the device.
- Application lifecycle: start, stop, restart, and update every
.orbapp - Automatic recovery: crashed apps are restarted automatically
- Hardware access: all device capabilities exposed as a unified, secure API
- Resource control: CPU, memory, and I/O limits enforced per application
- Security enforcement: every package verified before execution
- Edge AI: TFLite runtime included by default — no add-on required
Nothing runs on the device outside of Gravity RT. There is no back door, no bypass.
📦 .orb Package Model
All software on Orbit OS is distributed as .orb packages —
the equivalent of an APK on Android. A .orb can be an application, a background service, or a system tool.
What's inside a .orb
- Executable code — Go, Python, Java, or C++ binary
- Manifest — declares the app's runtime, permissions, and resource limits
- Resources — data files, AI models, configuration, assets
- Cryptographic signature — required for execution
Self-contained and efficient
A .orb bundles everything the app needs. As an example, a full Edge AI face recognition app —
including three TFLite models for detection, landmarks, and identification — weighs only 6 MB.
The TFLite runtime lives in the OS, not in each package, keeping sizes small.
Persistent data
Each app has its own isolated data directory that survives restarts and OTA updates. One app cannot access another app's data. Developers have full control — the runtime never deletes app data automatically.
Every .orb is signed. Packages without a valid signature are rejected before execution.
🔑 Permissions
Every .orb declares the hardware and system capabilities it needs in its manifest.
Gravity RT reads this list at launch and exposes only those APIs to the app —
nothing more. This is the principle of least privilege, applied natively.
Examples of available permissions:
- GPIO, PWM, I²C, SPI, UART
- WiFi, Ethernet, Bluetooth (BLE)
- Camera
- AI Service (TFLite inference)
- Network access
- Package Manager
- Firewall
An app that only declares CameraService and AiService has no access
to GPIO, networking, or any other capability — by design, not by configuration.
🔐 Trust Model
Every .orb belongs to one of two signing domains. The signing domain determines
how the package is treated at runtime.
🏪 Store-Signed
Production
Apps distributed through the Orbit OS Store, signed by the official pipeline.
- Fully trusted execution
- Eligible for automatic updates
- Fleet deployment enabled
🧪 Dev-Signed
Development
Apps built locally with the SDK for development and testing purposes.
- Valid and verifiable
- Debuggable on-device
- No fleet deployment
The trust level is determined by the signature, not by configuration. There is no way to promote a dev-signed package to production — it must go through the Store pipeline.
🔒 Security
Security in Orbit OS is not a layer added on top — it is built into the execution model. Every connection is authenticated, every package is verified, and every app runs with only the permissions it declared.
Before any app runs
Gravity RT always performs these steps before execution:
- Verify the cryptographic signature
- Validate the certificate chain
- Classify the trust domain (Store or Dev)
- Apply device policies
- Enforce declared permissions
Remote connections
All remote access — from the SDK, CLI, or mobile app — requires mutual authentication. There are no open ports and no implicit trust. In production, both a valid certificate and credentials are required. In Developer Mode, credentials are not required, but the cryptographic certificate still is.
Developer Mode security
Developer Mode is enabled manually in device Settings — the same model as Android's USB Debugging. The device explicitly informs the user of the security implications when enabling it. In production, Developer Mode is always off.
Zero compromise on production security. Zero friction in development.
Execution outcomes
🟢 Production
Store-signed .orb. Full managed lifecycle. Fleet deployable.
🟡 Development
Dev-signed .orb. Debuggable. No fleet deployment.
❌ Rejected
Invalid or missing signature. Package is never executed.
🧪 Developer Mode
Developer Mode changes how you interact with your device during development. Instead of the traditional embedded cycle — write, compile, flash, reboot, observe — Orbit OS lets you develop entirely on your laptop against real hardware, in real time.
Traditional embedded workflow
Write code → Compile → Deploy → Reboot → Observe → Repeat
Orbit OS Developer Mode
Write code → Your code connects to device → Call real device APIs → Observe → Repeat
Your code runs on your development machine and connects to the real device over the network. From your laptop, your code calls device APIs — you can remotely activate GPIO pins, run AI inference, configure networking, access the camera, and use any other device capability — all through the same API that production apps use. No packaging, no deploying, no rebooting needed.
Only once the behavior is validated do you generate the .orb and install it locally or publish it to the Store.
- Same API in development and production — no surprises when shipping
- Logs stream in real time, with filtering by tag and level (similar to Android logcat)
- No SSH required — all access goes through the Gravity RT API
- Enabled and disabled explicitly in device Settings
This is the same shift that happened with browser DevTools for web and live reload for mobile — now available natively for embedded Linux.
🛠️ SDK & CLI
The Orbit OS SDK lets you build applications, connect to devices, and control hardware from your language of choice. All SDKs expose the same API — generated from a shared interface definition — so behavior is consistent across languages.
Apps, tools & CLI
| Language | Status |
|---|---|
| Go | Available soon |
| Java | Beta soon |
| Python | Planned Q3 |
| C++ | Planned Q4 |
* These languages support both building internal .orb apps that run on the device and CLI/tools that interact with the device remotely.
Mobile tools
| Language | Status |
|---|---|
| Android Kotlin | Available soon |
| iOS Swift | Planned Q4 |
* SDKs for building Android and iPhone apps that connect to and control Orbit OS devices remotely.
Development SDK Tool
Included with all SDKs. The Development SDK Tool lets you interact with a device directly:
- Install
.orbpackages - Remove packages
- List installed packages
- Interact with device APIs locally for Development
Official Android App
The official Orbit OS Android app provides two capabilities:
- Store access — browse and install apps on your devices from your phone
- Local device control — connect directly to a device on your local network and manage it: install, remove, monitor, control
The SDK's shared interface definition also allows any developer to build their own Android or iOS app to interact with Orbit OS devices — for custom dashboards, industrial control panels, or smart home interfaces.
🧠 Developer Workflow
The full lifecycle from development to production deployment:
- Enable Developer Mode on the device (Settings → System → Security)
- Write and run your code from your PC against the device — no packaging needed
- Iterate in real time — logs and results stream back instantly
- Package as .orb once behavior is validated
- Submit to the Store and deploy to your devices
The same device API used during development is the same API running in production. What you test is exactly what ships.
🏪 Orbit OS Store
The Store is the central control plane for distributing and managing applications across Orbit OS devices. It handles the full application lifecycle — from first install to updates and OTA system upgrades.
The Store is live at store.orbit-os.org.
For developers
The Store includes a developer portal where you can submit your own .orb apps,
manage versions, and distribute to users.
🖥️ Fleet Management
The Store provides fleet-level control over all your devices from a single interface. Deploy an app to one device or to your entire fleet with a single action.
How fleet deployment works
When installing an app from the Store, a device selector shows all devices in your account. Devices that already have the current version are shown as up to date — preventing unnecessary reinstalls. You can deploy to individual devices or select all eligible devices at once.
- Deploy to any subset of your registered devices
- Version tracking per device — always know what's running where
- Automatic app updates when new versions are published
- OTA system updates managed centrally — enable or disable per device
Fleet management works the same whether you have 1 device or 1,000. The model scales without changing the workflow.
🔄 OTA Updates
Orbit OS supports two types of over-the-air updates, both managed through the Store.
.orb — App update |
.orbit — Runtime update |
|
|---|---|---|
| What it updates | A single application | The Gravity RT runtime and system base |
| Published by | Any developer | Orbit OS team only |
| Impact | Only the updated app restarts | Runtime restarts — all apps relaunch automatically |
| Android equivalent | APK update | OS update |
Atomic and safe
Runtime updates are atomic — they either apply completely or not at all. If anything goes wrong, the previous version is instantly restored. There is no risk of ending up in a broken intermediate state.
Soft restart
A runtime update does not reboot the underlying Linux system — only the Gravity RT process and its apps are restarted. This makes updates significantly faster than a full device reboot.
Auto OTA
Auto OTA can be enabled or disabled per device in the Store. When enabled, the Store delivers runtime updates automatically as they are published. When disabled, updates are applied manually at the operator's discretion.
🔌 Execution Model
All interactions with Gravity RT — whether from an app running on the device or a tool running on a remote laptop — go through the same system API. The origin differs; the model does not.
| Channel | Origin | Usage |
|---|---|---|
| External | SDK, CLI, mobile apps, external tools | Remote development, device control, monitoring |
| Internal | .orb applications and system services |
Production execution on-device |
Because both paths use the same API, code written and tested via the external SDK in Developer Mode
behaves identically when deployed as a .orb and running internally in production.
📊 Footprint
Orbit OS is designed to run on resource-constrained edge devices — not just high-end boards. The runtime is small enough to be viable on devices with as little as 128–256 MB of RAM.
Real-world metrics (Raspberry Pi 4, 1.8 GB RAM)
| Metric | Value |
|---|---|
| Linux distro | Debian 13 Lite (Trixie) |
| CPU usage (idle) | 2.3% |
| Memory usage | 139 MB (~7.7% of 1.8 GB) |
| Installer size | 25 MB (.run file) |
| OTA update size | 21 MB (full runtime update) |
139 MB includes the Gravity RT Server, all system services, and the full runtime — leaving over 1.6 GB free for applications on the RPi 4.
Installation
A single 25 MB .run file is all you need to install Orbit OS on a supported device.
Run it on the device, and the runtime is configured automatically.
Dependencies are installed once on first run.
🚀 Design Principles
Platform, not infrastructure
Teams should focus on product logic, not on rebuilding GPIO drivers, OTA pipelines, and remote access layers from scratch on every project.
Security by default
Every package is signed. Every connection is authenticated. Every app runs with the minimum permissions it needs. Security is the baseline, not an option.
Same API everywhere
Development and production use the same system API. What you build and test locally is exactly what runs on a device fleet.
Lightweight by design
No Docker, no container overhead. The runtime is built for real edge devices — including those with 128–256 MB of RAM where container-based solutions are impractical.