- 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.
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.