# v0.3.1 **Released:** 2026-06-08 Changes since v0.3.0 (`20712bf`..`efc2941`). ## Bug Fixes - **Firefox on macOS opened a blank window** (PR #92 by @matheus-rodrigues00, follow-up to #86): The macOS `.app` bundle lookup added in v0.3.0 reached Firefox correctly, but `fed` then opened it with `--ssb=` — a long-removed Firefox flag — which silently swallowed the URL and produced a blank window. Now uses `--new-window `, passing the URL as a separate positional argument. Firefox stays a supported, auto-detected browser; detection order, the `FRANKMD_BROWSER` override, and Chromium/Brave/Chrome/Edge behavior are untouched. Firefox opens as a regular browser window (it has no Chromium-style app-window mode) — README updated accordingly. ## Infrastructure - **Multi-arch Docker images** (PR #91 by @CaTeIM, closes #90): New `.github/workflows/docker-publish.yml` builds and pushes `akitaonrails/frankmd` as a multi-arch manifest (`linux/amd64` + `linux/arm64`) on every `v*` tag push and on manual `workflow_dispatch`. Previously `:latest` was amd64-only, which made the container fail at startup on ARM hosts (Raspberry Pi, Orange Pi, Ampere VPS) with `exec format error`. Requires `DOCKERHUB_USERNAME` and `DOCKERHUB_TOKEN` repository secrets to be set. ## Notes for Self-Hosters - `:latest` is now multi-arch — `docker pull akitaonrails/frankmd:latest` works transparently on both amd64 and arm64. - If you previously worked around the regression by setting `FRANKMD_BROWSER` to a Chromium-based browser, you can drop the override — Firefox now works too (in a regular window). ## Test Coverage - 449 Ruby tests, 1,393 JavaScript tests (1,842 total) — unchanged from v0.3.0.