{
  "schema": 1,
  "product": "miblo",
  "version": "1.23.0",
  "date": "2026-10-08",
  "notes": "# Miblo 1.23.0\n\n- **Confirm on your phone, with the code your computer shows (Miblo+):** turning on approvals, replies, history or new tasks, adding a task folder, or a longer wait or task limit no longer asks for the code on your Miblo's screen. Your computer (the terminal or the Miblo app) shows a 6-digit code; open the Miblo app on a phone you already use, check what it turns on, type the code and confirm with the phone's passkey (Face ID, Touch ID, fingerprint or PIN). Nothing changes before that. Three wrong codes cancel the request, and at most 6 can be asked in an hour. `miblo plus confirm status` shows the waiting one and `miblo plus confirm cancel` withdraws it. Turning things off still applies at once.\n- **A new phone types the code, not your computer:** when a phone signs in to your Miblo account, your computer shows a 6-digit code (in `miblo phone pending`, the Miblo app and the notification) and you type it on the new phone. The code never travels: phone and computer run a password-authenticated key exchange over it, so not even the relay or our servers can learn it or answer in the phone's place. Three wrong answers turn the phone away. On Miblo+, if this computer already has a phone with a passkey, you also confirm the new one there. `miblo phone approve --code` is gone; `miblo phone deny <id>` still turns a phone away.\n- **One passkey per phone:** a phone that already has a Miblo passkey reuses it (after asking once) instead of making a new one each time it joins a computer.\n- **Approvals can wait up to an hour:** a permission prompt now waits for your phone from 15 seconds up to 1 hour (`miblo plus timeout <15-3600>`, or the choices in the Miblo app), and the card on the phone counts down in minutes and hours.\n- **Miblo app 1.5.0:** shows the confirmation code on screen while your phone confirms a change, shows the new phone's code to type on it, and says which account this computer is signed in to (\"Connected as <email>\") with **Sign out** right there.\n- **Security notices by e-mail:** every use of a recovery (emergency) code, wrong or locked-out attempts at one (at most one e-mail an hour), every new passkey added to your account and every phone added with a new passkey send a security notice e-mail (a self-hosted relay sends no e-mails), so you know at once if someone else tries.\n- **Fixes:**\n  - The approval card on the phone follows the wait set on the computer instead of stopping at 2 minutes.\n  - Long waits no longer cut a permission prompt off after 5 minutes.\n\n## Security audit\n\n- The Miblo+ confirmation screen on the phone now shows exactly what will be switched on: the computer builds that text from the settings it will apply, and the settings are checked again when applied, so another program on the computer cannot show one thing and change another.\n- Computer folder names and phone names are refused when they carry hidden or direction-changing characters.",
  "assets": [
    {
      "name": "miblo-geekmagic_ultra-1.23.0.bin",
      "kind": "firmware",
      "board": "geekmagic_ultra",
      "path": "firmware/1.23.0/miblo-geekmagic_ultra-1.23.0.bin",
      "size": 886368,
      "sha256": "07d06b4f1d76814dfae3866d4a4718c7389fa2b3916d3d1ab486ca7cc2c817cd"
    },
    {
      "name": "miblo-loader-geekmagic_ultra-1.23.0.bin",
      "kind": "loader",
      "board": "geekmagic_ultra",
      "path": "firmware/1.23.0/miblo-loader-geekmagic_ultra-1.23.0.bin",
      "size": 313184,
      "sha256": "df6fa3f5f55b18f5557021482a5e0d3fa29966670bfb8344c71a064aa2d86fed"
    },
    {
      "name": "miblo-plugin-1.23.0.zip",
      "kind": "plugin",
      "path": "plugin/miblo-plugin-1.23.0.zip",
      "size": 430533,
      "sha256": "13ace0363a921bebf53cbdf140ae1daa162d80f613f4ac4ea9756b689fbcf034"
    },
    {
      "name": "Install-Miblo-macOS.zip",
      "kind": "installer",
      "path": "installers/1.23.0/Install-Miblo-macOS.zip",
      "size": 19856,
      "sha256": "9713d077cd99f0f32db092b069c5c9dcc68976e1dff939a51f5286b3a6647271"
    },
    {
      "name": "install.ps1",
      "kind": "installer",
      "path": "installers/1.23.0/install.ps1",
      "size": 68152,
      "sha256": "298a78e9c6c1286a419d070fd37b14731c1d796992bd13e1d89732b1c5e4d7bc"
    },
    {
      "name": "install.sh",
      "kind": "installer",
      "path": "installers/1.23.0/install.sh",
      "size": 63480,
      "sha256": "85f728e771a85e1b67bbb2d14400bc671a05a874f4fba48df8ade16cb2476f0d"
    }
  ]
}
