Tignex
Standard · SDK ecosystem

BabelQueue

Polyglot Queues, Simplified.

Published by
Tignex
Home
babelqueue.com
Status
SDKs at 1.0 · SemVer-stable
License
MIT

The problem

Every ecosystem solves queuing on its own terms, and the message pays for it. A job serialised by PHP is unreadable to Go; a Celery payload means nothing to Spring Boot. The usual fixes — `serialize()` on the wire, a bridge service in the middle — turn a language choice into a lock-in, and a queue into a translation layer nobody owns.

The approach

BabelQueue defines the envelope first: one canonical JSON schema that every SDK produces and consumes identically, with messages routed by URN rather than by class name. A Laravel producer and a Go consumer agree because the specification says what a message is — not because they share a runtime.

Six SDKs speak it today — PHP (Laravel, Symfony), Python (Celery, Django), Go (Asynq, Machinery), Node.js (BullMQ, NestJS), Java (Spring Boot) and .NET (MassTransit) — over the brokers you already run: Redis, RabbitMQ, SQS, Azure Service Bus, Pulsar, Kafka and ActiveMQ/Artemis.

BABELQUEUE

What it is not

It is not a new message broker, and it asks for no sidecar or proxy. It does not replace your framework's job system either — it is the shape of the message those systems already pass around, written down so another language can read it.

Frequently asked

Does BabelQueue replace my message broker?
No. It is an envelope specification and a set of SDKs that run over the broker you already have — Redis, RabbitMQ, SQS, Azure Service Bus, Pulsar, Kafka or ActiveMQ/Artemis. Nothing new is deployed between your services.
Which languages have an SDK today?
Six ecosystems: PHP (Laravel, Symfony), Python (Celery, Django), Go (Asynq, Machinery), Node.js (BullMQ, NestJS), Java (Spring Boot) and .NET (MassTransit). Each produces and consumes the same canonical JSON envelope.
Do I have to rewrite my existing jobs?
Only at the boundary. Inside a service, jobs stay whatever your framework prefers; the canonical envelope applies where a message crosses a language line.
How are messages routed without a shared class name?
By URN. A fully qualified PHP class name means nothing to a Go binary, so a message names itself with an identifier both sides can resolve against the specification.

Part of Tignex

BabelQueue is developed and published by Tignex, an independent open-source engineering organization. The project keeps its own name, identity and home; Tignex is the engineering behind it.

Also from Tignex

All projects

Arrow keys to move, Enter to open.