Skip to content

Getting started

Mockifyr ships as a single image — the mock engine, the admin API, and the dashboard together.

Run it

The same one line on macOS, Linux, and Windows — no volume, no flags:

Terminal window
docker run -p 8080:8080 ghcr.io/omercelikdev/mockifyr

That’s it. Three surfaces are now live:

SurfaceURL
Mock servinghttp://localhost:8080
Admin APIhttp://localhost:8080/__admin
Dashboardhttp://localhost:8080/__mockifyr

Your first stub

Create one over the admin API:

Terminal window
curl -X POST http://localhost:8080/__admin/mappings \
-d '{"request":{"method":"GET","url":"/hello"},"response":{"status":200,"body":"world"}}'

Then hit it on the mock surface:

Terminal window
curl http://localhost:8080/hello
# → world

…or open the dashboard at http://localhost:8080/__mockifyr, click New stub, and fill in the form.

Keep your stubs

The zero-arg run is in-memory. To persist across restarts, use Compose or a named volume — both identical on every OS:

Terminal window
docker compose up # stubs live in ./mappings, next to you
docker run -p 8080:8080 -v mockifyr-data:/work/mappings ghcr.io/omercelikdev/mockifyr # named volume

Preload stub files from your host

To load a folder of WireMock *.json files, bind-mount it. Only the path syntax differs per shell:

Terminal window
docker run -p 8080:8080 -v "$PWD/mappings:/work/mappings" ghcr.io/omercelikdev/mockifyr # macOS / Linux
# PowerShell: -v "${PWD}/mappings:/work/mappings" CMD: -v "%cd%/mappings:/work/mappings"

Files load into the default tenant. For a named tenant, use the dashboard’s Import while that tenant is selected, or POST /__admin/mappings/import with an X-Mockifyr-Tenant header.

Durable datastores

Terminal window
docker compose -f docker-compose.postgres.yml up # PostgreSQL
docker compose -f docker-compose.redis.yml up # Redis

Run without Docker

Requires the .NET 10 SDK:

Terminal window
dotnet run --project src/Mockifyr.Server -- --port 8080 --root-dir .

Next steps