An open API service indexing awesome lists of open source software.

https://github.com/chrisgleissner/c64commander

Cross-platform app (Android/iOS/web) for managing and controlling a Commodore 64 Ultimate over your local network.
https://github.com/chrisgleissner/c64commander

android c64 c64u commodore commodore-64 rest-api retro retrocomputing retrogaming ultimate64

Last synced: 20 days ago
JSON representation

Cross-platform app (Android/iOS/web) for managing and controlling a Commodore 64 Ultimate over your local network.

Awesome Lists containing this project

README

          

# C64 Commander

[![Build](https://github.com/chrisgleissner/c64commander/actions/workflows/android.yaml/badge.svg?branch=main)](https://github.com/chrisgleissner/c64commander/actions/workflows/android.yaml)
[![codecov](https://codecov.io/gh/chrisgleissner/c64commander/graph/badge.svg?token=hGEe09SZch)](https://codecov.io/gh/chrisgleissner/c64commander)
[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.en.html)
[![Platform](https://img.shields.io/badge/platforms-Android%20%7C%20iOS%20%7C%20Web-blue)](https://github.com/chrisgleissner/c64commander/releases)

Control and manage a C64 Ultimate from Android, iOS, or a self-hosted web deployment on your local network.

C64 Commander

## Features

- **Cross-platform**: Native Android and iOS apps, plus a Docker-based web interface for macOS, Windows, or Linux.
- **Cross-device**: Supports Commodore 64 Ultimate (all editions), Ultimate 64, Ultimate 64 Elite, and Ultimate 64 Elite II.
- **Dashboard**: Machine controls, Quick actions, drive and printer shortcuts, SID mixer, and streams on a single page.
- **Playlists**: Build playlists from local files, C64U storage, the High Voltage SID Collection (HVSC), or CommoServe search results. Autoplay, shuffle, and subsong selection.
- **Disk management**: Mount, unmount, and rotate multi-disk groups across drives.
- **Configuration**: Browse and edit the full C64 Ultimate configuration tree.
- **Diagnostics**: Inspect activity logs, traces, latency, and connection health across App, REST, FTP, and Telnet activity.
- **Device Switcher**: Switch between devices and run parallel health checks.

## Quick Start

### Android

1. Download the latest APK from [Releases](https://github.com/chrisgleissner/c64commander/releases).
2. Open the APK and allow installs from unknown sources if prompted.
3. Tap **Install**.

### iOS

1. Set up [SideStore](https://docs.sidestore.io/).
2. Download the latest IPA from [Releases](https://github.com/chrisgleissner/c64commander/releases).
3. In **SideStore > My Apps**, tap **+** and select the IPA.

SideStore refreshes the app signature automatically every 7 days.

### Web (Docker)

The web version is self-hosted for LAN use. Requirements: Docker on Windows, macOS, or Linux. A Raspberry Pi Zero 2W or 4B with 512 MiB RAM or more is sufficient.

Install Docker: [Docker Desktop](https://docs.docker.com/desktop/) (Windows/macOS) or [Docker Engine](https://docs.docker.com/engine/install/) (Linux). The image supports `linux/amd64` and `linux/arm64`.

```bash
mkdir -p ./c64commander-config && chmod 0777 ./c64commander-config

docker run -d --name c64commander -p 8064:8064 \
-v ./c64commander-config:/config --restart unless-stopped \
ghcr.io/chrisgleissner/c64commander:
```

Open `http://:8064` in a browser.

If a network password is configured in **Settings > Device > Network password**, the web interface requires login with the same password.

### Variant Selection

Variant metadata is authored once in `variants/variants.yaml` and generated into web, Android, iOS, and workflow inputs by `npm run variant:generate`.

- Android workflows intentionally support both `c64commander` and `c64u-controller`.
- iOS and web workflows build and publish only the default `c64commander` variant in this repository.
- Set `APP_VARIANT=c64u-controller` before `npm run cap:build` or `npm run variant:generate` when you want to generate the Android controller variant locally.
- Local side-by-side web testing can still build different variants, but it relies on distinct origins such as different `localhost` ports rather than runtime storage partitioning.

Examples:

```bash
APP_VARIANT=c64u-controller npm run cap:build
APP_VARIANT=c64u-controller npm run variant:generate
```

### First Connection

Ensure the C64 Ultimate is on your local network with required services enabled:

![Network services & timezone menu](docs/img/setup/enable_services.png)

On the C64 Ultimate:

1. Press **CBM+Restore** and open **Network services & timezone**.
2. Enable:
- **Web Remote Control Service** - REST API used for most control and status operations
- **FTP File Service** - required for browsing and transferring files for playlists and disk collections
- **Telnet Remote Menu Service** - used for a small set of advanced operations not available via REST, such as power cycle
3. Note the IP address from **Wired Network Setup** or **WI-FI Network Setup**.

In C64 Commander:

1. Open **Settings > Device > Connection**.
2. Enter the C64 Ultimate IP address or hostname.
- **On Android**, the IP address is recommended. Bare hostnames such as
`u64` or `c64u` rely on mDNS, which is not always reliable on home
networks. The app will attempt mDNS resolution before falling back to
system DNS, and surface a clear "Cannot resolve …" error if both
fail.
3. A green health indicator at the top right confirms the successful connection:

![Connected C64U badge](docs/img/app/home/02-connection-status-popover.png)

## Pages

### Home

Operational dashboard: machine controls, quick actions, light effects, drives, printer, SID mixer, streams, and configuration snapshots.


C64 Commander intro
Home top row and quick actions (Light)
Home top row and quick actions (Dark)


Home sections from quick config through keyboard light
Home sections from quick config through printers
Home sections from printers through SID


Home sections from SID through config
Lighting Studio bottom sheet
Demo Mode interstitial


Save RAM type selection
Save RAM custom ranges
Load RAM snapshot manager

### Play

Build playlists for programs and songs sourced from the local device, C64U storage, HVSC, or CommoServe. Supports autoplay, shuffle, repeat, subsong selection, and automatic song length discovery.


Play overview
Play playlist
Play playlist view all

### Browse & Import

Choose an import source, browse its contents, then add files to your playlist or disk collection.


Import source chooser
Local file browser
C64U file browser



HVSC browser after preparation
CommoServe search form
CommoServe results with selection

### Disks

View drive state, mount and eject images, and manage disk collections with multi-disk group rotation.


Disks overview
Disks collection
Disks collection

### Configuration

Browse and edit the full C64 Ultimate configuration: categories, items, sliders, toggles, and per-item refresh.


Configuration categories
Configuration U64 specific
Configuration C64 and cartridge settings

### Settings

Connection, appearance, diagnostics, playback defaults, HVSC integration, and device-safety controls.


Settings appearance
Settings connection
Settings diagnostics


Settings play and disk
Settings configuration
Settings device safety

### Docs

Built-in guides for setup, workflows, and day-to-day usage.


Docs overview
Docs getting started
Docs swapping disks

### Diagnostics

Tap the top-right status badge to open diagnostics.

Provides health checks, activity logs, trace inspection, filter editor, and latency analysis across App, REST, FTP, and Telnet contributors.


Diagnostics overview
Diagnostics activity list
Diagnostics filter editor

### Switch Device

Long-press the top-right status badge to open the device switcher.

The switcher shows all configured devices with real-time health status, allowing instant switching and quick identification of connectivity or device issues.


Switcher (Connecting)
Switcher (All Healthy)
Switcher (One Unhealthy)

## Display Profiles

The layout adapts automatically based on viewport width: Small (phones), Standard (large phones and small tablets), and Large (tablets and desktops). Override in **Settings > Display Profile**.



Small display
Standard display
Large display





Home page in the Small display profile


Home page in the Standard display profile


Home page in the Large display profile


## Troubleshooting

### Can't reach the device

- Confirm the C64 Ultimate and your device are on the same network.
- Verify the IP address or hostname in **Settings > Device > Connection**.

### Device becomes unresponsive

C64 Commander includes **Device Safety** controls under **Settings > Device Safety** to throttle REST and FTP traffic. REST mutations use a single in-flight lane; presets and advanced controls tune FTP concurrency and backoff behavior.

- **Presets**: Relaxed, Balanced (default), Conservative.
- **Advanced controls**: FTP concurrency, read coalescing, cooldowns, backoff strategy, circuit-breaker thresholds, discovery probe interval.
- The Relaxed preset can overwhelm some setups. Start with Balanced or Conservative.

### iOS specifics

- **App expired**: SideStore refreshes every 7 days automatically.
- **Account/App ID limits**: Remove unused sideloaded apps and retry.
- **Install/signing errors**: Re-download the IPA and verify its checksum.
- **Telnet-backed controls**: Power Cycle, Clear Flash, and other Telnet-only actions use the native socket bridge on iOS and Android. Support is discovered from the connected device's live Telnet menu graph, so device-specific gaps stay visible as disabled controls with inline explanation instead of disappearing.

## For Developers

- [Documentation index](docs/index.md)
- [DeepWiki architecture and design guide](https://deepwiki.com/chrisgleissner/c64commander)
- [Developer guide](docs/developer.md)
- [Chaos/fuzz testing](docs/testing/chaos-fuzz.md)

## Advanced Topics

Network security, web server configuration, authentication, and Linux auto-update are covered in [docs/advanced.md](docs/advanced.md).

## Acknowledgments

### High Voltage SID Collection (HVSC)

The [High Voltage SID Collection](https://hvsc.c64.org) is an archive of C64 SID music. C64 Commander integrates HVSC for browsing, searching, and playing SID tunes with metadata and song-length support.

### Commodore and the C64 Ultimate

Thanks to [Commodore](https://commodore.net) for creating the Commodore 64 and to the creators of the C64 Ultimate for extending the platform with modern hardware.

### Third-Party Libraries

C64 Commander uses many open-source libraries. Notices are generated via `scripts/generate-third-party-notices.mjs` and published as [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).

## License

GPL v3. See [LICENSE](LICENSE).