SMASM
SMASM
Steve Metrodick's Awesome Modpack Syncer — the same, even in the mirror.

Your modpack.
Their game. Byte for byte.

SMAMS mirrors a Lethal Company (BepInEx) modpack exactly — same mods, same versions, same configs — for your whole friend group, through your own Forgejo, Gitea or GitLab server. It is a full mod manager too. Free and open source, for Windows and Linux.

GUI, CLI and an MCP server for AI agents · English & Magyar · Friends join with an invite code, no account

How it works

📦 One repo per modpack

The owner links a profile to a repo on their Forgejo, Gitea or GitLab server and publishes. Every publish is a commit — the history is the changelog, and rolling back always works.

#️⃣ Content-addressed storage

File contents are stored once in the server's package registry, keyed by SHA-256. Updates download only what changed, and everything is verified before a single file is replaced.

🎟️ Invite codes, no accounts

Friends paste a short invite code and get an exact mirror of the pack. The code holds no secrets — safe to paste into chat.

For friends: three clicks to play

Paste the invite code you got from the modpack owner. SMAMS shows the pack's name, version and size before downloading anything.

Pick where it goes — a fresh profile, a fast hard-linked copy of one of your Gale profiles, or any folder you choose. Your existing setup is never touched by default.

Update now → Launch. SMAMS downloads and verifies everything first, then swaps files in. All up to date? Launch starts the game through Steam — a vanilla launch is one click away.

Your configs can survive updates

Mark files an update must never overwrite (e.g. BepInEx/config/…/*) — your keybinds stay yours, everything else stays in lockstep.

See what changes

Before an update you see exactly what happens, per mod (added, removed, updated x → y, toggled) and per file. Any mod in the list opens its Thunderstore page.

For modpack owners

Publish from your profile

Log in (browser OAuth or a token), link a profile to a repo — SMAMS can create the public repo for you — review the changes per mod and per file, write a message and publish. Only new file contents are uploaded.

History & rollback

Every version is listed with date, message and mod changes. Rolling back publishes an older state as a new version — old files are never deleted, so it always works.

Gale-friendly

Publish straight from a Gale profile (read-only), or import it as a hard-linked copy. SMAMS never writes to Gale's database and asks before it ever writes into a Gale profile.

Server checklist

One OAuth app (redirect http://127.0.0.1/callback, public client), package size limits ≥ your biggest mod, a public org with public repos — then friends never need to log in. Works on Forgejo, Gitea and GitLab.

A mod manager, too

In your own profiles SMAMS does what you expect from Gale or r2modman — subscribed profiles stay read-only, so they never drift from the pack.

🔎 Thunderstore browser

Search, sort, categories, quick filters (installed / updatable), ratings, version history. Installs resolve dependencies and follow the exact Gale install rules.

🧩 Mods screen

Enable/disable, update, uninstall, update all with one click, missing-dependency warnings, sorting and author grouping. Click a mod and its details open next to the list.

⚙ Config editor

Each mod's config files in a form — dropdowns for true/false and fixed choices, descriptions and defaults shown — or as raw text. JSON is validated, and every save leaves a timestamped backup.

▶ Launch any profile

Modded or vanilla, through Steam, on Windows and on Linux with Proton (the winhttp override is set up for you).

🩺 Debug tools

Logs in one place, integrity check against the pack, one-click repair or reinstall, and a diagnostics zip with every secret redacted.

🤖 AI-ready (MCP)

smams-mcp exposes profiles, mods, logs and checks to any MCP client. In opt-in write mode the agent can update, disable or remove the mod it blames, pull the pack or repair files — logged, never while the game runs.

Command line included

The GUI and smams-cli share the same config and profiles. Scripts welcome: -y for unattended runs, meaningful exit codes, tokens only via stdin.

smams-cli publish --owner lc-modpacks --repo dave --create --name "Dave modpack"
smams-cli push "first version" -y
smams-cli invite

smams-cli join 'lcsync1:…' --new "Dave modpack"
smams-cli pull -y
smams-cli launch

Download

🪟 Windows

Unzip anywhere and run smams.exe — no installer, no admin rights.

🐧 Linux

A package for your distro (below), or the AppImage / tarball for any distro.

Debian / Ubuntu (signed apt repo — updates come with apt upgrade)

curl -fsSL https://smams.szabotar.dev/apt/smams.gpg | sudo tee /usr/share/keyrings/smams.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/smams.gpg] https://smams.szabotar.dev/apt stable main" | sudo tee /etc/apt/sources.list.d/smams.list
sudo apt update && sudo apt install smams

Arch Linux (signed pacman repo)

curl -fsSL https://smams.szabotar.dev/smams.asc | sudo pacman-key --add -
sudo pacman-key --lsign-key 6259E2D732600B8B4032A19C12C68DE16237E85A
sudo tee -a /etc/pacman.conf <<'EOF'
[smams]
SigLevel = Required DatabaseOptional
Server = https://smams.szabotar.dev/arch/$arch
EOF
sudo pacman -Syu smams-bin

Arch Linux, or build it yourself from the PKGBUILD (not on the AUR yet)

mkdir smams-bin && cd smams-bin
curl -fsSLO https://smams.szabotar.dev/download/PKGBUILD
makepkg -si

Any other distro (AppImage, no FUSE needed)

curl -fLO https://smams.szabotar.dev/download/SMAMS-latest-x86_64.AppImage
chmod +x SMAMS-latest-x86_64.AppImage
./SMAMS-latest-x86_64.AppImage --appimage-extract-and-run
# the CLI from the same file:
./SMAMS-latest-x86_64.AppImage --appimage-extract-and-run smams-cli --help

Packages and repositories are signed with the SMAMS Releases key: smams.asc · 6259 E2D7 3260 0B8B 4032 A19C 12C6 8DE1 6237 E85A · SHA256SUMS (.asc) · all releases

FAQ

Which servers does it work with?

Forgejo, Gitea and GitLab — self-hosted or public (Codeberg, gitlab.com). SMAMS talks to the server's HTTP API (repos, a package registry, OAuth); the server kind is detected automatically.

Do my friends need an account?

No. An invite code is enough for joining and updating, as long as the modpack repo and its owner are public. Only the owner logs in, to publish.

Does it touch anything outside the mods?

No. A profile is the BepInEx/ folder plus the 3 doorstop launcher files, nothing else. Files you mark as "keep mine" are never overwritten, and disabled mods are left alone.

Is it safe with my Gale installation?

SMAMS reads Gale's database through a temporary copy and never writes it. The recommended setup is a hard-linked copy of your Gale profile: fast, no double disk usage, Gale untouched.

Windows and Linux?

Both, as native apps. On Linux with Proton, SMAMS sets up the winhttp DLL override for you.

Why is the logo mirrored?

Because SMAMS reads the same backwards — and mirroring is exactly what it does: the owner's pack, the same on every friend's machine. The A is the mirror axis.

Languages?

English by default, Hungarian built in: GUI — Settings → Language; CLI — --lang hu or SMAMS_LANG=hu.