Matt 5a24801f48 pack: v0.28.0 — Steam 'n' Rails (port) + Copycats+/Aero weight bridge
Adds two mods on top of v0.27.0:

  - Create: Steam 'n' Rails 0.2.0+neoforge-mc1.21.1 (stable). The
    official Steam 'n' Rails team skipped 1.21.1, so this is the
    "Porters of Railways" community port — actively maintained,
    310k downloads on the beta line and 0.2.0 just hit stable.
    Brings train QoL: track tools, semaphores, conductor cap,
    smokestacks, narrow-gauge tracks, etc.

  - Copycats+ aeronautics weight 1.1.1. Small interop mod so
    copycat blocks contribute weight to Create: Aeronautics
    contraptions instead of being treated as massless. ~15KB.

All deps satisfied by mods already in the pack (Create, Copycats+,
Sable, Create: Aeronautics).

Tested live: server boots, port 25565 binds, KubeJS loads 0/0 errors,
aerocopycats logs HELLO FROM COMMON SETUP, Railways registers
55+53+238 entries across its three creative tabs. No new crashes.

Known noise: Steam 'n' Rails ships optional loot tables for tracks
of wood types from many other mods (TwilightForest, BYG, TFC, Blue
Skies, Hex Casting, BoP, etc.). Mods absent from this pack produce
~276 'Unknown registry key' ERROR lines once at boot. Harmless —
loot tables for items that don't exist just fail to parse and get
skipped. Standard behavior for Rails on lean packs.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 19:29:43 +00:00
2026-05-05 00:19:05 +01:00

Brass & Sigil

Self-hosted Minecraft modpack distribution + administration system. Three components, one repo:

brass-and-sigil/
├── launcher/   ← Avalonia desktop client (Windows .NET 8)
│                  Auths with Microsoft, syncs the modpack, launches the game.
├── server/     ← brass-sigil-server daemon (Linux .NET 8)
│                  Wraps the MC subprocess, exposes the admin web panel,
│                  syncs mods, runs backups + BlueMap, handles whitelist.
├── pack/       ← Modpack content
│   ├── pack.lock.json    Source of truth for mod versions / URLs / hashes
│   ├── tweaks/           Hand-written data-only tweak source
│   └── overrides/        Build output / hand-placed local files (gitignored)
├── scripts/    ← Build + deploy entry points (run from repo root)
│   ├── Update-Pack.ps1     Refresh pack.lock.json from Modrinth/CurseForge
│   ├── Check-Updates.ps1   Non-mutating "what's new?" report
│   ├── Build-Tweaks.ps1    Compile tweaks/ into pack/overrides/mods/*.jar
│   ├── Build-Pack.ps1      Generate manifest.json from the lockfile
│   └── Deploy-Brass.ps1    One-shot build + deploy everything
└── docs/       ← Operational notes, deploy runbook, schema docs

Quick start

# Pull dependencies, copy and edit the deploy profile
git clone <remote> brass-and-sigil
cd brass-and-sigil
Copy-Item scripts\deploy.config.template.ps1 scripts\deploy.config.ps1
notepad scripts\deploy.config.ps1   # fill in deploy share, SSH host, etc.

# Build + deploy everything in one go
.\scripts\Deploy-Brass.ps1

deploy.config.ps1 is gitignored -- local values never get committed.

Component reference

Component What it does Technology
launcher/ Friend-distributed client. Auths with Microsoft via WebView2 + XboxAuthNet, downloads mods, launches Minecraft. Single self-contained .exe published from publish/. Avalonia 12 + CmlLib.Core
server/ Daemon running alongside the MC process on Linux. Hosts a Kestrel web panel for admin (cookie-auth, rate-limited), bridges RCON, runs scheduled backups + BlueMap renders, handles whitelist requests. ASP.NET Core minimal APIs
pack/ Lockfile-driven modpack content. pack.lock.json resolves mod slug → URL+SHA-1; Build-Pack.ps1 walks it and produces manifest.json for the launcher and the server-tool to consume. PowerShell tooling

Workflow

  1. Bump mod versions: .\scripts\Update-Pack.ps1 (queries Modrinth + manual CurseForge entries).
  2. Sanity-check: .\scripts\Check-Updates.ps1 for a non-mutating availability report.
  3. Edit tweaks under pack/tweaks/<name>/ if you're changing recipes / loot / etc.
  4. Deploy: .\scripts\Deploy-Brass.ps1 -- builds launcher + server, regenerates manifest, mirrors everything to the deploy share, scp's the server binary.

Secrets / config files

File Tracked? Notes
launcher/launcher-config.template.json Empty placeholders, public-safe
launcher/launcher-config.json Local override; merged into the published exe at build time if present
server/deploy/server-config.example.json Template; rename to server-config.json on the server with real values
server/deploy/server-config.json Production config; lives on the server only
scripts/deploy.config.ps1 Local deploy profile (paths, SSH host, share location)

License

See LICENSE.

S
Description
Migrated from Bitbucket BS/brass-and-sigil
Readme MIT 5.6 MiB
Languages
C# 53.1%
JavaScript 23.9%
PowerShell 12.9%
HTML 5.3%
CSS 2.9%
Other 1.9%