This project, Obsidian Launcher, is a custom 'cracked' Minecraft launcher.
It didn't start its life in C#, though. My first attempt was in C++. 👉 Click here to browse the last C++ commit
Why the switch? Let’s just say C++ development, while powerful, presented a series of... character-building experiences that eventually led me to the more streamlined environment of C# and .NET.
-
⚔️ The Great Library Hunt & CMake Wars: Simply getting a reliable compression and archive library integrated felt like a quest. I wrestled with CMake for days just to get a clean build across setups. Hours spent debugging build scripts could've built actual features!
-
🔐 The SSL Certificate Fiasco: Remember OpenSSL’s lovely inability to easily read system certs on some platforms? I do. I embedded
cacert.pemmanually. It mostly worked—except for one URL that always failed outside of tests. The kicker? Tests passed every single time. Eventually, I gave up and disabled SSL verification altogether.
It was clear that for this project, the everything-is-manual nature of C++ was a roadblock. So, I ditched it and started fresh with C#
This project aims to replicate the key features of a modern Minecraft launcher:
- 🧩 Fetching and managing official Minecraft versions.
- ☕ Handling Java runtimes (discovery, download, extraction).
- 🧱 Downloading & verifying all required game assets.
- 📚 Managing libraries, including native ones for LWJGL.
- 🧵 Building classpaths and JVM/game arguments.
▶️ Launching the game!
Actively in development 🔄 Here's what's working or in progress:
- 📜 Version Manifests: Fetches and parses Mojang's data.
- ☕ Java Management: Finds Java, downloads, extracts archives (
.zip✅,.tar.gz✅). - 🎨 Asset Management: Downloads and verifies game assets.
- 📦 Library Management: Handles downloads, verification, extraction + native rules.
- 🧠 Argument & Classpath Builder: Fully functional with placeholder support.
- 🎮 Game Launch: Successfully launches Minecraft with output capture.
- 📋 Logging: Serilog-based console and file logging.
- 📚 Rich Standard Library –
HttpClient,System.IO.Compression.ZipFile, and more. - 📦 NuGet Ecosystem – Easy, fast package management.
- ⚡ Productivity – Less boilerplate, more logic.
- 🧼 Modern Features – Async/await, LINQ, clean syntax.
- 🧘 Sanity Preservation – No more build system nightmares.
ObsidianLauncher/
├── ObsidianLauncher.sln
└── ObsidianLauncher/
├── ObsidianLauncher.csproj
├── Program.cs
├── LauncherConfig.cs
├── Models/
│ └── (e.g., MinecraftVersion.cs, Library.cs)
├── Enums/
│ └── (e.g., OperatingSystemType.cs)
├── Services/
│ └── (e.g., HttpManagerService.cs, JavaManager.cs)
└── Utils/
└── (e.g., CryptoUtils.cs, LoggerSetup.cs)
- .NET 10.0 SDK (or newer) ✅
This launcher runs on Windows, Linux, and macOS thanks to .NET 10!
-
🧬 Clone the repository.
-
🔄 Restore packages:
dotnet restore "Obsidian Launcher.csproj" -
🏗️ Build it:
dotnet build "Obsidian Launcher.csproj" -c Release -
🚀 Run it:
On Windows:
dotnet run --configuration Release # Or directly: bin\Release\net10.0\Obsidian Launcher.exeOn Linux/macOS:
dotnet run --configuration Release # Or directly: ./bin/Release/net10.0/Obsidian\ Launcher(Data will be stored in
.ObsidianLauncher)
To create a standalone executable for a specific platform:
# For Windows (x64)
dotnet publish -c Release -r win-x64 --self-contained
# For Linux (x64)
dotnet publish -c Release -r linux-x64 --self-contained
# For macOS (x64)
dotnet publish -c Release -r osx-x64 --self-contained
# For macOS (ARM64 - M1/M2/M3)
dotnet publish -c Release -r osx-arm64 --self-containedThe standalone executable will be in bin/Release/net10.0/{runtime-id}/publish/
- 🔐 Authentication: Add Microsoft login (only offline mode supported currently).
- 🖼️ UI: Build a GUI! (Console ≠ user-friendly 😅)
- 📁 Profile Management
- 🧩 Mod Management
- 🧠 Placeholder Replacements: Finish ‘em all.
- 🧪 Unit Tests
- 💡 And lots more!
See .ai-docs/PRISM_LAUNCHER_FEATURE_COMPARISON.md for a comprehensive feature comparison with PrismLauncher and a roadmap for future development.
This project includes AI-generated documentation to help with development, testing, and feature planning. These documents are located in the .ai-docs/ folder:
- Testing Plan - Comprehensive testing scenarios and procedures
- Feature Comparison - Detailed comparison with PrismLauncher and implementation roadmap
- Task Summaries - Summaries of completed development tasks
These documents are provided as reference material and should be reviewed and validated as the project evolves.
Found a 🐞bug or have an 💡idea?
Open an issue or PR — all help is appreciated!
This project is licensed under the GPL v3 License 📄