For edge and embedded systems
Ship devices the way
you ship software.
Your whole fleet in one repo: apps, schemas, rules, rollouts. Fostrom builds it, ships it zone by zone to devices running Fostrom OS, and brings the data back, rolled up and ready to act on. No OS to maintain, no OTA to build, no backend to run. Start before the boards arrive.
Runs on Raspberry Pi, AMD64, and ARM64.
Support for other boards available on request.
The path to the field
Start with code.Add hardware when you're ready.Scale to thousands the same way.
No hardware needed
01Setupfostrom init
One repo holds the whole fleet: apps, schemas, zones, rules and workflows. Every change goes through review, like the rest of your code.
$ fostrom init citybikes citybikes/ fostrom.toml fleet, zones and rules fostrom.lock compiled schemas, maintained by the CLI schemas/ telemetry, events and mail apps/ one folder per app workflows/ one folder per workflow ✓ fleet citybikes created next: fostrom app new bike
02Codefostrom app new
Write your app in any language with a Dockerfile, and declare in app.toml what it sends, receives and needs from the hardware. Typed structs are automatically generated from the schemas you define. We build the app for all required targets in the cloud.
$ fostrom app new bike --lang python apps/bike/ main.py your code Dockerfile how it's built, in any language app.toml what it sends, receives and needs fostrom_schemas/ typed code, generated from your schemas ✓ app bike created for rpi next: fostrom build
telemetry = ["status", "tyre"]
events = ["docked", "overheat"]
mail = ["unlock", "set_speed_limit"]
devices = ["/dev/can0", "/dev/ttyAMA1", "/dev/video0"] # motor, GPS, camera03Buildfostrom build
One command builds every app for every platform in the fleet, straight from your codebase. No cross-compilers to set up or build servers to run. Each build is signed by Fostrom Cloud, ready to be released to your fleet.
$ fostrom build App Platform Size Delta OK ------------------------------------------ bike rpi 42.3 MB 1.6 MB ✓ hub amd64 28.9 MB 1.1 MB ✓ ✓ release r42, signed by Fostrom Cloud
04Testfostrom test
Run your own tests before anything reaches a device. Whole-system testing is coming soon.
$ fostrom test App Platform Runner Result OK -------------------------------------------- bike rpi pytest 18 passed ✓ hub amd64 go test 9 passed ✓
When your boards arrive
05Flashfostrom flash
Write Fostrom OS to an SD card, USB drive or eMMC. The OS is signed and built reproducibly, and the image carries your fleet identity, plus any labels, data or zone you configure.
$ fostrom flash rpi image Fostrom OS 1.2 for rpi, signed target /dev/sdb, 32 GB SD card writing ████████████████ done ✓ you can now boot the board and provision it $ fostrom flash amd64 --label model=mark-1 --zone depot ✓ labelled model=mark-1, joins depot on first boot
06Enrollfostrom device enroll
On first boot the device enrolls in your fleet. No keys to copy, no scripts to run. New devices wait unprovisioned until you put them in a zone.
$ fostrom device list unprovisioned 12:04:11 7f3a bike, rpi ● online 12:04:38 91c4 hub, amd64 ● online $ fostrom device enroll 7f3a 91c4 --zone depot ✓ 7f3a and 91c4 are in depot
07Deployfostrom deploy
Roll a release out zone by zone, a few devices at a time. Each batch reports healthy before the next one starts. A device that can't run the new release rolls back on its own, and the rollout stops. Rollout policies live in fostrom.toml.
$ fostrom deploy --zone depot release r43 → depot, 2 devices, 1 at a time 7f3a ✓ reported healthy after 4s 91c4 ✓ reported healthy after 5s ✓ depot is on r43
08Updatefostrom deploy / fostrom os update
Apps are updated with fostrom deploy and shipped as small deltas to devices, light enough for cellular. Each device checks the signature and installs the release into a spare slot, so it's never left half updated. Offline devices catch up when they reconnect.
$ fostrom deploy --zone edinburgh bike r42 → r43, 184 KB delta per device ✓ 632 of 640 updated, 8 devices currently busy
Fostrom OS updates work exactly the same way, with their own command:
$ fostrom os update --all Fostrom OS 1.2 → 1.3, 3.1 MB delta per device ✓ Fostrom OS upgrade rollout staged to all 9,138 devices.
In the field
09Operatefostrom logs / fostrom shell
Follow logs from one device or a whole zone as they happen. When something's wrong, open a shell on any device, over the network or with a cable on site.
$ fostrom logs --zone paris --follow 12:04:31 bike-c219 motor at 92°C 12:04:31 bike-c219 rule hot_motor matched, mail sent $ fostrom shell bike-c219 connected to bike-c219 in paris, rpi, Fostrom OS 1.3 bike-c219:~$
10Scalefostrom deploy
A thousand boards deploy like one. Give each site, city, or customer its own zone, and decide when and how each one gets a release.
$ fostrom deploy release r57 → 6 zones, 9,138 devices depot 12 ████████████████ healthy edinburgh 640 ████████████████ healthy stockholm 1,480 ██████░░░░░░░░░░ batch 4 of 9 berlin 1,120 ░░░░░░░░░░░░░░░░ after stockholm paris 2,760 ░░░░░░░░░░░░░░░░ after berlin london 3,126 ░░░░░░░░░░░░░░░░ after paris
One unified platform
Every hardware project rebuilds the same things.
Your product is the sensors, the logic and what the data means. You write the app, and Fostrom is everything under it.
- OS image, container runtimeFostrom OS
- build pipeline, OTA server, rollout scriptsbuilds, staged rollouts, OTA updates
- provisioning, device registry, secrets, VPNprovisioning, secrets, remote access
- MQTT broker, protobuf, backendtyped telemetry, events and mail
- time-series DB, aggregation jobsdata and rollups, queried with SQL
- monitoring, alerting, cron scriptsrules, alerts and workflows
17 pieces, several vendorsone platform, one repo for your whole fleet
Fostrom OS
Linux, hardened for the field.
A minimal, immutable Linux that runs your apps in containers and updates safely over the air. Flash one image to every device, enroll them, and your apps arrive over the air.
Runs on
- Raspberry Pi
- ARM64
- AMD64
Immutable and signed
A read-only system, signed and built reproducibly, so every device runs exactly what you shipped.
Safe rollout
Every update installs into a spare slot and switches only once it's healthy, rolling back on its own if not.
Small updates
OS and app updates arrive as deltas, light enough for cellular.
Apps in containers
Each app runs isolated, with only the hardware it declares in app.toml.
A unique key per device
Keys are generated on the device at first boot and never leave it. It joins your fleet on its own.
Never locked out
A remote shell over the network, or a console with a cable on site.
SDKs
Fostrom, one import away.
Import the SDK in any of six languages. Every one has the same surface.
- Python
- Rust
- Go
- JavaScript
- Elixir
- Zig
Report health
Tell Fostrom a release started cleanly, so rollouts can continue.
Send data
Telemetry and events, typed and packed, even while offline.
Receive mail
Every device has a mailbox, and processes commands sequentially.
Talk to other devices
Events go device to device, not just to the cloud.
Read secrets
Runtime secrets, delivered and rotated for you.
Stream logs
Logs from every device, gathered in one place as they happen.
Other languages work too, through the same calls over a local HTTP API.
Schemas
Write schemas once.Every app gets types, in its own language.
Declare schemas for all your telemetry, events and mail once. Every app gets typed structs in its own language, ensuring compile-time safety.
/// Where a bike is and how it's doing.
telemetry status @every(60s) {
position GeoPoint
battery u8 @unit("%")
odometer f64 @unit("km") @cumulative
}
/// Too late is worse than never.
mail unlock @ttl(30s) {
ride string @max(36)
}
- Python
@dataclass class Status - Rust
struct Status - Go
type Status struct - JavaScript
class Status - Elixir
%Status{} - Zig
const Status = struct
- Typed from device to cloud, and from device to device
- Packed on the wire and highly compressed
- Breaking changes refused before a deploy starts
- Mail expires after its @ttl, so a late unlock never arrives
Data & Analytics
From billions of readingsto the numbers that matter, automatically.
Every reading lands in a table and rolls up into minutes, hours and days as it arrives. Nothing to configure.
Late data lands in place
A bike offline for days catches up, and its buckets are recomputed.
More than averages
Every minute, hour and day keeps its count, sum, min, max and percentiles.
Query with SQL
Every rollup is a table. Ask it anything, over any range.
Rules, Alerts & Workflows
React the moment something's off.Respond to anything, across the whole fleet.
Rules
Written once, checked on every reading.
Slow the whole batch
One motor runs hot, and every bike with the same motor slows down.
Alert the workshop
Tyres soft for an hour raise an alert in your workshop's system.
Notice silence
Each schema says how often to expect data, so a quiet device is noticed with no rule.
Workflows
Your apps see one device. Workflows see all of them.
Send a crew
A battery drops below 15%, and the nearest crew gets a swap job.
Slow a rainy city
Every 15 minutes, bikes in rainy cities slow to 18 km/h.
Rebalance bikes
A bike hasn't moved all day, so it's tagged for the rebalancing crew.
Coming soon
Spot what rules can't.
Run ML and AI models over your fleet's data to catch the bike about to fail, or the city about to run short, before it happens.
Architecture
From your laptop to the field
Small enough for cellular, safe enough for devices across the world, and never locked out: there's always a shell, remote or on site.
Enterprise
Bring the hardware.We'll build the software.
If you'd rather not build it yourself, our engineers will: the apps, schemas, rules and workflows, on Fostrom, alongside your hardware team or partner.
scope prototype on dev boards pilot in one zone scale
- You own the code, in your repo, from day one.
- Hand over to your team, or we keep improving it.
- Custom board? We bring Fostrom OS up on it.
- Fostrom OS and the CLI, open source from launch.
- Hosted in the UK or the EU, your choice.
- A shared channel with our engineers, and an SLA.
Got a fleet on the drawing board? Let's build it together before launch.
Sense and shape the physical world.Build your fleet on Fostrom.
It's three commands from an empty folder to code running on your devices:
$ fostrom init$ fostrom build$ fostrom deploy
Prefer talking to us about your requirements? Book a demo