IO-Darts-Agent: Installation
Diese Anleitung installiert IO-Darts-Agent aus dem Quellcode, auf einem normalen Rechner oder auf einem eigenen Board-PC neben der Dartscheibe.
Inoffizielles Projekt. IO-Darts-Agent steht in keiner Verbindung zu Autodarts und wird von Autodarts weder unterstützt noch empfohlen.
Nur im lokalen Netzwerk. Der Hub lauscht immer auf allen Netzwerkschnittstellen (
0.0.0.0) und speichert dein Autodarts-Passwort im Klartext in seiner Konfigurationsdatei. Nutze ihn nur im Heimnetz. Gib den Port nicht ins Internet frei und richte keine Portweiterleitung ein.
Inhalt
- Voraussetzungen
- Installation aus dem Quellcode
- Erste Konfiguration
- Wo der Hub seine Daten speichert
- Eigener Board-PC (Linux)
- Aktualisieren
- Logs
- Fehlerbehebung
- Deinstallation
- Desktop-Pakete
Voraussetzungen
| Was | Hinweis |
|---|---|
| Node.js 22 oder neuer | Pflicht. package.json legt "engines": { "node": ">=22" } fest, und im Repository liegt eine .nvmrc mit 22. |
| npm | Kommt mit Node.js. |
| git | Zum Klonen und Aktualisieren des Repositorys. |
| ffmpeg | Optional. Der Animationsgenerator wandelt damit erzeugte Videos in transparente WebM-Dateien um. Ohne ffmpeg bleibt das originale MP4 erhalten (ohne Transparenz). |
| Autodarts-Konto | Mit Anmeldung per E-Mail und Passwort. Das Board muss in Autodarts bereits eingerichtet und verbunden sein. |
| Board-ID | Die ID deines Autodarts-Boards. |
Zur Autodarts-Anmeldung: Der Hub meldet sich mit deiner Autodarts-E-Mail und deinem Passwort beim Autodarts-Anmeldedienst an (https://api.autodarts.com/auth/v1). Access Tokens werden automatisch erneuert. Der Dienst rotiert die Refresh Tokens, und wird eine Erneuerung abgelehnt, meldet sich der Hub neu an. Für Live-Ereignisse holt der Hub ein kurzlebiges Ticket von https://play.ws.autodarts.com/ms/v0/tickets und öffnet damit den Websocket wss://play.ws.autodarts.com/ms/v0/subscribe.
Zwei-Faktor-Authentifizierung wird nicht unterstützt. Der Hub hat keinen 2FA-Schritt. Ein Konto, das einen zweiten Faktor verlangt, kann sich nicht anmelden.
Installation aus dem Quellcode
Die Installation aus dem Quellcode ist der unterstützte Weg, IO-Darts-Agent zu betreiben.
1. Repository klonen
git clone https://github.com/Castorio/io-darts-agent.git
cd io-darts-agent
Wenn du nvm nutzt, wählt nvm use Node 22 aus der .nvmrc.
2. Abhängigkeiten installieren
npm run setup
npm run setup installiert die Abhängigkeiten des Hubs, baut das Modul-SDK und installiert die Abhängigkeiten von modules/wled, modules/darts-caller, web und modules/game-display/web.
3. Bauen
npm run build:app
npm run build:app baut den Hub (TypeScript nach dist/), die Weboberfläche (web/dist/) und die Oberfläche des Game Displays (modules/game-display/web/dist/).
4. Starten
npm start
npm start führt node dist/src/main.js aus. In der Konsole erscheint Server running at http://localhost:3000. Beim ersten Start installiert der Hub die mitgelieferten Module (WLED, Darts Caller, Game Display) als Links auf die Module im Repository. Modul-Updates kommen so mit git pull an.
Öffne die Weboberfläche im Browser:
http://localhost:3000
Von einem anderen Gerät im selben Netz nimmst du die IP des Rechners, auf dem der Hub läuft, zum Beispiel http://192.168.1.50:3000.
Erste Konfiguration
Einrichtungsassistent
Solange keine Konfiguration existiert, öffnet die Weboberfläche den Einrichtungsassistenten (/setup). Bis die Einrichtung abgeschlossen ist, beantwortet die API nur die Einrichtungsrouten. Der Assistent hat drei Schritte:
- Web-Anmeldung: Schütze die Weboberfläche optional mit Benutzername (mindestens 3 Zeichen) und Passwort (mindestens 6 Zeichen).
- Autodarts: Trage deine Autodarts-E-Mail, dein Passwort und die Board-ID ein und teste die Verbindung.
- Abschluss: Der Hub speichert die Konfiguration und verbindet sich mit Autodarts.
Danach meldet der Hub bei jedem Start Configuration loaded - connecting to Autodarts... und verbindet sich mit deinem Board. Zugangsdaten, Board-ID, Port und die Anmeldung der Weboberfläche kannst du später unter Einstellungen in der Weboberfläche ändern. Die Änderungen greifen nach einem Neustart des Hubs: Klicke im Bereich Server der Einstellungen auf Hub neu starten. Mit npm start gestartet, startet der Hub eine neue Instanz von sich selbst. Als systemd-Dienst oder in der Desktop-App beendet er sich mit Code 75, und Dienst oder App starten ihn wieder. Die Seite lädt neu, sobald der Hub antwortet, bei geändertem Port auf dem neuen Port.
Konfigurationsdatei
Der Assistent schreibt dist/config/hub.config.json. Der Pfad wird relativ zum gebauten Code in dist/src/ aufgelöst, nicht relativ zum aktuellen Arbeitsverzeichnis. Die Datei enthält dein Autodarts-Passwort im Klartext. Schütze sie deshalb:
chmod 600 dist/config/hub.config.json
config/hub.config.example.json im Repository zeigt das Format und dient als Vorlage zum Nachschlagen. Der Hub liest sie nicht.
| Feld | Bedeutung |
|---|---|
setupCompleted |
Nach dem Assistenten true. Mit false öffnet der Hub den Assistenten erneut. |
language |
Sprache der Oberfläche: en, de oder es. |
webAuth |
Optionale Anmeldung für die Weboberfläche (enabled, username, passwordHash). Ändere sie unter Einstellungen. Der Hub speichert das Passwort als bcrypt-Hash. |
autodarts.email, autodarts.password |
Deine Autodarts-Zugangsdaten. |
autodarts.boardId |
Die ID deines Autodarts-Boards. |
autodarts.clientId |
Optional. Standard ist autodarts-play. Lass das Feld weg. |
server.port |
HTTP-Port des Hubs. Standard 3000. |
server.host |
Wird gespeichert, aber derzeit ignoriert. Der Hub bindet immer an 0.0.0.0. |
developerMode |
Schaltet die Entwicklerwerkzeuge in der Weboberfläche ein. |
API-Schlüssel für KI-Funktionen
Schlüssel für KI-Anbieter (OpenAI, Anthropic, Ollama, ElevenLabs, Stability AI, Runway, Higgsfield, Replicate) trägst du in der Weboberfläche unter dem Menüpunkt AI Provider in der Seitenleiste (/ai-settings) ein. Der Hub speichert sie in dist/config/ai-providers.json und legt diese Datei beim ersten Start mit Standardwerten an. Der Darts Caller (ElevenLabs-Stimme) und der Animationsgenerator (Runway, Higgsfield) lesen ihre Schlüssel von dort.
Optional: .env-Datei
Der Hub lädt eine .env-Datei aus dem aktuellen Arbeitsverzeichnis. Für den normalen Betrieb ist sie nicht nötig. Diese Variablen wertet der Server tatsächlich aus:
| Variable | Wirkung |
|---|---|
PORT |
Port, der nur ohne Konfigurationsdatei (Einrichtungsmodus) gilt. |
IO_DARTS_DATA_DIR |
Ordner für Laufzeitdaten (config/, data/, media/, modules_installed/). Standard: dist/. Die Desktop-App setzt ihn auf den App-Datenordner des Benutzers. |
AUTODARTS_CLIENT_ID |
Überschreibt die OAuth-Client-ID. Nicht nötig. |
NODE_ENV |
production schaltet die Debug-Ausgabe des Intent-Bus ab. Auf das Session-Cookie wirkt es sich nicht aus: Das Cookie bekommt das Secure-Flag nur bei HTTPS-Anfragen, deshalb funktioniert die Web-Anmeldung auch über einfaches HTTP im LAN. |
.env.example nennt außerdem SERVER_PORT, SERVER_HOST, AUTODARTS_EMAIL, AUTODARTS_PASSWORD und AUTODARTS_BOARD_ID. npm start ignoriert sie. Port und Zugangsdaten kommen aus dist/config/hub.config.json.
Wo der Hub seine Daten speichert
Beim Start aus dem Build liegen alle Laufzeitdaten unter dist/:
| Pfad | Inhalt |
|---|---|
dist/config/hub.config.json |
Hauptkonfiguration einschließlich Autodarts-Passwort |
dist/config/ai-providers.json |
Einstellungen und API-Schlüssel der KI-Anbieter |
dist/config/players.json |
Spielerdatenbank |
dist/config/animation-settings.json |
Gewählte Animations-Engine |
dist/config/modules/ |
Einstellungen der einzelnen Module |
dist/data/voicepacks/, dist/data/tts-cache/ |
Sprachpakete und Sprach-Cache des Darts Callers |
dist/media/ |
Medienbibliothek (Animationen, Sounds, Bilder) |
dist/modules_installed/ |
Installierte Module (Links auf die mitgelieferten Module und installierte externe Module) |
Die Ordner config/, data/ und media/ im Hauptverzeichnis des Repositorys werden mit npm start zur Laufzeit nicht genutzt. npm run dev (Entwicklungsmodus) nutzt sie, zusammen mit modules_installed/ im Hauptverzeichnis des Repositorys.
dist/ steht in .gitignore. Das hält deine Daten aus git heraus, bedeutet aber auch: Jeder Befehl, der ignorierte Dateien aufräumt, löscht deine Konfiguration. Mach vor größeren Änderungen eine Sicherung:
tar czf ~/io-darts-agent-backup-$(date +%F).tar.gz \
-C ~/io-darts-agent dist/config dist/data dist/media dist/modules_installed
Eigener Board-PC (Linux)
Dieser Abschnitt richtet einen kleinen Linux-PC ein (zum Beispiel Linux Mint oder Ubuntu mit Xfce), der den Hub beim Booten startet und das Game Display im Vollbild auf einem Monitor neben dem Board zeigt. Die nötigen Dateien liegen im Repository unter scripts/linux/:
Für reinen Desktop-Einsatz (kein Kiosk, kein Autostart) ist das .deb-Paket aus den Desktop-Paketen eine schnellere Alternative. Für den hier beschriebenen Kiosk-Betrieb mit systemd bleibt die Installation aus dem Quellcode der Weg.
| Datei | Zweck |
|---|---|
io-darts-agent.service |
systemd-Benutzerdienst. Startet /usr/bin/node dist/src/main.js in ~/io-darts-agent mit NODE_ENV=production, wartet vor dem Start, bis api.autodarts.com per DNS auflösbar ist (der Hub wiederholt eine fehlgeschlagene Anmeldung beim Start nicht), und startet bei Fehlern neu. Die Web-Anmeldung funktioniert trotzdem über einfaches HTTP, weil das Session-Cookie das Secure-Flag nur bei HTTPS-Anfragen bekommt. |
game-display-kiosk.sh |
Schaltet die Bildschirmabschaltung aus (X11, dazu Energieverwaltung und Bildschirmschoner von Xfce), wartet, bis der Hub antwortet, und öffnet dann Firefox im Kioskmodus auf http://localhost:3000/module-ui/game-display/. Die URL lässt sich mit GAME_DISPLAY_URL ändern. |
game-display-kiosk.desktop |
Autostart-Eintrag, der das Kiosk-Skript nach der Desktop-Anmeldung startet. |
Alle folgenden Befehle laufen als dein normaler Benutzer, außer dort, wo sudo steht.
1. Systempakete installieren
sudo apt update
sudo apt install -y git curl ffmpeg firefox unclutter-xfixes
unclutter-xfixes blendet den Mauszeiger auf dem Display aus. Unter Ubuntu kommt firefox eventuell als Snap. Das Kiosk-Skript braucht nur einen Befehl firefox.
2. Node.js 22 installieren
Ist schon Node.js 22 oder neuer unter /usr/bin/node installiert (node -v), überspringe diesen Schritt.
Variante A, NodeSource (empfohlen für den Dienst): installiert node nach /usr/bin/node. Genau diesen Pfad nutzt die Dienstdatei.
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
node -v
Variante B, nvm: funktioniert auch, dann liegt node aber unter ~/.nvm/. Ersetze in diesem Fall /usr/bin/node in der Dienstdatei durch die Ausgabe von which node.
3. Hub installieren
Der Dienst erwartet den Hub in ~/io-darts-agent:
cd ~
git clone https://github.com/Castorio/io-darts-agent.git io-darts-agent
cd ~/io-darts-agent
Baue den Hub und teste einmal von Hand:
npm run setup
npm run build:app
npm start
Öffne http://localhost:3000, schließe den Einrichtungsassistenten ab und beende den Hub mit Strg+C.
4. systemd-Benutzerdienst einrichten
mkdir -p ~/.config/systemd/user
cp ~/io-darts-agent/scripts/linux/io-darts-agent.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now io-darts-agent
systemctl --user status io-darts-agent
Damit der Dienst beim Booten startet, auch bevor sich jemand anmeldet:
sudo loginctl enable-linger "$USER"
5. Game-Display-Kiosk einrichten
mkdir -p ~/.local/bin ~/.config/autostart
cp ~/io-darts-agent/scripts/linux/game-display-kiosk.sh ~/.local/bin/
chmod +x ~/.local/bin/game-display-kiosk.sh
cp ~/io-darts-agent/scripts/linux/game-display-kiosk.desktop ~/.config/autostart/
Das Skript nutzt ein eigenes Firefox-Profil in ~/.local/share/game-display-kiosk. Dein normales Firefox-Profil bleibt unberührt. Den Kioskmodus verlässt du mit Alt+F4.
Läuft der Hub auf einem anderen Port oder soll eine andere Seite erscheinen, setze GAME_DISPLAY_URL in der Exec-Zeile von ~/.config/autostart/game-display-kiosk.desktop:
Exec=env GAME_DISPLAY_URL=http://localhost:3001/module-ui/game-display/ sh -c '"$HOME/.local/bin/game-display-kiosk.sh"'
6. Automatische Desktop-Anmeldung einschalten
Der Kiosk startet nach einer Desktop-Anmeldung. Der Board-PC sollte sich deshalb automatisch anmelden.
- Linux Mint: Öffne Anmeldefenster, gehe zu Benutzer und stelle die automatische Anmeldung für deinen Benutzer ein.
- Ubuntu oder Xubuntu mit LightDM: Lege
/etc/lightdm/lightdm.conf.d/50-autologin.confan (ersetzedein-benutzerdurch deinen Benutzernamen):
[Seat:*]
autologin-user=dein-benutzer
Starte neu und prüfe, ob der Hub startet und das Game Display erscheint.
Aktualisieren
Normales Update (Quellcode-Installation und Board-PC)
cd ~/io-darts-agent
git pull
npm run setup
npm run build:app
systemctl --user restart io-darts-agent
Ohne Dienst beendest du den Hub statt der letzten Zeile mit Strg+C und startest ihn mit npm start neu.
Auf einem Board-PC, der vor dem Neustart-Button eingerichtet wurde, kopierst du die Dienstdatei noch einmal, damit der Hub mit IO_DARTS_SUPERVISED=1 läuft (sonst kann Hub neu starten den Neustart nicht an systemd übergeben):
cp scripts/linux/io-darts-agent.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user restart io-darts-agent
npm run build:app entfernt zuerst den alten kompilierten Code in dist/src und dist/modules und baut dann nach dist/, web/dist/ und modules/game-display/web/dist/. Deine Daten in dist/config, dist/data, dist/media und dist/modules_installed bleiben erhalten.
Was du nicht tun darfst
- Lösche niemals
dist/(zum Beispiel mitrm -rf dist) und führe niemalsgit clean -xodergit clean -Xaus.dist/wird von git ignoriert und enthält deine Konfiguration und deine Daten. - Synchronisiere niemals das ganze Verzeichnis mit
rsync --deletevon einem anderen Rechner. Auf der Quelle gibt es dasdist/configdes Ziels und die anderen Laufzeitordner nicht, deshalb löscht--deletedie Laufzeitkonfiguration. Wenn du mit rsync verteilst, nimm die Laufzeitordner aus:
rsync -a --delete \
--exclude node_modules --exclude dist \
./ board-pc:io-darts-agent/
Logs
Mit dem systemd-Dienst:
journalctl --user -u io-darts-agent -f
Ohne Dienst landet das Log im Terminal, in dem npm start läuft. Die Weboberfläche zeigt außerdem eine Log-Ansicht unter Konsole.
Fehlerbehebung
Port 3000 ist schon belegt
Der Hub startet nicht und meldet "address already in use", der Dienst startet immer wieder neu.
ss -ltnp | grep 3000
Beende das andere Programm oder wähle einen anderen Port: Setze server.port in dist/config/hub.config.json (oder unter Einstellungen in der Weboberfläche) und starte den Hub neu. Auf dem Board-PC passt du außerdem die Kiosk-URL an (GAME_DISPLAY_URL, siehe oben).
Die Autodarts-Anmeldung schlägt fehl
Login failed: invalid email or password: Prüfeautodarts.emailundautodarts.passwordindist/config/hub.config.jsonoder unter Einstellungen. Melde dich mit denselben Daten einmal im Browser bei Autodarts an.- Das Konto nutzt Zwei-Faktor-Authentifizierung: wird nicht unterstützt.
- Kein Netz oder DNS beim Booten: Der Dienst wartet, bis
api.autodarts.comauflösbar ist. Prüfe das mitgetent hosts api.autodarts.com. Der Hub wiederholt eine fehlgeschlagene Anmeldung beim Start nicht von selbst. Nachdem das Netz wieder geht, führesystemctl --user restart io-darts-agentaus. - Nach einer Änderung von Zugangsdaten oder Board-ID in der Weboberfläche starte den Hub neu.
Das Game Display bleibt schwarz oder zeigt nichts
- Das Kiosk-Skript wartet, bis der Hub unter der Display-URL antwortet. Öffnet sich Firefox gar nicht, ist der Hub nicht erreichbar. Prüfe
systemctl --user status io-darts-agentund die Logs. - Öffne
http://localhost:3000/module-ui/game-display/von Hand.Module UI not foundheißt, die Oberfläche des Game Displays wurde nicht gebaut: Führenpm run setupundnpm run build:appaus. Wurde der Einrichtungsassistent nie abgeschlossen, bekommt das Display keine Daten. Öffne dannhttp://localhost:3000und schließe ihn ab. - Ist die Modulliste in der Weboberfläche leer, suche im Log nach
Installed built-in moduleoderBuilt-in module not found. Der Hub installiert die mitgelieferten Module nur, wenndist/modules_installed/leer ist. - Eine schwarze Fläche um Animationen statt Transparenz bedeutet, dass ffmpeg fehlt:
sudo apt install ffmpeg. Ohne ffmpeg werden erzeugte Animationen als MP4 ohne Transparenz gespeichert.
Der Darts Caller meldet, dass ElevenLabs nicht konfiguriert ist
Der Darts Caller nimmt den ElevenLabs-Schlüssel aus den KI-Einstellungen. Öffne AI Einstellungen (/ai-settings) in der Weboberfläche, trage den Schlüssel für ElevenLabs ein, aktiviere den Anbieter und starte danach das Modul Darts Caller (oder den Hub) neu.
Deinstallation
Auf dem Board-PC:
systemctl --user disable --now io-darts-agent
rm ~/.config/systemd/user/io-darts-agent.service
systemctl --user daemon-reload
rm ~/.local/bin/game-display-kiosk.sh ~/.config/autostart/game-display-kiosk.desktop
rm -rf ~/.local/share/game-display-kiosk
sudo loginctl disable-linger "$USER" # nur, wenn nichts anderes es braucht
Lass disable-linger weg, wenn weitere Benutzerdienste ohne Anmeldung laufen sollen. Das gilt besonders für den Autodarts-Dienst autodarts.service auf demselben PC: Ohne Linger startet er nach einem Neustart erst, wenn sich jemand anmeldet. Prüfen kannst du das mit systemctl --user list-unit-files --state=enabled.
Den Hub selbst entfernen (das löscht die Konfiguration und alle Daten, bei Bedarf vorher sichern):
rm -rf ~/io-darts-agent
Entferne /etc/lightdm/lightdm.conf.d/50-autologin.conf oder schalte die automatische Anmeldung im Anmeldefenster aus, wenn du sie nicht mehr willst. Node.js, ffmpeg und Firefox kannst du mit apt entfernen, wenn nichts anderes sie nutzt.
Auf anderen Systemen beendest du den Hub und löschst das geklonte Verzeichnis.
Desktop-Pakete
Die Electron-Desktop-App enthält den Hub, die Weboberfläche und die eingebauten Module und braucht auf dem Zielrechner keine eigene Node.js-Installation.
Herunterladen
Fertige Pakete für macOS, Windows und Linux gibt es auf der Releases-Seite. Jeder Release enthält:
| System | Datei |
|---|---|
| macOS, Apple Silicon (M1/M2/M3/…) | IO-Darts-Agent-<Version>-arm64.dmg oder .zip |
| macOS, Intel | IO-Darts-Agent-<Version>-x64.dmg oder .zip |
| Windows x64 | NSIS-Installer IO-Darts-Agent-<Version>-x64-setup.exe oder portable IO-Darts-Agent-<Version>-x64-portable.exe |
| Linux x64 (Desktop) | IO-Darts-Agent-<Version>-x64.deb, .rpm oder .AppImage |
| Linux arm64 (z. B. Raspberry Pi) | IO-Darts-Agent-<Version>-arm64.deb oder .AppImage |
Die Dateinamen folgen durchgehend dem Muster IO-Darts-Agent-<Version>-<Architektur>.<Endung>, mit zwei Ausnahmen bei Windows: Installer und portable Version tragen zusätzlich -setup bzw. -portable vor der Endung, damit sie sich unterscheiden. Für Version 1.0.0 also zum Beispiel:
IO-Darts-Agent-1.0.0-arm64.dmg,IO-Darts-Agent-1.0.0-x64.zipIO-Darts-Agent-1.0.0-x64-setup.exe,IO-Darts-Agent-1.0.0-x64-portable.exeIO-Darts-Agent-1.0.0-x64.deb,IO-Darts-Agent-1.0.0-x64.rpm,IO-Darts-Agent-1.0.0-arm64.AppImage
Die genauen Namen stehen bei den Anhängen des jeweiligen Releases.
Jeder Release enthält außerdem SHA256SUMS.txt mit den Prüfsummen aller Dateien. Lade sie zusammen mit dem gewünschten Paket in denselben Ordner und prüfe:
# Linux
sha256sum -c SHA256SUMS.txt --ignore-missing
# macOS
shasum -a 256 -c SHA256SUMS.txt --ignore-missing
Unsignierte Builds starten
Die Pakete sind nicht signiert, mit einer Ausnahme: Die macOS-arm64-Pakete (.dmg/.zip) sind ad hoc signiert, aber nicht notarisiert. Die macOS-x64-Pakete sind komplett unsigniert. Die Betriebssysteme warnen deshalb beim ersten Start:
- macOS: Rechtsklick auf die App > Öffnen, im Dialog bestätigen. Alternativ im Terminal:
xattr -dr com.apple.quarantine /Applications/IO-Darts-Agent.app. - Windows: SmartScreen zeigt "Der Computer wurde durch Windows geschützt". Auf Weitere Informationen und dann Trotzdem ausführen klicken.
- Linux,
.deb:sudo apt install ./<datei>.deb(löst Abhängigkeiten automatisch auf). - Linux, AppImage: ausführbar machen und starten:
chmod +x IO-Darts-Agent-*.AppImage && ./IO-Darts-Agent-*.AppImage.
Was die App macht
Die Desktop-App startet den Hub im Hintergrund, öffnet die Weboberfläche in einem eigenen Fenster und zeigt ein Tray-Symbol. Schließt du das Fenster, läuft der Hub weiter. Quit im Tray-Menü beendet ihn. Die App schreibt nicht in ihren Installationsordner. Konfiguration, Daten, Medien und installierte Module liegen im App-Datenordner des Benutzers:
| System | Datenordner |
|---|---|
| macOS | ~/Library/Application Support/io-darts-agent/hub |
| Windows | %APPDATA%\io-darts-agent\hub |
| Linux | ~/.config/io-darts-agent/hub |
Die App nutzt Port 3000. Ist der Port belegt, starte sie mit der Umgebungsvariable IO_DARTS_PORT auf einem anderen Port. Der Einrichtungsassistent speichert den Port, auf dem der Hub läuft. Änderst du den Port später in den Einstellungen und startest den Hub neu, folgt die App automatisch.
Selbst bauen
Alternativ zum Download baust du die App selbst aus dem Quellcode, auf der Plattform, für die das Paket gedacht ist (auf dem Build-Rechner ist Node.js 22 nötig):
npm run setup # Abhängigkeiten installieren (Hauptprojekt und Unterpakete)
npm run build:app # Backend, Weboberfläche und Game-Display-UI bauen
npm run dist:mac # oder: npm run dist:linux / npm run dist:win
Die Pakete landen in releases/. npm run dist:* führt build:app selbst noch einmal aus.
Release erstellen (für Maintainer)
- Version setzen:
npm version X.Y.Z --no-git-tag-version, danachpackage.json(undpackage-lock.json) committen. - Tag
vX.Y.Zpushen: von Hand mitgit tag vX.Y.Z && git push origin vX.Y.Z, oder mitscripts/create-release.sh X.Y.Z, das Version setzt, committet, taggt und pusht. - Der Workflow Release (
.github/workflows/release.yml) läuft an: prüft, ob der Tag zurpackage.json-Version passt, führt Lint und Tests aus, baut die Pakete für macOS, Windows und Linux auf GitHub-Runnern und testet jedes gebaute Paket kurz an (Smoke-Test, macOS/Windows/Linux x64). - Nach Abschluss legt der Workflow einen Entwurf in den Releases an, mit allen Paketen,
SHA256SUMS.txtund automatisch erzeugten Notes. Entwurf prüfen (alle Dateien vorhanden, Prüfsummen, Notes sinnvoll) und veröffentlichen.
Ein manuell im Actions-Tab gestarteter workflow_dispatch-Lauf baut testweise, ohne einen Release zu erzeugen, nützlich um die Pipeline ohne neuen Tag zu prüfen.