SlurpDocs
How SlurpNet works, what each piece does, and why. Built for visitors and operators landing here without context — install / packs / CRC / status / privacy / API, in plain language.
Getting started
SlurpNet ships as a single Windows installer. The launcher manages every modpack on your machine — pinned versions, content-addressed downloads, auto-repair on launch, one-click rollback when a patch goes sideways.
Install
- Download SlurpNet-Launcher-Setup-11.0.5.exe (≈ 105 MB, Windows 10 / 11 x64). Direct CDN installer; no GitHub redirect, no updater manifest hop.
- Run it. The installer is code-signed; SmartScreen may pause once on first run — click More info → Run anyway.
- Sign in with Discord on first launch so the operator HMAC handshake completes (only the public Discord username is read; no DM scope).
- Pick a pack from the rack and hit Install. The launcher pulls the manifest, hashes every file, and only downloads the deltas you don't already have.
/launcher/latest.yml drives a background download. You can opt out under Settings → Updates.
What the launcher does for you
- Verifies every modpack file with sha256 before launch.
- Repairs drift silently — missing or modified files restore from the content-addressed blob store, your saves and config aren't touched.
- Backs up world snapshots every 4 hours, 30-day retention, one-click rollback.
- Probes Cloudflare → Steam → game servers for real latency on every connect — that's where the status page numbers come from.
How packs work
A SlurpNet pack is a versioned, hashed bundle of mods + config tuned for a specific game. Each pack is a "channel" the launcher subscribes you to. The pack repo on GitLab is the source of truth; the manifest pins exact versions and file hashes.
Pack lifecycle
- Operator commits to the pack repo (e.g.
slurpnet-7dtd). - CI builds the manifest, signs it with the SlurpNet metadata key, and publishes both files to
/api/launcher-servers.json+.sig. - Your launcher polls the feed every 30 s, validates the signature, and surfaces the new version with a "Update available" indicator.
- You hit Update. The launcher diffs the new manifest against your local file hashes and downloads only what changed. No full reinstall, no MO2 dance.
Channel categories
Every pack carries a category that drives the chip filter on the pack catalog:
- SURVIVAL
- 7 Days to Die, Valheim, Enshrouded, Palworld, Necesse, Rust, DayZ, Icarus
- ROLEPLAY
- FiveM, RedM, Skyrim Together Reborn, New Vegas Together
- HORROR
- VEIN, Sons of the Forest
- COMMUNITY
- Stardew Valley
Categories are hand-curated in scripts/generate-pack-pages.js (the GAME_CATEGORIES map). Adding a new game means adding one line.
CRC & signature verification
Reproducibility is the load-bearing principle. The version you ran Tuesday is bit-for-bit the version you run Friday — no silent mod updates, no quiet config drift, no "it worked yesterday."
How verification stacks
- Metadata signature. The launcher pulls
/api/launcher-servers.jsonand the matching.sig. The signature is verified against the public key baked into the launcher binary. Mismatch = the feed is rejected, no install proceeds. - Manifest hash. The signed feed pins each pack's manifest sha256. The launcher fetches the manifest, re-hashes it, and refuses to proceed on mismatch.
- Per-file hash. Every entry in the manifest has a sha256. The launcher hashes the local file before launch — drift triggers auto-repair from the blob store.
Live status
The status page is generated from real probes, not third-party query services or stale Discord embeds. The launcher pings every server's game port directly; the page polls our own /api/status.json feed every 30 seconds.
Probe states
- Online — game port answered within the timeout window.
- Offline — game port did not respond. Probe retries on the next poll.
- Coming soon — pack staged but not yet provisioned.
- Unknown — status feed unreachable. The launcher falls back to the launcher-known last-good state.
Privacy & telemetry
Telemetry is local-first and opt-in for everything beyond crash reports. The split between the public /api/servers.json and the private /api/launcher-servers.json is the entire reason this stack works the way it does.
What stays in the launcher
- Install paths, drive letters, OS version, hardware specs.
- Server IPs and connect strings (private feed only).
- Pack manifest URLs (lint-stripped from the public feed by
scripts/lint-public-feed.js). - Discord OAuth state (cookie-bound, not persisted on the server beyond session expiry).
What the public site sees
- Server name, modpack version, max-player slot count, feature chips.
- Online state from
/api/status.json(boolean per server). - The contributor wall on /cost-share.html — opt-in only, names entered manually.
- No third-party analytics. No fingerprint. No trackers.
Public API
Every JSON feed the launcher reads is also publicly available. Build your own dashboards, Discord webhooks, or ops integrations against these endpoints.
- GET /api/servers.json
- Sanitized public feed. No IPs, no manifest URLs, no credentials.
- GET /api/status.json
- Live online/offline state per server. 30-s freshness.
- GET /api/changelog.json
- Launcher + pack changelog timeline.
- GET /api/contributors.json
- Cost-share contributor wall feed.
- GET /api/products.json
- Launcher + sidecar download metadata (latest version, size, sha).
- GET /download
- Compatibility alias for the current Windows launcher installer. Website links use the explicit versioned installer path.
- GET /launcher/latest.yml
- electron-updater channel manifest (auto-update source).
Signed feeds
The launcher-internal feed at /api/launcher-servers.json ships paired with .sig files signed with the SlurpNet metadata key. The public feeds are unsigned but lint-verified by CI. The launcher source and sync workflow live in GitLab.
Rate & caching
Cloudflare fronts the entire CDN with a 30 s edge TTL on JSON feeds. Don't hammer; the data is identical to what your launcher already polls.
Brand & design system
Everything you see on this site — typography, color, motion, the corner-crosshair poster framing — comes from the Continuity Interface design system. SlurpNet is one of several sub-brands (alongside Atlas, Bloom, OffScript, SystemCTRL).
Tokens
- SIGNAL (citrine)
#D8FF32— the SlurpNet mark. Earned, never decorative.- CANVAS
#000000 → #252220across five surfaces (c0..c4).- INK
#F2EEDFbone-white, slightly warm, never pure.- STATE
- OK
#5BFFA6· WARN#FFB300· HOT#FF3B1F· COOL#42E8FF - FONTS
- Big Shoulders Display · Inter Tight · JetBrains Mono
Motion verbs
The launcher and the website share 10 named motion verbs (LATCH · RAIL · WARM · STAMP · PULSE · RESOLVE · INSTRUMENT · REVEAL · ARCHIVE · SETTLE) plus four signal keyframes (sig-pulse · sig-blink · sig-scan · sig-meter). All motion respects prefers-reduced-motion via a universal clamp.
FAQ
Is this affiliated with any game publisher?
No. SlurpNet is a community modpack collective. We don't represent any game studio. Trademarks belong to their respective publishers.
Can I run a SlurpNet pack without the launcher?
For most packs, no — the modpack files are content-addressed and the manifest needs to be hashed before launch. Some external-client packs (FiveM, RedM) can connect with their own clients; the launcher just provides the connect-string and pack notes.
How do I get my own server added?
File an issue on the launcher project with the game, your operator handle, and a brief on the pack scope. The pack repo template lives in slurpnet-pack-template.
What does "operator-funded" mean on the cost-share page?
The rack hardware, uplink, and power are paid for by Zachy out of pocket. The /cost-share.html ledger is an honest bookkeeping page; nobody is required to contribute, and the recognition wall is opt-in only.
Where's the Discord?
Coming soon. The auth flow uses Discord OAuth, but the public community Discord invite isn't published yet. Watch /changelog.html for the link drop.