Profile in. Official SimulationCraft report out.
A private, Docker-first runner for your browser.
Quick start · Setup guide · Configuration · Troubleshooting · Contributing
SimC Local Runner turns a .simc or .txt profile into an official
SimulationCraft HTML report. Upload or
paste a profile, tune the encounter, and keep the result in a local report
archive—without an account, database, external API key, or subscription.
Important
This app is designed for a trusted personal computer or private homelab. It mounts the Docker socket and does not include authentication. Do not expose it directly to the public internet.
| Run | Preserve | Operate |
|---|---|---|
| Upload, drop, or paste a profile | Save inputs and HTML reports | Start with one Compose command |
| Choose Patchwerk, HecticAddCleave, or DungeonSlice | Record image digest, SimC version, settings, and run time | Update the SimC engine automatically |
| Set iterations, targets, and fight time | Retain a bounded report history | Limit uploads, concurrency, resources, and run time |
| Use the official SimulationCraft container | Delete reports and matching inputs together | Serve a responsive light and dark interface |
The project stays intentionally small. It is a polished local path from profile to report, not a replacement for Raidbots or a full optimization suite.
Open the latest release, download Source code (zip), and extract it to a permanent folder.
| Platform | Start the runner |
|---|---|
| Windows | Double-click start.cmd |
| macOS | Open Terminal in the folder and run sh start.sh |
| Linux | Run sh start.sh |
The launcher checks Docker, pulls the current web image, and starts the app. No
.env file or storage path is required.
Visit http://localhost:8088.
For a manual start:
docker compose pull simc-web
docker compose up -dTip
The setup guide covers Docker Desktop, homelab bind folders, platform notes, updates, and more detailed troubleshooting.
- The runner accepts an uploaded or pasted profile.
- Your form settings replace matching
fight_style,iterations,desired_targets, andmax_timevalues in that profile. - A temporary container runs the configured official SimulationCraft image.
- The input, HTML report, and reproducibility metadata are saved locally.
If both an upload and pasted text are present, the uploaded file wins.
DungeonSlice manages its own target flow and timing, so the runner does not add
desired_targets or max_time for that fight style.
The header badge describes the SimC nightly used by the latest completed run. Open it to see the matching WoW build, hotfix, upstream commit, image source, and container digest.
- Docker Desktop on Windows or macOS, or Docker Engine with Compose on Linux
- Linux container support and permission to access the Docker socket
- An x86-64 computer for native SimulationCraft performance
The web image supports linux/amd64 and linux/arm64. The official
SimulationCraft image is currently x86-64; Apple silicon can run it through
Docker emulation, but simulations may be slower.
The defaults work without a .env file. Copy .env.example
to .env only when you want to override them.
| Variable | Default | Purpose |
|---|---|---|
SIMC_WEB_PORT |
8088 |
Host port for the web app |
SIMC_WEB_IMAGE |
ghcr.io/bromeego/simc-local-runner:latest |
Web interface image used by Compose |
TZ |
UTC |
Container timezone as an IANA name |
SIMC_IMAGE |
simulationcraftorg/simc:latest |
SimulationCraft image used for runs |
SIMC_PULL_POLICY |
always |
Engine image policy: always, missing, or never |
SIMC_CPUS |
unset | Optional CPU limit for each simulation |
SIMC_MEMORY |
unset | Optional memory limit such as 4g |
SIMC_TIMEOUT_SECONDS |
1800 |
Maximum run time before a simulation is stopped |
MAX_UPLOAD_MB |
2 |
Maximum request and profile size |
MAX_CONCURRENT_SIMS |
1 |
Simulation jobs accepted at once |
REPORT_RETENTION_COUNT |
100 |
Successful reports retained |
WEB_THREADS |
4 |
Threads serving pages and long-running requests |
With the default always policy, Docker checks SIMC_IMAGE before every run
and reuses unchanged image layers. This keeps the nightly current across game
patches and model updates.
alwayschecks the registry before every run.missingpulls only when the image is not already cached.neveruses an offline or locally built image without pulling.
The default deployment stores profiles and reports in Docker-managed volumes.
The optional homelab mode stores them in input/ and output/ beneath
SIMC_WEB_ROOT; see Homelab with host folders.
Every successful report gets a matching .json metadata file. It records the
resolved image digest when available, the SimC version, selected settings, UTC
creation time, and wall-clock run duration.
Profiles and reports may contain character information. Back them up and share them with the same care as any other personal data. When a report is deleted in the interface, its matching saved input is deleted too. Retention cleanup removes the oldest report/input pair after a successful run.
View logs:
docker compose logs -f simc-webStop the app without deleting saved data:
docker compose downUpdate and restart:
docker compose pull simc-web
docker compose up -dCaution
Do not add --volumes to docker compose down unless you intend to delete
every profile and report stored in the managed volumes.
The default Compose file pulls the published image. Add the build override to run the source in your current checkout:
docker compose -f compose.yaml -f compose.build.yaml up -d --buildRemove the override to return to the published image. Release tags such as
v0.3.0 also publish matching container tags; set SIMC_WEB_IMAGE if you want
to pin one.
.
├── app/ # Flask app, templates, static assets, container
├── docs/
│ ├── screenshots/ # README previews
│ └── SETUP.md # Desktop and homelab setup
├── examples/demo.simc # Anonymous smoke-test profile
├── tests/ # Unit, browser, and engine checks
├── compose.yaml # Published-image deployment
├── compose.bind.yaml # Optional host-folder storage
├── compose.build.yaml # Local source-build override
├── start.cmd # Windows launcher
└── start.sh # macOS and Linux launcher
See DESIGN.md for the interface design system and agent
guardrails.
Confirm Docker is running and /var/run/docker.sock is mounted as shown in
compose.yaml. On Linux, the account running Compose must be allowed to use
Docker.
Check the service and its recent logs:
docker compose ps
docker compose logs --tail=100 simc-webThe desktop address is http://localhost:8088. For a homelab, use the server's hostname or LAN IP.
Check the logs for a Docker storage error. The web container must have
/data/input, /data/output, and /var/run/docker.sock mounted. In bind-folder
mode, SIMC_WEB_ROOT must exist and be writable.
Pull it directly to reveal the underlying Docker error:
docker pull simulationcraftorg/simc:latestMore fixes are collected in the setup guide.
Install the application dependencies and run the test suite:
.venv/bin/python -m pip install -r app/requirements.txt
.venv/bin/python -m unittest discover -s tests -vValidate Compose and build the web image:
docker compose config --quiet
docker compose -f compose.yaml -f compose.build.yaml config --quiet
SIMC_WEB_ROOT=/tmp/simc-web docker compose \
-f compose.yaml -f compose.bind.yaml config --quiet
docker build -t simc-web:test appRun an end-to-end check against the real engine:
sh tests/smoke-test.shGitHub Actions runs unit, Compose, and image-build checks on every pull request. A scheduled workflow runs the anonymous demo profile against the latest official SimulationCraft image each week.
Focused issues and pull requests are welcome. Read
CONTRIBUTING.md before making a change, especially the
rules for removing character and host information from profiles, reports,
screenshots, and logs.
Report vulnerabilities privately as described in SECURITY.md.
This project runs the official
simulationcraft/simc engine through
its simulationcraftorg/simc
container image. SimulationCraft's contributors deserve the credit for the
simulator and its maintained class models.
SimC Local Runner is an independent community project. It is not affiliated with or endorsed by SimulationCraft, Raidbots, or Blizzard Entertainment. World of Warcraft and Blizzard Entertainment are trademarks or registered trademarks of Blizzard Entertainment, Inc.
SimC Local Runner is available under the MIT License. SimulationCraft and other upstream components retain their own licenses.

