Before you begin

TickForge is a performance-focused Paper fork targeting Minecraft 26.1. Make sure your environment meets the following requirements before proceeding.

  • Java 25 or higher — required to run the server. Java 25 is fully supported.
  • 2 GB RAM minimum — enough for a small test server. Production deployments should allocate 4–8 GB or more depending on player count and plugin load.
  • A dedicated server directory — TickForge generates configuration files, world data, and logs on first launch. Use a clean folder with no spaces in the path.
ℹ️
Paper compatibility
TickForge maintains full Paper API compatibility. Existing Paper plugins work without modification, and world data from Paper servers transfers seamlessly.

Downloading TickForge

Download the latest server.jar from the TickForge downloads page or GitHub releases. The runtime artifact is always published as a single server.jar file — no versioned filenames to track.

LINUX / MACOS
curl -LO https://tickforge.dev/downloads/latest/server.jar
WINDOWS (POWERSHELL)
Invoke-WebRequest -Uri "https://tickforge.dev/downloads/latest/server.jar" -OutFile "server.jar"
Coming from Paper?
If you are migrating an existing Paper server, you can simply replace your current paper-*.jar with the TickForge server.jar. Configuration files are renamed automatically on the first launch. See the Migrating from Paper article for a detailed walkthrough.

Getting the server running

Follow these steps to go from a fresh download to a running server.

  • 1
    Create a server directory

    Create a dedicated folder for your server and place server.jar inside. Avoid paths with spaces or special characters.

  • 2
    Accept the Minecraft EULA

    Run the server once with java -jar server.jar. It will generate eula.txt and shut down. Open eula.txt and change eula=false to eula=true.

  • 3
    Review generated configuration

    Start the server again. On this first real launch, TickForge generates its configuration files: tickforge-global.yml, tickforge-world-defaults.yml, server.properties, bukkit.yml, and commands.yml. Stop the server and review the settings before going live.

  • 4
    Create a launch script and start

    Write a startup script with proper JVM flags (see below). Run the script to start your server in production mode.

Recommended startup commands

Use a startup script with tuned JVM flags for best performance. The examples below are a solid starting point for most servers. Adjust -Xms and -Xmx to match your available memory.

LINUX / MACOS — start.sh
#!/usr/bin/env bash java -Xms4G -Xmx4G \ -XX:+UseG1GC \ -XX:+ParallelRefProcEnabled \ -XX:MaxGCPauseMillis=200 \ -XX:+UnlockExperimentalVMOptions \ -XX:+DisableExplicitGC \ -XX:+AlwaysPreTouch \ -XX:G1NewSizePercent=30 \ -XX:G1MaxNewSizePercent=40 \ -XX:G1HeapRegionSize=8M \ -XX:G1ReservePercent=20 \ -XX:G1MixedGCCountTarget=4 \ -XX:InitiatingHeapOccupancyPercent=15 \ -XX:G1MixedGCLiveThresholdPercent=90 \ -XX:G1RSetUpdatingPauseTimePercent=5 \ -XX:SurvivorRatio=32 \ -XX:+PerfDisableSharedMem \ -XX:MaxTenuringThreshold=1 \ -jar server.jar --nogui
WINDOWS — start.bat
@echo off java -Xms4G -Xmx4G ^ -XX:+UseG1GC ^ -XX:+ParallelRefProcEnabled ^ -XX:MaxGCPauseMillis=200 ^ -XX:+UnlockExperimentalVMOptions ^ -XX:+DisableExplicitGC ^ -XX:+AlwaysPreTouch ^ -XX:G1NewSizePercent=30 ^ -XX:G1MaxNewSizePercent=40 ^ -XX:G1HeapRegionSize=8M ^ -XX:G1ReservePercent=20 ^ -XX:G1MixedGCCountTarget=4 ^ -XX:InitiatingHeapOccupancyPercent=15 ^ -XX:G1MixedGCLiveThresholdPercent=90 ^ -XX:G1RSetUpdatingPauseTimePercent=5 ^ -XX:SurvivorRatio=32 ^ -XX:+PerfDisableSharedMem ^ -XX:MaxTenuringThreshold=1 ^ -jar server.jar --nogui pause
⚠️
Set -Xms equal to -Xmx
Always set the minimum and maximum heap to the same value. This prevents the JVM from wasting time resizing the heap at runtime and keeps GC pause times predictable.

Chunk-loading profiles

TickForge includes built-in chunk-loading profiles that auto-tune send rates, load rates, and concurrency settings. Set the profile in tickforge-global.yml under the chunk-loading-advanced section. When a profile other than CUSTOM is active, individual chunk-loading values are overridden by the profile.

Profile Send Rate Load Rate Gen Rate Best For
CUSTOM Manual tuning (default)
SURVIVAL 75.0 100.0 auto Vanilla-style SMP servers
SKYBLOCK 90.0 80.0 12.0 Skyblock / limited-world servers
FACTIONS 85.0 70.0 16.0 PvP / factions servers
MINIGAMES 120.0 120.0 32.0 Lobby / minigame servers
tickforge-global.yml
chunk-loading-advanced: profile: SURVIVAL

Configuration files overview

TickForge generates and uses the following configuration files. All files are created with sensible defaults on the first launch.

  • tickforge-global.yml — Global server-wide settings: chunk loading, messages, proxies, Spark profiler, and the chunk-loading profile selector.
  • tickforge-world-defaults.yml — Per-world defaults: anti-xray, entity spawning, despawn ranges, mob behavior, and per-player spawn tracking.
  • server.properties — Standard vanilla server properties (port, motd, difficulty, view distance, etc.).
  • bukkit.yml — Bukkit-level settings: spawn limits, chunk GC, tick rates, and alias configuration.
  • commands.yml — Custom command aliases and overrides.
ℹ️
Automatic migration from Paper
If TickForge detects paper-global.yml or paper-world-defaults.yml in your server directory without their TickForge counterparts, it will automatically rename them on startup. This migration runs exactly once — no data is lost.

Unsafe memory access suppression

Minecraft bundles JOML 1.10.8, which uses sun.misc.Unsafe internally. On newer Java versions (especially Java 25+), the JVM prints deprecation warnings about this usage.

TickForge's bootstrap detects whether the --sun-misc-unsafe-memory-access=allow flag is present. If it is missing, the server automatically relaunches itself with the flag appended — suppressing the warnings. No manual action is needed.

If you want to avoid the brief relaunch overhead, you can add the flag directly to your startup script:

STARTUP FLAG
java --sun-misc-unsafe-memory-access=allow -Xms4G -Xmx4G -jar server.jar --nogui

Verifying your installation

Once your server has started, confirm that TickForge is running correctly.

  • 1
    Check the startup banner

    Look for the TickForge-branded startup line in the console. It should display the version, build time, git branch, and commit hash — for example: TickForge 26.1.1-DEV (build 2026-04-07T15:31:57Z, branch dev/26.1, commit 77c0866)

  • 2
    Run /tf status

    From the server console or in-game with operator permissions, run /tf status. This shows live TPS, MSPT, memory usage, and player count at a glance.

  • 3
    Verify configuration loaded

    Confirm that tickforge-global.yml and tickforge-world-defaults.yml exist in your server directory and contain the expected values.

Where to go from here

Your server is up and running. Here are the recommended next reads to get the most out of TickForge:

  • Server Profiles — Deep dive into each chunk-loading profile and when to use them.
  • tickforge-global.yml — Full reference for every key in the global configuration file.
  • /tf Command Reference — All available operator commands, arguments, and permission nodes.
  • JVM Startup Flags — Advanced JVM tuning and the Unsafe suppression relaunch behavior in detail.
  • Chunk Performance Tuning — How the chunk lookup cache and PlayerChunkSender rewrite improve TPS.
Migrating from Paper?
If you replaced an existing Paper jar with TickForge, check the Migrating from Paper article for a walkthrough of what changed and what to verify after migration.