Setting up No Johns on Linux (x86_64). Linux is actually libmelee's native platform — fewer workarounds than macOS or Windows.
- Melee ISO: NTSC 1.02 (
.isoor.ciso). Not distributed here. - Slippi account: Created through Slippi Launcher. You'll need your
connect code (e.g.
ABCD#123) for netplay.
sudo apt update
sudo apt install -y python3.12 python3.12-venv python3.12-dev \
git build-essential libenet-devIf python3.12 isn't available in your repos:
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install -y python3.12 python3.12-venv python3.12-devsudo dnf install -y python3.12 python3-devel git gcc enet-develsudo pacman -S python git base-devel enetVerify:
python3.12 --version # Should show 3.12.xDownload the Slippi Launcher AppImage from:
https://github.com/project-slippi/slippi-launcher/releases
Get the .AppImage file (e.g. Slippi-Launcher-2.13.3-x86_64.AppImage).
# Make it executable
chmod +x Slippi-Launcher-*.AppImage
# Run it
./Slippi-Launcher-*.AppImage- Let it download Dolphin (installs to
~/.config/Slippi Launcher/netplay/) - Log in or create a Slippi account
- Note your connect code (shown on the home screen)
Verify Dolphin is installed:
ls ~/.config/Slippi\ Launcher/netplay/
# Should contain the Dolphin binary (squashfs-root/ or similar)Note: The exact Dolphin path inside the Slippi Launcher directory varies between versions. Check what's actually there — you'll need the path that contains the Dolphin binary for libmelee.
AppImages need FUSE. If you get a FUSE error:
# Ubuntu/Debian
sudo apt install -y libfuse2
# Or extract instead of running as AppImage
./Slippi-Launcher-*.AppImage --appimage-extract
./squashfs-root/slippi-launchergit clone https://github.com/ScavieFae/nojohns.git
cd nojohns
# Create venv with Python 3.12
python3.12 -m venv .venv
.venv/bin/pip install --upgrade pip
# Install nojohns (pulls vladfi1's libmelee fork + pyenet automatically)
.venv/bin/pip install -e .pyenet should build cleanly since libenet-dev provides the headers.
If it fails, check that the dev package is installed:
# Ubuntu/Debian
dpkg -l | grep libenet
# Fedora
rpm -q enet-develVerify:
# libmelee imports
.venv/bin/python -c "import melee; print('libmelee OK')"
# nojohns CLI works
.venv/bin/python -m nojohns.cli list-fighters
# Tests pass
.venv/bin/python -m pytest tests/ -v -o "addopts=".venv/bin/python -m nojohns.cli setup meleeWhen prompted:
- Dolphin path: the netplay directory inside Slippi Launcher's config
(e.g.
~/.config/Slippi Launcher/netplay) - ISO path: wherever you placed your Melee ISO
- Connect code: your Slippi code (e.g.
ABCD#123)
Config is stored in ~/.nojohns/config.toml.
.venv/bin/python -m nojohns.cli setup melee phillipOr manually:
.venv/bin/pip install -e ".[phillip]"
git clone https://github.com/vladfi1/slippi-ai.git fighters/phillip/slippi-ai
.venv/bin/pip install -e fighters/phillip/slippi-ai
mkdir -p fighters/phillip/models
curl -L -o fighters/phillip/models/all_d21_imitation_v3.pkl \
'https://dl.dropbox.com/scl/fi/bppnln3rfktxfdocottuw/all_d21_imitation_v3?rlkey=46yqbsp7vi5222x04qt4npbkq&st=6knz106y&dl=1'Verify:
.venv/bin/python -c "import tensorflow as tf; print(f'TF {tf.__version__} OK')"
.venv/bin/python -m nojohns.cli list-fighters
# Should show: phillip.venv/bin/python -m nojohns.cli fight random do-nothingIf you haven't run setup melee, pass paths explicitly:
.venv/bin/python -m nojohns.cli fight random do-nothing \
-d ~/.config/Slippi\ Launcher/netplay \
-i ~/games/melee/melee.isoThe game should launch in a Dolphin window, run briefly, and exit.
Headless / SSH: If you're on a headless server or SSH session, Dolphin needs a display. You can use Xvfb for a virtual framebuffer:
sudo apt install -y xvfb
xvfb-run .venv/bin/python -m nojohns.cli fight random do-nothingThe arena server runs on the host machine. You need the server's IP and port.
.venv/bin/python -m nojohns.cli matchmake phillip \
--server http://<arena-ip>:8000Connect code and paths come from config (Step 3b).
vladfi1's libmelee fork validates the Dolphin path and expects "netplay"
in the path string. If you get path errors, make sure your -d path
points to the directory containing the Dolphin binary inside Slippi
Launcher's config:
find ~/.config/Slippi\ Launcher -name "*.AppImage" -o -name "dolphin-emu" 2>/dev/nullUsually means the enet dev headers aren't installed:
# Ubuntu/Debian
sudo apt install -y libenet-dev
# Then reinstall
.venv/bin/pip install --no-cache-dir --force-reinstall pyenetDolphin needs a display server. On Wayland, you may need to run under XWayland:
GDK_BACKEND=x11 .venv/bin/python -m nojohns.cli fight random do-nothingThe arena server must be reachable from your network. If you're on a different network than the host:
- The host needs to port-forward 8000 (or use a tunnel like ngrok)
- Check with:
curl http://<arena-ip>:8000/health
When reporting a problem, include:
- Distro and version (
cat /etc/os-release) - Python version (
python3.12 --version) - The full error output
- Contents of the Slippi netplay directory
File issues at: https://github.com/ScavieFae/nojohns/issues