Personal retro game collection cabinet in your browser. Play NES, SNES, Genesis, GBA, and more.
| Port | 8000 |
| Registry | ghcr.io/daemonless/retroassembly |
| Source | https://github.com/arianrhodsandlot/retroassembly |
| Website | https://retroassembly.com/ |
| Tag | Description | Best For |
|---|---|---|
latest |
Upstream Binary. Built from official release. | Most users. Matches Linux Docker behavior. |
Before deploying, ensure your host environment is ready. See the Quick Start Guide for host setup instructions.
services:
retroassembly:
image: "ghcr.io/daemonless/retroassembly:latest"
container_name: retroassembly
environment:
- RETROASSEMBLY_RUN_TIME_DATA_DIRECTORY=/data # Data directory for SQLite database (default: /data)
- RETROASSEMBLY_RUN_TIME_STORAGE_DIRECTORY=/data/storage # Directory for uploaded ROM files (default: /data/storage)
- RETROASSEMBLY_RUN_TIME_PORT= # HTTP port (default: 8000)
volumes:
- "/path/to/containers/retroassembly/data:/data"
ports:
- "8000:8000"
restart: unless-stopped.env:
# .env
DIRECTOR_PROJECT=retroassembly
RETROASSEMBLY_RUN_TIME_DATA_DIRECTORY=/data
RETROASSEMBLY_RUN_TIME_STORAGE_DIRECTORY=/data/storage
RETROASSEMBLY_RUN_TIME_PORT=
appjail-director.yml:
# appjail-director.yml
options:
- virtualnet: ':<random> default'
- nat:
services:
retroassembly:
name: retroassembly
options:
- container: 'boot args:--pull'
- expose: '8000:8000 proto:tcp' \
oci:
user: root
environment:
- RETROASSEMBLY_RUN_TIME_DATA_DIRECTORY: !ENV '${RETROASSEMBLY_RUN_TIME_DATA_DIRECTORY}'
- RETROASSEMBLY_RUN_TIME_STORAGE_DIRECTORY: !ENV '${RETROASSEMBLY_RUN_TIME_STORAGE_DIRECTORY}'
- RETROASSEMBLY_RUN_TIME_PORT: !ENV '${RETROASSEMBLY_RUN_TIME_PORT}'
volumes:
- retroassembly_data: /data
volumes:
retroassembly_data:
device: '/path/to/containers/retroassembly/data'Makejail:
# Makejail
ARG tag=latest
OPTION overwrite=force
OPTION from=ghcr.io/daemonless/retroassembly:${tag}
Note: Exposing ports in AppJail means that your service can be reached from remote hosts. If that is not your intention, do not expose the ports and communicate with the service using the IPv4 address assigned by the virtual network.
podman run -d --name retroassembly \
-p 8000:8000 \
-e RETROASSEMBLY_RUN_TIME_DATA_DIRECTORY=/data \
-e RETROASSEMBLY_RUN_TIME_STORAGE_DIRECTORY=/data/storage \
-e RETROASSEMBLY_RUN_TIME_PORT= \
-v /path/to/containers/retroassembly/data:/data \
ghcr.io/daemonless/retroassembly:latestappjail oci run -Pd \
-o overwrite=force \
-o container="args:--pull" \
-o virtualnet=":<random> default" \
-o nat \
-o expose="8000:8000 proto:tcp" \
-e RETROASSEMBLY_RUN_TIME_DATA_DIRECTORY=/data \
-e RETROASSEMBLY_RUN_TIME_STORAGE_DIRECTORY=/data/storage \
-e RETROASSEMBLY_RUN_TIME_PORT= \
-o fstab="/path/to/containers/retroassembly/data /data <pseudofs>" \
ghcr.io/daemonless/retroassembly:latest retroassemblyNote: Exposing ports in AppJail means that your service can be reached from remote hosts. If that is not your intention, do not expose the ports and communicate with the service using the IPv4 address assigned by the virtual network.
- name: Deploy retroassembly
containers.podman.podman_container:
name: retroassembly
image: "ghcr.io/daemonless/retroassembly:latest"
state: started
restart_policy: always
env:
RETROASSEMBLY_RUN_TIME_DATA_DIRECTORY: "/data"
RETROASSEMBLY_RUN_TIME_STORAGE_DIRECTORY: "/data/storage"
RETROASSEMBLY_RUN_TIME_PORT: ""
ports:
- "8000:8000"
volumes:
- "/path/to/containers/retroassembly/data:/data"Access at: http://localhost:8000
| Variable | Default | Description |
|---|---|---|
RETROASSEMBLY_RUN_TIME_DATA_DIRECTORY |
/data |
Data directory for SQLite database (default: /data) |
RETROASSEMBLY_RUN_TIME_STORAGE_DIRECTORY |
/data/storage |
Directory for uploaded ROM files (default: /data/storage) |
RETROASSEMBLY_RUN_TIME_PORT |
`` | HTTP port (default: 8000) |
| Path | Description |
|---|---|
/data |
Database and uploaded ROM storage |
| Port | Protocol | Description |
|---|---|---|
8000 |
TCP | Web UI |
Architectures: amd64
User: bsd (UID/GID via PUID/PGID, defaults to 1000:1000)
Base: FreeBSD 15
Need help? Join our Discord community.