Skip to content

Quick start

Go from a fresh clone to a message round-trip in about a minute.

make build compiles the embedded Houston UI and generates the gRPC code, so a fresh-clone build needs:

  • Go 1.26.1 or later
  • Bun (to build the Houston admin UI that gets embedded into the binary)
  • buf (to generate the gRPC code that make build regenerates via its schema step)
Terminal window
make build

make build builds Houston into internal/houston/ui/dist, regenerates the gRPC code, and produces a ./plainq binary at the repository root.

PlainQ ships with authentication on by default, and the JWT signing secret is required. Generate one inline:

Terminal window
./plainq serve --auth.jwt.secret="$(openssl rand -hex 32)"

You’ll see startup logs and:

  • a gRPC listener on :8080 (queue operations, used by the CLI),
  • an HTTP listener on :8081 (Houston UI, /health, /metrics),
  • a SQLite database created at ./plainq.db.

In another shell:

Terminal window
# Create a queue — prints the new queue ID (an XID like cf9k2m...).
QID=$(./plainq create my-queue)
# Send a message.
./plainq send -message='hello, plainq' "$QID"
# Receive it back.
./plainq receive "$QID"

That’s the whole loop: create → send → receive.

Point a browser at http://localhost:8081. The first time you visit, Houston walks you through onboarding — creating the first admin account. From there you can browse queues, manage accounts and roles, and watch metrics.

plainq create my-queue ──▶ gRPC CreateQueue ──▶ queue row in plainq.db
plainq send $QID ... ──▶ gRPC Send ──▶ message row, visible now
plainq receive $QID ──▶ gRPC Receive ──▶ message returned,
hidden for 30s, retries++

The message you received is not gone. PlainQ uses at-least-once delivery: the message is hidden for a visibility timeout (30s by default) so you can process it, and you must explicitly acknowledge it with a delete to remove it. The CLI’s receive doesn’t auto-delete, so if you run receive again after 30 seconds, the same message comes back. To remove it on read, pass -ack.