ArkView is a client-side plugin for the Arkon bot that lets you view your map data in real time. It runs on your server, parses the save, and serves the data over HTTP for Arkon to consume.
ArkView processes one map per instance — run multiple maps via multiple instances (one container / one systemd unit / one exe per map).
Parsing is handled by the pure-Python arkparser
library — no .NET, no external exe. It reads both engine generations:
- ASE (Survival Evolved) —
.arkflat-binary saves - ASA (Survival Ascended) —
*_WP.arkSQLite saves
Each parse runs in a short-lived child process that writes ASV_*.json and
exits, so the multi-GB parse footprint is reclaimed by the OS and the
long-lived server stays lean. There is no database: results are written to
an output directory and held in memory until the next parse. ArkView watches
the map file's modification time and re-parses (every ~5s) when the server saves.
Migrating from the old (.NET) build? The HTTP API and response shape are unchanged, so the Arkon/AVClient side needs no changes. You no longer need the .NET runtime or the bundled
ASVExport.exe.
ArkView reads a config.ini (created on first run; or copy default_config.ini).
[Settings]
# Port for the API to listen on (TCP). Forward it in your router/firewall.
Port = 8000
# Direct path to the .ark map file.
# ASE: .../Saved/SavedArks/TheIsland.ark
# ASA: .../Saved/SavedArks/TheIsland_WP/TheIsland_WP.ark
# Player (.arkprofile) and tribe (.arktribe) files are read from the same directory.
MapFilePath = path/to/your/map.ark
# (Optional) Direct path to the cluster/solecluster folder
ClusterFolderPath = path/to/your/cluster
# (Optional) Direct path to BanList.txt
BanListFile = path/to/your/BanList.txt
# Parser child priority (Windows): LOW, BELOWNORMAL, NORMAL, ABOVENORMAL, HIGH
Priority = LOW
# CPU cores the parser child may use (capped to the host core count)
Threads = 2
# Re-parse when cluster files change (not just the map file)
ReprocessOnArkDataUpdate = False
# If true, the API binds to 127.0.0.1 only
Debug = False
# (Optional) Sentry DSN for error tracking
DSN =
# (Optional) API key for Bearer-token auth
APIKey =Two env vars let one install serve many maps (see systemd below):
ARKVIEWER_CONFIG— path to this instance'sconfig.iniARKVIEWER_OUTPUT— directory this instance writesASV_*.jsonto
- Download the latest
ArkViewer.exefrom Releases. - Run it anywhere — it creates a
config.ininext to the exe on first launch. - Set
MapFilePath(and optionallyClusterFolderPath), pick aPort, and forward that port. No .NET required.
git clone https://github.com/vertyco/arkview.git
cd arkview
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\Activate.ps1
pip install -r requirements.txt
cp default_config.ini config.ini # then edit MapFilePath etc.
python main.pyOne container per map; no database or state volume (output is ephemeral and re-parsed on restart).
cp docker-compose.example.yml docker-compose.yml # edit binds/ports/configs
docker build -t arkviewer:latest .
docker compose up -dEach service binds a per-map config.ini at /app/config.ini and mounts the
save tree read-only. See docker-compose.example.yml for the full layout. If
your save-mount owner isn't UID 1000, build with --build-arg UID=<uid> GID=<gid>.
A templated unit at deploy/arkview@.service runs one shared install as many
instances. Assuming code + venv at /opt/arkviewer and per-map files under
/opt/arkviewer/maps/<name>/:
sudo cp deploy/arkview@.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now arkview@theisland.service
journalctl -u arkview@theisland -fThe unit sets ARKVIEWER_CONFIG/ARKVIEWER_OUTPUT per instance and caps memory
at 4 GB (the parser child peaks ~2 GB on a large map — raise MemoryMax for
very large/modded maps).
Once ArkView is running:
- Type
+viewserversto open the server menu (cluster + servers already added). - Select your cluster and click Servers.
- Click ArkView and enter the port you're running on, then Submit (IP is usually auto-detected from your server's IP).
Parsing is powered by arkparser. The
exported data schema descends from the ASV lineage
(miragedmuk's ASV) — lots of love for the
groundwork there.
Found a bug or have a suggestion? Open an issue. For larger contributions, please reach out on Discord before opening a PR.