Skip to content

Repository files navigation

Trestle concept art showing a brass and black bridge across a rocky landscape

Trestle

Trestle is a cross-platform Minecraft Java Edition launcher built with Kotlin and Compose Multiplatform.

Trestle provides:

  • Isolated, persisted Minecraft instances with atomic registry writes.
  • Vanilla, Fabric, NeoForge, Forge, and Quilt metadata resolution and installation.
  • Verified Mojang asset, library, native, logging, and client downloads.
  • Managed Mojang Java runtimes, with Eclipse Temurin for Linux ARM64.
  • Modrinth, CurseForge, ATLauncher, FTB, FTB Legacy, and Technic catalogs.
  • Installed-content updates, hash-based identification, dependency tracking, enable controls, and removal.
  • Launcher update notices with release notes and platform-specific downloads.
  • Tracked modpack updates with previews, file backups, and rollback.
  • Modrinth, CurseForge, Prism Launcher, and MultiMC pack import.
  • Portable instance export with Prism-compatible metadata.
  • Instance cloning, grouping, custom icons, launch statistics, and component changes.
  • World import, copy, rename, backup, data-pack, icon, and seed controls.
  • Server status, player counts, ordering, resource-pack policy, and direct join controls.
  • Screenshot management, instance notes, searchable game logs, and crash reports.
  • Microsoft, imported-session, and offline account profiles.
  • Per-instance accounts, custom Java paths, environment variables, and live console output.
  • Desktop pre-launch, wrapper, and post-exit commands.
  • Android launch support for Vanilla Minecraft 26.2 on compatible ARM64 and x64 devices.
  • Android touch, keyboard, mouse, and gamepad input.
  • An iPhone and iPad launcher target with Microsoft authentication and instance management.
  • A bundled iOS Java 25 and Amethyst-derived runtime bridge for JIT-enabled ARM64 devices.

Android uses a fixed Java 25 and Zink runtime. Android does not support other Minecraft versions or mod loaders yet.

Targets

  • Android 8.1 or newer (API 27), ARM64 and x64, with Vulkan 1.2 or newer for game launch.
  • iOS 16 or newer on ARM64 devices. Game launch needs a compatible JIT or jailbreak environment.
  • Linux, macOS, and Windows, with x64 and ARM64 packages and a bundled Java 21 launcher runtime.

Android x64 requires device acceptance tests before stable release. The build checks do not establish Minecraft or GPU compatibility. 32-bit ARM, 32-bit x86, and RISC-V packages are not available.

The shared module contains the interface, product logic, network clients, persistence, installer, and domain model. Platform source sets provide runtime adapters and app storage paths.

Requirements

  • JDK 21
  • Android SDK 37 for Android builds
  • Xcode 16.4 or newer for iOS builds

Use the included Gradle wrapper. You do not need a separate Gradle installation.

Run the desktop app

./gradlew :desktopApp:run

Use the desktop command line

The packaged desktop application also provides command-line operations:

trestle --list
trestle --install <instance-id>
trestle --launch <instance-id>
trestle --export <instance-id> [archive-path]

The launch command writes Minecraft output to the terminal. It returns the game process exit code.

Modrinth works without an access key. CurseForge requires a key that CurseForge issued for Trestle.

If you have an approved Trestle key, set it before you build or run the application:

export TRESTLE_CURSEFORGE_API_KEY="your-approved-key"
./gradlew :desktopApp:run

The Android build reads the same environment variable and adds it to the application manifest. Do not use the key from another launcher.

Build the Android app

./gradlew :androidApp:assembleDebug

The command creates ARM64, x64, and universal debug APKs under androidApp/build/outputs/apk/debug.

Trestle shows CurseForge as unavailable when the key is not set. Modrinth search and installation remain available.

Release APKs and app bundles use a dedicated signing key. See Android release signing for configuration and backup instructions.

Build the iOS app

Open iosApp/Trestle.xcodeproj on a Mac. Select a development team, then build the Trestle scheme.

You can compile the shared iOS target from Gradle:

./gradlew :shared:compileKotlinIosSimulatorArm64

Device builds include the iOS runtime payload. The simulator supports launcher workflows but cannot start the ARM64 device runtime.

See iOS launcher target for the build, signing, and runtime requirements.

Validate changes

Run the shared tests:

./gradlew :shared:allTests

Run Android lint:

./gradlew :androidApp:lintDebug

Compile the desktop app:

./gradlew :desktopApp:classes

GitHub Actions runs these checks for each pull request and each push to main.

Architecture references

Project structure

androidApp/   Android application and entry point
desktopApp/   Desktop application and entry point
iosApp/       iOS application and Xcode project
shared/       Shared UI, resources, domain model, and tests
gradle/       Version catalog and Gradle wrapper files
licenses/     Licenses for bundled third-party assets

License

Trestle source code uses the GNU General Public License version 3 only.

Some third-party code uses the Apache License 2.0. See licenses/Apache-2.0.txt.

The bundled Roboto font uses the SIL Open Font License 1.1. See licenses/OFL-Roboto.txt.

The vendored PlatformTools accent readers use the MIT License. See licenses/MIT-PlatformTools.txt.

Release and update guides

About

Cross-platform Minecraft launcher built with Kotlin and Compose Multiplatform

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages