CanvasMC

games
Report Issue

Supercharge your Minecraft server with multithreaded dimension ticking, improved chunk generation, optimized entity handling and many more powerful optimizations.

Contributors:
README

CanvasMC

CanvasMC is a high-performance Minecraft server software focused on maximizing server performance while maintaining plugin compatibility. Built on top of Purpur, it implements various experimental optimizations to achieve significant performance improvements.

CanvasMC Website

CanvasMC Plugin documentation

Server Ports

The minecraft server requires a single port for access (default 25565) but plugins may require extra ports to enabled for the server.

Port default
Game 25565

Requirements

To run CanvasMC, you'll need:

  • Java 22 or newer
  • At least 4GB of RAM (recommended)
  • A stable internet connection
Docker Images (2)
Name Image
Java 25 ghcr.io/pterodactyl/yolks:java_25
Java 22 ghcr.io/pterodactyl/yolks:java_22
Startup Command
java -Xms128M -XX:MaxRAMPercentage=95.0 --add-modules=jdk.incubator.vector -jar server.jar --nogui
Variables (2)

Canvas MC Version

CanvasMC-Minecraft version (example: 1.21.4). Set to 'latest' to use latest version

Environment:
MC_VERSION
Default:
latest
User Viewable:
User Editable:
Rules:
required|string|max:15

CanvasMC Build Number

Build number from https://jenkins.canvasmc.io/job/Canvas/. Set to 'latest' to get the newest build

Environment:
CANVAS_BUILD
Default:
latest
User Viewable:
User Editable:
Rules:
required|string|max:10
Installation Script
Container: ghcr.io/pterodactyl/installers:debian
Entrypoint: bash
#!/bin/bash
cd /mnt/server

apt-get update
apt-get install -y curl jq openjdk-17-jdk

# Clean old install
rm -f server.jar

MC_VERSION="$(echo "$MC_VERSION" | tr -d ' ')"
CANVAS_BUILD="$(echo "$CANVAS_BUILD" | tr -d ' ')"

# Get version/build
if [[ "$CANVAS_BUILD" == "latest" ]]; then
    if [[ "$MC_VERSION" == "latest" ]]; then
        echo "[CanvasMC] Fetching latest Minecraft version and build..."
        BUILD_INFO=$(curl -fsSL "https://canvasmc.io/api/v2/builds/latest?project=canvas")
    else
        echo "[CanvasMC] Fetching latest build for Minecraft $MC_VERSION..."
        BUILD_INFO=$(curl -fsSL "https://canvasmc.io/api/v2/builds/latest?project=canvas&channel=$MC_VERSION")
    fi

    if [[ -z "$BUILD_INFO" ]]; then
        echo "[CanvasMC] Failed to query Canvas API."
        exit 1
    fi

    RESULT=$(echo "$BUILD_INFO" | jq -r '.result')
    if [[ "$RESULT" != "SUCCESS" ]]; then
        echo "[CanvasMC] Canvas API returned an error."
        echo "$BUILD_INFO"
        exit 1
    fi

    MC_VERSION=$(echo "$BUILD_INFO" | jq -r '.channelVersion')
    BUILD_NUMBER=$(echo "$BUILD_INFO" | jq -r '.buildNumber')
    JAR_URL=$(echo "$BUILD_INFO" | jq -r '.downloadUrl')

else
    # Specified build number
    BUILD_NUMBER="$CANVAS_BUILD"

    if [[ "$MC_VERSION" == "latest" ]]; then
        echo "[CanvasMC] Fetching latest Minecraft version..."
        BUILD_INFO=$(curl -fsSL "https://canvasmc.io/api/v2/builds/latest?project=canvas")

        if [[ -z "$BUILD_INFO" ]]; then
            echo "[CanvasMC] Failed to query Canvas API."
            exit 1
        fi

        RESULT=$(echo "$BUILD_INFO" | jq -r '.result')
        if [[ "$RESULT" != "SUCCESS" ]]; then
            echo "[CanvasMC] Canvas API returned an error."
            echo "$BUILD_INFO"
            exit 1
        fi

        MC_VERSION=$(echo "$BUILD_INFO" | jq -r '.channelVersion')
    fi

    JAR_URL="https://jenkins.canvasmc.io/job/Canvas/${BUILD_NUMBER}/artifact/canvas-server/build/libs/canvas-build.${BUILD_NUMBER}.jar"
fi

# Check values
if [[ -z "$MC_VERSION" || "$MC_VERSION" == "null" ]]; then
    echo "[CanvasMC] Failed to resolve a valid Minecraft version."
    exit 1
fi

if [[ -z "$BUILD_NUMBER" || "$BUILD_NUMBER" == "null" ]]; then
    echo "[CanvasMC] Failed to resolve a valid build number."
    exit 1
fi

if [[ -z "$JAR_URL" || "$JAR_URL" == "null" ]]; then
    echo "[CanvasMC] Failed to resolve a valid download URL."
    exit 1
fi

echo "[CanvasMC] Using Minecraft version: $MC_VERSION"
echo "[CanvasMC] Using build number: $BUILD_NUMBER"

echo "[CanvasMC] Downloading server.jar from:"
echo "$JAR_URL"

curl -fsSL -o server.jar "$JAR_URL"

if [[ $? -ne 0 ]]; then
    echo "[CanvasMC] Download failed."
    exit 1
fi

if [[ ! -f server.jar || ! -s server.jar ]]; then
    echo "[CanvasMC] Downloaded server.jar is invalid."
    exit 1
fi

echo "Installation complete."