First mock: command and measurement

With Docker installed, start a working HTTP mock from the bundled OpenAPI spec:

docker run --rm -p 3000:3000 ghcr.io/saasy-solutions/mockforge:latest serve --spec examples/openapi-demo.json --http-port 3000

In another terminal:

curl http://localhost:3000/users

The response is a JSON users array. This path needs no Rust toolchain, account, or configuration file. Stop it with Ctrl-C when finished.

Measured cold start

On October 11, 2026, the first verified /users response arrived 9.195 seconds after starting an uncached image pull:

StageSeconds
Download the public image into an empty image cache8.392
Start the container and verify the HTTP response0.803
Total9.195

The target is less than 60 seconds from the image pull to the first valid response. The check used a fresh Linux Docker daemon with an empty data root, a new container, and no prior MockForge configuration. Host Docker installation and the preparation of that daemon were outside the timed interval. Download speed and host hardware affect the result.

The tested public image reported version 0.3.227; its immutable reference was:

ghcr.io/saasy-solutions/mockforge@sha256:c0e9a7d90ddb41b89340750bb6c54375c01a77d81f04bf22779f2a0def5ef7fd

The recorded receipt contains the exact timing and response checks. This measures that published container, independently of newer native CLI releases.

Reproduce the measurement

From a checkout of the repository, with Python 3 and Docker available:

python3 scripts/measure-first-mock.py \
  --image ghcr.io/saasy-solutions/mockforge@sha256:c0e9a7d90ddb41b89340750bb6c54375c01a77d81f04bf22779f2a0def5ef7fd \
  --receipt first-mock-receipt.json

The script needs permission to start a privileged Docker container. It creates an isolated nested Docker daemon, verifies that the image cache is empty, pulls the public image, starts the example, and checks the JSON response. It removes its own daemon, containers, and anonymous volumes on exit.

To measure the current public tag, omit --image. Each receipt records the version actually executed.

Use your own OpenAPI spec

Save your spec as api.yaml, then run:

docker run --rm -p 3000:3000 --mount type=bind,source="$PWD/api.yaml",target=/app/api.yaml,readonly ghcr.io/saasy-solutions/mockforge:latest serve --spec /app/api.yaml --http-port 3000

With the native CLI installed, the equivalent command is mockforge serve --spec api.yaml.

For a runnable native project, run mockforge init my-api. The generated project includes an example OpenAPI spec and configuration; the command prints the startup command and the curl request to test it. Customizing protocols, chaos, or generated data can wait until the first response works.