Fostrom

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

01Setup

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
02Code

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
apps/bike/app.toml
telemetry = ["status", "tyre"]
events = ["docked", "overheat"]
mail = ["unlock", "set_speed_limit"]
devices = ["/dev/can0", "/dev/ttyAMA1", "/dev/video0"] # motor, GPS, camera
03Build

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
04Test

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

05Flash

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
06Enroll

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
07Deploy

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
08Update

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

09Operate

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:~$ 
10Scale

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.

schemas/citybikes.schema
/// 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)
}
fostrom_schemas, generated into every app
  • Python@dataclass class Status
  • Ruststruct Status
  • Gotype Status struct
  • JavaScriptclass Status
  • Elixir%Status{}
  • Zigconst 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.

RAW MINUTE HOUR DAY fri sat sun a reading, days late
  • 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