Appearance
Running locally
The spoolersh/memspoold image serves the same HTTP API as the hosted service, with ephemeral in-memory storage. It needs no account and issues no API key. Nothing persists: every message is lost when the container exits. It is an evaluation build, licensed for development, testing, and evaluation only — not for production use; see the license.
Run it
sh
docker run --rm -p 127.0.0.1:8080:8080 spoolersh/memspooldThe port is bound to loopback on purpose: every bearer value authenticates here, so anything that can reach the port can use it. --rm discards the container on exit — there is nothing in it worth keeping.
Point the quickstart's two variables at it:
sh
export SPOOLER_API=http://localhost:8080/v1
export SPOOLER_KEY=localThe key value is not checked: this server holds one implicit account, and any bearer token identifies it. The header is still required — a request without one fails 401. Every operation in the API reference is available, with the same request shapes and response formats; the environment-specific statuses that never occur here are listed below. The startup banner names the address it serves and the limits in force.
What differs from production
- Nothing persists. The spool holds one copy of your data in memory. A restarted container starts empty.
- One spool. Only
defaultexists; any other name fails404, as it would in production. - Limits are not plan limits. Fixed limits apply here, printed at startup, and stored data is bounded by its memory budget. Production limits are per plan — see limits.
- Rate limiting is off.
429never occurs. - Every key authenticates.
401occurs only for a missing or non-bearerAuthorizationheader, and402never occurs. - The spool is always available.
503never occurs, and no primary changes, so no lease is dropped by a failover — see Delivery.
A client that has run only against this image has not exercised its handling of 402, 429, 503, or a 401 for a rejected key. Those responses are in errors.
In continuous integration
Run one container per test run and let it go: there is no state to reset beforehand and nothing to clean up after. Pin a version tag so the selected image cannot change between test runs. The image declares a health check, so a runner that waits for the container to become healthy will not race the first request; without one, poll List queues until it answers 200.

