Skip to main content

Announcing Transitive Self-hosted

· 8 min read
Christian Fritz

We are thrilled to announce the self-hosted version of Transitive, the open-source framework for full-stack robotic software.

Transitive has been used in production every day by many robotics startups for over a year now but until today the only way to use it was via the hosted version on The hosted version is ideal for any robotics company that wants to add new capabilities to its fleet quickly, such as low-latency video-streaming or configuration management. But Transitive's vision has always been to create and support an ecosystem of developers who want to develop and share their own full-stack robotic capabilities. We believe this has the potential to accelerate the development of new and exciting robotic applications similar to how ROS has advanced this industry before. Before ROS, developing your own robotics product meant you also had to develop your own robotics communication middle-ware and a lot of the necessary software modules, incl. SLAM and navigation. With the advent of ROS and its ecosystem of packages, startups could not only move faster, they could also get to market with a lot less capital and reach profitability sooner. We aspire to give robotics startups another boost of this kind by creating a framework that makes it easy to connect robots to the cloud and web front-ends, provides the same level of openness as ROS, and supports sharing of packages, which we call capabilities.

What is Transitive?

The Transitive framework makes it easy to build robot cloud portals. Even given all the great open-source tools for web development and device management, building such cloud portals for robots is still not an easy task. There are several reasons for this, but a big one is that robots are different from regular servers, despite many people attempting to tread them as such. They go offline a lot, have limited network bandwidth, and each robot in a fleet may run a different version of software and require a different configuration. Robots also generate a lot of data, some of which needs to be synced in real-time with cloud and web front-ends for processing and visualization, some of which recorded, and some discarded. In addition robots roam insecure areas and are connected over networks outside of the control of the startup, hence requiring tight authentication and authorization.

Transitive solves many of these issues. It provides a reliable, real-time data synchronization protocol that operates on top of MQTT, called MQTTSync. MQTTSync seamlessly synchronizes stateful data between robot, cloud, and web, instead of just passing messages. It provides the notion of full-stack packages that implement encapsulation and versioning of software components for all three systems (robot, cloud, and web) and uses MQTTSync's name-spaced data model to reliably communicate and operate, even when different robots run different versions of the package. The robot and cloud components are run in sandboxes to isolate them from the rest of the system, and the web components can be embedded in any web page including existing robot cloud portals. And of course, all this is secured, using SSL for transport-level security, client certificates and JSON Web Tokens for authentication, and authorization based on MQTT topics. Taken together this lays a solid foundation for building new full-stack capabilities with ease.

Note that Transitive is not a replacement for ROS, and in fact many of our capabilities run ROS nodes on the robot. Neither is Transitive a fleet management system. It just makes it easy for you to build your own!

Demo of Live Data Sync

This short video demonstrates a capability you can build in just minutes using Transitive, showing live on the web the ROS data from a robot, here simulated via Turtlesim.


By self-hosting you can use Transitive to build your own cloud portal much faster than starting from scratch. It allows you to develop your own capabilities and run the entire stack on your own cloud instances or on-prem servers. Just like with the hosted version there are no switching cost if you already have your own portal: you can just build capabilities and embed them in your existing portal just like you would when using the hosted version.

Getting Started

Getting started with self-hosting is easy. On a Ubuntu 20+ machine with docker and docker-compose installed, run

curl | bash

This will pull and start the latest docker images of Transitive's micro-services. Once running, go to http://portal.$HOSTNAME.local, which is your locally running Transitive portal, and use the curl command provided there to add your dev machine as robot.

You should then see your dev machine as a device on the portal. Next, you can create a new capability and start it:

npm init @transitive-sdk@latest mycap
cd mycap
npm start

This creates a new capability "mycap" from our template and starts its components in tmux. Once running, you will see it in the list of running capabilities on your device in the portal. If you want to replicate the live-data example from our video above, just uncomment the ROS related code in mycapp/robot/main.js, including this:

ros.subscribe('/turtle1/pose', 'turtlesim/Pose', (msg) => {
_.forEach(msg, (value, key) => {`/device/pose/${key}`, value);

This subscribes to the turtlesim pose and adds each field of the message separately to MQTTSync. MQTTSync will publishes field values only when they actually change. This significantly reduces bandwidth and allows for better real-time performance.

Before restarting the robot component, make sure you have a ROS 1 master running and start turtlesim and teleop to generate some data. You should then be able to see your turtle's pose update live on your portal in real-time.

Embedding in your cloud portal

Once you have developed your capability, you can embed its web-components in your cloud portal, just like you would with the hosted version. These components are authenticated and authorized via JWTs that you generate for your web users on-the-fly to grant permission to see and use the capabilities you embed in the pages you show them.

Help us build!

The list of full-stack capabilities robotics startups need to operate their fleets is long and it's getting longer every day as new startups find new applications for robotics. As such we believe it would be futile for any one company to try and build a one-size-fits-all system to meet those needs. Instead we invite you to come and join us in building a library of capabilities together. Capabilities you share on our platform can be free or you can charge a monthly fee per robot, similar to how Android let's app developers make a living of their apps. We believe that this is necessary to ensure quality and long-term support of apps/capabilities and to create a thriving ecosystem of developers and users.

If you are looking for ideas of what to build with Transitive, we are well aware of the need for many other capabilities in addition to the ones we have already built, such as:

  • Live map viewing and editing,
  • Map and AI model management,
  • Software deployment management,
  • Test automation and test result visualizations,
  • Logging,
  • Alerting,
  • Anomaly detection,
  • Task/mission queuing, tracking, and reporting,
  • Various dashboards for internal and external, i.e., customer-facing use,
  • ROS bag and MCAP recording and uploading,
  • Data ingest into various data stores like MongoDB, Prometheus, ElasticSearch, or ClickHouse,
  • Integration with third-party software tools like PagerDuty, Slack, Foxglove, or Twilio,
  • Inter-operation with other control systems like Open-RMF,
  • Integrations with infrastructure like elevators, automated doors, or phone systems,
  • Tools for internationalization,
  • Tools for robot bring-up and deployment,
  • Tools for sensor calibration,

or just web UIs for existing ROS packages similar to package specific UIs and rviz plugins such as those for RTAB-Map and slam_toolbox. For instance, we would love to see a capability that makes Cartographer easier to use.

Next Steps

In our documentation you can learn more about Transitive, get more detailed instructions for self-hosting, and find answers to frequent questions. If you just want to see Transitive in action first, we suggest creating a free account on our hosted version and trying out some of our capabilities on your robots. For questions or feedback or if you just want to chat, please email us or join our community Slack using this link. Finally, please star ⭐ us on GitHub!