VICE Mac is a Walker Heavy Industries project.
VICE underneath. Native Mac on top.
Apple Silicon Commodore emulation with SwiftUI, Metal, signed releases, a real media library, Q-Link Reloaded support, and MacVICEKit for developers.
Download · Website · MacVICEKit · API Docs · Sparkle Appcast
VICE Mac is the Mac-native front end VICE deserved.
It keeps the real VICE emulation core and replaces the desktop experience with native macOS apps: SwiftUI windows, AppKit integration where it matters, Metal video output, native menus and toolbars, signed/notarized DMG releases, Sparkle updates, a media library, a disk image manager, Q-Link Reloaded setup, and a reusable Swift package for building other tools on top of VICE.
No X11. No GTK shell. No generic Linux UI pretending to be a Mac app.
Grab the latest notarized Apple Silicon DMG:
https://github.com/barryw/vice-macos/releases/latest
The release contains separate apps for each supported machine. Drag the apps
you want into /Applications.
| Area | What You Get |
|---|---|
| Display | Native Metal renderer with LCD, CRT, PVM, RF, scanline, mask, curvature, halation, persistence, saturation, and warmth controls |
| Media | Stable media library for disks, programs, tapes, cartridges, snapshots, favorites, search, directory inspection, and quick launch |
| Disk tools | Native D64/D67/D71/D80/D81/D82 image manager with file import/export, BAM/sector inspection, GEOS helpers, and explicit save control |
| Controllers | Per-device keyboard, joystick, game controller, and 1351 mouse mapping with USB controller identification |
| Networking | User Port, SwiftLink, and Turbo232 modem support where VICE supports it, plus Q-Link Reloaded helper flows |
| Developer SDK | MacVICEKit Swift package with engine sessions, Metal display, audio/video sources, input routing, media helpers, snapshots, and debugger APIs |
| Updates | Sparkle appcast backed by GitHub Releases |
| Release quality | CI-built, signed, notarized, stapled, smoke-tested DMGs with checksums |
| App | Machine |
|---|---|
x64sc.app |
Commodore 64, cycle-exact |
xvic.app |
VIC-20 |
xpet.app |
PET |
xplus4.app |
Plus/4 |
xc16.app |
C16 |
xc232.app |
C232 |
xv364.app |
V364 |
x128.app |
C128 |
vsid.app |
SID player |
The emulator frame buffer is rendered through Metal with display presets for a clean LCD view, Commodore 1702/1084-style CRTs, PVM, RF, and green, amber, or white phosphor displays. Scanlines, mask intensity, curvature, halation, persistence, saturation, and warmth are adjustable per machine.
Import disks, programs, tapes, cartridges, and snapshots into a stable library location. Search them, favorite them, inspect disk directories, and run, load, or attach without hunting through folders every time.
Open D64, D67, D71, D80, D81, and D82 images. Create blank images, inspect directories and sectors, import PRGs, export files, rename entries, delete entries, clone optimized rebuilt images, and make explicit saves when you are ready to write changes.
VICE Mac can help configure a user-supplied Q-Link disk for Q-Link Reloaded, validate compatible modem settings, capture protocol traffic, and manage saved profiles through Keychain-backed storage.
Each app boots with the right machine model, ROM slots, drive defaults, video standard choices, SID options where supported, and machine-specific settings. The UI exposes C64, C128, VIC-20, PET, and Plus/4-family differences without forcing everything through a generic emulator panel.
The repo includes commodore-utils/geos-rtc, a tiny GEOS auto-exec driver for
C64 and C128 GEOS that reads VICE's DS1307 userport RTC and sets GEOS date/time
during boot.
Build the utility payload with:
make -C commodore-utils/geos-rtcMacVICEKit is the reusable Swift package behind the app. It packages the VICE runtime bridge, Metal display, audio/video sources, input forwarding, media attachment, snapshots, and debugger APIs so other macOS tools can embed VICE without copying app internals.
Release builds publish a self-contained SDK artifact:
MacVICEKit-<version>-arm64.zip
The package includes Swift APIs, the C bridge, a signed
MacVICERuntime.xcframework, bundled runtime dependencies, VICEData, and a
manifest.
Read more:
Open the Xcode project:
open macos/ViceMac.xcodeprojBuild a machine from the command line:
xcodebuild \
-project macos/ViceMac.xcodeproj \
-scheme "VICE Mac C64" \
-configuration Debug \
-destination 'platform=macOS,arch=arm64' \
-derivedDataPath /private/tmp/vice-macos-derived-data \
buildRun the native test suite:
xcodebuild test \
-project macos/ViceMac.xcodeproj \
-scheme "VICE Mac Tests" \
-configuration Debug \
-destination 'platform=macOS,arch=arm64' \
-derivedDataPath /private/tmp/vice-macos-testsBuild the release DMG:
macos/scripts/package-vicemac-release.shBuild only the reusable MacVICEKit SDK artifact:
macos/scripts/package-macvicekit-runtime.shCurrent Xcode releases require Apple's separate Metal toolchain component:
xcodebuild -downloadComponent MetalToolchainThe release script auto-detects the installed Metal toolchain. Set
VICE_MAC_XCODE_TOOLCHAIN to force a toolchain, or set
VICE_MAC_AUTO_METAL_TOOLCHAIN=0 to use Xcode's default behavior.
For a local signed release:
VICE_MAC_CODESIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)" \
VICE_MAC_DEVELOPMENT_TEAM="TEAMID" \
VICE_MAC_NOTARYTOOL_PROFILE="vice-mac-notary" \
macos/scripts/package-vicemac-release.shCreate the notary profile once on the signing machine:
xcrun notarytool store-credentials vice-mac-notary \
--apple-id you@example.com \
--team-id TEAMID \
--password APP_SPECIFIC_PASSWORDWhen notarization is enabled, the script signs all app bundles, re-signs
Sparkle's nested updater helpers, signs the DMG, submits it to Apple, staples
the ticket, validates the staple, and writes SHA256SUMS.txt.
The Woodpecker metal-ui pipeline runs on pushes to main that touch the
native Mac app, VICE bridge, packaging, or MacVICEKit sources. Release tags do
not trigger a second release build.
On a green push, CI:
- Prepares the VICE tree and Metal toolchain.
- Builds and tests the native Mac apps.
- Packages all machine apps into one Apple Silicon DMG.
- Builds the reusable MacVICEKit SDK artifact with
MacVICERuntime.xcframework. - Signs, notarizes, staples, and smoke-tests the DMG.
- Publishes a GitHub Release named
vice-mac-<VICE version>-<git sha>-1. - Uploads the DMG, MacVICEKit SDK zip,
SHA256SUMS.txt,coverage.json, andappcast.xml. - Deploys the website after GitHub's latest release endpoint points at that release.
Required Woodpecker secrets:
github_tokensparkle_private_keyapple_codesign_identityapple_development_teamapple_notarytool_profile
This work builds on VICE, the canonical multi-platform Commodore emulator:
https://vice-emu.sourceforge.io/
This repository tracks VICE upstream directly. Local product work lives on
main; git pull merges VICE-Team/svn-mirror main, and git push pushes
this Mac product repo.
MacVICE is free software distributed under the GNU General Public License, version 2 or later. See LICENSE for the GPL text and NOTICE for project-specific copyright and attribution.
The VICE emulator engine remains copyright the VICE team and contributors. Mac-specific application code, native macOS integration, Metal rendering integration, MacVICEKit, packaging, website, and other original work added in this repository are Copyright (C) 2026 Barry Walker and contributors and are licensed under the GNU General Public License, version 2 or later, unless a file explicitly states otherwise.
VICE Mac exists because the VICE team did the hard emulator work first. This project adds the native macOS application layer, packaging, MacVICEKit, website, and Mac-specific workflow on top of that foundation.
VICE Mac is part of the Walker Heavy Industries retro toolchain — modern tools for the retro 8- and 16-bit ecosystem.
- House hub: https://whi.dev
- Siblings: VICE Mac · VICE MCP · FamiForge · NESBasic · Novus · Miggy Draw · NovaVM


