Repository navigation
ROMarr v1.6.0 — real RetroArch, over the interface RetroArch actually has.
RetroArch Network Control Interface (#65). The "headless RetroArch stream server" ROMarr used to talk to answered GET /api/play/route — an HTTP endpoint no release of RetroArch has ever had. Real RetroArch exposes the Network Control Interface: UDP, port 55355, plain-text commands (network_cmd_enable = "true" in retroarch.cfg). ROMarr now speaks it.
RetroArchNCIduck-types the existing stream-server slot and ridesStreamSourcesbetween the HTTP server and Moonlight in confidence order — the old StreamServer still works for whoever's custom streamer answers it; nothing was deleted.- Read-only, enforced at the wire: the single send path allowlists
VERSION,GET_STATUS,GET_CONFIG_PARAMand raises on anything else —LOAD_COREcan never leave this class, and a test scans every datagram a full probe sends to prove it. - Honest about what NCI cannot say. It has no installed-core list (upstream's
LIST_CORESis post-1.19.1 and deliberately unused), so: a loaded game'ssystem_idproves that platform streams; everything else answers unknown, never "no" — with operator-readable wording, including the UDP ambiguity (silent host = down, firewalled, or NCI off; ICMP refusal gets its own sentence naming the fix).GET_STATUSparsing verified against RetroArch v1.19.1'scommand.cand master's crc32-less shape, including commas inside basenames. - Config:
RETROARCH_NCI_HOST/RETROARCH_NCI_PORT(default 55355), a General-page status row, docs in README/INSTALL/docker-compose. The breaker + TTL discipline carries over: only successes are cached, an optional feature never hangs a page.
63 new tests on an injected fake UDP transport (no sockets). Full suite: 2345 passed, 3 skipped.