Introducing Fostrom

An IoT Cloud Platform designed for developers building connected systems.

Civilization advances by extending the number of important operations which we can perform without thinking about them.

– Alfred North Whitehead

Civilization advances by extending the number of important operations which we can perform without thinking about them.

– Alfred North Whitehead

IoT starts simple: wire up a sensor, publish a message, and see a chart on a dashboard by afternoon. Then the complexity explodes. Connections drop. Payloads drift. Automations get flaky. Debugging and upgrading a fleet starts to feel like archaeology. The system that was supposed to be easy to operate and evolve turns into bespoke infrastructure that is fragile, opaque, and hard to maintain.

We learned that the hard way in our previous startup, while automating an indoor farm. The automations themselves weren’t the problem. Instead, we were spending more time building the plumbing: collecting and shuttling data, getting dashboards and remote management setup, and figuring out how to reliably execute the automations. All while facing a poor development experience and flaky tooling compared to modern day software development stacks.

That's what Fostrom is built for: a developer-first experience to build connected systems. We're starting with a core set of primitives: easy-to-integrate Device SDKs, typed Schemas for payloads, programmable Actions, and per-device sequential mailboxes providing predictable ordering semantics. The goal is simple: keep the code running on the device small and focused, while you evolve the power and capabilities of your fleets in the cloud.

Ready to stop fighting your IoT infrastructure?

While we're in Technical Preview, Fostrom is completely free. Start using today and it stays free for you for the next 3 months.

Join our Discord or email us. We would love to learn more about your stack and projects, and help you get started.

Next up, we share our vision of IoT and show what Fostrom looks like in action.


An elegant design for IoT

  • Create a fleet of devices on Fostrom
  • Define schemas for datapoints, incoming messages, and outgoing mail
  • Connect your devices to Fostrom with our Device SDKs (or over HTTP/MQTT)
  • Optionally write programmable Actions that trigger on incoming messages from devices, in turn queuing outgoing mail to other devices, or triggering webhooks for notifications
  • Keep code running on the device small and focused, while evolving logic and ops in the cloud
  • Operate with confidence

Connecting to the cloud

It's really easy to get started with Fostrom by using our Device SDKs, currently available for Python, JavaScript, and Elixir. We also support HTTP and MQTT, so you can easily hit the endpoints directly from microcontrollers or your existing deployments with minimal changes.

We have 4 global regions available today, to ensure low-latency and power-efficient connections between your devices and Fostrom. You can choose between US East, US West, Europe, and Singapore, when creating a fleet.

Shaping the flow of data

You define schemas for all payloads in Fostrom. This ensures the data you send/receive is the data you expect. With a wide range of types and constraints possible for each field, we validate payloads on ingress, and reject and log invalid packets for further review. It also ensures the code that you write on the device always receives the payload shape you expect, resulting in fewer exceptions and surprises. Schemas help maintain consistency as data flows between your connected systems and decision-making pipelines, whether that's realtime Actions on Fostrom, prediction models, or machine-learning pipelines.

Making and executing decisions safely

Actions trigger on incoming messages from your devices. You write simple JavaScript code to make decisions and then queue mail to other devices, or trigger webhooks to notify one of your other systems or you, the human.

Device mail is delivered through a per-device mailbox, that is processed sequentially. This creates a natural back-pressure mechanism and predictable ordering, so even resource-constrained devices don't get overwhelmed. Mail payloads are also based on schemas, so devices receive the exact shape of data they expect, preventing errors or exceptions while processing.

You can always figure out exactly what effects an action will have, by testing the action against random or custom payloads before deploying it. In fact, we make it explicit. Test and ensure your action code is correct, then deploy with confidence.

For more complex decision-making or analysis, you can export data to run prediction models and ML pipelines. Soon, we're going to bring the data right where you analyze: directly in your notebooks and terminals.

Observe your fleet

From the Fleet Dashboard, you can quickly debug connectivity and processing issues through recent activity charts. The Packets tab allows you to inspect every single packet your devices have ever sent, with advanced filtering to drill down and debug any issues.

The Devices tab shows the overall health of your fleet and allows you to see each device's mailbox, showing the live pulse of your entire fleet. Along with that, there's a lot more coming soon to help improve debugging and tracing the flow of data and events in your fleet.

When we say easy-to-integrate, we mean it

Once you add schemas, here's all you need to integrate using our Device SDK for Python:

pip install fostrom # or `uv add fostrom`

from fostrom import Fostrom, Mail
# Create SDK instance
fostrom = Fostrom({
"fleet_id": "<your-fleet-id>",
"device_id": "<your-device-id>",
"device_secret": "<your-device-secret>",
})
# Setup mail handler for incoming mail
def handle_mail(mail: Mail):
# `mail.name` is the name of the packet schema.
print(f"Received: {mail.name} ({mail.id})")
# The `mail.payload` conforms to the schema.
if mail.name == "tank-full" and mail.payload["filled_percent"] >= 90:
switch_off_pump()
# Acknowledge the mail
# Once acknowledged, the SDK will fetch the next mail, if available.
# You could also call `mail.reject()` or `mail.requeue()` here.
mail.ack()
# Attach the mail handler
fostrom.on_mail = handle_mail
# Connect to Fostrom
fostrom.start()
# Send a datapoint
fostrom.send_datapoint("climate", {"temperature_c": 22.5, "humidity": 0.8})
# Send a message
fostrom.send_msg("tank-full", {"filled_percent": 95, "status": "complete"})

Check out our extensive docs for Device SDKs for Python, JavaScript, and Elixir to get started.

The Future

Now that we've built the foundational layer of Fostrom, we're working on the next set of features:

  • Device Ops: Automatic telemetry collection from our Device SDKs
  • Data Ops: Richer schema types, Aggregates for datapoints, and new triggers for Actions
  • Developer Experience: A powerful API and CLI

Our vision is to make Fostrom the ops plane for building correct, reliable connected systems, with the best developer experience, so you can focus on your project or system logic instead of rebuilding connectivity, data integrity, and operational plumbing.

Fostrom is ready to use today. We're still in Technical Preview and haven't enabled billing yet. Get started by creating a fleet and trying out our Device SDKs.

If you're evaluating Fostrom for your use case, tell us what devices, data volume, and workflows you are looking for, and what more you would like to see Fostrom manage. Join our Discord or email us and we'll help you get started.

BY
Arjun Bajaj
Co-Founder
Siddhant Dhaware
Co-Founder
Published
Jan 18, 2026