⚡ Install from the browser · Download 0.4.1 · Release notes · The 236 stations
Released publicly as Open Radio. The published release is 0.4.1 (2026-08-02, qualified on the owner's Core2 v1.0); 0.1, 0.2, 0.2.1 and 0.4 remain downloadable as historical builds, and 0.2.1 is the release that was field-validated across the Core2 line — v1.0, v1.1 and v1.3. Official binaries come only from open-radio.me/core2. Release notes and known limitations: docs/146-release-0-4-1.en.md.
Open Radio is AI-assisted, human-directed and owner-accountable: every public release is gated by executable tests, exact artifact hashes, documented hardware evidence and an explicit known-limitations list.
Open Radio Core2 is a reliability-first, open-source internet-radio cube for M5Stack Core2. It is designed to play Polish stations over Wi-Fi through a remembered Bluetooth speaker, with the built-in speaker as an automatic fallback.
Turn it on and it plays. Daily listening requires no account, phone, project cloud or routine update. A phone is used only when a new Wi-Fi network must be configured through the local device portal.
The radio is designed to:
- remember approved Wi-Fi networks and select one that is reachable,
- reconnect to the last Bluetooth speaker,
- resume the last working station,
- fall back to its built-in speaker,
- recover from Wi-Fi and stream failures without a reboot,
- explain actionable failures in plain language,
- keep its last-known-good catalog and configuration on the device.
It never autojoins unknown or open networks. There is no telemetry, account, automatic OTA, recording, project-operated backend or routine remote catalog. The current device firmware uses optional direct NTP time synchronization only. Any future approximate-location or weather lookup must be bounded and must never become a boot or playback dependency.
Core2 is the target hardware model: M5Stack Core2. It is a technical qualifier, not necessarily the final consumer-facing brand. Keeping it in the working title makes the hardware boundary honest while the final name remains open.
The testable contract is standards-based interoperability with Bluetooth Classic A2DP Sink speakers using SBC. Playback does not require AVRCP or vendor-specific features. Bluetooth LE Audio-only speakers are outside the original ESP32 hardware contract. No claim of universal speaker compatibility will be made before physical qualification.
Sensors are optional, and nothing waits or blinks without them. Plug a supported module into Port A and the cube shows carbon dioxide, temperature, humidity, pressure and a relative figure from the gas element — relative because it only says how far the air has drifted from what the sensor grew used to in this room. The thresholds carry published sources, and alerts are quiet by default.
Environmental readings come from optional, user-installed sensors and are informational. This is NOT a carbon-monoxide, smoke or gas-leak detector: its gas element answers many different substances with a single number and cannot identify any of them. Fit certified detectors for those hazards.
The device holds nine station slots, and you pick those nine yourself from a built-in directory of 236 Polish stations — each verified by a real connection and measured under load — at first power-on and any time later through the phone console (QR). Browse the full directory at open-radio.me/en/stations.
The factory default nine (used until you choose your own): RMF FM, Radio ZET, TOK FM, Antyradio, Radio ESKA, RMF MAXX, Radio Plus, Złote Przeboje and Meloradio.
Every directory entry ships with an MP3 playback path in the public source lane. The private hardware-lab lane can retain an AAC fallback for diagnosis, but AAC and HLS remain outside a public binary until separate legal, transport and resource gates pass. The project does not proxy, rebroadcast or record station audio and does not imply broadcaster endorsement.
- M5Stack Core2 with ESP32-D0WDQ6-V3 — field-validated on hardware revisions v1.0 (AXP192), v1.1 (AXP2101) and v1.3 with the same image; every new Core2 revision joins the release test matrix as soon as it is available
- 16 MB flash and 8 MB PSRAM
- 320×240 touch display
- built-in I2S speaker and internal battery
- continuous USB-C power from a power bank
- Bluetooth Classic A2DP Source output
The public release is 0.4.1, published 2026-08-02 and flashed to the device it ships to from an erased flash: nine tile logos out of nine, Bluetooth paired from an empty configuration, and a speaker power-cycle recovered on the first attempt. It fixes a tile that replayed the station it used to hold and moves the catalogue to 236. What was not tested is listed in the release notes beside what was. 0.2.1 remains downloadable and was confirmed by an external user on a factory-fresh Core2 v1.1. The historical note below about a failed 60-minute run describes an older pre-release lab image.**
Available now:
- exact 320×240 light and dark GUI previews,
- full and minimal now-playing layouts,
- local settings, screensavers and screen-off policy,
- local Wi-Fi onboarding with multiple secured profiles and bounded recovery,
- executable MP3 resolver paths for all nine current catalog entries,
- built-in-speaker playback routing and automatic model-agnostic discovery of Classic Bluetooth audio-rendering devices, with one approved peer remembered by address through the bounded pairing/link flow,
- up to eight automatically selected approved Wi-Fi profiles plus a two-touch full local-data reset,
- host-side renderer, persistence and firmware-contract tests,
- reproducible firmware source, guarded exact-image restore and hardware evidence capture.
Measured on the 0.2.1 release line, which is still the only release with evidence from more than one unit:
- release-day smoke on the owner's Core2 v1.0, an independent field install on a factory-fresh v1.1, and a customer confirmation on v1.3 — the whole hardware line covered by the same image,
- all nine station logos fetched in a single pass, first audio ≈1.2 s after the network, the remembered speaker back in ≈3.1 s, zero underruns at start,
- battery, owner-measured: about 2.5 hours of typical playback, close to three in favourable conditions (draw ~140 mA, ~190 mA at peaks; screen dimming changes little),
- Xiaomi Sound Pocket remains the Classic A2DP/SBC reference speaker.
Earlier lab captures — including a failed pre-release 60-minute run — are preserved as dated history in STATUS.md.
Still open on the release line:
- forced-recovery cycles (Wi-Fi, stream, speaker) and the long endurance soak, with SD and power-bank behavior,
- additional Classic Bluetooth A2DP/SBC speaker interoperability,
- DRAM headroom during Bluetooth dialing (a ~5 KB dip stays on watch),
- the setup-portal browse cap and search placement — scheduled for 0.2.2 (docs/117),
- final enclosure fit.
The public MP3-only lane is the released lane: 0.4.1, 0.4 and 0.2.1 all reproduce byte-for-byte outside its provenance stamp when the documented build parameters are honored (see REPRODUCIBILITY.md). Endurance items above stay open and are listed honestly in the release notes.
Detailed engineering evidence is maintained in STATUS.md.
From the repository root:
npm run simulatorOpen http://127.0.0.1:4173/gui-lab/ for the canonical device emulator. It has
one visible 320×240 canvas, no renderer tabs and no zoom control. Every visible
device pixel comes from the same C++ RGB565 renderer linked into the Core2
target, including the bundled Inter 600 atlas and compiled icon masks. The 26
screens produce 104 deterministic PL/EN and Light A/Dark B variants.
The canvas proves the logical framebuffer and interaction flow, not the physical two-inch size, IPS color, brightness, touch calibration or real-device readability. Those remain hardware measurements. The separate recovery and onboarding simulators remain engineering tools outside the device emulator. See the corrected emulator pixel-parity audit.
Read USER-GUIDE.md for first start, daily controls, display settings, recovery behavior, privacy and known limitations.
npm run checkThe complete host gate validates contracts, generated files, documentation parity, renderer determinism, firmware-host behavior and source reproducibility. Device backup, flash, erase and monitor commands remain outside this command.
- USER-GUIDE.md — user flow and controls
- CONTRIBUTING.md — contribution rules
- STATUS.md — measured project state and open risks
- docs/66-pixel-perfect-gui-system.en.md — GUI contract
- docs/75-hardware-arrival-handoff.en.md — first physical session
- docs/86-emulator-pixel-parity-audit.en.md — exact preview scale and firmware-parity limits
- docs/88-final-pre-hardware-audit.en.md — final software verdict and hardware-day checklist
- docs/85-novice-ux-public-readiness-audit.en.md — novice UX and public-readiness audit
Historical loop reports remain under docs/ as engineering evidence, not as
the recommended starting point for users.
Founder and original author: Tomasz Fiedoruk — fiedoruk.pl.
Software is licensed under GPL-3.0-or-later, original documentation and
artwork under CC BY-SA 4.0, and catalog data under CC0-1.0. Official station
logos are not bundled without documented permission. Public firmware releases
(0.1, 0.2, 0.2.1, 0.4 and the current 0.4.1) ship from fiedoruk.pl/os/; the
corresponding-source archive for the current release is published alongside
the binary, and each release records its provenance in a release manifest.




