Skip to content

Releases: mcereal/mesh-client

v2.74.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 19:25

2.74.0 (2026-09-30)

Features

  • a silent radio's chosen board can take Meshtastic instead of MeshCore (1605692)
  • app: keep the lifetime stats (693bad4)
  • backup: back up a MeshCore radio, contacts and all (2c223d8)
  • backup: compare two backups of a radio, and list and remove them on the card (433e331)
  • backup: keep a radio's settings on the card, starting with Meshtastic (ac48b3a)
  • backup: plan a Meshtastic restore and send it as one edit transaction (6a5aa73)
  • backups: carry a radio's identity key in a backup asked for with it (a4184a5)
  • backups: restore a MeshCore radio from a backup and check it took (500960b)
  • backups: restore a MeshCore radio's contacts from a backup (e6fd5ea)
  • backups: restore a Meshtastic radio from a backup and check it took (e340447)
  • backup: take backups on first connect, before writes and firmware, and on request (0c38aa7)
  • install MeshCore onto a radio that answers nothing on USB (3558be1)
  • lifetime: count what the client has seen across every run and radio (fe07e96)
  • map: draw every installed pack as one map (d8f3588)
  • map: draw past a pack's deepest level by enlarging its tiles (f6b8338)
  • maps: download map packs from the catalog, in resumable pieces (7e9a9a5)
  • maps: download, update and delete map packs from Settings > Maps (99624a7)
  • maps: hold a catalog of every country (c53bd5e)
  • meshcore: plan a restore of a radio's settings from a backup (1d36cfe)
  • meshcore: send a repeater commands and ask it for its neighbours (0326066)
  • messages: name a sender in the tint their avatar wears (4fe66a3)
  • move a MeshCore radio on its cable to the Bluetooth build (0666796)
  • nodes: badge the Nodes tab and announce newly discovered nodes (e3fcc15)
  • nodes: stand a node's facts in two columns where there is room (6fc3154)
  • pair a radio moved to Bluetooth with the PIN it kept (1ee9829)
  • profiles: make a profile from a backup, apply it, and carry it as a .cfg (acad52b)
  • profiles: make, list, compare, apply and share profiles on screen (2d2dc79)
  • send a crash report to Sentry when the user asks (eae7e59)
  • session: announce messages and nodes as they are recorded (356d855)
  • set a MeshCore radio's Bluetooth PIN from Settings (709cbac)
  • split: preview the row under the list's cursor beside it (0e3a213), closes mcereal/inkcell#84
  • stats: count delivered and undelivered messages (78813eb)
  • stats: count MQTT and private messages, and record the farthest node heard and weakest signal (1a3caf3)
  • stats: name who set each record, and when (95e52ed)
  • status: show how many nodes this client has ever heard (cb577e5)
  • ui: a MeshCore repeater's thread is its console, and its sheet asks for neighbours (75a1c0c)
  • ui: a side rail the reader folds to icons or unfolds into labelled tabs (fb17e67)
  • ui: a Stats page for the lifetime counts (f33d4b1)
  • ui: a window's cursor, hover, sidebar clicks and a message field (ee44047)
  • ui: carry the whole node roster in the Nodes list (a5bb507)
  • ui: centre a split frame's empty detail, and ring one place while typing (37d78b9)
  • ui: dock the keyboard under the thread on a wide frame (ac7cd54)
  • ui: give the map and the waypoints a tab of their own (948ec81)
  • ui: head a direct conversation with the peer's long name (01b9419)
  • ui: lay the tapback sheet out as a row of faces over a delete button (bfc1ade)
  • ui: list, open, compare and delete the radios' backups on the card (92851bd)
  • ui: open a node's detail on its signal and battery (3cdad96)
  • ui: put the Nodes list's search, filter and sort on one chip bar (ed3bc2c)
  • ui: say a radio-reported switch as a state, not a control (8603df6)
  • ui: stop heading our own channel bubbles with "You" (2168e19)
  • ui: take inkcell's vector emoji (8dab891)
  • ui: use a wide window's room on the Status and Map tabs (1076ce3)

Bug Fixes

  • a PIN typed over a pending Random makes MeshCore pairing Fixed (ac22b08)
  • actions: name A on a Radio page only when the row is a verb (74833cb)
  • admin: stop an edit transaction whose begin fails, and count a refused commit (d26d82b)
  • an erased MeshCore PIN takes its Fixed edit with it (40129d1)
  • app: count the attached radio again after a stats reset (e024fc1)
  • app: size the BLE handoff addresses by INKWELL_BLE_ADDRESS_MAX (da3a791)
  • backup: compare what a MeshCore radio advertises itself as (cf490e6)
  • backup: keep every contac...
Read more

v2.74.0-rc.3

v2.74.0-rc.3 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Sep 17:17
40345ba

2.74.0-rc.3 (2026-09-30)

Bug Fixes

  • macos: resolve without forking, and upload a dSYM (b7b7c61)

v2.74.0-rc.2

v2.74.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Sep 15:31
edc813f

2.74.0-rc.2 (2026-09-30)

Bug Fixes

  • ui: handle wheel scrolling across list routes (1aa5467)
  • ui: retain wheel key fallback without row targets (913d92f)
  • ui: scroll visible lists with the Windows mouse wheel (2a16214)

v2.74.0-rc.1

v2.74.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Sep 12:34
9a0bc30

2.74.0-rc.1 (2026-09-30)

Features

  • a silent radio's chosen board can take Meshtastic instead of MeshCore (1605692)
  • app: keep the lifetime stats (693bad4)
  • backup: back up a MeshCore radio, contacts and all (2c223d8)
  • backup: compare two backups of a radio, and list and remove them on the card (433e331)
  • backup: keep a radio's settings on the card, starting with Meshtastic (ac48b3a)
  • backup: plan a Meshtastic restore and send it as one edit transaction (6a5aa73)
  • backups: carry a radio's identity key in a backup asked for with it (a4184a5)
  • backups: restore a MeshCore radio from a backup and check it took (500960b)
  • backups: restore a MeshCore radio's contacts from a backup (e6fd5ea)
  • backups: restore a Meshtastic radio from a backup and check it took (e340447)
  • backup: take backups on first connect, before writes and firmware, and on request (0c38aa7)
  • install MeshCore onto a radio that answers nothing on USB (3558be1)
  • lifetime: count what the client has seen across every run and radio (fe07e96)
  • map: draw every installed pack as one map (d8f3588)
  • map: draw past a pack's deepest level by enlarging its tiles (f6b8338)
  • maps: download map packs from the catalog, in resumable pieces (7e9a9a5)
  • maps: download, update and delete map packs from Settings > Maps (99624a7)
  • maps: hold a catalog of every country (c53bd5e)
  • meshcore: plan a restore of a radio's settings from a backup (1d36cfe)
  • meshcore: send a repeater commands and ask it for its neighbours (0326066)
  • messages: name a sender in the tint their avatar wears (4fe66a3)
  • move a MeshCore radio on its cable to the Bluetooth build (0666796)
  • nodes: badge the Nodes tab and announce newly discovered nodes (e3fcc15)
  • nodes: stand a node's facts in two columns where there is room (6fc3154)
  • pair a radio moved to Bluetooth with the PIN it kept (1ee9829)
  • profiles: make a profile from a backup, apply it, and carry it as a .cfg (acad52b)
  • profiles: make, list, compare, apply and share profiles on screen (2d2dc79)
  • send a crash report to Sentry when the user asks (eae7e59)
  • session: announce messages and nodes as they are recorded (356d855)
  • set a MeshCore radio's Bluetooth PIN from Settings (709cbac)
  • split: preview the row under the list's cursor beside it (0e3a213), closes mcereal/inkcell#84
  • stats: count delivered and undelivered messages (78813eb)
  • stats: count MQTT and private messages, and record the farthest node heard and weakest signal (1a3caf3)
  • stats: name who set each record, and when (95e52ed)
  • status: show how many nodes this client has ever heard (cb577e5)
  • ui: a MeshCore repeater's thread is its console, and its sheet asks for neighbours (75a1c0c)
  • ui: a side rail the reader folds to icons or unfolds into labelled tabs (fb17e67)
  • ui: a Stats page for the lifetime counts (f33d4b1)
  • ui: a window's cursor, hover, sidebar clicks and a message field (ee44047)
  • ui: carry the whole node roster in the Nodes list (a5bb507)
  • ui: centre a split frame's empty detail, and ring one place while typing (37d78b9)
  • ui: dock the keyboard under the thread on a wide frame (ac7cd54)
  • ui: give the map and the waypoints a tab of their own (948ec81)
  • ui: head a direct conversation with the peer's long name (01b9419)
  • ui: lay the tapback sheet out as a row of faces over a delete button (bfc1ade)
  • ui: list, open, compare and delete the radios' backups on the card (92851bd)
  • ui: open a node's detail on its signal and battery (3cdad96)
  • ui: put the Nodes list's search, filter and sort on one chip bar (ed3bc2c)
  • ui: say a radio-reported switch as a state, not a control (8603df6)
  • ui: stop heading our own channel bubbles with "You" (2168e19)
  • ui: take inkcell's vector emoji (8dab891)
  • ui: use a wide window's room on the Status and Map tabs (1076ce3)

Bug Fixes

  • a PIN typed over a pending Random makes MeshCore pairing Fixed (ac22b08)
  • actions: name A on a Radio page only when the row is a verb (74833cb)
  • admin: stop an edit transaction whose begin fails, and count a refused commit (d26d82b)
  • an erased MeshCore PIN takes its Fixed edit with it (40129d1)
  • app: count the attached radio again after a stats reset (e024fc1)
  • app: size the BLE handoff addresses by INKWELL_BLE_ADDRESS_MAX (da3a791)
  • backup: compare what a MeshCore radio advertises itself as (cf490e6)
  • backup: keep ev...
Read more

v2.74.0-beta.1

v2.74.0-beta.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Sep 00:11
2723c4c

2.74.0-beta.1 (2026-09-30)

Features

  • a silent radio's chosen board can take Meshtastic instead of MeshCore (1605692)
  • app: keep the lifetime stats (693bad4)
  • backup: back up a MeshCore radio, contacts and all (2c223d8)
  • backup: compare two backups of a radio, and list and remove them on the card (433e331)
  • backup: keep a radio's settings on the card, starting with Meshtastic (ac48b3a)
  • backup: plan a Meshtastic restore and send it as one edit transaction (6a5aa73)
  • backups: carry a radio's identity key in a backup asked for with it (a4184a5)
  • backups: restore a MeshCore radio from a backup and check it took (500960b)
  • backups: restore a MeshCore radio's contacts from a backup (e6fd5ea)
  • backups: restore a Meshtastic radio from a backup and check it took (e340447)
  • backup: take backups on first connect, before writes and firmware, and on request (0c38aa7)
  • install MeshCore onto a radio that answers nothing on USB (3558be1)
  • lifetime: count what the client has seen across every run and radio (fe07e96)
  • map: draw every installed pack as one map (d8f3588)
  • map: draw past a pack's deepest level by enlarging its tiles (f6b8338)
  • maps: download map packs from the catalog, in resumable pieces (7e9a9a5)
  • maps: download, update and delete map packs from Settings > Maps (99624a7)
  • maps: hold a catalog of every country (c53bd5e)
  • meshcore: plan a restore of a radio's settings from a backup (1d36cfe)
  • meshcore: send a repeater commands and ask it for its neighbours (0326066)
  • messages: name a sender in the tint their avatar wears (4fe66a3)
  • move a MeshCore radio on its cable to the Bluetooth build (0666796)
  • nodes: badge the Nodes tab and announce newly discovered nodes (e3fcc15)
  • nodes: stand a node's facts in two columns where there is room (6fc3154)
  • pair a radio moved to Bluetooth with the PIN it kept (1ee9829)
  • profiles: make a profile from a backup, apply it, and carry it as a .cfg (acad52b)
  • profiles: make, list, compare, apply and share profiles on screen (2d2dc79)
  • send a crash report to Sentry when the user asks (eae7e59)
  • session: announce messages and nodes as they are recorded (356d855)
  • set a MeshCore radio's Bluetooth PIN from Settings (709cbac)
  • split: preview the row under the list's cursor beside it (0e3a213), closes mcereal/inkcell#84
  • stats: count delivered and undelivered messages (78813eb)
  • stats: count MQTT and private messages, and record the farthest node heard and weakest signal (1a3caf3)
  • stats: name who set each record, and when (95e52ed)
  • status: show how many nodes this client has ever heard (cb577e5)
  • ui: a MeshCore repeater's thread is its console, and its sheet asks for neighbours (75a1c0c)
  • ui: a side rail the reader folds to icons or unfolds into labelled tabs (fb17e67)
  • ui: a Stats page for the lifetime counts (f33d4b1)
  • ui: a window's cursor, hover, sidebar clicks and a message field (ee44047)
  • ui: carry the whole node roster in the Nodes list (a5bb507)
  • ui: centre a split frame's empty detail, and ring one place while typing (37d78b9)
  • ui: dock the keyboard under the thread on a wide frame (ac7cd54)
  • ui: give the map and the waypoints a tab of their own (948ec81)
  • ui: head a direct conversation with the peer's long name (01b9419)
  • ui: lay the tapback sheet out as a row of faces over a delete button (bfc1ade)
  • ui: list, open, compare and delete the radios' backups on the card (92851bd)
  • ui: open a node's detail on its signal and battery (3cdad96)
  • ui: put the Nodes list's search, filter and sort on one chip bar (ed3bc2c)
  • ui: say a radio-reported switch as a state, not a control (8603df6)
  • ui: stop heading our own channel bubbles with "You" (2168e19)
  • ui: take inkcell's vector emoji (8dab891)
  • ui: use a wide window's room on the Status and Map tabs (1076ce3)

Bug Fixes

  • a PIN typed over a pending Random makes MeshCore pairing Fixed (ac22b08)
  • actions: name A on a Radio page only when the row is a verb (74833cb)
  • admin: stop an edit transaction whose begin fails, and count a refused commit (d26d82b)
  • an erased MeshCore PIN takes its Fixed edit with it (40129d1)
  • app: count the attached radio again after a stats reset (e024fc1)
  • app: size the BLE handoff addresses by INKWELL_BLE_ADDRESS_MAX (da3a791)
  • backup: compare what a MeshCore radio advertises itself as (cf490e6)
  • backup: kee...
Read more

v2.73.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 18:06

2.73.0 (2026-09-27)

Features

  • a full-screen radio firmware install screen (8a33501)
  • a status dot and traffic arrows on the footer's link line (2399e20)
  • add a heard MeshCore node as a contact (60596e3)
  • add a MeshCore contact from the signed card the MeshCore app shares (004705b)
  • app: ask a serial or network link which protocol it speaks (51c5ca6)
  • app: connect to MeshCore companion radios (40d7d08)
  • ask a MeshCore contact for its readings (b2c2207)
  • ask a MeshCore repeater or room server for its status (7ed7049)
  • check and install a MeshCore radio's firmware from MeshCore's own releases (948827a)
  • core: a session model another protocol can fill (1cdffbe)
  • core: MeshCore settings - read, write, refresh and reboot (934384a)
  • core: MeshCore's companion conversation (15af741)
  • edit MeshCore channels - a name, a 16-byte key, and clearing a slot (fcf45bf), closes #name
  • install a MeshCore nRF52 over USB by the 1200-baud touch (d9de84c)
  • log in to a MeshCore repeater or room server (33974b3)
  • MeshCore contacts - remove one, and advertise this radio (1ac3542)
  • MeshCore's other parameters - location in adverts, who may request readings, auto-add, multi-acks (d7954c4)
  • messages: ring the focused bubble (b29a8d0)
  • pin a MeshCore contact as the radio's favourite (481c2a2)
  • proto: MeshCore's companion framing and BLE profile (5839b7a)
  • settings: set the client's own section apart from the radio's (d5d57ab)
  • share and add MeshCore contacts by the MeshCore app's link (b9323d6)
  • share and join MeshCore channels by the MeshCore app's link (8c752a1)
  • switch a board between Meshtastic and MeshCore over USB (8056ae3)
  • the 1200-baud touch on the Brick, through usbfs (037aa65)
  • trace the route to a MeshCore contact with its path discovery (759f9dd)
  • ui: add a text size setting to About (cfed5a7)
  • ui: B held goes back to the top of the tab (8685f07), closes mcereal/inkcell#59
  • ui: connect from the empty Messages tab (1e8c646)
  • ui: dim the LoRa rows the preset setting makes the radio ignore (4ac2684)
  • ui: Find on the Nodes list, and a header a line shorter (6cb8b7f)
  • ui: gate Meshtastic-only verbs on the protocol's features (287b707)
  • ui: guard one-press sends and disconnects, keep notices, page flat lists (9384503)
  • ui: jump to the first unread message and the newest with L2/R2 in a thread (155a1fe)
  • ui: keep a draft as a quick reply from the compose sheet (879e42f)
  • ui: MeshCore's settings on the Settings and Radio tabs (425b657)
  • ui: rule the charts at round values and wash under a node's line (0b94c75)
  • ui: set the compose sheet as a grouped list with a quick-replies heading (b930704)
  • ui: size the desktop window for its display (380f54d)
  • ui: the keyboard's triggers move the caret (4db32d9), closes mcereal/inkcell#59
  • ui: type a node search into the heading, with a live match count (b8ba1be)
  • update an ESP32 over a USB cable through its ROM bootloader (3843a48)

Bug Fixes

  • a cancelled ROM write pulses a reset out on the way (555a17e)
  • a dispatched action is wiped once handled, and a masked caret at the start stays there (6c7a359)
  • a failed ROM write resets the chip back into its app before closing (28a400c)
  • a masked MeshCore password's counter counts the bytes it really is (1aea446)
  • a MeshCore add's OK does not write over another key heard meanwhile under the same number (22fef00)
  • a MeshCore answer is its build's; the handover holds a radio to its name; any known ESP chip (3ef3851)
  • a MeshCore answer that came straight back is drawn as a way back (ad7b8fe)
  • a MeshCore channel is editable only once this handshake read it, and a chosen zero key is a key (37de8be)
  • a MeshCore contact brought back by the radio's OK is heard as of the OK (5399e53)
  • a MeshCore contact brought back without network time is stamped by the radio's clock (b2eb408)
  • a MeshCore contact leaves the list when the radio agrees, and only a contact offers Remove (df88648)
  • a MeshCore contact link is checked against adds still waiting, not only the roster (d16412d)
  • a MeshCore contact link whose key starts as another node's is refused, not stored over it (ddeb245)
  • a MeshCore contact the radio accepted is stored from the record sent, even if the roster let it go meanwhile (7d4324c)
  • a MeshCore contact the radio dropped is no longer pinned, and Pin is not named over this radio itself (bca9e8e)
  • a MeshCore favourite's write runs where its lookup stood, and the list names Pin only over a pinnable row ([ace11d1](https://github.com/mcereal/mesh-client/comm...
Read more

v2.73.0-beta.1

v2.73.0-beta.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Sep 11:54
bdf3047

2.73.0-beta.1 (2026-09-26)

Features

  • messages: ring the focused bubble (b29a8d0)
  • settings: set the client's own section apart from the radio's (d5d57ab)
  • ui: add a text size setting to About (cfed5a7)
  • ui: B held goes back to the top of the tab (8685f07), closes mcereal/inkcell#59
  • ui: dim the LoRa rows the preset setting makes the radio ignore (4ac2684)
  • ui: Find on the Nodes list, and a header a line shorter (6cb8b7f)
  • ui: jump to the first unread message and the newest with L2/R2 in a thread (155a1fe)
  • ui: keep a draft as a quick reply from the compose sheet (879e42f)
  • ui: size the desktop window for its display (380f54d)
  • ui: the keyboard's triggers move the caret (4db32d9), closes mcereal/inkcell#59
  • ui: type a node search into the heading, with a live match count (b8ba1be)

Bug Fixes

  • help: describe the Nodes list's default order as it is (579bf23)
  • nodes: make node detail read less like a protocol dump (b25a95d)
  • nodes: round coordinates for every stated precision, not only the table's (3564cb6)
  • nodes: shorten the empty Waypoints row (3266565)
  • ui: a security prompt over the Find keyboard is drawn, not the search (9a228cb)
  • ui: colour a device's disc only when the colour means something (268831c)
  • ui: count conversations, not rows, and say when one is empty (8e13fe2)
  • ui: keep an unsent draft with the conversation it was written for (6d193f6)
  • ui: label our own bubbles "You" rather than "sent" (4df2034)
  • ui: name no keycap an empty thread or a one-row picker cannot use (7063d5f)
  • ui: name only the presses that work, and give the empty Nodes tab a way out (4b911f0)
  • ui: name the answer A gives in a confirm dialog (d91b0b6)
  • ui: offer X delete only on a conversation row (929fc7b)
  • ui: say it in the reader's terms on the node detail and three other screens (77233cf), closes #Trail
  • ui: step the text size from a window's display-sized scale (d316df5)

Documentation

  • cli: the window's scale and size are the display's (6a86bb9)
  • refresh the listing screenshots (603ba50)

v2.72.0

Choose a tag to compare

@github-actions github-actions released this 25 Sep 19:12

2.72.0 (2026-09-25)

Features

  • ble: Bluetooth on macOS, over inkwell's CoreBluetooth backend (e86a153), closes mcereal/inkwell#12
  • ble: wait on FromNum's subscribe across turns instead of in the connect (6bcf398)
  • build, test and run the UI natively on macOS (d12166f), closes inkwell#10 inkcell#28
  • devices: honest signal readings, a visible auto-connect radio, safer radio switches (4cbcb9a), closes mcereal/inkwell#39
  • firmware: install nRF52 radios over BLE through their DFU bootloader (6cc8b53)
  • focus: a dialog's answers are reached by where they are, not by counting (9f83bbd), closes mcereal/inkcell#19
  • help: the notes are a body in pixels, under a heading that collapses (1ccfebf)
  • lists: the body travels between windows instead of flicking (9b2484c)
  • overlays: the two questions arrive on layers, over what they are about (af2a001)
  • release: app icon for the macOS and Windows installs (abcfbd0)
  • release: ship a macOS .dmg and a Windows installer (2962f42)
  • serial: find USB serial ports on macOS (7def11d)
  • settings: a row's gutter says how it is changed, not just that it can be (726687b), closes inkcell#3
  • sheets: a node's verbs and a message's faces come up over what they are about (b7bca59)
  • ui: a one-row footer - the screen's verbs and the link, nothing the chrome already says (81b932e)
  • ui: a right-click on a row opens its menu (20d686b)
  • ui: a window's action bar is a toolbar, and back is the arrow (3a73660), closes mcereal/inkcell#36
  • ui: bind desktop shortcuts to commands (562e2b3)
  • ui: draw the focus ring and lift the focused row instead of filling it (a68d642)
  • ui: drive the running client by its keys and look at what it drew (24818d0), closes inkcell#30
  • ui: follow inkcell onto a proportional face (fe34156)
  • ui: leave the on-screen keyboard grid out of a desktop window (42276a8)
  • ui: merge Devices and Status into one Radio tab (c23f673)
  • ui: MESHCLIENT_UI_BACKEND=sdl draws the UI in a window (ec9be92)
  • ui: Messages stands a thread beside its conversations on a wide window (8ce276b)
  • ui: move About radio and Radio actions onto the Radio tab (2551438)
  • ui: move Waypoints into the Nodes tab as a row (e37eeb4)
  • ui: name a node row once and put what else it knows on the line under it (9e2941d)
  • ui: Nodes stands a node beside its roster on a wide window (399061a)
  • ui: place the frame with inkcell's scaffold (92a32c8)
  • ui: put the Mac window's buttons in the tab strip (8762102), closes inkcell#29 inkcell#29
  • ui: route SDL hints through commands (a08a003)
  • ui: set every list by what it is for - inset sections, an accent cursor, tiered type (5b9915e)
  • ui: Settings stands a section beside the section list on a wide window (6acdb56)
  • ui: size label columns and the code caption from measured text (42f2a4e), closes mcereal/inkcell#53
  • ui: tabs, rows and dialog answers are clicked (8daf923)
  • ui: the sheet and the context menu stand off the page; the node's verbs are a menu (96e3cd3)
  • ui: type directly into SDL keyboard drafts (fec131b)
  • ui: verbs in the heading for a pointer, a one-row foot on the device (ba6e616)
  • update: install updates on macOS and Windows (b282f12)
  • update: say which network failure a check or download hit (81c6284)
  • windows: connect to a radio over Bluetooth (275990f)
  • windows: connect to a radio over USB serial (e3153ca)
  • windows: hand TCP sockets to native stream (2de9114)
  • windows: open SDL UI by default (a28098b)
  • windows: support TCP hostnames (a03c44e)
  • windows: TLS and HTTPS, through Mbed TLS (0ef3fbd)

Bug Fixes

  • ble: address review on scan memory and the preferred-radio streak (4cc4205)
  • ble: demote on revoked Bluetooth access, size OTA addresses for macOS (412325f)
  • ble: don't reset the controller over the link a pairing made (2911db1)
  • build: a clean build, under both compilers (887f64e)
  • build: compile inkwell the way this client's own sources are (bb56ccc)
  • build: the no-TLS build must still link (f596271), closes #267
  • clear the no-TLS and MinGW build warnings (20e7cf4), closes #ifdef
  • devtools: every scene verb plays out what it set moving (9fba6d0)
  • **dev...
Read more

v2.72.0-beta.2

v2.72.0-beta.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 25 Sep 14:37
b221af0

2.72.0-beta.2 (2026-09-25)

Bug Fixes

  • ui: keep a list's cursor-row verbs off the pointer heading (26dcf08)
  • ui: pin inkcell so help's back arrow takes a click (89b206d) (1f56690), closes #57
  • ui: pin inkcell so the focus ring jumps between Radio tab cards (77b63a3) (aaf9f43)

v2.72.0-beta.1

v2.72.0-beta.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 25 Sep 13:06
c623ac1

2.72.0-beta.1 (2026-09-25)

Features

  • ble: Bluetooth on macOS, over inkwell's CoreBluetooth backend (e86a153), closes mcereal/inkwell#12
  • ble: wait on FromNum's subscribe across turns instead of in the connect (6bcf398)
  • build, test and run the UI natively on macOS (d12166f), closes inkwell#10 inkcell#28
  • devices: honest signal readings, a visible auto-connect radio, safer radio switches (4cbcb9a), closes mcereal/inkwell#39
  • focus: a dialog's answers are reached by where they are, not by counting (9f83bbd), closes mcereal/inkcell#19
  • help: the notes are a body in pixels, under a heading that collapses (1ccfebf)
  • lists: the body travels between windows instead of flicking (9b2484c)
  • overlays: the two questions arrive on layers, over what they are about (af2a001)
  • release: app icon for the macOS and Windows installs (abcfbd0)
  • release: ship a macOS .dmg and a Windows installer (2962f42)
  • serial: find USB serial ports on macOS (7def11d)
  • settings: a row's gutter says how it is changed, not just that it can be (726687b), closes inkcell#3
  • sheets: a node's verbs and a message's faces come up over what they are about (b7bca59)
  • ui: a one-row footer - the screen's verbs and the link, nothing the chrome already says (81b932e)
  • ui: a right-click on a row opens its menu (20d686b)
  • ui: a window's action bar is a toolbar, and back is the arrow (3a73660), closes mcereal/inkcell#36
  • ui: bind desktop shortcuts to commands (562e2b3)
  • ui: draw the focus ring and lift the focused row instead of filling it (a68d642)
  • ui: drive the running client by its keys and look at what it drew (24818d0), closes inkcell#30
  • ui: follow inkcell onto a proportional face (fe34156)
  • ui: leave the on-screen keyboard grid out of a desktop window (42276a8)
  • ui: merge Devices and Status into one Radio tab (c23f673)
  • ui: MESHCLIENT_UI_BACKEND=sdl draws the UI in a window (ec9be92)
  • ui: Messages stands a thread beside its conversations on a wide window (8ce276b)
  • ui: move About radio and Radio actions onto the Radio tab (2551438)
  • ui: move Waypoints into the Nodes tab as a row (e37eeb4)
  • ui: name a node row once and put what else it knows on the line under it (9e2941d)
  • ui: Nodes stands a node beside its roster on a wide window (399061a)
  • ui: place the frame with inkcell's scaffold (92a32c8)
  • ui: put the Mac window's buttons in the tab strip (8762102), closes inkcell#29 inkcell#29
  • ui: route SDL hints through commands (a08a003)
  • ui: set every list by what it is for - inset sections, an accent cursor, tiered type (5b9915e)
  • ui: Settings stands a section beside the section list on a wide window (6acdb56)
  • ui: size label columns and the code caption from measured text (42f2a4e), closes mcereal/inkcell#53
  • ui: tabs, rows and dialog answers are clicked (8daf923)
  • ui: the sheet and the context menu stand off the page; the node's verbs are a menu (96e3cd3)
  • ui: type directly into SDL keyboard drafts (fec131b)
  • ui: verbs in the heading for a pointer, a one-row foot on the device (ba6e616)
  • update: install updates on macOS and Windows (b282f12)
  • update: say which network failure a check or download hit (81c6284)
  • windows: connect to a radio over Bluetooth (275990f)
  • windows: connect to a radio over USB serial (e3153ca)
  • windows: hand TCP sockets to native stream (2de9114)
  • windows: open SDL UI by default (a28098b)
  • windows: support TCP hostnames (a03c44e)
  • windows: TLS and HTTPS, through Mbed TLS (0ef3fbd)

Bug Fixes

  • ble: address review on scan memory and the preferred-radio streak (4cc4205)
  • ble: demote on revoked Bluetooth access, size OTA addresses for macOS (412325f)
  • build: a clean build, under both compilers (887f64e)
  • build: compile inkwell the way this client's own sources are (bb56ccc)
  • build: the no-TLS build must still link (f596271), closes #267
  • clear the no-TLS and MinGW build warnings (20e7cf4), closes #ifdef
  • devtools: every scene verb plays out what it set moving (9fba6d0)
  • devtools: make syncing off end the replay it names (90aaa1f)
  • devtools: refuse a verb row the runner answers first, and keep --delay 0 ([4fcddc3](4fcddc3...
Read more