FAQ

What is HotMesh?

HotMesh is a microservice orchestration solution similar to Temporal, but requiring only a backend database (Postgres, Redis, etc). Instead of a central app server, HotMesh uses decentralized stateless message routers.

What are the benefits of HotMesh's data-centric approach?

HotMesh allows real-time data aggregation in every workflow. With its channel-first design, you can monitor analytics, events (pub-sub), and telemetry in real-time.

How does scaling work in HotMesh?

Scaling is as easy as scaling your database. No app server means no multi-body problems—just a straightforward, linear scaling process. Your overhead is limited to your database's proxy or sharding strategy. Simple scales.

Is HotMesh compatible with existing Temporal SDKs?

Yes! HotMesh clones all Temporal APIs. If you're familiar with Temporal, you'll feel right at home. Here are some common lifecycle patterns. The term 'MeshFlow' is used instead of Temporal, but the syntax is the same.

import { Client as PostgresClient } from 'pg';
import { Meshflow, Worker, Client } from '@hotmeshio/hotmesh';

import * as workflows from './workflows';

// 1) Initialize a worker (typically done at server startup)
await Worker.create({
  //configure the connection
  connection: {
    class: PostgresClient,
    options: {
      connectionString: 'postgresql://usr:pwd@localhost:5432/db'
    }
  },
  namespace: 'meshflow',
  taskQueue: 'default',

  //link your worker function!
  workflow: function (name) {
    return `Hello, ${name}!`;
  },

  //configure retry/backoff policy
  options: {
    backoffCoefficient: 2,
    maximumAttempts: 1_000,
    maximumInterval: '5 seconds'
  }
});

// 2) Instance a client
const client = new Client({
  connection: {
    class: PostgresClient,
    options: {
      connectionString: 'postgresql://usr:pwd@localhost:5432/db'
    }
  },
});

//3) Start a new workflow (add searchable, indexed data)
const workflowId = HotMesh.guid();
const handle = await client.workflow.start({
  namespace: 'meshflow',
  taskQueue: 'default',
  workflowName: 'example',
  workflowId,
  args: ['HotMesh'],
  expire: 3_600,
  //add searchable, indexed data
  search: {
    data: {
      '$entity': 'default',
      id : workflowId,
    },
  },
});

//4) subscribe to the eventual result  ('Hello, HotMesh!')
console.log('\nRESPONSE', await handle.result(), '\n');

//5) Shutdown routers (typically on sigint/sigterm)
await MeshFlow.shutdown();

What databases and backends does HotMesh support?

HotMesh works with multimodal backends capable of handling streams (queues), stores (process ledgers), and events (pub/sub). Postgres and Redis are both fully supported as standalone backends. NATS can be added for advanced Pub/Sub as it supports patterned subscriptions. Take advantage of the NATS network and broadcast workflow status in real time.

Is HotMesh truly serverless?

Absolutely. With no central app server, HotMesh operates as a decentralized swarm of routers. Scale your database, and you've scaled your application. It's serverless in the truest sense—no servers, just services. Install the HotMesh NPM package in those services in need of orchestration.

What languages are supported in HotMesh?

HotMesh runs on TypeScript. Python is likely the next language. (But Rust-based routers would be ridiculously fast!)

How does HotMesh handle upgrades and pluggability?

HotMesh's routers are connected via pub/sub and can act as a quorum. This allows the collective to decide when and how to upgrade. The architecture supports pluggable backends, so you can configure routers with different technologies like Postgres, NATS, or Redis based on your needs.

What's the business advantage?

By removing the app server, HotMesh adopts a channel-first approach that makes it easy to extend the product in ways that materially impact your business. Every running workflow mimics Temporal's APIs but also provides additional methods: emit, enrich, and trace.

The emit method broadcasts events to your chosen event provider (NATS, Redis, Postgres, etc.). It's fully pub/sub, allowing you to subscribe to real-time events and drive just-in-time business decisions—valuable for C-suite executives, marketing, and product teams. If you already have an event sink or aggregator like NATS, there's no setup required.

The enrich method adds any name/value pair to the workflow's database record, enabling you to enrich your data store with valuable information on the fly.

The trace method sends attribute sets to the OpenTelemetry sink, providing robust tracing capabilities and triggered alarms in your chosen sink.

Here's how you can use these methods in your workflows:


export async function example(): Promise<[string, string, string, number]> {
  // Send 'trace' to the OpenTelemetry sink (happens just once)
  await MeshFlow.workflow.trace({
    name: 'example',
    version: 1,
    complete: true,
  });

  // Send 'enrich' to the Database Backend (enriches record with name/value)
  await MeshFlow.workflow.enrich({
    name: 'example',
    version: '1',
    complete: 'true',
  });

  // Send 'emit' event to the Event Bus (emits events via the Pub/Sub Backend)
  await MeshFlow.workflow.emit({
    'my.dog': { everything: 'goes' },
    'my.dog.cat': { anything: 'works' },
  });

  return await Promise.all([
    greet('1'),
    greet('2'),
    greet('3'),
    MeshFlow.workflow.sleepFor('5 seconds'),
  ]);
}
            

Leverage these methods for real-time data and actionable insights. C-Suite, Marketing, Product, and Operations all benefit from the channel-first approach.

What's the vision?

HotMesh represents a new generation of data-first applications where orchestration is a natural extension of the database layer rather than a separate concern.

This approach aligns with broader industry trends toward infrastructure consolidation, serverless architectures, data-centric operations, AI/ML integration, and cost optimization. The result is orchestration that's simpler to deploy, easier to maintain, more cost-effective to scale, and naturally integrated with an organization's data infrastructure.

Who's behind this?

HotMesh is the passion project of Luke Birdeau. He's been developing HotMesh as a side hobby, and is always happy for input and help from the community. He enjoys cooking, walking, and talking about himself in the third person.

Is HotMesh Open Source?

HotMesh is released under an Apache 2.0 license with commercial restrictions. It's free in nearly every sense of the word. The goal is to allow people to use it, plug into it, and benefit from it. However, to prevent unauthorized reselling or rebranding, certain commercial restrictions apply.

What's the license?

HotMesh is licensed under a standard Apache 2.0 license with commercial restrictions. It specifically targets integration vendors:

[Y]ou are not permitted to use the Work, or any modified or derivative version of the Work, for the purpose of offering the Work, or any product that includes the Work or any part of it, as a commercial service to third parties, or in any other commercial context where you derive direct or indirect financial benefit from the use of the Work in a manner that would compete with the Licensor's services. Any such use requires explicit written permission from the Licensor.

Definitely not a lawyer, but also not a big fan of the limited license options in the GitHub pulldown menu.

How can I contribute?

Contributions are welcome! If you're interested in adding to the temporal pattern coverage or improving HotMesh in any way, please refer to the contribution guidelines on GitHub. Your input and help are highly appreciated.