Skip to content

Running locally

Last updated 

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/memspoold

The 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=local

The 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 default exists; any other name fails 404, 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. 429 never occurs.
  • Every key authenticates. 401 occurs only for a missing or non-bearer Authorization header, and 402 never occurs.
  • The spool is always available. 503 never 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.