-
Notifications
You must be signed in to change notification settings - Fork 0
Installation
ZX-Next-Unite is a cross-platform (Windows, Linux, macOS) desktop app written in Python on top of Qt 6 (PySide6). This page covers everything you need to get it running, plus the optional emulators and tools it works with.
In a hurry? On Windows, download the latest
ZX-Next-Unite-v9.xexecutable from the Releases page and run it — no Python needed. Everything below is for running from source or on Linux/macOS.
- Choosing an install method
- Option A — Windows executable
- Option B — Install from source (Windows, Linux, macOS)
- Dependencies explained
- Optional components
- NextSync — the
.sync5dot command - Troubleshooting
- Supporting the tools this builds on
| You are on… | Recommended method |
|---|---|
| Windows, just want to run it | Option A — download the executable |
| Windows and want the latest/dev version, or to tinker | Option B — from source |
| Linux / macOS | Option B — from source (there is no pre-built binary) |
- Go to the Releases page.
- Download the latest
ZX-Next-Unite-v9.xexecutable. - (Optional) Also download the
.sync5dot command if you want to use NextSync with a real Spectrum Next. - Run the executable. No Python or extra libraries required.
You can still add the optional emulators/tools described in Optional components later.
- Python 3.9 or newer — Python 3.13 is recommended (it is what the app is developed and tested against). Download from python.org/downloads. On Windows, tick "Add python.exe to PATH" in the installer.
- git (or download the source as a ZIP from GitHub).
git clone https://github.com/jclauzel/ZX-Next-Unite
cd ZX-Next-UniteA virtual environment keeps these dependencies out of your system Python. It is optional but recommended — and much safer than installing into system Python.
Windows (PowerShell):
python -m venv .venv
.\.venv\Scripts\Activate.ps1Linux / macOS:
python3 -m venv .venv
source .venv/bin/activateUsing the requirements file (installs PySide6 plus the optional extras):
python -m pip install -r REQUIREMENTS.txt…or install them explicitly:
python -m pip install PySide6 pygame-ce itch-dl flaskOnly PySide6 is strictly required;
pygame-ce,itch-dlandflaskare optional (see Dependencies explained).
To update later:
python -m pip install --upgrade PySide6 pygame-ce itch-dl flaskpython zx-next-unite.pyOn Linux/macOS use python3 zx-next-unite.py.
Note: the script name is lower-case
zx-next-unite.py. This matters on Linux and macOS, where filenames are case-sensitive.
CSpect is a .NET application, so to launch it you also need Mono — see Mono below. You do not need Mono if you only use MAME or don't use an emulator at all.
| Package | Required? | What it enables |
|---|---|---|
| PySide6 | Required | The Qt 6 GUI toolkit the whole app is built on. |
| pygame-ce | Optional | The retro 8-bit log windows and the "Alien Floyd's" animated background/tab. The app runs fine without it. |
| itch-dl | Optional | The itch.io tab (browse/install your itch.io collections). The tab only appears when this package is installed. Provided by itch-dl (MIT). |
| flask | Optional | The NextSync HTTP bridge — the web server that lets a Next drive another Next's SD card via the .http dot command. Its Settings toggle is greyed out until this package is installed. Provided by Flask by the Pallets team (BSD-3-Clause). |
All four are installed by pip install -r REQUIREMENTS.txt.
None of these are needed to start the app, but they unlock the emulator and disk-image features.
CSpect by Mike Dailly is the recommended emulator. There are two ways to set it up:
-
Automatic (recommended): if you own CSpect on itch.io, enter your itch.io
API key in the app, open the itch.io tab, select CSpect and click
Install. Because CSpect ships with
hdfmonkeyfor every platform, this leaves you fully set up — no separate hdfmonkey install needed. -
Manual: download CSpect and either extract it into the app's folder or make
sure it is reachable via your OS
PATH. Download from mdf200.itch.io/cspect or cspect.org.
Required ROMs: the two Spectrum Next ROM files enNextZX.rom and
enNxtMMC.rom must be placed in the root folder of CSpect. They are
normally included in the CSpect download.
For sound/music playback on Windows you also need OpenAL.
On Linux/macOS you additionally need Mono.
hdfmonkey (by Matt Westcott) is the external tool used for all HDF disk-image
operations. You only need to install it separately if you did not install
CSpect via itch.io (that package already bundles it).
-
Windows: if
hdfmonkeyis missing, the app shows an error in the log and a Download and install button (bottom-right). Clicking it fetches and unzips hdfmonkey_windows.zip into the app's folder automatically. If that download is blocked (firewall / no internet), download it on another machine and copyhdfmonkey.exenext to the app. - Linux / macOS: install it manually following the instructions at github.com/gasman/hdfmonkey.
MAME is the alternative emulator. Mainline MAME
includes ZX Spectrum Next support (the tbblue machine and the various
specnext_ks* kickstart variants), so a current MAME build can boot your Next
image directly. The Spectrum Next side of MAME is documented on the official
Spectrum Next wiki:
wiki.specnext.dev/MAME:Installing.
At startup ZX-Next-Unite looks for a MAME executable in two places and uses the first hit:
- a build inside the app's own
downloads/mamefolder, and - whatever
mameis on your OSPATH.
On Linux/macOS downloads/mame is checked first (so a build you drop
there is preferred over an older mame from your distro/PATH). On Windows
the order is reversed — PATH first, then downloads/mame.
When MAME is found, the SD Card tab shows a 🕹 Launch Mame button and the MAME options group. When it isn't found, Windows shows an ⬇ Install MAME button in its place (see below); Linux/macOS simply hide the group until a MAME is available.
If MAME isn't found on a 64-bit Windows PC, click ⬇ Install MAME on the SD
Card tab. The app fetches the latest official MAME release for your CPU
(x64 / arm64) from the mamedev/mame
GitHub releases and unpacks it into downloads/mame — no 7-Zip or other tools
required. Progress is shown in the SD Card log window, and the Launch button
appears as soon as it finishes (no restart needed).
A startup update check — Settings → "Check for a newer MAME version at startup" (on by default) — offers to update your app-installed MAME when a newer release is published.
MAME publishes no official pre-built binary for Linux or macOS (the GitHub release only carries Windows binaries), so the app does not auto-install MAME there — it only detects one you provide. Install MAME with:
-
Linux: your distribution's package manager (e.g.
sudo apt install mame), or Flatpak from Flathub — see Launching MAME via Flatpak below. -
macOS:
brew install mame(Homebrew), the SDLMAME builds at sdlmame.lngn.net, or build from source.
Tip: you can also drop a self-built or downloaded MAME into the app's
downloads/mamefolder — on Linux/macOS it is preferred over an oldermameon yourPATH.
MAME needs the Spectrum Next boot ROM to start the machine — without it MAME
aborts with a "required files are missing" error. Download tbblue.zip from
the NexCreator bootroms folder
and place it in MAME's roms folder:
- an app-installed Windows build:
downloads/mame/roms/ - a Flatpak launch: the Flatpak rom path you set (see below)
- any other build: its own
romsdirectory (or a folder you pass with-rompath)
Do not extract
tbblue.zip. MAME looks for the zip file itself when thetbbluemachine is selected. Use only a legally obtained ROM.
-
Settings → MAME lets you pick the ROM / system (
tbblue,specnext_ks1,specnext_ks2,specnext_ks3) and edit the default MAME launch parameters. - The MAME group on the SD Card tab has per-launch options — aspect ratio,
sound, mouse, joystick, and an ESC-key toggle (passes
-confirm_quit). At launch the app runs MAME asmame <system> <your parameters + these options> -hard1 <your image>, so the loaded disk image is always the last argument.
On Linux the easiest way to get a current MAME is Flathub. ZX-Next-Unite can launch that sandboxed build directly.
-
Install MAME from Flathub:
flatpak install flathub org.mamedev.MAME
-
Put the boot ROM where MAME can read it. Create a roms folder in your home directory and drop
tbblue.zip(unextracted) into it:mkdir -p ~/roms # then copy tbblue.zip into ~/roms
-
Enable it in the app. Open Settings → MAME, tick Launch Mame with Flatpak, and set Flatpak rom path to the folder from step 2 (it defaults to
~/roms). All settings are saved tohdfg.cfg. -
Every Launch Mame button — on the SD Card tab and in the online-library item viewers (GetIt, ZXDB, zxArt, Unite!, itch.io) — now reads Launch Mame (flatpak) and starts MAME as:
flatpak run org.mamedev.MAME <system> <your parameters + options> -rompath <your rom path> -hard1 <your image>No locally installed MAME binary is needed in this mode.
Flatpak sandboxing. The Flatpak MAME runs sandboxed, so it can only read files in the directories it has been granted. Your rom path and the disk image must be readable inside the sandbox. Paths under your home directory usually work out of the box; for anything elsewhere, grant access with Flatseal or, e.g.:
flatpak override --user --filesystem=/path/to/your/images org.mamedev.MAME
You need a Spectrum Next system image (an .hdf file — think of it as an ISO that
contains everything the machine needs to boot). Download one from
zxnext.uk/hosted, for example
cspect-next-2gb.zip.
For CSpect audio on Windows, install the OpenAL runtime from openal.org.
CSpect is written for .NET, so on Linux/macOS you need Mono to run it:
-
Debian / Ubuntu:
sudo apt install mono-complete -
macOS: install the Mono package from
mono-project.com (or
brew install mono).
See also the Spectrum Next Linux setup guide: wiki.specnext.dev/Development_Tools:Linux_setup.
NextSync lets you push files over Wi-Fi from your PC to a real Spectrum Next (a Kickstarter machine or clone with an ESP Wi-Fi module). ZX-Next-Unite implements the server side; your Next runs a dot command that connects to it over TCP port 2048.
-
Current command:
.sync5— grab it from the Releases page. It adds the Sync4 protocol: faster transfers and the ability to send files back from the Next to the PC:.sync5 -send <file|directory> # push from Next → PC .sync5 -send myFile.nex -fast # with a speed hint .sync5 -listen # remote file server (short alias: -l)Speed hints:
-slow,-default,-fast(no separatesyncfast/syncslowcommands needed). -
Legacy command:
.sync— the older PC → Next-only dot command still works, so nothing breaks if you keep using it. Backward compatibility is provided by the Sync3 protocol.
- Copy the
.sync5dot file into the/dotfolder on the root of your Spectrum Next SD card and reboot the Next. - Make sure Wi-Fi is fully set up and that your Next and the PC running ZX-Next-Unite are on the same network, with no firewall blocking inbound TCP 2048 on the PC.
- In ZX-Next-Unite, open the NextSync tab, select the root folder you want to sync, and click Start NextSync server. Tip: for the first run, enable Sync once so the server stops after a single sync while you verify things.
- The log window shows this machine's IP address(es). The first time you run the
command on the Next it will ask which IP to connect to — enter that address.
(On Linux/macOS run
ifconfig/ip addrif you need to list all IPs.) The Next stores this inC:/sys/config/nextsync.cfg; change it later by editing that file or running.sync5 <new-ip>. - Click Yes, start NextSync server on the PC, then run
.sync5on the Next. Your Next connects and the files transfer.
The usual syncignore.txt / syncpoint.dat logic applies for controlling what
gets synced — see Jari Komppa's original documentation.
The .sync5 source lives under nextsync/sync in this repo. There are two
ways to build it, from the same nextsync.c / gfx.c protocol code:
1. Classic build (SDCC). The original build. Requires SDCC 4.5.0; on
Windows run nextsync/sync/build.ps1. This produces a standard esxDOS/NextZXOS
dot command, which loads at $2000 and must fit the 8 KB limit
($2000–$3FFF). The command has grown to sit right against that ceiling.
2. dotN build (z88dk) — removes the 8 KB limit. Under
nextsync/sync/z88dk/
is a parallel build of the same command as a "dotN" command, which is not
bound by the 8 KB limit: appmake splits it into the 8 KB
page at $2000 plus overflow pages that the dotN loader allocates from
NextZXOS and maps into extra banks at run time. Requires z88dk
(e.g. installed at C:\z88dk); on Windows run nextsync/sync/z88dk/build_dotn.ps1.
The SDCC build is kept as the known-good fallback. See
nextsync/sync/z88dk/README.md
for the memory model and build details.
The .sync5 -listen remote file explorer (Home → Remote file explorer; the
short alias .sync5 -l does exactly the same thing) is provided by this z88dk
dotN build — it needs the extra room the dotN gives, so it is not available in the
classic SDCC build. Press BREAK (Caps Shift + Space) on the Next to end a
-listen session cleanly; it always waits for any in-progress transfer to finish
first, so no file or directory is corrupted.
A command-line server (nextsync5.py, under nextsync/sync/server) is also
available and supports -send and Ctrl-C.
- Original NextSync source: https://github.com/jarikomppa/specnext/tree/master/sync
- Original
.syncv1.2 release: https://github.com/Threetwosevensixseven/specnext/releases/tag/nextsync_v1.2 - Announcement thread: https://www.specnext.com/forum/viewtopic.php?f=17&t=1715
- z88dk dotN command reference: https://www.cs.hmc.edu/~oneill/specnext/dot-cmds.html
-
hdfmonkeymissing on Windows and auto-download fails. This is almost always a firewall blocking outbound calls frompython.exe(or the app exe). Either allow it temporarily in Windows Defender Firewall, or download hdfmonkey_windows.zip on another machine and copyhdfmonkey.exenext to the app (the safer option). -
hdfmonkeyon Linux/macOS. There is no auto-download; install it manually from github.com/gasman/hdfmonkey. - App won't start / import errors. Confirm PySide6 installed into the same Python you're launching with (activate your venv first). A recent Python 3 is required — see Prerequisites.
- CSpect won't launch on Linux/macOS. You need Mono — see Mono.
- Filenames with special characters (e.g. single quotes) on the Next image may not download correctly.
-
ESP / Wi-Fi transfer errors during NextSync. If your connection is unstable,
reduce the transfer speed (the Slow transfer option, or
-slow). -
Timermessages in the console during NextSync can be safely ignored. -
Still stuck with NextSync? Try Jari Komppa's original command-line
nextsync.pyfirst — if that syncs, ZX-Next-Unite should too, since it shares the same code base. His setup guide is innextsync.txtinside the nextsync v1.2 release.
Resetting settings: all options are stored in a single
hdfg.cfgfile created next to the app. To reset everything, back up and delete that file.
ZX-Next-Unite stands on the shoulders of others' work — please consider supporting them:
- CSpect by Mike Dailly — itch.io · Patreon · blog
- hdfmonkey by Matt Westcott — github.com/gasman/hdfmonkey
- NextSync by Jari Komppa — github.com/jarikomppa/specnext
- itch-dl by Dragoon Aethis — github.com/DragoonAethis/itch-dl
- Flask by the Pallets team — flask.palletsprojects.com · github.com/pallets/flask
The pre-built Windows binary is produced with these build-time tools (needed
only to package the standalone .exe, not to run ZX-Next-Unite from source):
- PyInstaller by the PyInstaller Development Team — bundles the app and all of its dependencies into a single standalone executable — pyinstaller.org · github.com/pyinstaller/pyinstaller
- UPX (the Ultimate Packer for eXecutables) by Markus Oberhumer, László Molnár and John Reiser — compresses that executable — upx.github.io · github.com/upx/upx
Tools
Online libraries
The rest