Piston
Manifest signed & verified
A modloader with a bouncer

Compress your mods.
Reject sketchy servers.

Piston syncs signed server mods to the client, checks every jar's hash, and boots vanilla Minecraft with the right flags. No zipping modpacks by hand, no just trusting a random .jar someone sent you.

$ java -jar piston-launcher.jar --manifest https://play.example.com/manifest.json --version 1.21 --login
The pipeline

From manifest to loading screen

Five steps, one command, zero manual jar-wrangling.

01

Fetch the manifest

Client pulls manifest.json plus its .sig and .pub.

02

Check the signature

Ed25519 against the pinned server key. First contact asks first.

03

Sync the mods

Missing jars get downloaded, SHA-256'd, and cached.

04

Assets & natives

Asset index reconciled, native libs unpacked for your OS.

05

Boot Minecraft

Child JVM, real vanilla args, mods already on the classpath.

What's in the box

Every mod checks in. Nothing sneaks past.

The pieces that make Piston safe to point at a server you don't own.

๐Ÿ”

Signed manifests

Every manifest carries an Ed25519 signature. Tamper with one byte and the client throws it out before touching a single mod.

๐Ÿ”‘

Trust on first use

First connection shows the server key's fingerprint to compare. After that it's pinned โ€” a key swap gets flagged, never waved through.

๐Ÿ“ฆ

Content-addressed cache

Mods are stored by hash, so identical jars across servers only get downloaded once.

๐Ÿงฑ

Actually vanilla underneath

Piston reads Mojang's real version.json and reuses its libraries, JVM flags, and Java version as-is.

๐Ÿ‘ค

Microsoft login, if you want it

Device-code flow for real accounts, or skip it and launch offline with a deterministic UUID.

๐Ÿท๏ธ

Mods declare themselves

A tiny piston.mod.json per mod says id, version, and side โ€” server-only mods never leave the server.

No blind trust

Trust is a fingerprint, not a vibe.

Piston asks before it trusts a server, not after. The server owner publishes their key's fingerprint, you compare it once, and that's the whole ceremony.

SHA256:x7E5u2K8cMehmavxIKkEJRwJ2Dz1kCCJx6vFPc+KfYU

Doesn't match what's shown on screen? Piston just says no.

Ready to piston your server?

Sign a manifest, drop it on your web server, hand players one command.

Start with the pipeline