RabbitMQ

Lightweight, dependency-free RabbitMQ emulator speaking the AMQP 0-9-1 binary protocol.

KeyValue
Port5672
ProtocolAMQP 0-9-1 (TCP)
Size~90 KB
Startupfast

Default Connection

amqp://parlel:parlel@parlel-bridge:5672

Supported Operations

AreaOperations
ConnectionHandshake (Connection.Start/Tune/Open), channels
QueuesQueue.Declare, Queue.Delete
ExchangesExchange.Declare, Exchange.Delete
MessagingBasic.Publish (push), Basic.Get / Basic.Consume (consume)

Usage

Add the parlel/bridge sidecar to your test compose file. It exposes RabbitMQ at parlel-bridge:5672 and your app connects with the unmodified real amqplib client — no Parlel code in the app.

include:
  - path: parlel-bridge.yml          # image: parlel/bridge
services:
  app:
    build: .
    env_file: test.env
    depends_on:
      parlel-bridge: { condition: service_healthy }
PARLEL_API_KEY=pk_... docker compose -f docker-compose.test.yml up

Then connect with the real client against the parlel-bridge hostname:

import amqp from "amqplib";

const conn = await amqp.connect("amqp://parlel:parlel@parlel-bridge:5672");
const ch = await conn.createChannel();
await ch.assertQueue("tasks");
ch.sendToQueue("tasks", Buffer.from("hello"));
const msg = await ch.get("tasks");

Access via Parlel Sandbox

RabbitMQ uses the binary AMQP protocol, so parlel_execute does not drive it — point a native client (e.g. amqplib) at it instead. The parlel/bridge sidecar exposes RabbitMQ at parlel-bridge:5672, tunneling the raw AMQP protocol as TCP over the sandbox HTTPS preview proxy via WebSocket, so amqplib connects to parlel-bridge:5672 unmodified — with just an API key (or localhost if you run the bridge outside Docker and publish ports). No SSH tunnel and no daytona CLI. A real amqplib client completes the AMQP 0-9-1 handshake, declares queues, publishes, and consumes (both push delivery and Basic.Get) end-to-end.

Surface coverage

This emulator faithfully replicates the API surface most application code and agents exercise. Anything below the supported lines is either an intentional design choice for a fast, zero-cost local emulator (✓ By design) or a candidate for a future release (⟳ Roadmap) — never a silent inaccuracy.

Legend: ✅ fully supported · ◐ accepted (stored, not strictly enforced) · ✓ by design · ⟳ on the roadmap.

FeatureStatus
Queues / exchanges / publish / consumeSupported
Routing keys / bindings / topic exchangesSimplified
Acknowledgements / prefetch / DLXNot enforced
TLS / vhostsNot supported
<!-- parlel:testenv:start -->

Configuration — test.env

Copy these into your test.env (used by the bridge sidecar flow). Tokens are Parlel's seeded test credentials — any non-empty value is accepted by the emulator, so you rarely need to change them. Swap in real credentials only when pointing at the live service in prod.env.

RABBITMQ_DEFAULT_USER=parlel
RABBITMQ_DEFAULT_PASS=parlel
RABBITMQ_DEFAULT_VHOST=/
<!-- parlel:testenv:end -->