Skip to content

Libraries and Tools

LITIENGINE adheres to a lean, minimalist architecture. The engine relies on a carefully selected foundation of lightweight libraries and ecosystem tools to maximize developer productivity while eliminating native dependency conflicts.


Core Engine Libraries

LITIENGINE intentionally avoids heavy native dynamic bindings (like C/C++ OpenGL layers), maintaining pure cross-platform portability across Windows, Linux, and macOS. The engine core only includes a minimal set of runtime dependencies:

Library Version / Source Purpose
Input4j Pure Java 25+ Gamepad, joystick, and controller input integration utilizing Java Panama Foreign Function & Memory (FFM) APIs with zero external DLL/so dependencies.
VorbisSPI 1.0.3-1 Java Sound Service Provider Interface for decoding and streaming .ogg Vorbis audio files.

Game Development Tools & Integrations

  • utiLITI Editor


    The official 2D level editor, tileset designer, asset packager, and live Java script executor bundled directly with LITIENGINE.

  • Tiled Map Editor


    Full bi-directional support for importing and editing .tmx maps and .tsx tilesets exported from the industry-standard Tiled editor.

  • Aseprite & Pixel Art Tools


    Seamless workflow for importing spritesheet grids, JSON texture atlases, and animation frame sequences exported from Aseprite.

  • Model Context Protocol (MCP)


    Built-in JSON-RPC / SSE server in utiLITI enabling AI coding agents (OpenCode, Antigravity, Codex) to inspect and edit levels directly.


Steam Integration (steamworks4j)

LITIENGINE does not bundle or require Steam libraries out of the box—games remain 100% independent with zero forced dependencies.

However, if you plan to distribute your game commercially on Steam, the open-source steamworks4j library is the recommended bridge for accessing Steamworks SDK features (achievements, cloud saves, leaderboards, and overlay).

1. Add steamworks4j Dependency

In your build.gradle:

build.gradle
dependencies {
  implementation 'com.code-disaster.steamworks4j:steamworks4j:1.9.0'
  implementation 'com.code-disaster.steamworks4j:steamworks4j-server:1.9.0'
}

2. Configure App ID & Initialization

  1. Register your title on the Steamworks Partner Portal to obtain your game's numerical AppID.
  2. Create a text file named steam_appid.txt in your project root containing only your AppID (e.g. 480 for Spacewar test):
    steam_appid.txt
    480
    
  3. Initialize the Steam API during game startup:
    SteamProgram.java
    package com.example.game;
    
    import com.codedisaster.steamworks.SteamAPI;
    import com.codedisaster.steamworks.SteamException;
    import de.gurkenlabs.litiengine.Game;
    
    public class SteamProgram {
      public static void main(String[] args) {
        try {
          if (SteamAPI.init()) {
            System.out.println("Steamworks initialized successfully!");
          }
        } catch (SteamException e) {
          System.err.println("Failed to initialize Steam: " + e.getMessage());
        }
    
        Game.init(args);
        Game.start();
      }
    }
    

Standalone Distribution & Packaging Tools

When preparing your game for release, these tools allow you to package standalone binaries that require no pre-installed Java on the player's computer:

  • jpackage: Bundled tool in JDK 21+ for generating native .msi / .exe (Windows), .dmg / .app (macOS), and .deb / .rpm (Linux) installers.
  • jlink: Generates a lightweight, stripped-down Java runtime containing only the modules your game actively uses (~35–45 MB).
  • Launch4j: Wraps your executable JAR into a lightweight Windows native .exe with customized icons and splash screens.
  • Gradle Shadow Plugin: Bundles all compiled classes and third-party dependencies into a single executable fat JAR.