The desktop app your Minecraft server has been missing.
Run managed vanilla servers, create modded ones in containers, or attach to the Docker/Podman containers you already have - several at once.
One native app. No dashboard to self-host, no local API server.
Why · Install · Features · Development · License
Running a Minecraft server means juggling server.properties in a text
editor, an RCON client for admin commands, docker logs -f or a container
dashboard for status, and manual tar commands for backups - or a
self-hosted web panel that means running yet another service (and securing
it) just to manage the one you actually care about.
MineUI is a native desktop app, not a web panel: Tauri v2 (Rust backend) driving a Next.js static-export frontend over Tauri IPC - no Electron, no bundled Chromium, no local HTTP server to expose or secure. It manages any number of servers at once, and each one runs in one of two modes:
- Simple mode (default) - MineUI creates and runs a vanilla server for you: pick a Minecraft version, set memory, accept the EULA, and MineUI downloads the official server jar (SHA-1 verified), configures RCON, and supervises the Java process. No containers required.
- Advanced mode - a Minecraft server container managed by Docker or
Podman (auto-detected, Podman preferred): control, logs, players, RCON,
mods/plugins, config editing, backups, and container metrics. MineUI can
create the container for you from the
itzg/minecraft-serverimage - Vanilla, Paper, Purpur, Fabric, Quilt, Forge or NeoForge - or attach to one that already exists (any image of that style, with the world/config under/data).
Grab the build for your platform from the latest release:
| Platform | Package |
|---|---|
| Linux x86_64 | MineUI_2.12.0_amd64.AppImage - chmod +x and run |
| Debian/Ubuntu | MineUI_2.12.0_amd64.deb - sudo apt install ./MineUI_2.12.0_amd64.deb |
| Windows x64 | MineUI_2.12.0_x64-setup.exe |
| macOS (Apple Silicon) | MineUI_2.12.0_aarch64.dmg |
| macOS (Intel) | MineUI_2.12.0_x64.dmg |
Simple mode needs Java installed (MineUI version-checks it against the Minecraft release you pick). Advanced mode needs Docker or Podman.
Either works; MineUI finds it by itself and prefers Podman when both exist.
| Podman (recommended) | Docker | |
|---|---|---|
| Linux | sudo apt install podman · sudo dnf install podman · sudo pacman -S podman · sudo zypper install podman |
Install Docker Engine, then sudo usermod -aG docker $USER and log out and back in - MineUI runs docker as you, without sudo |
| Windows | wsl --install (once, restart), winget install RedHat.Podman, podman machine init, podman machine start - or Podman Desktop |
winget install Docker.DockerDesktop, start it once |
| macOS | brew install podman, podman machine init, podman machine start - or Podman Desktop |
brew install --cask docker-desktop, start it once |
Installed but MineUI still reports none? An app started from a launcher can
have a shorter PATH than your terminal (common with Homebrew on macOS). Put
the full path to podman or docker in Server Settings → Runtime binary
override.
v1.0.0on the Releases page is the old Electron app - it predates this architecture and isn't what this README describes.
The released binaries are free. Building from source requires a HeroUI Pro license - see Note on HeroUI Pro below before you start.
Website & docs: mineui.i4c.studio
Add as many servers as you run - a Forge pack, a Fabric pack, a managed vanilla world - and MineUI manages all of them at the same time. Each one is its own profile with its own mode, connection, RCON allowlist, schedule, backup policy, player notes and activity log; scheduled restarts and backups keep running for every server, not just the one on screen. The header switcher and the dashboard's All servers strip show every server's state and player count at a glance, with start/stop right there. Every page header names the server it is showing and what that server actually is - loader and version, container, address - so two similar servers are never mixed up. Add, rename and remove servers in App Settings → Servers. Removing one only makes MineUI forget it: its container, world and backups are never touched.
Adding a server offers three routes: a Modded or modpack server (a new
container), a Plain Minecraft server (vanilla, run on this computer, no
containers), or A container I already run. For a new container MineUI
creates an itzg/minecraft-server
container for you - pick Vanilla, Paper, Purpur, Fabric, Quilt, Forge or
NeoForge, the Minecraft version, memory and ports - picks the image with the
right Java for that version, generates the RCON password, and connects itself
to the result. The world lives in a named volume.
Deleting is always your call. MineUI removes a container only when you ask it to - Delete container in Server Settings, or the tick box when you remove a server - and it keeps the world unless you tick that too and type the container's name. A world stored in a folder on your computer is never deleted. Deleting just the container is also how you start a server over with a different loader or modpack.
Or start from a modpack. Choose A modpack instead of a server type: search Modrinth right in the app (only packs that can run on a server are listed), paste a CurseForge pack's page address, or hand over the zip the CurseForge app makes with Export profile (MineUI reads the pack's name and Minecraft version from its manifest), and the server comes up with the pack's loader and mods installed. No API key needed for any of them. A modpack is applied when the container is created - to switch packs, delete the container in Server Settings and create it again.
No Podman or Docker yet? Wherever a container is needed and neither is installed, MineUI shows the install steps for your OS (Linux, Windows, macOS) with copyable commands, and a Check again button - see also Installing a container runtime.
The header's sliders button opens App Settings - the server list, appearance (dark / light mode, style, accent), sounds (volume and four sound sets) and an About card (version, where files live, a manual update check), which apply to MineUI as a whole. Settings in the navigation is always the open server's own: its name, performance, scheduled tasks, backups, and - under Advanced - connection details, console command rules and how the server is run (Simple or Advanced; there is no header toggle for that any more, it is changed there, never while the server runs, and asks first).
The Dashboard shows the address players type - on this computer, on your
home network, and from the internet (with the router steps) - instead of a
127.0.0.1 address nobody else can use. Container servers can publish extra
ports for mods such as Simple Voice Chat (UDP 24454), at creation or later
from Server Settings; changing ports rebuilds the container around the same
world.
Start, stop, and restart (managed process or container), with live TPS, MSPT, player count, and server version, plus a streamed log viewer - no polling.
Online players, join/leave history with last-seen and IP, one-click whitelist/op/ban/kick actions, and a private note per player for whatever you need to remember about them.
Send commands to the running server (over RCON). Only allowlisted commands
can be run - the page shows which - with a transcript, Up/Down recall and a
confirmation before stop.
Browse what's installed, upload a jar from disk, or download one from a URL.
The add dialog preselects mod or plugin from what the server runs and warns
when the choice cannot load there. Have a whole set of mods as a .zip - a
zipped folder, or a server pack? MineUI unpacks the jars inside and installs
them together, which is the way to put a pack's mods onto a server that
already exists.
Edit server.properties and files under config/ directly from the app:
a folder tree with search, line numbers, a wrap switch, Revert and Ctrl+S.
Create, list, restore, and delete .tar.gz snapshots. A retention policy
keeps only the newest N, and every new snapshot can be copied to a directory
of your choice - a NAS mount, a USB drive, a second disk.
Automatic restarts (with an optional chat warning 60 s ahead), scheduled backups, and timed chat broadcasts - every N hours, daily, or weekly at a local time, configured in Settings and shown with their next run.
Every action taken from the app or by the scheduler - server control, player actions, RCON commands, backups, config edits - lands in an append-only log on the Status page, with the outcome and the error if it failed.
CPU, memory, and disk, plus network/block IO when attached to a container.
Deepslate & Emerald (default), Phosphor Amber, Quantum Fluidity and Soft
Glass - each with a dark and a light palette. Pick Dark, Light or Match
system and a style in App Settings → Appearance, and optionally override
the accent color. The token system behind them is in
docs/theme-contract.md.
Point a server's Settings → Server utils URL at an instance of mineui_server_utils - a Forge 1.20.1 mod or Paper/Bukkit plugin that runs inside the server JVM - for real tick-based TPS/MSPT, per-dimension chunk/entity counts, and the actual loaded mod/plugin list. Without it, MineUI falls back to a server-list ping plus container/process metrics; everything else still works.
crates/mineui-core is pure Rust (no Tauri dependency, 254 unit tests);
src-tauri is a thin #[tauri::command] shell (55 IPC commands) that
delegates to it. The full command/error/event surface is specified in
docs/v2-contract.md - binding, not a suggestion; see
CONTRIBUTING.md.
Prerequisites: pnpm and Rust via rustup (stable toolchain) - see the Tauri v2 prerequisites for platform-specific system packages. On Linux:
sudo apt install libwebkit2gtk-4.1-dev build-essential libssl-dev librsvg2-devpnpm install
pnpm tauri dev # Next.js dev server + Tauri windowOther commands:
pnpm dev- frontend only, in a plain browser (no backend; IPC calls fail soft with a "Backend unavailable" notice)pnpm build- static export toout/(what Tauri bundles)pnpm lint- ESLintpnpm tauri build- production desktop bundlecargo test -p mineui-core- Rust unit tests (254 tests; must stay green)
CI (.github/workflows/ci.yml) runs lint/typecheck/build on the frontend and
cargo fmt/clippy/test plus a cargo check of the Tauri shell, on every
push to main/v2-tauri and PR into main.
The UI uses @heroui-pro/react (KPI cards, EmptyState, Stepper, and other
Pro components), a commercially licensed package from NextUI Inc. The
npm package on the public registry is a stub - its postinstall script
downloads the real components only with an authenticated session
(npx heroui-pro login) or an HEROUI_AUTH_TOKEN environment variable.
Without either, pnpm install appears to succeed but the package is empty
and the build fails to resolve @heroui-pro/react imports. Get a license at
heroui.com/pro, or open an issue if this is
blocking a contribution.
AGPL-3.0-only - see LICENSE. Fonts are self-hosted under their own
licenses (MIT/OFL) via Fontsource; Monocraft is
vendored under the SIL OFL - see app/fonts/Monocraft-LICENSE.txt.
@heroui-pro/react is separately, commercially licensed - see
Note on HeroUI Pro.