Mojang publishes two downloads for Minecraft on Linux, and they are not the same product. The desktop launcher starts the game you play.
The server jar starts a world your friends connect to, and it runs on any CPU Java supports. Java 25 is now the floor for that jar, and a launcher package built for one CPU will not install on another.
Java Edition and Bedrock, and which one Linux runs
Minecraft ships as two products that cannot play together. Java Edition has a Linux desktop client and a free server, and Bedrock is the edition Mojang builds for Windows, consoles, phones and Chromebooks.
Mojang publishes no Linux client for Bedrock, so a Microsoft Store purchase of that edition buys nothing on a Linux desktop.
| What you want | What Mojang offers for Linux | Applies to |
|---|---|---|
| The game on your own desktop | Minecraft.deb, Minecraft.tar.gz, AUR package | x86-64 machines |
| A world other players join | server.jar | any CPU with Java 25 |
| The Microsoft Store copy of Bedrock | nothing | not on Linux |
The Linux download page lists three artifacts with no architecture note and no Java note against any of them. Both launcher files are x86-64 binaries, and the package control file is the only place that says so.
I verified that control file before installing anything. It reports package version 2.1.3, architecture amd64, and a dependency list that runs from GTK through NSS to the audio libraries.
Check the CPU, the distribution and the Java version first
Your CPU architecture, your distribution’s package format and the Java version already on the machine decide which file you need.
Architecture decides which launcher artifact applies
Ask the kernel which machine it is running on.
uname -m
x86_64 means the launcher artifacts apply to you. aarch64 means they do not, which makes the server the half of this page that runs.
The package manager uses a different name for the same thing, which is the name that shows up in an error message.
dpkg --print-architecture
Java, because the floor moved to 25
Release 26.3 was published on 15 September 2026, and the package metadata Mojang serves for it declares a Java component at major version 25. Pick a runtime below that floor and the server stops before it reads a single setting.
| Minecraft release | Java floor |
|---|---|
| up to 1.16 | 8 |
| 1.17 | 16 |
| 1.18 to 1.20.4 | 17 |
| 1.20.5 to 1.21.11 | 21 |
| 26.1 and later | 25 |
Older releases keep their own older floors, which is why a machine serving two Minecraft versions sometimes needs two runtimes side by side.
The account and the disk space
The launcher needs a Microsoft account that owns Java Edition. The server needs no licence at all, so a world for your household costs nothing beyond the machine it runs on.
Plan for about 130 MB of disk once the server unpacks its bundled libraries, and 1 GB of RAM for a small survival world. I measured 129 MB in my own server directory, and the world inside it grows with the terrain players load.
Install the Minecraft launcher on Debian or Ubuntu
The launcher is one package plus a dependency tree. A single flag letter decides what lands on disk, so the download is the step worth slowing down for.
Download the package with the right flag
Capital O names the output file. Lowercase o is the log flag, and it writes the transfer log to the path you gave instead of the package.
The log and the package are nowhere near the same size, so the mix-up shows up the moment you look at them. The log came out at 1,759 bytes and the package is 825,844 bytes.
wget -O Minecraft.deb https://launcher.mojang.com/download/Minecraft.deb
If you want the download to report its progress on screen, the wget command has flags for that which do not touch the destination name.
Install it with apt rather than dpkg
apt installs a local package file and resolves its dependencies in the same run. dpkg installs the file alone and leaves you a second command to repair the dependency errors.
sudo apt install ./Minecraft.deb
The leading ./ is not optional, because without it apt reads the argument as a package name and searches the repositories instead of your disk.
On an x86-64 Ubuntu machine the install finishes with minecraft-launcher 2.1.3 at /usr/bin/minecraft-launcher and a desktop entry in the applications grid. The difference between apt and dpkg shows up on exactly this kind of handed-down package.
Start it and sign in
Launch it from the applications grid or by running the launcher command. It asks for a Microsoft account first, then downloads the game files for the version you pick.
The installed game lives under a hidden directory in your home folder, which is the path mod launchers ask you to point at and the directory to back up alongside your saved worlds.
Install the launcher without a package, or on an ARM machine
Not every Linux machine can take the package route. A distribution with no Debian package support and a board whose CPU the launcher was never built for each need a different answer.
| Route | CPU it runs on | Distribution it needs |
|---|---|---|
| Minecraft.deb | x86-64 | Debian, Ubuntu and their derivatives |
| Minecraft.tar.gz | x86-64 | anything with glibc |
| A third-party launcher from your repositories | x86-64 and arm64 | whatever the package targets |
The tarball route
Mojang publishes the same launcher as a tarball. The archive holds one executable and its libraries, and there is no installation step to speak of.
wget https://launcher.mojang.com/download/Minecraft.tar.gz
tar -xzf Minecraft.tar.gz
./minecraft-launcher/minecraft-launcher
The binary inside that archive is an x86-64 ELF executable, the same one the .deb carries. The tarball buys you distribution independence, not CPU independence.
What an ARM machine can and cannot do
Both official Linux artifacts are x86-64. On an arm64 machine dpkg stops at the architecture check before it unpacks a single file.

That message describes the package rather than your system. I saw the same refusal on an arm64 board, and there is no ARM build of the official launcher to switch to.
The server jar is a different case entirely, because Java bytecode does not care which CPU executes it. A Raspberry Pi or an ARM VPS runs the server as long as Java 25 is installed.
Third-party launchers cover the desktop side instead. Prism Launcher is packaged on Flathub and in several distributions, it runs on ARM, and it signs in with the same Microsoft account the official launcher uses.
I checked Flathub for it, and version 11.1.0 sits on the stable channel. Take it from there or from your distribution’s repository rather than from a mirror link in a comment thread.
Run a Minecraft Java Edition server
The server half needs no paid licence and no display, which is what makes it a good fit for a box in a cupboard.
Install Java 25
Ubuntu 24.04 and its derivatives carry OpenJDK 25 in the universe component. The headless package is the one a server wants, because there is no window for it to draw.
sudo apt install openjdk-25-jre-headless
Confirm the version before you go further.
java -version

A machine that answers with 21 or 17 will refuse the jar. If that is what you see, checking the Java version shows which runtime the shell is picking up, and installing Java on Ubuntu covers the switch between two installed runtimes.
Create an account for the server
A server running as your login account has your files, your keys and your shell history within reach. Give it an account of its own.
sudo useradd -r -m -U -d /opt/minecraft -s /bin/bash minecraft
The -r flag makes it a system account with no password, and the -d flag puts its home directory at /opt/minecraft. With no password set, nobody can log into it over SSH, and the useradd command covers the other flags.
Step into that account for the sections that follow. sudo asks for your password rather than the minecraft account’s, because it authenticates the person running it.
sudo su - minecraft
Download the server jar and check its hash
Take the download link from the server page on minecraft.net rather than from a tutorial. The path carries the build hash for the current release, and it changes every time Mojang ships one.
mkdir -p server
cd server
Then fetch the jar from the path that carries the hash for release 26.3. The same forty characters sit next to the file size on the download page.
wget -O server.jar https://piston-data.mojang.com/v1/objects/33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c/server.jar
Ask the file what it is before you run it, because sha1sum prints a fingerprint that has to match the string in the URL you just used.
sha1sum server.jar

When the strings differ, the download was truncated or came from somewhere else. Delete it and fetch it again.
Run it once and accept the EULA
The first start does three things at once. It unpacks the libraries the jar bundles, it writes the default configuration, and it stops.
java -Xmx1024M -Xms1024M -jar server.jar nogui

Mojang requires the person operating a server to accept the end user licence agreement, and the file it wants edited is eula.txt in the server directory. That file holds two comments and one setting.
sed -i 's/^eula=false/eula=true/' eula.txt
The caret anchors the match to the start of the line, which keeps the edit on the key itself. A wider match would rewrite anything else in the file that reads false.
That line now reads eula=true, and the server is ready for its next start.
Run it again and watch it reach the port
A start with the agreement in place creates the world and binds the port. Nothing else about the command changes.
java -Xmx1024M -Xms1024M -jar server.jar nogui

The port line and the Done line in that output are worth reading closely. The server announces the port it took, and the Done line carries the time the world needed to generate.
I ran the same command on the machine I tested this on, and a fresh world was ready in 5.7 seconds.
Java 25 also prints a pair of native access warnings about the jna and joml libraries the server bundles. They are noise rather than a fault, and adding –enable-native-access=ALL-UNNAMED to the command silences the first one.
Hand it to systemd
A server started by hand dies with the terminal that started it. Type exit to leave the minecraft shell, then write a unit file so systemd owns the process.
sudo nano /etc/systemd/system/minecraft.service
The unit below leaves out the KillMode=none line that older Minecraft guides carried because systemd 255 marks that setting deprecated and unsafe. Process management goes back to the service manager instead.
[Unit]
Description=Minecraft Server
After=network.target
[Service]
Type=simple
User=minecraft
WorkingDirectory=/opt/minecraft/server
ExecStart=/usr/bin/java -Xmx1024M -Xms1024M -jar server.jar nogui
Restart=on-failure
SuccessExitStatus=0 1
ProtectHome=true
ProtectSystem=full
PrivateDevices=true
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
Type=simple matches a process that stays in the foreground and Restart=on-failure brings the server back if the JVM falls over. I keep the two heap flags equal in my own unit file so the JVM does not resize on every start.
Ask systemd to read the file back before you start anything. It reports a typo in a directive without touching the running system.
sudo systemd-analyze verify /etc/systemd/system/minecraft.service
Then reload the unit list and start it.
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
The enable flag makes the service come back after a reboot, and –now starts it in the same breath. The systemctl commands for starting and stopping services cover the rest of the lifecycle.
Open the port, or decide not to
If the machine runs UFW, opening port 25565 takes one command. That port is the default the server binds, and its startup line prints it on the way up.
sudo ufw allow 25565/tcp
That rule exposes the server to the internet, which is what a public server wants and often not what a household one does. A world for the people in your house can stay closed and be reached over the local network.
The UFW setup guide covers the rest of the rule set, and finding the open ports on the server shows whether the jar still holds 25565.
When the launcher or the server refuses to start
Each message below names a specific cause, and none of them means the machine is broken. All but one have a one-line fix.
| What you see | What it means | What to do |
|---|---|---|
| package architecture (amd64) does not match system (arm64) | the launcher package is built for x86-64 | use an ARM-capable launcher instead, or run the server |
| You need to agree to the EULA in order to run the server | eula.txt is still false | set it to true and start again |
| Failed to load properties from file: server.properties | the first start, before the file exists | nothing, the server writes it on the way out |
| UnsupportedClassVersionError, class file version 69.0 | the JRE on the PATH is older than the release needs | install Java 25 and check which runtime the shell picks |
| java: command not found | no JRE on the machine at all | install openjdk-25-jre-headless |
| FAILED TO START THE SERVER, with a LockException on world/session.lock | a second server is already running from the same folder | stop the first one, or give the second its own directory |
The class file version is the number to act on. Java 25 writes class file version 69, and Java 21 tops out at 65.
When the server jar is newer than the runtime, the error names those numbers instead of the Java version, so the fix is a newer JRE rather than a different jar.
The whole world is one folder you can copy
Everything the server generates lives under the directory you started it in. The terrain, the player data, the properties and the logs are all there, which makes a backup a copy rather than an export.
sudo systemctl stop minecraft
sudo tar czf minecraft-backup.tgz -C /opt/minecraft server
sudo systemctl start minecraft
Stopping first is what keeps the archive clean, since a running server holds region files open mid-write and an archive built while it does will not restore cleanly.
The archive lands in your home directory as a dated snapshot, and the same tar command in reverse puts it back. That is also how you move a world between hosts.
Frequently asked questions
Does Minecraft Java Edition run on ARM Linux?
The server does, because the server jar is Java bytecode and any CPU with a matching runtime can execute it. The official desktop launcher is an x86-64 package, so an ARM machine needs a third-party launcher such as Prism Launcher, which is packaged on Flathub and in several distributions.
Which Java version does the Minecraft server need?
Release 26.1 and later need Java 25. Releases from 1.20.5 to 1.21.11 need Java 21, and older versions keep their own lower floors, so a machine serving two releases sometimes needs two runtimes installed side by side.
Is the Minecraft server free to run?
Yes. The server software carries no licence key and no subscription. Every player who connects needs a Java Edition account, but the machine hosting the world does not.
Where does the Minecraft launcher keep the game files?
Under a hidden directory in your home folder. That is the path mod launchers ask you to point at when they cannot find an existing installation, and it is the directory to back up along with your saved worlds.
Why does dpkg say the package architecture does not match?
The official Linux launcher package is built for amd64 only, so on an arm64 machine there is no matching build to install. The refusal happens before any file is unpacked, which means nothing on the system was touched.
