About

Inceptum is advanced FOSS Launcher for Minecraft written in Java

Features:

  • Syncing instances between multiple clients and servers through git
  • Easy fabric mod management (installing, removing, updating) from CurseForge and Modrinth through a GUI
  • ".imod" format to keep mod jars out of git
  • Exports to common formats
  • Cross-Platform
  • Automatic updates through Inceptum Wrapper
  • Support for running without OpenGL drivers
  • Proxy support
  • Integrated headless server launcher for inceptum packs
  • LWJGL-based GUI (not a web browser!)
  • Uses Mojangs JVMs to launch instances
  • Needs nothing but a JVM, OpenGL or mesa and an internet connection during setup

Installing

Inceptum can be installed in a number of ways, all of which are documented below.

Simple installation

First, download the Inceptum build appropriate for your system:

You can also download a single jar that contains support for all of these systems (though doing so is not recommended)

Once you have a jar, run it with an up-to-date java version. Inceptum will use your config directory ($XDG_CONFIG_HOME, ~/.config/Inceptum, %APPDATA%\Inceptum or ~/Library/Application Support/Inceptum) for saving instances/caches/etc. If you want them somewhere else, read on

Config files in current directory

If the Inceptum jar detects a directory called "run" in the directory it is placed in, it will use that instead of the users config directory.

Create a directory (= Folder) next to the inceptum jar.

Config files in a custom location

You may specify the java VM parameter -Dinceptum.base=$DIRECTORY to use a custom directory for Inceptum. If this parameter is specified, all other locations will be ignored.

Simple installation with updates

To use automatic updates, you must use the Inceptum Wrapper. Simply launch this cross-platform jar and Inceptum will launch as described above (though the initial startup may take a bit longer). The same rules for config locations apply.

You may also download the windows exe which uses fabric-installer-native-bootstrap to locate the JVM used by the official minecraft launcher and launch Inceptum using that. Please be aware that this is pretty much untested

Installation from the AUR

Inceptum is available in the AUR as inceptum-git If you use arch linux or a derivative, you may use this package instead of a manual installation. It also includes a template systemd service which you can copy and customize to launch your minecraft server. For more information on the syntax of this services config file, go here

Using Inceptum on Windows without OpenGL drivers

Download the portable build from here This archive includes Inceptum using the Inceptum wrapper, a JVM and a Mesa build for CPU-based graphics. Please be aware that using this WILL result in worse performance.

CLI

Inceptum provides a CLI which performs similar functions to the GUI. If you have feature requests, open an issue To view up-to-date information on the commands provided by Inceptum, run inceptum help or inceptum help <command>, this page is intended to explain more advanced features

The inceptum wrapper

Inceptum Wrapper looks through the libraries dir and launches the latest available Inceptum version. If it doesn't find a usable version, it will download the latest available version automatically. Launching is performed through a custom ClassLoader and an internal flag is set to inform the launched version about the wrappers' presence.

The "batch" command

This command will go through every line in the file provided in its arguments and executes the command written there. It is intended to be used in scripts that only want to run inceptum once, such as the systemd unit in the AUR package. The batch command has the additional advantage of allowing caches to stay loaded between commands, making execution faster. For example,

mod update all icesrv
run server restart icesrv
run server restart server2

is equivalent to the bash script

#!/bin/sh
inceptum mod update all icesrv
inceptum run server restart icesrv
inceptum run server restart server2

Syncing instances

Inceptum supports syncing repositories between instances through git. This is roughly comparable to updatable modpacks in other launchers. There are two workflows for this, you can choose one based on your use case.

Uploading a local pack to a game server

This approach assumes that your intention is to have a game server running Inceptum and to regularly push updates built and tested in an Inceptum instance on your PC. To set this up, initialize a repo on your server and clone it locally

Server:

cd /srv/inceptum/instances
mkdir icesrv
cd icesrv
git init
git config receive.denyCurrentBranch ignore

Client:

git clone inceptum@example.com:/srv/inceptum/instances/icesrv
cd icesrv
git branch --set-upstream-to origin/master
# copy your instance content to your new instance
git add .
git commit -m "Initial commit"
git push

After that, you can use a script similar to the following to push changes:

git push -u origin master
rconc icesrv stop
sleep 1
ssh -t inceptum@example.com "cd /srv/inceptum/instances/icesrv; git reset --hard"
ssh -t admin@example.com "sudo systemctl restart inceptum-icesrv"

icesrv is the name of the instance in this example and inceptum-icesrv is a systemd service based on the one included in the AUR package.

Providing a pack to multiple users

To do this, create a new repository on a git hosting site (like GitHub or GitLab) and push your local instance there. Since a git repository is created for every instance, simply following the instructions for pushing an existing repository or using any graphical tool is enough to set this up.

Users can add an instance created this way in the GUI under File->New Instance->Inceptum.

To update the pack, simply create a new commit and push it to your repository. Users can then update the pack by pulling the changes into their instance directory through the normal git CLI. You may also export the pack to other formats to upload it on sites like CurseForge

File Formats

Inceptum uses several json formats to store metadata and configs. All of these are subject to change, though automatic migrations will likely be provided.

inceptum.json (Main Config)

{
  // Whether to show snapshots in the version selector for new instances
  "snapshots": false,
  // Whether to launch the GUI in dark mode
  // Configurable in Settings->Dark Theme
  "darkTheme": true,
  // Whether to require an account to launch the game
  // Intended to allow running the game from USB sticks on constrained networks
  "enforceAccount": false,
  // The currently selected account
  // Used to launch the game
  "lastAccount": "some UUID",
  // The last name used for an offline session
  "offlineAccountLastName": "some name",
  // The update channel. Either "CI" or "Stable"
  // I personally recommend the CI channel as it gets the latest fixes and features quicker
  "channel": "CI",
  // The author name to add to packs where the metadata format requires specifying one
  "authorName": "Inceptum"
}

accounts.json

Do not EVER use this file manually! NEVER upload it anywhere! It stores your minecraft account login and CAN BE USED TO IMPERSONATE YOU!

instance.json (Instance Metadata)

Please note that all entries except for "version" are optional

{
  // The version to use for launching this
  // Can be a fabric loader version (as seen here) or a normal minecraft version (like "1.17.1")
  "version": "fabric-loader-0.12.12-1.17.1",
  // A custom java executable to use for launching this instance
  "java": "/path/to/java",
  // Sets the initial size of the Java heap
  // In bytes (this is 2MB)
  "minMem": 2097152,
  // Sets the maximum size to which the Java heap can grow
  // In bytes (this is 2GB)
  "maxMem": 2147483648,
  // Additional arguments to pass to minecraft
  "arguments": {
    // JVM arguments to add
    // Use this for things like aikars flags or java agents
    "jvm": [
      "-Dsome.argument=value"
    ],
    // Arguments to add when launching as a client
    // Generally not needed, but can be used to do things like launching a server (I think)
    "client": [
      "someArgument"
    ],
    // Arguments to add when launching as a server
    // Things like "nogui" go here
    "server": [
      "nogui"
    ]
  }
}

*.imod (Mod Metadata)

{
  // Where the JAR file for this mod can be obtained
  "sources": [
    {
      // The type of the source
      // In this case, Modrinth
      "type": "modrinth",
      // The ID of the version on modrinth
      "id": "31ES0yWr"
    },
    {
      // The type of the source
      // In this case, CurseForge
      "type": "curseforge",
      // The ID of the project on CurseForge
      "projectId": 306612,
      // The ID of the file on CurseForge
      "fileId": 3609590
    },
    {
      // The type of the source
      // In this case, a direct download
      "type": "direct",
      // The name of the file this should be saved as
      "fileName": "fabric-api-0.46.1+1.17.jar",
      // The URL to download from
      "url": "https://cdn.modrinth.com/data/P7dR8mSH/versions/0.46.1+1.17/fabric-api-0.46.1+1.17.jar",
      // Dependencies for this file (optional)
      "dependencies": [
        // Dependencies in the same dependency format used int "sources"
      ]
    }
  ],
  // The sha1 hash of this file
  // Used to verify downloads and for modrinth
  "sha1": "a7d86f36c5b27bdb0008a84c3ce91e2b095a2834",
  // The murmur2 hash of this file
  // Used for curseforge
  "murmur2": "1020327834",
  // A list of dependent mods by their file names
  "dependents": [
    "someMod.imod"
  ],
  // A list of dependencies by their file names
  "dependencies": [
    "someOtherMod.imod"
  ],
  // Whether this mod was explicitly installed (used during mod removal)
  "explicit": true
}

Modules

Inceptum is split into multiple separate but interdependent modules. The purpose of this page is to list them, explain their purpose and where to get them

common

This module contains common, platform-agnostic code shared between the launcher and the wrapper. It can be obtained through the maven.

launcher

This module contains common, platform-agnostic code between all frontends of the launcher. It can be obtained through the maven.

launcher-cli

This module contains the platform-agnostic command-line interface for the launcher It can be obtained through the maven or the shadowed Inceptum jar

launcher-imgui

This module contains a dear-imgui-based frontend for Inceptum. Builds of this module are platform-specific and dependents must manually ensure the correct imgui and lwjgl natives are imported. A build without natives can be obtained through the maven and a build with natives through the shadowed Inceptum jar

launcher-dist/Inceptum

This module builds a shadowed jar of launcher-cli and launcher-imgui to be used by normal users. It also adds additional, platform-specific commands to the CLI. A shadowed build can be obtained as "Inceptum" from maven, a build with dependencies as "launcher-dist" Windows users can also obtain a binary built using fabric-installer-native-bootstrap.

launchwrapper

This module is added to the minecraft classpath and therefore independent of any other modules. It handles loading forceload natives

wrapper

This module serves the purpose of downloading the components necessary for executing Inceptum on the current platform. A build with shadowed dependencies can be obtained through the maven (with the suffix "all") or as a jar. Windows users can also obtain a binary built using fabric-installer-native-bootstrap.