Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Getting started

Copperline can be run as a native desktop application or in the browser at copperline.dev/try. This chapter covers system requirements, installation, building from source, and initial setup.

System requirements

Installing on macOS (Homebrew)

The repository doubles as a Homebrew tap:

brew tap copperlinehq/copperline https://github.com/CopperlineHQ/Copperline
brew install copperline

To build directly from the latest development commit:

brew install --HEAD copperline

Pre-built macOS application bundles (Copperline-X.Y.Z-macos-universal.dmg) are also available on the releases page. Mount the disk image and copy Copperline.app to /Applications. If macOS quarantine blocks the first launch, right-click the app and choose Open, or run:

xattr -dr com.apple.quarantine /Applications/Copperline.app

Installing on Linux

AppImage

Standalone AppImage binaries are provided on the releases page:

chmod +x Copperline-*.AppImage
./Copperline-*.AppImage

Flatpak (build it yourself)

Copperline is not published on Flathub, and releases do not include a Flatpak bundle. The repository’s packaging/flatpak/ directory holds the Flatpak manifest, which you can build into a sandboxed package that brings its own runtime dependencies and works across distributions.

The build needs flatpak, curl, and python3 with its venv module. From the top of a clean checkout (check out a release tag for a released version), run:

flatpak remote-add --if-not-exists --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install --user flathub org.flatpak.Builder
./packaging/flatpak/generate-cargo-sources.sh
flatpak run org.flatpak.Builder --force-clean --user --install \
    --install-deps-from=flathub --repo=repo builddir \
    packaging/flatpak/dev.copperline.Copperline.yaml
flatpak run dev.copperline.Copperline

The script writes the crate list that lets the build run offline, and --install-deps-from=flathub fetches the Freedesktop runtime, SDK and Rust extension the manifest names. The manifest copies the whole checkout into the build, including any stray ROM or disk images in the repository root, which is why a clean checkout matters. packaging/flatpak/README.md covers linting and the host-side helper for bridged Ethernet.

Vulkan is required on Linux

On Linux, presentation uses the Vulkan backend via wgpu. If no Vulkan adapter is found, the application exits at launch.

Modern GPUs generally provide hardware Vulkan support through Mesa drivers. For virtual machines or older hardware, install the software Vulkan driver (lavapipe):

A self-built Flatpak needs no host package: its Freedesktop runtime supplies Mesa, including lavapipe.

Installing on Windows

Download Copperline-X.Y.Z-win-x64.zip or Copperline-X.Y.Z-win-arm64.zip from the releases page, matching your Windows architecture. Extract the whole archive and run copperline.exe; keep the bundled ROMs and other assets alongside it.

The console window

copperline.exe is a console program. Run from a command prompt, it behaves like any other command-line tool: the shell waits for it, and --help, the log and the output of every headless flag go to that terminal.

Started from Explorer or the Start menu, it has no prompt to write to, so Copperline closes the console window Windows opens for it and leaves only the emulator window. The console may still flash briefly, because Windows shows it before Copperline starts running.

Command-line tools

Every package also carries two companion programs: copperline-ctl, the control protocol client whose --mcp and --dap modes serve coding agents and the VS Code extension, and copperline-import-uae, the WinUAE/Amiberry/FS-UAE config converter. Where they land depends on the package:

PackageLocation
HomebrewOn PATH, next to copperline.
macOS dmgInside the bundle, Copperline.app/Contents/MacOS/. Add that directory to PATH or name the files in the VS Code settings.
Windows zipNext to copperline.exe in the extracted folder. Add the folder to PATH or name the .exe files in the VS Code settings.
AppImageThe separate Copperline-X.Y.Z-<arch>-tools.tar.gz release asset. Unpack it anywhere; set COPPERLINE_BIN to the AppImage path so copperline-ctl can launch the emulator.
Self-built FlatpakIn the sandbox: flatpak run --command=copperline-ctl dev.copperline.Copperline ... (and likewise copperline-import-uae).

copperline-ctl launches the copperline beside it when one is there; the DAP chapter lists the full lookup order.

Building from source

cargo build --release

Cargo features

A default build includes everything below except the last three features. To leave something out, build with --no-default-features and list the features to keep; the FluxBridge, MT-32, and Coppersynth chapters show complete examples.

FeatureDefaultWhat it adds
frontendyesThe desktop window, launcher, inspectors, host audio, gamepads, and file dialogs. The copperline binary requires it.
midiyesHost MIDI for [serial] mode = "midi" (CoreMIDI, the ALSA sequencer, or WinMM).
mt32yesThe built-in MT-32.
coppersynthyesThe built-in Coppersynth General MIDI synthesizer.
host-serialyesA real host serial port on Paula’s UART ([serial] mode = "device").
fluxbridgeyesPhysical floppy drives through a Greaseweazle.
net-natyesUser-mode NAT networking for the emulated network boards.
net-bridgeyesBridged networking to a host Ethernet adapter, and the copperline-net-helper binary.
netplay-internetyesInternet netplay with NAT traversal and relay fallback.
wasm-boardsyesWebAssembly Zorro board plugins.
cpu-jityesNative code generation for [cpu] jit.
controlyesThe control protocol server (--control, --control-gui).
ctl-binyesThe copperline-ctl binary, with its MCP and DAP modes.
gdbyesThe GDB remote stub.
dapyesThe Debug Adapter Protocol adapter and the guest debug-information reader.
import-uae-binyesThe copperline-import-uae converter.
game-libraryyesThe launcher’s WHDLoad Library page and its OpenRetro sync.
update-checkyesThe About panel’s Check for updates button, which asks GitHub for the latest release only when pressed.
mhiyesThe MHI MPEG audio decoder board.
cd-mp3yesMP3 audio tracks in CD cue sheets.
cd32-fmvyesThe CD32 Full Motion Video module.
profile-statsyesDetailed host-cost counters for native diagnostics.
bench-binnoThe headless copperline-bench benchmark binary (see Browser build and WebAssembly integration).
display-plan-tracenoDisplay-plan tracing (COPPERLINE_TRACE_DISPLAY_PLAN) in release builds; debug and test builds always have it.
internal-diagnosticsnoEnvironment overrides that deliberately change timing (COPPERLINE_NO_BUS_ARB and similar), for local investigation only.

Tests

To run the test suite:

cargo test                          # Unit tests (no external assets required)
cargo test --release -- --ignored   # Integration tests (requires local test media)

The ignored integration tests in tests/ need Kickstart ROMs and disk images that are not part of the repository. They look for them in the directory named by COPPERLINE_TEST_ASSETS, then in test-assets/ at the repository root, and pass without running when their assets are absent. tests/README.md lists what each test needs.

For the optimized native CI suite, including the deterministic golden renders, use cargo test --profile ci --locked. The ci profile inherits release settings but disables LTO and uses parallel code generation to compile test executables faster. Its binaries are in target/ci/; normal builds and performance benchmarks continue to use --release. Add --timings to write a build report to target/cargo-timings/cargo-timing.html.

The golden renders live in timing-test/golden/. A hardware-model change that alters them on purpose is re-blessed with COPPERLINE_BLESS_GOLDEN=1 cargo test --release --test probe_golden, and the render differences are reviewed as part of the change.

First boot

Run Copperline from the terminal:

./target/release/copperline

When started with no arguments and no copperline.toml in the current directory, Copperline displays the interactive launcher screen where you can configure machine models, memory, storage, and peripherals. Any machine, media, or headless option skips the launcher; --factory on its own does not.

With no saved default, the launcher starts with an Amiga 500 (Rev 6A): ECS 8372A Agnus, OCS 8362 Denise, 512 KiB chip RAM, 512 KiB slow RAM, and the bundled AROS Kickstart replacement. Save default writes your settings to default.toml in the configurations folder (see Where files go) and every later run that names no configuration loads it. If that saved default has Run on startup set ([emulation] auto_launch), the launcher starts the machine straight away. --factory ignores the saved default, and also leaves Coppersynth’s and the modem’s stored settings untouched; an explicit --config or a local copperline.toml still takes precedence.

To boot directly into a specific Kickstart ROM or configuration file:

./target/release/copperline path/to/kickstart.rom
./target/release/copperline --config path/to/copperline.toml

You can also specify machine parameters via command-line flags:

./target/release/copperline --model A1200 --fast 8M KICK31.ROM

See Command-line overrides for the full list of CLI flags.

Kickstart 1.3 insert-disk screen

Kickstart 1.3 waiting for a boot floppy.

To mount a floppy disk image on boot:

rom = "KICK13.ROM"

[floppy.df0]
path = "Game.adf"

Supported floppy formats include ADF, ADZ (gzip-compressed ADF), single-file ZIP, DMS, extended ADF, IPF, and SCP. In interactive sessions, disk images can also be inserted via drag-and-drop into the emulator window.

Example configuration

A fully commented example configuration is available in copperline.example.toml in the root of the repository. Copy it to copperline.toml or pass it via --config:

./target/release/copperline --config copperline.example.toml

Logging and crash reports

The log goes to stderr at the info level. Set RUST_LOG=debug or RUST_LOG=trace in the environment for more detail.

If Copperline panics, it writes the panic message and a backtrace to copperline-crash.txt: next to the executable when that folder is writable, otherwise in the current working directory, and failing that in the system temporary directory. The path it chose is printed to stderr. Please include this file when reporting bugs.