Git Product home page Git Product logo

drasl's Introduction

Drasl icon Drasl

Drasl is an alternative API server for Minecraft that handles authentication, skins, and capes. You can use it to host Minecraft servers that are completely independent from Mojang's infrastructure. It's designed to be easy to host yourself, but a "reference instance" is hosted at https://drasl.unmojang.org which currently requires a Minecraft account to register.

It's compatible with both authlib-injector and the vanilla Yggdrasil protocol, which means it supports:

  • Minecraft launchers that support authlib-injector, such as PollyMC or HMCL
  • Minecraft servers running authlib-injector
  • Vanilla Minecraft servers running version 1.16 or later, via JVM arguments. Vanilla 1.16+ clients are supported too, but most launchers use authlib-injector for third-party accounts.

It includes a minimalist web front end for registering and managing accounts.

Background

You've always been able to host your own Minecraft server, but unless you run the server in offline mode, authentication and skins are usually still handled by Mojang's API servers. There are many reasons to host your own API server instead of using Mojang's. Your community might want to:

  • Experience the benefits of offline servers without losing skins, encrypted connections, or account security
  • Create additional accounts to allow users to have multiple players logged in to a server simultaneously
    • Have a "camera account" spectate your character for content creation
    • Program bots to automate tedious tasks like AFKing, crafting, or even building map art.
  • Have skins with transparency, or high-resolution skins (this would require a modded client as well)
  • Play Minecraft in a country or on a network where Mojang's servers are inaccessible
  • Keep your activity private from Mojang. Mojang knows which servers you are active on, when you log on, who else is on those servers, etc. If telemetry is enabled (since 1.18, it cannot be disabled without a mod), they are also notified whenever you load a singleplayer world.
  • Support players that don't have a Microsoft account
  • Serve access tokens that last longer, so you don't run into "Invalid session" errors as often. These errors can be annoying with modpacks that take a long time to restart.
  • Opt out of chat reporting
  • Have a backup authentication system in case Mojang's servers go down

Features

  • Easy to host: a single Go binary plus a few static assets, no runtime dependencies. See doc/installation.md.
  • Highly configurable
  • Fast, minimalist, and highly-accessible web interface. JavaScript is used only for cosmetic effects and is not required.
  • Optional: proxy requests to fallback API servers (see FallbackAPIServers)
    • You can configure your Minecraft server to accept users logged in with either a Mojang account or a Drasl account.
  • Optional: disable access token and public key expiry (no more "Invalid session" or "Invalid signature for profile public key")
  • Optional: sign player public keys to support chat signing and enforce-secure-profile=true (see SignPublicKeys)
  • Optional: allow high-resolution skins (see SkinSizeLimit)
  • Optional: allow registering from existing account an another API server (i.e. Mojang's) (see RegistrationExistingPlayer)
    • Useful if you want to keep your UUID
    • Optional: require a skin challenge to verify ownership of the existing account (see RequireSkinVerification)

Installation

Quick Setup (for Docker on Linux)

  1. git clone https://github.com/unmojang/drasl.git
  2. sudo cp -RTi ./drasl/example/docker /srv/drasl
  3. cd /srv/drasl
  4. Fill out config/config.toml according to one of the examples in doc/recipes.md
  5. docker compose up -d
  6. Set up an HTTPS reverse proxy (using e.g. Caddy or nginx) to localhost:25585.

See doc/installation.md for other setups, including instructions for setting up a reverse proxy.

Configuration

See doc/configuration.md for documentation of the configuration options and doc/recipes.md for common configuration patterns.

Usage

See doc/usage.md for post-installation instructions and guidance on setting up Minecraft clients and servers.

API

Drasl implements the Mojang API, documented here on wiki.vg:

If you find that an API route behaves substantively different than the Mojang API, please file an issue.

Drasl also implements (almost all of) the authlib-injector API at /authlib-injector, to the extent that it differs from Mojang's. The authlib-injector API is documented here (Google Translated to English).

A Drasl API for creating and administering accounts is planned.

Building

If using Nix (with flakes), simply run nix build.

Otherwise, install build dependencies. Go 1.19 or later is required:

sudo apt install make golang gcc nodejs npm    # Debian
sudo dnf install make go gcc nodejs npm        # Fedora
sudo pacman -S make go gcc nodejs npm          # Arch Linux

Then build the program with:

make

Run the tests with:

make test

Alternatives

License

GPLv3

Why GPL and not AGPL? Isn't this a web application?

Drasl is intended to be self-hosted, customized, and hacked on. If it were licensed under the GNU Affero GPL, any user who tweaks their instance even slightly would be required to publish the changes, or else they would be violating the AGPL. While I'm a strong believer in copyleft, I don't want to place such a burden on the users in this particular case.

drasl's People

Contributors

evan-goode avatar catfromplan9 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.