Beta Release Notes

Erstellen Sie Geschichte für Songbook Buddy Beta - sichtbar nach dem Anmelden.

Anmeldung oder Registrierung

Verwenden Sie die gleiche E-Mail und das gleiche Passwort in der Songbook Buddy Beta App, nachdem Sie Ihr Konto bestätigt haben.

Nur Mitglieder

Melden Sie sich an oder registrieren Sie sich oben, um Beta-Release-Notizen und Downloads anzuzeigen.

Version 1.0.19-beta+31

July 16, 2026

Download

Four-tier licensing, band-share lifecycle, Apple font collections, and setlist-printing fixes:

  • Four license tiers: Starter / Basic / Pro / Pro Cloud (hierarchical: Pro Cloud ⊃ Pro ⊃ Basic ⊃ Starter). Basic €7.99 one-time (permanent), Pro €29.99/yr, Pro Cloud €79.99/yr, Starter free. Server-authoritative profiles.license_tier + owns_basic; grants, refunds and expiry recompute the tier. Client gates on hasBasicProvider / isProProvider / hasProCloudProvider. The upgrade hub was rebuilt to "current plan + upgrades".
  • Feature re-tiering. To Basic: metronome, flashcards, chord substitutions, tags, linked audio, LAN/WLAN attachment sync, PDF-sheet + image-sheet import, personal setlists. To Starter: tuner (transpose was already free). To Pro: theater / external display, and songbook + setlist printing — the latter had no tier gate at all and shipped to every Basic user while the Pro copy sold it. Single-song print stays ungated.
  • Entitlement fixes. A Cloud purchase made straight from Starter read back as Starter and unlocked nothing (the client required base Pro, which the cloud grant deliberately never sets). Sending shares / connect codes was gated on lifetime-Pro, which denied every new yearly-Pro and Cloud subscriber. The top-tier "everything unlocked" view was hidden from Cloud-only accounts.
  • The Cloud tier is displayed as "Pro Cloud" across all 23 locales, matching the licensing spec. The enum and the license_tier wire value stay cloud — display name only, no prod migration.
  • i18n tooling: a reworded English string now re-opens its cognate-ledger entries (the stale-cognate check was unreachable behind an early exit).
  • Deleting a shared song asks about the band's copy. Owners/admins deleting a library song that is still shared with a band choose between removing the share everywhere or keeping the band's copy frozen — single and bulk delete both covered. Members who cannot unpublish are not asked.
  • Stale shares can be relinked. A band song whose local source was deleted shows a "Source deleted" badge in the Band songs pane, with a relink action that reconnects it to a library song via a searchable picker.
  • Deleted source songs no longer count as band-publish failures, and a skipped publish now names the affected song in the debug log instead of failing silently.
  • Apple .ttc font collections load on macOS. "On My Computer" now enumerates and unwraps collection files (Avenir Next, Optima, Palatino, …) for songs, print and PDF.
  • Run-sheet key resolution. The printed setlist run sheet now uses the same effective key the panes show (explicit or inferred from chords, plus the song's transpose); a per-slot override still wins. Wrapped titles keep their number/bullet on the first line.
  • Workflow-status dot placement. In setlist rows and the band songs list the dot aligns with the title's first line and honours the before/after-title preference.
  • Per-slider 5% snap. The "5% increments" checkbox now affects only the slider it is set on (transient), replacing the old global preference; the checkbox gained an explanatory tooltip.
  • Backup dialog clarity. A caption notes that the Songs / Sheet songs counts include archived songs.
  • Help, manual and screenshots refreshed in all 22 languages, including the new band-share flows and font collections; pre-abbreviated labels in es/pt (cloud-sync section) and a stale French sync option were corrected.
  • Smaller fixes: band-member pull recovery after the database moved off the main thread, server-side entitlement hardening (locked entitlement columns, verifiers fail closed on missing secrets).

Version 1.0.19-beta+30

July 10, 2026


A reliability follow-up to 1.0.19-beta+29 that clears the last of the "app is lagging" reports:

  • The song list no longer stalls or blanks in a band. A member whose band owner went offline before sharing the wrapped key stayed permanently key-less, so every song-list recompute (each edit or stoplight tap) paid one sequential server round trip per band song and held the list in a valueless loading state — up to ~15 s with a blank sidebar. Missing wraps are now negative-cached for 60 s (cleared the instant a key arrives) and the filtered song list keeps its previous rows through any reload instead of dropping to an empty panel.
  • The editor keeps rendering mid-edit. An unterminated { in the ChordPro tokenizer swallowed everything up to the next stray } — or, if unterminated, discarded the rest of the document — blanking the render while typing. Directives now fall back to literal text when unterminated, while multi-line comment directives keep working.
  • SQLite moved to a background isolate. Every songs write re-ran all active watch queries on the UI thread; the database executor now runs in the background (with the Android FFI workaround) and DriftRemoteException is unwrapped at the busy-handler checks, removing the residual typing/stoplight jank on large libraries.
  • The "song no longer available" loop is fixed. Deleting a song never cleared its unsaved editor draft, so each sync retried the save, failed, and re-popped the snackbar forever. Soft-delete (single and bulk) now clears the draft, draft flush drops drafts whose song is gone (covering remote deletes), and writes to soft-deleted rows are skipped.
  • Frame-stall timings now travel with support reports. A scheduler callback logs any frame over 96 ms (build/raster split, coalesced to one line per 2 s) into a new essential log tier that records regardless of the user's debug-log level, so "the app lags" reports carry objective timing data.
  • Smaller fixes: restored ASCII-safe voicing notation (C(2)/C(3)) in the Hindi and Japanese manuals, which the last translation sweep had reverted to literal subscripts — that was blocking the manual-PDF glyph gate on every release build.

Version 1.0.19-beta+29

July 10, 2026


A follow-up to 1.0.19-beta+28 covering sync performance on long-serving devices, faster Band Mode publishing, and an option to hide chord-voicing numbers:

  • Chord-voicing numbers can be switched off. The subscript that marks a repeated chord shape (C, C₂) is noise for players who never assign per-occurrence fingerings; a new preference under Preferences → Chords (default on, synced across devices) suppresses it everywhere — song body, chord chart panel, PDF export and the songbook chord overview.
  • The sync queue no longer grows forever. Entries already confirmed by the server were kept indefinitely and rechecked on every change; a device that lived through last month's re-upload storm had accumulated 43,000 of them, making every workflow-status tap stall for seconds and the song list vanish until the check finished. Confirmed entries are now deleted once acknowledged, a one-time clean-up removes the legacy backlog, and pending look-ups use a dedicated index.
  • The database file gives the space back. Deleting those entries doesn't shrink the file on its own — one affected library still occupied 87 MB for 6 MB of live data, and every automatic backup copied that full shell. On startup the app now compacts the database when more than 10 MB is reclaimable; healthy libraries skip the step entirely.
  • Band publishing checks in one request. Reconciling a band's songs fetched each song's server record in its own round trip and encrypted every payload before deciding nothing needed uploading — over ten seconds of serialized network wait per sync for a 70-song band. The metadata is now fetched in one query and encryption only runs when a write actually happens; the sync log summarizes the sweep in one line instead of seventy.
  • Smaller fixes: macOS build stamp refreshed for CocoaPods 1.17.0.

Version 1.0.19-beta+28

July 9, 2026


A follow-up to 1.0.19-beta+27 covering the setlists tab on narrow screens, chord-voicing notation, editor responsiveness on large libraries, and two ChordPro-export fixes:

  • The setlist song picker collapses and resizes. The picker pane can be folded away with the same floating corner pill the sidebar uses, and the divider between the setlist and the picker can be dragged. Both the visibility and the split position are stored per device and are deliberately not synced across your devices.
  • Setlist entry titles are legible again. On a tablet in portrait the entry row's fixed chrome — grip, index, status dot and five icon buttons — consumed the whole pane and starved the title to zero width, so rows rendered blank. The row now degrades in three tiers: labelled buttons, then bare icons, then a single overflow menu that still exposes every action, disabled ones included.
  • The song picker's filter toolbar wraps instead of overflowing. Below roughly 300 px of pane width the rating stars, workflow-status dots and action buttons overflowed the row by 77 px. They now wrap onto a second run; nothing is scaled down, as the 12 px stars already sit at the tap-target floor.
  • Repeated chord voicings are marked with a subscript. The voicing rank was rendered as a superscript digit — the exact notation used for chord extensions — so "C²" read as "C add 9" rather than "the second shape of C". It is now "C₂". Subscript digits carry no meaning inside a chord symbol, so the marker is unambiguous. Lato and Oswald ship no subscript digits, so the PDF passes a Noto Sans Mono fallback to every chord label and the screen renderer relies on system font fallback, as chord names already do for ♭/♯.
  • Large libraries no longer stall the editor. The selected-song panels re-parsed and re-rendered the open song several times per second, so tapping a workflow-status light or leaving edit mode froze for multiple seconds on libraries past ~150 songs. Identical editor-buffer republishes are now dropped, the parsed-song cache holds 128 entries instead of 16, and chord-occurrence lookups are memoized — a revisited song or a transpose back to a previous key skips the parse entirely.
  • ChordPro-zip export skips sheet songs. Exporting the library as ChordPro wrote one file per song including PDF/image sheet songs, whose file contained only a placeholder rather than the sheet. Sheet songs are now filtered out and only real ChordPro songs are written.
  • Empty ChordPro-zip export reports itself. The empty-export guard tested the raw song list, so a library consisting only of sheet songs produced an empty archive. The "no songs to export" message now fires when nothing exportable remains after skipping sheet and (unless opted in) archived songs.
  • Adaptive settings labels. The auto-save-interval and DMX default-fade labels no longer ship a baked-in abbreviation; they render their full wording when the panel is wide enough and fall back to a short form only when the container is too narrow.
  • Help, manuals and translations refreshed. The English help and user manual document the reworked setlists tab and the subscript voicing marker; all locales' UI strings, help topics and manual PDFs are caught up. The non-Latin manuals (hi, ja, ko, zh) render chord notation with font-safe ASCII forms — C7, C(2) — because the Noto Devanagari/JP/KR/SC faces carry no glyph for the superscript/subscript digits and the glyph-coverage gate would otherwise emit tofu.
  • Smaller fixes: Help → "Send bug report…" silently did nothing on desktop because the menu passed a context above the navigator to showDialog; two Riverpod "rebuilt multiple times in the same frame" errors fixed — the setlists split view now sizes its panes with a layout delegate instead of a LayoutBuilder that inflated both panes during layout, and the LAN-sync auto-trigger no longer force-flushes the discovered-peers stream out of queue order; the setlist action bar's icon buttons are pinned to 36 px so the fit measurement matches what Material 3 actually renders; new tooltips on the sidebar/setlist resize handles and the Start Setlist / Print Setlist / Export as songbook buttons; the translation tooling's brand-detection heuristic was replaced with an explicit cognate ledger, so freshly-added English keys are no longer mistaken for proper nouns and skipped.

Version 1.0.19-beta+27

July 7, 2026


A sync-reliability and editor build that stops a runaway artist re-sync loop and keeps the editor steady during heavy syncing:

  • Encrypted empty fields round-trip again. An off-by-one in the AES-GCM box-length check treated an encrypted empty string (a valid 28-byte box) as truncated, so songs with no artist were cleared and re-pushed on every sync — an endless heal loop that never drained the outbox. The length floor is fixed; affected songs decrypt to empty and self-heal on the next sync, with no server-side cleanup.
  • Editor no longer loops under sync churn. A sync re-emit that reloaded the open song could trigger the editor's own normalize-write, which re-emitted the row and reloaded again in a self-sustaining reparse loop. The eager write is now skipped on sync-driven reloads; content still renders normalized.
  • No WidgetRef use after unmount. Cycling a song's workflow-status dot, bulk delete/archive, and the setlist source editor's dispose held a WidgetRef across an async gap and threw "Using ref when a widget is about to or has been unmounted is unsafe" on macOS; notifiers are now captured while still mounted.
  • Band membership FK recovery. A band_members push whose artist_id referenced a local-only artist FK-failed (23503) and dead-lettered every cycle; it now recovers like the existing band_id / setlist_songs / song_tags handlers.
  • Smaller fixes: hoisted workflow-status watches out of the setlist drag-target builder and de-duplicated the LAN sync-peers stream to silence a debug-only "provider rebuilt multiple times in one frame" assertion; added a privacy-safe diagnostic that logs the shape (not content) of any non-empty song source that parses to zero sections.

Version 1.0.19-beta+26

July 6, 2026


A Theater-mode and setlist refinement build with same-network sharing and sync recovery fixes:

  • Per-song Theater layout override. A setlist song can pin its own saved layout in Theater mode via a new "Override in Theater mode" checkbox in the Format sidebar; every other song keeps the global Theater layout.
  • Setlist drag auto-scroll. Dragging a song near the top or bottom edge of the list auto-scrolls it, driven from the row target for accurate positioning while reordering long setlists.
  • Locale-aware event dates. The printed setlist run sheet formats the event date using the active locale instead of a fixed format.
  • Named reconcile rows. "Check library against server" now labels stranded junction rows by endpoint — song in setlist, song · tag, print layout · setlist — instead of anonymous rows.
  • Wi-Fi (LAN) sharing recovery. Recovers a wedged mDNS/Wi-Fi device-discovery stream and converges sheet metadata before copying, fixing "can't find device" and PDFs that failed to transfer between same-network devices.
  • Follower pull repair. Heals server-truncated artist/album blobs on a follower pull so songs no longer load partly blank.
  • DMX shutdown. Tears down the Art-Net engine when the DMX master toggle is turned off, so it stops broadcasting once disabled.
  • Smaller fixes: refreshed translations across all 22 locales plus the in-app help and PDF manuals, regenerated the per-locale manual-image screenshots, and force-translated the new Theater-override / reconcile strings that the translation brand filter had skipped.

Version 1.0.19-beta+25

June 30, 2026


This songbook-export and printing release adds a stage run sheet, a unified songbook workspace, exact-value formatting sliders, and direct Pro purchases for non-store builds:

  • Print Setlist run sheet. New dialog prints the setlist as a one-page run sheet — titles with optional artist, key, playtime, song notes and sticky notes, number/bullet position markers, plus band name and event date/location — separate from the full songbook export.
  • Unified songbook workspace. The songbook export is now a three-pane view: an editable, keyboard-navigable song list, book-wide vs per-song options, and a live PDF preview that follows the selected song and preserves scroll/zoom across edits.
  • Editable-value sliders. Format-sidebar sliders open a popover with a typable value, +/− steppers and an optional 5% snap.
  • PayPal Pro on non-store builds. Direct-download builds (macOS, Windows, Linux, sideloaded Android) can buy Pro via PayPal and refresh purchase status; App Store / Play builds remain in-app-purchase only. Removed the old PayPal donate button and the Beta-Test tab.
  • {columns:N} in output. The directive seeds the print/songbook column count (clamped 1–4, still overridable); {cb} forces a column break once there are two or more columns.
  • Inline rename + auto-focus. Rename PDF/sheet-music songs directly in the list; newly created or imported songs are auto-selected and scrolled into view.
  • Public-link audio. "From a link" renamed to "From a public link"; non-public cloud links offer an "Open in browser" action; sign-in-required download errors are now messaged.
  • Layout defaults. Larger default chord size and tighter chord-to-lyric spacing (chordSpacing default 0.7).
  • Update check in Maintenance. The manual "Check for updates" action moved into Preferences → Maintenance.
  • Tooltips. Real explanatory tooltips on sidebar labels and across all three PDF dialogs; value-first tooltips on the Format sliders.
  • Find Chords + chord input. Base-fret control plus constant dialog height; the first marker tap on an untouched string now mutes it.
  • Sync nudges. Earlier unsynced-backlog warning (soft + stale-time tiers); a Wi-Fi "sync now" button for sheets not yet on this device.
  • Smaller fixes: crash on quit from a late libmpv callback teardown; removed Riverpod "rebuilt multiple times in one frame" churn in the song view, status bar and Format panel; songbook live preview no longer jumps to the top on each change; workflow-status dot gives instant optimistic feedback; de-abbreviated over-shortened UI labels so the full text shows; refreshed translations, in-app help and PDF manuals across all 22 locales.

Version 1.0.19-beta+24

June 27, 2026


A format, export, and chord-rendering build:

  • All-sections master font row. A new row at the top of Format › Fonts edits every section's font at once — change one attribute (font, size, bold, italic, colour, line spacing) and it propagates to all sections, while untouched attributes stay per-section. "All styles" / "Body only" scope per edit; Reset reverts the whole snapshot.
  • Section font popup stays on screen. The popup now clamps vertically and scrolls inside the overlay, so the taller "All sections" variant no longer opens past the bottom edge with unreachable controls.
  • Songbook export controls. The Songs-mode per-song panel gains a collapsible Visibility section (so Scale sits at the top) and the "Show diagram frame" toggle; the per-song layout button now reflects edits as "Custom".
  • Transpose spells by the destination key. With no key directive, the key is inferred from the chords and accidentals follow that key's signature (sharps for A, flats for Db) instead of a flat-only downward fallback. Fixes the reported Am/Em → "Gbm/Dbm" in key A.
  • Chord render fixes. No spurious voicing superscript when a chord is assigned its own default shape; chord glyphs and voicing superscripts (F², Fm⁷) are no longer clipped in the render view; bare bar separators (|, ||:) render on screen below the chord; tight chord/bar spacing in the PDF is padded so crammed chords no longer merge.
  • Band invites gated on Pro Cloud. The band-invites Edge Function now requires is_pro_cloud (not just base Pro), matching the client-side entitlement. Deployed to prod + beta.
  • Smaller fixes: benign first-frame RenderFlex overflows are breadcrumbed instead of auto-submitted to support as crashes; English help, user manual, and the guided tour caught up to the new font controls; help screenshots regenerated across all 22 locales; UI strings, in-app help, and the PDF manuals refreshed across all 22 locales.

Version 1.0.19-beta+23

June 25, 2026


Chord-diagram clarity and appearance polish, plus a Windows numpad text-input fix:

  • Numbered repeated chord voicings. When a song assigns more than one shape to the same chord name, the secondary voicings are numbered with a superscript on the chord name ("C", "C²", "Fmaj7²") in the on-screen render, the chord-chart panel, and the PDF. The chord overview is now shape-aware — one diagram per distinct shape — instead of deduping by name. A shared, unit-tested helper drives the numbering so screen and print agree.
  • Chord name typography moved into the diagram appearance dialog. The "Chord name size" slider and "Aa" font button now sit on top of the live preview diagrams in the renamed "Chord diagram appearance" dialog (was "Chord diagram colours"), and ride along in its single Apply/Reset with the colours. ARB keys renamed colors→appearance and resynced.
  • Chord-name font honoured everywhere. The render view (chord panel + inline "on top of each line") and the PDF now apply the full chord-name style — family, weight, italic — not just the colour, matching the dialog preview; the PDF preloads the name font so it can't throw.
  • Persistent diagram size + tuning in the chord-assign dialog. The "Diagram size" slider reads and writes the per-instrument grid-scale pref, so the dialog reopens at the last-used size and a drag is remembered even without assigning a chord (range adapts per instrument, piano up to 2.6). The header shows the song's tuning in parentheses when it is non-standard.
  • Insert Intro & Outro sections. The {intro} and {outro} standalone section markers — already wired through the tokenizer, parser, renderer (green bar + INTRO/OUTRO label) and per-section typography — now appear in the editor's insert-section catalog, so they can be inserted like the other markers instead of hand-typed.
  • Windows numpad cluster fixed. With NumLock off, the numpad navigation/editing keys — Delete, arrows, Home/End, Page Up/Down — were dead in every text field on Windows because Flutter ships no Windows numpad shortcut map. Supplied the missing bindings (mirrored from Flutter's tested Linux map, installed above the root navigator so dialogs and bottom sheets are covered). No-op off Windows and never fires while NumLock is on. Needs on-device Windows verification.
  • Smaller fixes: the chord overview no longer surfaces an empty diagram for bar-lines and measure markers ([|], slashes, repeats, %, N.C.) in a chord line — only tokens that parse to a real chord feed the panel, while the markers still render inline; chord diagrams paint at a fixed aspect inside a FittedBox so the size slider scales cards uniformly without warping; Cancel/Assign pinned flush right in the chord-assignment footer; the PDF no longer crams two adjacent chord brackets with no lyric between them ("[G][C]") together; the assignment-dialog filter bar pins the "+" new-shape action flush right with uniform chip heights; the CLOUD SYNC and OPEN SOURCE PACKAGES preference headings now show their full localized text when the panel is wide; refreshed translations across all 22 locales.

Version 1.0.19-beta+22

June 24, 2026


Chord-diagram dot colours, an editor drag gesture, and a footswitch reliability fix:

  • Per-song fingering-dot colours. The chord-colours dialog gains a "Match dots to line colour" toggle plus per-mode (light/dark) pickers for the fingering, root, and bass dots; per-song overrides win over the global General chord colours and the automatic semantic colours. New DisplaySettings fields ride in layout presets + backups, and the PDF export matches (monochrome export still forces plain ink).
  • Drag selected ChordPro text. Desktop mouse can grab a live selection and drag it to a new spot via a custom TextSelectionDragMoveRecognizer (grab cursor, ghost label, live insertion caret); the drop is one undo step and feeds autosave. Modifier-clicks, right-clicks, and read-only fields are unaffected.
  • Footswitch routed regardless of focus. The HardwareKeyboard fallback is now authoritative for owned pedal keys in every focus state, fixing the Android/Boox "pedal dies after I tap the screen" case where a foreign Scrollable ate PageUp/PageDown (support reports 8f5a645c / 7b3f0b61).
  • Songbook export honors chord-name size. "Export as songbook" now reads each entry's chord-name scale instead of overriding it to 100%; removed the dead builder-level global so the render and measurement passes can't drift again.
  • Symmetric piano chord diagram. The keyboard diagram's black keys now spread symmetrically about each sub-group's centre instead of being offset to one side.
  • Smaller fixes: chord-diagram size slider restricted to 5% increments; getting-started checklist capped in the split Format sidebar.

Version 1.0.19-beta+21

June 23, 2026


Beta-channel groundwork plus reliability fixes:

  • Dedicated Beta build. New prod/beta flavor with a single source of truth across Dart, Android, iOS/macOS, Linux and Windows: its own bundle ID, red-ribbon launcher icon, deep-link scheme, update channel and build tooling. The Beta flavor runs against the beta Supabase project; stable builds are unaffected.
  • Reveal in Finder for the database path. The Maintenance screen's database path gains a "Reveal in Finder" button on macOS.
  • This device always in the Maintenance roster. The current device is always shown in the device list, even before its first sync.
  • No manual-sync prompt when signed out. The cloud-sync prompt is suppressed when no account is signed in.
  • Idempotent early schema migrations. Database upgrades (schema v2–v16) can now safely re-run after an interruption.
  • Anonymous usage opt-in now uploads. Opt-in usage pings upload via a SECURITY DEFINER RPC, fixing an RLS error (42501) that left the table empty; upload outcomes are now logged instead of swallowed.
  • Smaller fixes: support form no longer throws a Chip layout assertion on long attachment filenames; relaxed app_usage_pings RLS and reconciled migration history; dropped the redundant "-beta" label from the in-app title; allow-listed the beta deep-link scheme in local Supabase auth.

Version 1.0.19-beta+20

June 21, 2026


Chord-diagram colours gain light/dark modes, and printing stays light:

  • Per-mode chord-diagram colours. Chord diagrams now hold separate line and background colours for light and dark mode (new chordDiagramLineColorDark / chordDiagramBackgroundColorDark fields); on-screen consumers resolve per Brightness, editing one mode auto-derives the opposite by flipping HSL lightness, and a manual edit pins it. Legacy data loads light-only.
  • Single colours dialog. The Format panel's two colour buttons and the frame switch collapse into one "Chord diagram colors…" button opening a dialog with two live preview diagrams (light/print + dark) and per-mode background/line controls.
  • Printing is mode-correct. Printing and PDF export always use the light chord-diagram colours, so a dark-mode session no longer prints dark.
  • Print fixes. Symmetric outer margin around printed chord diagrams; the PDF preview now refreshes when print settings change underneath the dialog.
  • Smaller fixes: Format-section content inset from the section edges, status-bar spacing tweaks, minor chord-colours dialog polish.

Version 1.0.19-beta+19

June 19, 2026


A chord-diagram precision pass — on-screen and printed diagrams now share one geometry:

  • Inline chord diagrams honor the frame switch. Diagrams shown "on top of each line" respect the frame toggle and use a shorter frame sized to fit, so they're no longer stretched.
  • Overall Scale slider scales chord diagrams. The Scale slider now resizes chord diagrams along with the rest of the rendered page.
  • On-screen diagram geometry cleaned up. Grids are centered in their frame, compact (render-view) spacing is tightened, the marker→nut gap and fret-number width are corrected, and the sidebar frame fill is fixed.
  • Printed/exported diagrams match the on-screen reference. PDF chord-diagram rendering now mirrors the screen, including a constant chord-diagram grid width for ukulele.
  • Smaller fixes: reserve frame height for inline diagrams to fix a layout overflow.

Version 1.0.19-beta+18

June 18, 2026


Beta polish focused on chord charts, setlists, and print parity, plus several beta-report fixes:

  • On-screen and printed chord charts now match. Fret numbers (plain, no "fr"), fingering-dot colours (theme primary, not always green), and block alignment are consistent across screen, print, and the Songbook Editor; long chord names scale to one line instead of wrapping.
  • More barre chords. Canonical moveable E-shape and A-shape root-in-bass barres are now synthesized for every root (major/minor/7/m7/maj7), filling gaps that previously offered only slash-bass grips (seed version bumped to 5).
  • New add#11 chord quality. Registered in the quality catalogue, reverse chord identifier, and chart parser (Cadd#11 / Cadd♯11, with a Cadd#4 alias).
  • Setlist filter & sort. The Songs-tab setlist filter cycles Current / Archived / All, and the sort menu works under a setlist filter with a new "Setlist Order" entry plus Title / Artist / Modified / Workflow within the subset.
  • Balanced printed side-rail chord chart. The printed rail fills row-major and balances column heights to match the on-screen wrap.
  • Clearer layout labels. "Default song layout" vs "Default songbook layout" are now distinct, and the songbook layout bar flips to "Custom" when it diverges from the app-default print settings.
  • Info menu item on Linux/Windows. The Songbook Buddy menu now opens About / Support (macOS keeps its native About item).
  • Sharing inbox stays quiet when offline. Only a real server error (5xx) shows the red "couldn't load your shares" banner; offline / timeout / stale-session / not-deployed fall back to the empty state.
  • iPhone band-create flicker fixed — a clamp error on a short viewport with the keyboard up no longer redraws every frame.
  • Bug-report attachments from iCloud Drive are now downloaded and uploaded instead of being silently dropped, with visible messages when a file can't be read or you're not signed in.
  • Smaller fixes: "Used chords" renamed to "Chords in Use", stray green coach-mark line down the sidebar on phones removed, Chords-tab fret label tidied and a leaked song background dropped, reset-filters reworked as an inline icon button, in-window menu bar now uses a full-width surface with the header background colour on Linux/Windows.

Version 1.0.19-beta+17

June 18, 2026


Spacing, print-fidelity, and per-tuning chord fixes on top of 1.0.19-beta+16:

  • Print/PDF spacing now matches the screen renderer. Lyric line leading and the chord-to-verse gap in printed and exported PDFs were computed differently from the on-screen layout; both now use the same metrics, with a screen/PDF parity test guarding it.
  • Chord-shape assignments namespaced per instrument + tuning. Assignment keys are now scoped as tu/<instrument>/<tuning>/::t<N>::leaf; legacy unprefixed keys remain a guarded current-tuning fallback (no migration), so each instrument and tuning keeps its own assignable shapes.
  • Chord diagrams keep colour, width, and per-tuning shapes in output. PDF and songbook diagrams no longer reset to defaults; the macOS print label is corrected.
  • Wider chord-spacing slider range. The slider now reaches a sub-snug tuck and about 30% more spread.
  • Press-and-hold value readout on Format-panel sliders. Hold a slider to see its current numeric value.
  • Title/metadata line-spacing slider now works. The slider previously had no effect; the spacing is now applied, and the control is kept in the popup only (not the inline row).
  • MIDI & Footswitch are now opt-in. Master toggles in Preferences → Pro (default off, mirroring DMX/OSC); each Devices sub-tab shows only when its feature is on, and the whole Devices tab disappears when MIDI/Footswitch/DMX/OSC are all off (with an active-tab fallback back to Songs). A one-time migration keeps the tab visible for existing users who already enabled MIDI/footswitch or learned mappings; the global pedal-key hook and the song-list focus-yield both respect the master toggle so a left-on mapping can't swallow keys once hidden.
  • Sign-out confirmation. The Account "Sign Out" button now confirms first, with entitlement-adaptive copy warning Pro / Pro Cloud users that those features deactivate while signed out (purchase retained, reactivates on next sign-in); other signOut() call sites are unchanged.
  • Receive-only restore drops duplicate never-pushed songs. After a receive-only restore, songs that were never pushed from the device are reconciled instead of duplicated.
  • Bug-report form usable on phones. Full-screen on handsets, fits and scrolls above the keyboard, no forced rotation, checklist overflow fixed.
  • Sharing connect dialog no longer hangs forever. It now times out and can be cancelled.
  • iOS launch hardened. A failing mDNS broadcast during LAN-sync startup no longer crashes launch.
  • Preferences "Backup & Restore" section. The former Database section is renamed and now states that app settings are included in backups.
  • In-window main-menu toggle (Linux/Windows). A new "Show main menu" preference (on by default) hides the in-window File/Edit/View menu bar; macOS always uses the system menu bar and ignores it.
  • Smaller fixes: moved the per-section line-spacing toggle to the Editing section and stopped truncating its label; Songbook layout save dialog honours the 30-character name limit; setlist export prints the current setlist name after a rename.

Version 1.0.19-beta+16

June 17, 2026


Imported-sheet markup, bug-report attachments, per-device live leadership, opt-in usage statistics, and a batch of macOS support fixes:

  • Opt-in anonymous usage statistics. A new Preferences → About toggle (default OFF) plus a one-time non-blocking banner let users share cumulative anonymous counts — launches, active days, songs imported/created/opened, and per-feature use. Upload is throttled to 1/hour into a single app_usage_pings row keyed by a random install id (separate from the sync device id); no song content, titles, lyrics, file names, or event timestamps are ever sent. RLS lets anon/auth write only their own row. Privacy policy updated (Art. 6(1)(a) GDPR; withdrawal deletes the install's record).
  • Bug reports can carry screenshots. The in-app bug-report dialog gains an "Add file…" button on every platform — attach images or PDFs (≤10 MB each, up to 5). Files upload to a new private, RLS-gated support-attachments Storage bucket; the triage GUI opens them via signed URL.
  • Imported PDF markup flattens on every desktop. Stamp and Ink annotations from Preview/Dropbox now render in Buddy: a native PDFKit backend on Apple and pdfium FPDFPage_Flatten on Linux/Windows replace the Syncfusion path that silently dropped Stamp/Ink. A one-time re-flatten sweep (v1→v2) corrects earlier imports; the push-master re-uploads the baked bytes. Android is deferred (no bundled pdfium) and covered by sync.
  • Per-device live-session leadership. Leadership is keyed on leader_device_id as well as account, so a second device on the same login follows instead of dual-broadcasting; a spare on the leader's own account auto-follows. Legacy/null sessions fall back to account-only matching.
  • Bulk "reset to default layout" preserves musical state. The Danger Zone reset now keeps each song's instrument, tuning, capo, and fingerings and resets only the visual layout (matching the per-song Reset).
  • Loop setlist toggle. New synced "Loop setlist" preference (default on) in Preferences → Theater; off stops stepping at the ends.
  • Sticky notes on the Setlists tab no longer paint song-attached notes over the setlist panes.
  • Print-preview zoom retained. The single-song print dialog re-rasterizes in didUpdateWidget instead of recreating State on each scale-slider tick, so the preview keeps its zoom.
  • Framed chord-diagram rail overflow fixed. Diagram item height is now frame- and font-scale-aware, so the side-rail charts no longer overflow the page or freeze the export when a frame and a larger "Used chords" size are combined.
  • One-time onboarding tips no longer bleed over dialogs (RouteAware) and drop the stray full-height highlight ring on panel-sized targets.
  • Smaller fixes: refreshed translations across all 22 locales; new support_reports.attachment_paths column; renamed layout-reset strings so stale locales fall back to EN until re-filled; internal secrets/access SSOT doc and a Supabase migration-drift guard.

Version 1.0.19-beta+15

June 16, 2026


Sheet-music markup, custom-tuning sync, and page-pedal reliability on top of 1.0.19-beta+14:

  • Imported sheet markup now renders. PDFs imported from apps like MobileSheets had their annotation layer ignored by the page renderer; annotations are now flattened into the page content at import (only when present), and a guarded one-time startup sweep bakes in markup on sheets imported earlier and rewrites their attachment meta so it stays consistent with attachment sync. Fixes both the viewer and the rasterised songbook export.
  • Custom tunings sync and load at startup. User-created tunings now sync across devices as a single user_settings row (whole-list last-writer-wins, no new table), so a song's per-song tuning resolves correctly everywhere; separately, the custom-tuning resolver is warmed during bootstrap so songs render in their tuning immediately after a cold restart instead of falling back to standard until the Chords tab is opened.
  • LAN "sync now?" offer no longer loops. The local-network sync prompt is tracked per session and offered once per peer, rendered as a MaterialBanner with Sync now / Not now, and cleared when the feature goes inactive or switches to auto.
  • Page-turn pedal on e-ink Android. A guarded HardwareKeyboard fallback routes pedal keys when primary focus is null (focus can drift to nobody on Boox after route/lifecycle churn) and reclaims focus to the shell router node; no change when focus is present.
  • Layout presets can include instrument & tuning + chord-diagram colours. Appearance presets gain an opt-in "Include instrument & tuning" checkbox and an optional chord-diagram line/background colour pair (visual-only, rides in layout snapshots); the active-layout annunciator now compares musically and flips to Custom when you change setup away from a musical preset.
  • Framed chord diagrams + colours in print. A "Show diagram frame" switch wraps each chord diagram in a bordered, background-filled card — exposed in the Chords tab, in a song's Chord Charts settings, and as a per-export toggle in the Print/Export dialog (default on, inherited by songbook export). PDF and songbook chord diagrams now keep their accent-dot and per-song line/background colours (matching the on-screen renderer) instead of defaulting to black, unless Monochrome chords is selected. The Format-panel "Diagram lines"/"Diagram background" colour labels are now adaptive — full text when the sidebar is wide, short form only when tight.
  • Chord-diagram frame is now a per-song layout setting. The Format-panel "Show diagram frame" toggle moved from the global UiPrefs to a per-song DisplaySettings field (default on, with a fromJson fallback that migrates legacy song/layout JSON), so it flips the layout annunciator to Custom, is captured by Save layout, and rides in preset snapshots alongside the diagram colours. The Chords tab keeps its own global frame pref; PDF export keeps its independent print setting.
  • Faster Save-layout dialog. The Save-layout dialog now prefills the name of the active layout and merges the name field with the "overwrite an existing preset" dropdown into a single combo, so updating a preset is one control instead of two.
  • Smaller fixes: fixed a surface-coloured gap between a framed diagram's background and its frame border; renamed the colored-dots pref key + frame label so stale translations don't linger; refreshed translations across all 22 locales; EN in-app help + user manual and help screenshots regenerated; added the lanSyncNotNow string.

Version 1.0.19-beta+14

June 15, 2026


Stability and polish on top of 1.0.19-beta+13, with several launch-crash fixes and broader device support:

  • Launch-crash fixes. Don't apply synced preferences mid-frame (Android "tried to modify a provider while the widget tree was building" crash), and swallow async mDNS/Bonjour discovery errors so Wi-Fi sync discovery can't take the app down at launch (iOS local-network DefunctConnection).
  • Find bar & macOS shortcuts. ⌘F opens the ChordPro editor find bar when a song is loaded (song-list filter keeps ⌘F only with no song open / off the Songs tab); ⌥⌘F = Find & Replace, ⇧⌘Z = Redo; transpose accelerators no longer shadow text-cursor keys while editing ChordPro.
  • Import defaults are honored. "Save these choices as my defaults" now skips the import plan dialog on later imports instead of just pre-filling it; added a Preferences → General → Editing "Reset import defaults" entry and moved it into a renamed IMPORT/EXPORT section.
  • Onboarding hints. One-time coach tips point at their target with a pointer and highlight ring and are serialized one bubble at a time; the startup incident prompt and Pro-tour offer no longer race onto the navigator on launch.
  • Setlist toolbar. Returning to All Songs fully exits setlist mode, reverting the bottom-toolbar setlist controls.
  • iOS keyboard. Tapping outside a text field dismisses the software keyboard, including the iPad floating keyboard.
  • Support-prompt severity. The "Something went wrong" prompt now appears only for data-at-risk incidents (backup/restore and shutdown-save failures); benign framework/native errors and unclean-shutdown detection are silent telemetry only, and a false unclean-shutdown prompt after a macOS background kill is fixed.
  • Android device compatibility. MIDI, USB and Bluetooth uses-features are forced to required="false" via tools:replace so Google Play stops filtering out e-ink tablets (e.g. Onyx Boox).
  • macOS build integrity. A hard 150 MiB minimum-size floor on the DMG aborts before the Hostinger upload, so a stripped/corrupt disk image (the 47 MB 1.0.19-beta+13 build) can never reach users; the release pipeline now mandates serializing all Mac builds.
  • Smaller fixes: per-platform size-budget upper bounds retuned (iOS/Android/Windows/macOS/Linux), Linux build-script fix, Windows generated_plugins.cmake regen for the jni FFI plugin.

Version 1.0.19-beta+13

June 14, 2026


Wi-Fi (peer-to-peer) sync for linked audio and sheet scores, preference sync, and a round of sync-direction and editor/render fixes on top of 1.0.19-beta+12:

  • Wi-Fi sync is now peer-to-peer. Linked-audio files and sheet-song attachments copy directly between your own devices on the same Wi-Fi — every device both offers and pulls, with no fixed server/client and no cloud round-trip. Devices advertise under a friendly name (not the OS hostname), filtered to your account so strangers can't see them.
  • Automatic and proactive syncing. A new "Sync automatically" option copies new files in the background; with it off you get a one-tap "<device> is on this Wi-Fi — sync now?" offer when a peer appears, plus a Sync-now button in the linked-audio dialog whenever peers are present. It pulls from every peer found, not just the first.
  • Review differing blobs. When the same song has different files on two devices, a divergence guard prevents silent overwrites: a Review panel shows your copy beside the peer's and lets you Keep mine / Take theirs per file.
  • Pro vs Pro Cloud tiering. Wi-Fi (WLAN) sync of these blobs is part of base Pro; cloud sync of the same blobs is Pro Cloud. Blobs migrate up to the cloud on Pro Cloud upgrade and fall back to WLAN-only on lapse, without loss. Sheet attachments now ride Wi-Fi sync too.
  • General display preferences sync + ride in backups. Curated global display preferences now sync (following the library direction) and are included in .sbbk backups, with an "Also restore app preferences" toggle in the restore dialog.
  • Sync direction stays put on mobiles. A phone/tablet could quietly revert to "Send only" after a restart before its direction was stored; devices now keep the chosen direction, and newly-added mobiles default to receive-only so they never push unexpectedly. Restoring a backup no longer clones another device's identity. (Reported by a beta tester on beta+12.)
  • "Manual — never ask" honored on launch/restore. Fixed a startup/restore race where the manual-sync prompt could still appear despite the setting.
  • Metronome time signature per song. Time signature now persists per song and honors the {time:} directive.
  • Theater layout sticks across setlist songs. The chosen Theater layout no longer resets when moving between songs in a setlist.
  • Library list reflects edits. Key/transpose and album changes update the Songs list immediately; the restored last-edited song reliably scrolls into view on launch.
  • Linux: bundled audio engine. Release artifacts now bundle libmpv so linked-audio playback works out of the box; a dialog explains how to install it if it's ever missing.
  • Android: user-set device name. Uses the name you gave the device where available, so peers and the roster show a friendly name.
  • Clearer spacing & chord-diagram controls. Line spacing and chord spacing are now independent sliders (decoupled in both the on-screen render and PDF), trailing chords stay top-aligned at raised chord spacing, chord-diagram settings are regrouped, and ⌘L / Ctrl+L toggles the sidebar.
  • Help & manuals. Help and the user manual now describe sync/attachment encryption accurately (end-to-end with a key derived from your account password, not a separate "passphrase"), document the new Wi-Fi-sync and preference-sync flows, and add a content-responsibility note. Translations and manual PDFs refreshed across all 22 languages.
  • Smaller fixes: ukulele inline diagrams default to open shapes instead of high barres; per-line line-spacing slider removed where it had no effect; collapsed duplicate device registrations and survived unroutable peers in the Wi-Fi peer list; corrected desktop synced-file storage location + added a "file missing" dialog; privacy-safe diagnostics when an audio write fails; stopped a double song-list rebuild (watchAllIds); fixed ChordPro insert-panel GlobalKey contention during capture; Preferences tabs sized to content so wide labels aren't abbreviated; upgraded to Flutter 3.44.2.

Version 1.0.19-beta+12

June 12, 2026


Onboarding, demo songs, and broader platform reach on top of 1.0.19-beta+11:

  • Guided onboarding. First-run beginner spotlight tour (overlay + anchored steps), a Pro-features tour with an activation prompt on unlock, a getting-started checklist card, contextual one-time tips, and an empty-library call-to-action. All tours and the checklist restart from Preferences → General → Help.
  • Downloadable demo songs. Website demo-song pack + in-app importer, offered from the empty-library card, the checklist, and the Help section. Skips songs already present and reports a clear offline error when the server is unreachable.
  • Chord name below diagram. New Chord-diagram-settings preference (default off) renders the chord name under the fretboard so stacked column diagrams align evenly.
  • Workflow-status refinements. Status dot now cycles none → red → yellow → green in place on tap (no picker); new "Marker after the song title" placement option.
  • Independent inline {chord:} size. Format sidebar gains an Inline diagram size slider for songs using {chord:}, separate from the used-chords size; natural line wrapping around inline diagram runs; status-dot discoverability tweaks.
  • Baritone / alternate-tuning diagrams. Default fingerings for baritone and other non-standard tunings now resolve to familiar shapes.
  • Sync-settings shortcut. The manual-sync "sync now?" permission dialog gains a Sync settings button.
  • Sync reliability. Recover or drop orphaned setlist_songs on a song foreign-key violation, so a not-yet-arrived band song no longer wedges the pull.
  • DMX over LAN on Apple platforms. Apple-managed Multicast Networking entitlement enabled for macOS and iOS so Art-Net broadcast egress is no longer dropped by the App Sandbox / Local Network privacy; App Store Connect provisioning scripted for both Developer-ID and App Store targets.
  • Maintenance fresh-install. Wipe database and Reset settings now produce a true fresh-install state.
  • Smaller fixes: Android microphone/Wi-Fi/touchscreen features marked optional for broader Play Store device compatibility; macOS App Store bundle-id override + opt-in upload path; snappier settings→render and editor-open; benign libmpv audio log noise demoted out of basic support reports; one-time tip bubble clamped on-screen with checklist re-show/reset and Help-menu entries; translations refreshed and manuals shipped for all 22 locales.

Version 1.0.19-beta+11

June 11, 2026


Song-management, chord-parity, and ChordPro build on top of 1.0.19-beta+10:

  • Workflow status (Pro). New opt-in red/yellow/green dot per song — Songs tab and Setlists tab (picker rows + setlist entries), Status sort, 3-dot filter, bulk assign in multi-select. Enable in Preferences → General → Song list. DB schema v32 (songs.workflow_status, 1=red/2=yellow/3=green); syncs via full-row encode.
  • {chord:} inline diagrams. Full ChordPro {chord:} support: reference ({chord: Am} / {chord: [Am]}), inline-define (fret/finger notation), and keyboard shapes. Bracketed form transposes; bare form is fixed. Text flows correctly around multi-run {chord:} rows; same-line directives draw on the lyric line.
  • "Number repeated sections" preference. Global ChordPro Layout toggle: two verses become VERSE 1 / VERSE 2 in the render and PDF. Single-occurrence types stay unnumbered; custom blocks are excluded.
  • Chord name/diagram parity (screen ↔ print). Chord symbol color now uses the configured value everywhere (was brand green in the used-chords panel, inline diagram labels, and PDF diagram labels); PDF chord text now uses the chord-symbol size slider (was hard-coded at 75% of section style). Chord name position unified: name always above fretboard, same gap, tighter spacing in both views.
  • Placement-specific print sliders. Print and setlist-export dialogs show one chord-size slider matched to the current placement: "Inline diagram size" for Inline, "Used chords size" for all others. Previously both sliders showed for non-inline placements and multiplied silently — this was the root of the songbook-export overflow fixed in 8c8775aa.
  • Theater mode hides {np}/{cb} break markers. Page/column break marker rendering is gated by a new showBreakMarkers flag (default true); the renderer passes !presenting so markers disappear in Theater mode without a rebuild.
  • Format-panel Edit button is a live toggle. The Edit icon in the sidebar Format panel lights up when the editor is open and closes it on a second tap; icon background highlights when active.
  • Setlist export: layout bar in Songbook tab + persistent loaded-layout name. The "Load print layout" bar moved into the Songbook tab settings panel, pinned to the bottom. After loading a layout the bar shows the layout name persistently across song switches and app restarts (name is stored per-song in the setlist JSON blob); the label switches to "Custom" when any setting diverges from the loaded snapshot. i18n: placeholder renamed to "Default layout".
  • Smaller fixes: Android resizeableActivity=false removed — tablets, foldables, and Chromebooks can now resize the app; iOS/macOS crash reporter no longer counts transient auth-refresh and prewarm launches as crashes; chord drag-and-drop now snaps per character instead of per pixel; help topic search gains Prev/Next match navigation with inline term highlighting; preview zoom slider no longer overflows in narrow panes (Expanded replaces fixed 140px width); translations refreshed and manuals shipped for all locales.

Version 1.0.19-beta+10

June 10, 2026


Print, export, and setlist-editing build on top of 1.0.19-beta+9:

  • Inline ChordPro editor in setlist export. An "Edit ChordPro" button in the Songs tab swaps the per-song settings + preview for a syntax-highlighted source editor bound to the selected song, with quick Page/Column break inserts at the cursor; Done saves and reflows the preview.
  • Side-rail chord-chart positions in PDF export. Four new "used chords" placements put the chart in a vertical rail left/right of the page (every page, or first page only); the rail is column-major and auto-sizes to exactly the width its diagrams need.
  • Shared zoomable preview with thumbnails. A new PdfPagesPreview (scrollable pages, clickable jump-to-page thumbnail strip, zoom slider with fit-page / fit-width) is now used by the single-song print dialog and both setlist-export modes, so a whole tall page fits on screen.
  • Edit button on setlist entries. Setlist entries open the song editor in a split view; the open survives the tab switch instead of being dropped.
  • Drop songs at an exact index + drag multi-selections. Dragging a song into a setlist now inserts at the targeted row instead of always appending, and a checked multi-selection can be dragged as a group.
  • Chord-chart sidebar follows live edits. The "used chords" panel, key detection, and custom-block list read the live editor buffer (song-id tagged) instead of the last-saved DB row, so they no longer show a previous song's chords or miss grid chords just typed.
  • Grid chords, default voicing, B♭/F♯ recognition. Chords inside grid sections now reach the chart panel and PDF, the default voicing prefers the canonical open shape (open D xx0232 over x00232), and flat/sharp roots resolve to a chart.
  • "Chord shapes match the names" capo option. Renamed capo setting, default off: a written [G] with a capo stays a G shape with the capo drawn as a line; off restores the concert-pitch re-grip. Threaded through the inline provider, print, and songbook export.
  • Lock chords in theater mode. New Preferences → Theater switch (default off): when on, tapping a chord in the inline song render or the chord-chart side panel is a no-op while presenting (dragging was already disabled), so a stray touch on stage can't open the chord-assignment dialog.
  • Imported sheet songs embed in songbook export. A setlist containing imported PDF/image attachments now rasterises and embeds those pages (with the book header/footer and contiguous page numbers) instead of failing the whole export with "Cannot raster a malformed PDF file"; missing attachments fall back to a title placeholder.
  • Export/print deadlock fixes (macOS). Single-song printing now passes dynamicLayout: false so it can't deadlock the main thread under FlutterRunLoop, and an oversized saved chord-chart scale is clamped to one page height so a top/bottom chart block can't wedge pw.MultiPage — both were beachballs that survived restart/reboot (support reports, builds 8 & 9).
  • Help screenshots & PDF manuals download on demand in slim builds. Store builds strip the ~57 MB of help images + per-locale PDFs and lazy-download them (streaming progress, SHA-256 verify, atomic swap), mirroring the font/soundfont pattern; markdown topics + search stay bundled and fully offline. Settings → About gains a disk-usage / clear entry.
  • Smaller fixes: side-rail strip is omitted entirely for songs with no diagrammable (guitar) chords; comment blocks no longer print a stray leading "#"; per-song layout label only names a layout actually applied to the selected song; selected song is preserved after leaving the inline editor; Edit button always opens a split view, not maximized; Escape leaves the Playback Timer / Lead Time fields and reliably closes the export dialog; help split view remembers per-section scroll position; manual PDF renders ⌘⌥⌃⇧ and the keyboard-shortcut/chord-diagram/debug-log help images no longer ship missing-glyph "tofu" boxes (images cropped + shrunk, ~14 MB saved); help search highlights matched terms; "Chord diagram colours" heading renamed to "Chord diagram settings"; the Preferences → General language dropdown no longer crashes the dialog (red ErrorWidget) when the stored locale isn't one of the listed options (e.g. a bare "zh") — it falls back to System; the share realtime listener no longer paints a full-window red overlay on a cold start where a restored user lands before the Supabase client is ready; build tooling pulls high-value secrets from the macOS Keychain instead of plaintext.

Version 1.0.19-beta+9

June 9, 2026


Polish and grid-rendering fixes on top of 1.0.19-beta+8:

  • Real help screenshots. The placeholder images from 1.0.19-beta+8 are replaced — every in-app help topic and the downloadable PDF manual now embed actual screenshots of the current app, captured per locale.
  • Chord grids follow the ChordPro spec. Grid sections (| chord | grid | lines) now align their columns across rows on a shared beat grid, draw section and compound bar lines correctly, hide silent beats, and honour margin and shape attributes, on screen and in print.
  • Theater mode left-margin slider. A new slider below the scale control shifts the sheet music right (up to 600 px) to clear a stand clamp or center the view; it fades with the page pill.
  • Theater layout loads reliably. A custom display layout now applies retroactively when the layout list finishes loading after Theater mode has already opened, instead of falling back to the default.
  • Smaller fixes: translations refreshed for the new Theater margin control across all 22 locales with regenerated PDF manuals; internal manual-image capture pipeline reworked to produce reproducible, real-app screenshots.

Version 1.0.19-beta+8

June 8, 2026


Customization and fixes on top of 1.0.19-beta+7:

  • Section colors panel. A new "Section colors" panel in the sidebar sets the bar and label color for each section type — Verse, Chorus, Pre-Chorus, Bridge, Intro, Outro, Lyrics, Tab/Grid, Comment, and any named custom blocks — independently of the body text color (controlled in the Fonts panel). A dot indicator marks rows with a custom override; reset via the picker's Reset button. The Fonts panel gains Intro, Outro, and Lyrics rows. Body text color and bar/label color are now fully separate controls.
  • Illustrated in-app help and PDF manual. All 29 help topics now embed screenshot images; the downloadable PDF manual regenerates with those images embedded. Note: the screenshots in this build are placeholder images — they will be replaced with final, accurate screenshots in an upcoming update. Asset directories are explicitly listed in pubspec.yaml so all PNGs bundle correctly on every platform.
  • Grid chord transposition. Key changes and transpose operations now apply to Grid sections (| chord | grid | lines); previously grids stayed in the original key. Spacer (.) cells now render as blank beats instead of literal periods.
  • Fret range filter lower bound uses chord start position. The minimum-fret filter in the chord diagram picker now matches chords by where they start, not where they overlap — matches what users expect when filtering by starting fret.
  • Automatic scrollback label adapts to available width. The "Automatic scrollback" checkbox in playback settings shows the full label when there is room and abbreviates only on narrow panels.
  • Section label color follows section-type font color. Section labels (e.g. CHORUS, BRIDGE) now inherit the text color of their section type instead of always using the accent bar color, so your per-section color choices apply consistently.
  • Font color control for the Section Headers row. The color-picker button in the Fonts panel "Section headers" row was hardcoded off — it is now enabled.
  • Reset default layout. A new "Reset default layout" action in Maintenance → Factory settings discards the saved default display layout and restores factory defaults — useful when a layout change can't be undone from the display settings panel.
  • Smaller fixes: Enter now confirms Delete Layout and all other showConfirmDialog sites (App Store / Play Store / Microsoft Store); VERSE label is suppressed on implicit sections not created from an explicit {sov} directive; DB restore preserves the device's sync direction so restoring a macOS backup onto an iPhone no longer flips it to send-only; macOS Ctrl+tap opens context menus; sticky notes no longer flash stale text after editing on Android; the "Maintenance" tab label in Preferences shows full text when there is room and abbreviates only when the tab bar is narrow; translations refreshed across all 22 locales with updated PDF manuals.

Version 1.0.19-beta+7

June 7, 2026


Preferences refinements and live-performance fixes on top of 1.0.19-beta+6 — new font control for section header labels, VERSE label toggle, imported-song auto-focus, scrollable locked sticky notes, metronome and Theater mode improvements:

  • Independent font control for section headers. A new "Section headers" row in the sidebar Fonts panel sets the size and style of CHORUS, BRIDGE, VERSE and similar section labels independently — they were previously locked at 70% of the body font.
  • Show the VERSE section label. Preferences → General → ChordPro Layout adds a "Show VERSE section label" toggle (default off); the label then renders the same way CHORUS and BRIDGE do.
  • Imported song auto-selected in the sidebar. A single-file import now scrolls to and selects the new song immediately after completing.
  • Locked sticky notes scroll. A note locked to a song uses a scroll view so long content is readable by dragging vertically.
  • Metronome plays whenever enabled. Enabling the metronome via tap or footswitch now starts the click immediately regardless of playback state — previously it only played during an active song.
  • Theater mode pill always starts dimmed. The pill opens dimmed the moment Theater mode launches and stays fully visible for 2 s after any interaction; fades after 800 ms following a footswitch or tap page turn so it clears sheet music quickly, 3 s after a direct pill tap or hover.
  • Preferences → General reorganized. "Behaviour" is now three panels — Editing (autosave, field directives, instrument), Theater mode / Presentation (keep awake, advance mode, layout, sticky notes), and Export (ChordPro key options, archived songs, recording format). The Theater section header is renamed "Theater mode / Presentation".
  • Smaller fixes: Enter now confirms the Save Layout dialog; restore success snackbar stays visible for 10 s; preference description texts left-align under their control rows; translation refresh across all 22 locales and updated PDF manuals.

Version 1.0.19-beta+6

June 6, 2026


A refinement follow-up to 1.0.19-beta+5 — keep-or-absorb control for typed ChordPro field directives, monospaced fonts in every section style, two print fixes, and a manual-sync backlog banner:

  • Keep typed field directives in the song text. New "Move field directives into controls" preference (default on, today's behavior). On: a typed {key:}/{capo:}/{transpose:}/{playtime:} is absorbed into its column/control and removed from the editor buffer — which finally clears the stuck modified dot — with a one-time "where it went" notice and a don't-show-again option. Off: directives stay inline as the source of truth, and the Key field, capo slider and transpose buttons write back into the text so a later editor save doesn't revert them. Adds a separate "Put exported key at the end" preference (default leading) that places the exported {key:} (with capo/tempo) after the body so {title:}/{artist:} stay on top.
  • Monospaced fonts in every section style. The section font picker no longer restricts non-Tab/Grid styles to proportional faces — any family in the registry, mono included, is selectable for chords, verses and the rest. Tab/Grid stays mono-only because it aligns by character column.
  • More sidebar height in multi-select. "Select multiple songs" now hides the per-song Format/Playback/Instrument panel and gives the full sidebar height to the song list.
  • Manual-sync backlog banner. A dismissible banner appears above the main content once ~50 distinct changed records are queued in the outbox on a manual sync interval with a signed-in account, offering a one-tap "Sync now" that runs even in never-ask mode. It counts distinct (table, record_id) pairs rather than raw outbox rows, so the figure matches "songs changed" instead of per-autosave writes; dismiss is session-scoped and re-shows if the queue climbs another full step.
  • Clean exits no longer auto-submit as crash reports. The recovered-session flush uploaded every retained session log not yet marked sent, so the first manual support report could auto-submit recently clean-exited sessions as "Recovered prior-session log." A per-session clean sidecar now marks clean teardowns and skips them; only genuine crash / force-quit logs are auto-recovered.
  • Print: contents page numbers on the title line. The Table of Contents page number now shares a row with the song title (subtitle beneath) instead of bottom-aligning beside both lines and floating mid-way when the subtitle shows.
  • Print: chord-only lines no longer smoosh. Chord-only PDF lines now get chordFontSize × 0.8 of trailing space (mirroring the on-screen ChordLineBuilder) and credit the spaces you typed between chords, instead of a flat 3pt gap; chord+lyric cells keep the tight gap.
  • Smaller fixes: hardened the feature-toggle notifier against a missing SharedPreferences plugin so reading a toggle in unit-test paths keeps the default instead of throwing.

Version 1.0.19-beta+5

June 5, 2026


A focused follow-up to 1.0.19-beta+4 — full key/capo/tempo round-tripping across ChordPro import and export, on-demand key inference shown everywhere, and controller-bindable lighting actions:

  • Imported keys no longer lost. ChordPro import was re-reading the key from text the directive parser had already stripped, so an explicit {key:} disappeared from both the source and the stored key field. Import now reads the parsed key and capo like the persist path already did.
  • Key inferred on demand, shown everywhere. Auto-detection previously ran only inside the Format sidebar panel; the key is now derived from the chord content for any key-less song and shown as the Key chip in the song view, the Songs-tab library and the setlist panes. Inferred keys are never persisted, so the stored key stays explicit-only.
  • ChordPro export round-trips structure. Promoted {key:}, {capo:} and {tempo:} directives are re-injected on export — single song or whole library — so files round-trip faithfully. An explicit key always exports; an auto-detected key exports only when the new Preferences → General → "Export auto-detected key" toggle is on (default off, preserving source fidelity).
  • Setlist song picker shows the key. The Setlist-tab Library pane lists each song's key in its subtitle, like the Songs-tab library.
  • Lighting actions for MIDI, OSC and footswitch. Five controller-neutral DMX actions — blackout, apply current cue, and output on / off / toggle — join the shared action registry, so they appear automatically in the MIDI, OSC and footswitch mapping dropdowns. Output actions are guarded by the DMX-available check so an inbound controller can't resurrect transmission behind your back; engine-routed actions no-op when DMX is off.
  • Setlist DMX cues fire while stepping. The setlist cue dispatcher gated on the active-entry provider, which lags the entry id during the two-step select-and-open, so stepping a setlist fired zero cues — only manual scene-apply worked. The cue is now resolved directly from the selected setlist's entries by id, decoupled from song selection.
  • Smaller fixes: the imported capo directive is now mapped alongside the key; in-app help and the bundled manual document the new key/capo/tempo round-trip and the Export-auto-detected-key preference.

Version 1.0.19-beta+4

June 4, 2026


A stability follow-up to 1.0.19-beta+3:

  • macOS Art-Net now reaches the wire. beta+3 logged frames as sent but Wireshark showed nothing leaving the Mac — macOS Local Network Privacy was silently dropping all LAN access. The macOS target now declares the Local-Network usage keys (mirroring iOS), and the sender checks the socket's send() return value so a refused datagram is logged as tx dropped instead of a phantom success. Unicast to a configured node IP works now; broadcast to "all nodes" still needs the Apple-managed multicast entitlement, which is pending approval.
  • Crash-resilient bug reports. The app mirrors each run's diagnostic log to its own file (last 5 sessions, FIFO), so a crash or force-quit before you can report — e.g. an early-bootstrap iOS first-start crash — is no longer lost. A successful upload also flushes any earlier unsent sessions, each marked sent only on success so nothing sends twice. The danger-zone clear wipes all session files.
  • Editor startup overlay fixed. The song editor read a provider inside dispose() to clear its sticky-notes anchor; on the first-launch shell rebuild this threw a caught "ref when unmounted" error shown once as a red overlay at startup. The notifier is now cached in initState like the editor's other dispose-time providers.
  • Smaller fixes: DMX/OSC settings sidebars no longer flood debug builds (and support bundles) with the ListTile-in-ColoredBox assertion — each ExpansionTile header now has a transparent Material ancestor; the macOS multicast entitlement is disabled until Apple approves it (its mere presence forced a development-cert signing requirement that broke flutter build macos), with unicast-to-node egress unaffected.

Version 1.0.19-beta+3

June 3, 2026


A song-management beta on top of 1.0.19-beta+2 — bulk library tools, band-song management, and a batch of editor / print / sync fixes:

  • Multi-select bulk tools. Songs tab: bulk set rating, apply a saved layout, tag and archive across a whole selection; ⌘/Ctrl+A select-all, Shift-range, Esc to clear/exit, and the list takes focus when the mode turns on. Selection survives a bulk rating/layout change.
  • Bulk-add in the setlist song picker. Same Select-multiple mode in the in-setlist picker — add a batch to this setlist, another existing one, or a new one in the current sort order (single Drift transaction, one idempotent outbox mutation per row).
  • Trash view per-row actions. Real Restore (with Undo) and "Delete permanently" (guarded hard delete behind a confirm) on every deleted row, independent of edit/multi-select mode.
  • Automatic "Sheet" tag. Non-removable Sheet mark for sheet-music songs, mirroring the synthetic Audio tag, with an include/exclude filter facet.
  • Sticky notes pin-to-sheet (Pro). New Behaviour preference anchors song notes to the chord sheet so they scroll with the content and cull off-sheet; defaults to the existing screen behaviour.
  • Song metadata rendering. Composer, lyricist, arranger, duration and copyright now render on screen and in print behind the Meta toggle; the arranger directive is no longer stripped on save/import; new print "Meta" toggle in the dialog and per-song panel.
  • Band songs pane + explicit remove. Bands tab lists every shared song and offers owner/admin "Remove from band" — soft-deletes its setlist entries, tombstones the shared row, and clears the personal overlay; the list refreshes immediately. Manual-sync mode adds a "Remove & sync now" action and a suppressible reminder.
  • Own published songs treated as personal. A song you own and have published to a band setlist is now selectable in multi-select and shows Share / Archive / Delete instead of read-only band chrome (foreign band songs with no local row stay locked).
  • Band-song sync fixes. Server apply_field_lww no longer dead-letters band_song_prefs overlay writes from transpose / re-key / rate: the INSERT path honours table defaults instead of writing NULL into NOT-NULL columns, and the UPDATE path no longer double-assigns updated_at (42601). Both verified on the linked project and fix already-deployed apps without an app update.
  • "Retry all" for failed sync items. One button re-queues every dead-letter row in a single transaction (Settings → About → Support).
  • Receive-only outbox bounded. Pending entries on receive-only devices are collapsed per-row and the never-sendable backlog is purged, preventing unbounded growth and a stale-write Field-LWW hazard on a later direction flip.
  • Pro entitlement on offline cold start. Cached Pro state surfaces immediately on a no-internet network instead of after two serial socket timeouts; launch session refresh bounded to 6s.
  • Chord-diagram name styling. Font / colour / size button for the diagram name in the chord assignment dialog, applied across every diagram card; round-trips through DisplaySettings for sync and backup.
  • Editor conveniences. Metadata insert snippets (composer / lyricist / arranger / copyright / duration), the just-created chord shape is reselected on return, the Theater page-turn pill auto-fades during playback, and tapping a rendered chord selects its token in the editor source.
  • Print colour + chord font. PDF output honours each element's colour and the chord symbol's font instead of forcing green chords / Verse font / black text; monochrome printing still forces ink.
  • ChordPro library export. Archived songs are excluded by default (opt-in "Export archived songs" preference writes them to an archived/ subfolder); deleted songs are never exported.
  • Metronome from MIDI & footswitch. New on/off/toggle metronome actions can be bound to MIDI controls and footswitch pedals; the actions no-op cleanly when the metronome feature is switched off.
  • Footswitch reliability. The song list no longer swallows pedal key presses when it holds focus, so footswitch page-turns keep working after you tap or scroll the list (the hydrated enabled flag is now logged for diagnostics).
  • DMX Art-Net destination. Live Art-Net output now goes to the configured node address even on a non-default network interface, instead of only the host's default-route NIC where directed broadcasts could silently vanish.
  • Smaller fixes: OSC applySettings serialized to stop a startup double-bind race (no more spurious bind-failed log); migration 20260528120000 version-collision resolved; diagnostic reports show the live pending-outbox depth instead of the last post-sync snapshot; the Edit (row-actions) toggle highlights when active; perf — parsed-AST and DisplaySettings LRU caches, precomputed song-list sort keys, isolated app-root rebuilds, and a cheaper sidebar list signature.

Version 1.0.19-beta+2

June 1, 2026


This build fixes a setlist sync bug. Running Repair could leave a setlist's songs missing on your other devices — the setlist name synced but its contents didn't, and repeating Repair kept re-dropping them. Songs added to a setlist (and setlist sticky notes) are now tagged with an owner so the authoritative Repair push includes them, and Repair now also keeps any older un-tagged entries instead of discarding them.

Please update all of your devices first. Then, on the one device that still shows your setlists with their songs, go to Settings → Repair and run it once — your other devices will catch up automatically. Don't run Repair on a device until it has been updated.


Version 1.0.19-beta+1

May 31, 2026


This build fixes in-app update detection and rolls up everything from the 1.0.18-beta line, so testers who were stuck on an older beta finally get the update prompt:

  • Update detection fixed. The in-app updater compared versions with semver rules that throw away the +N build number, so consecutive beta builds (1.0.18-beta+1 → +2 → +3) all looked identical and no "update available" banner ever appeared. The build number is now used as a tiebreaker when the rest of the version matches, so beta→beta updates are detected again. (This is also why this build is 1.0.19-beta rather than another 1.0.18-beta+N — existing installs carry the old comparator and only notice a base-version bump.)
  • Roomier Chords tab with a split right-hand panel (diatonic palette + substitutions helper), each with a collapsible "What is this?", plus browser-style back/forward chord history.
  • Per-instrument SoundFont voices for banjo, mandolin and ukulele instead of the nylon-guitar preset.
  • Reworked progression builder: single-screen dialog with free-typed chords and an auto generator (genre / mood / complexity), per-section editing, tap-tempo and ChordPro export.
  • Flashcards difficulty levels (Beginner / Advanced / Expert).
  • Sidebar maximize cycle (balanced → settings-maximized → list-maximized) and an edit-saved-layouts dialog (rename / reorder / delete).
  • Default instrument & tuning for new songs preference.
  • Sticky notes in normal view (Pro, opt-in).
  • Per-device sync direction in the roster and a steadier device roster that survives uninstall/reinstall, with a live restore progress bar.
  • Songbook front-matter pagination so the first song starts on page 1, with body-relative footer/ToC/index numbering.
  • On-screen {np}/{cb} break markers, the effective key shown beside the artist in Library/Setlist lists, and bracketed chords like (Cmaj7) that now parse, transpose and draw their diagram.
  • Smaller fixes: chord-assignment dialog stays open after Remove, duplicate setlist positions healed via a partial UNIQUE index, sticky-notes "+" relocated, Hindi manual glyph-coverage gate fixes (B↔H arrow, ▲ and Δ), and release/harness tooling fixes.

Version 1.0.18-beta+3

May 31, 2026


A broad refinement build on top of 1.0.18-beta+1, with most of the work in the Chords tab, songbook printing and the sidebar:

  • Roomier Chords tab. The chord finder + diagram grid stay on the left; a new right-hand panel splits into the related-chords (diatonic) palette and the substitutions helper, each ending in a collapsible "What is this?" explanation. Browser-style back/forward chord history tracks chord identity (root/quality/slash) via a single atomic setChord, so suggestion-chip and finder applies are one history entry each. The split is responsive and falls back to a single stacked column when too narrow so the grid never collapses.
  • Per-instrument SoundFont voices. Banjo (GM 105), mandolin (bank 16 / patch 25) and ukulele (bank 8 / patch 24) now play their own FluidR3Mono_GM2 voices instead of the nylon-guitar preset, falling back to guitar when a preset is absent. The web flutter_midi_pro path can only address bank 0, so only banjo gets its real program there. Octave mandolin now sounds an octave below standard; the banjo 5th-string drone rings in its high register.
  • Reworked progression builder. Single-screen dialog: free-typed chords (ChordPro brackets + slash basses) plus an auto generator from genre / mood / complexity with an optional key+mode override. Verse / Chorus / Bridge section columns, each independently editable (reorder, beats, remove) with its own play button and a "More chords" action that appends diatonic-then-secondary-dominant chords that fit; tap-tempo, per-chord audition, voice-leading octave smoothing. "Copy sequence" exports to the clipboard as ChordPro (sections wrapped in {start_of_…}/{end_of_…}); "Copy to new song" jumps to the new song in the editor split view. Auto picks a fresh random key each Generate and shows the detected key beside the BPM slider. New pure progression_generator.dart engine, fully unit-tested.
  • Flashcards difficulty levels. Beginner / Advanced / Expert pools (3–4 options; Expert draws look-alike distractors sharing the answer's root or quality). Difficulty is remembered for the session, a Back action returns to the start screen instead of closing, and Close is pinned bottom-left so it doesn't shift between the start / question / result screens.
  • Sidebar maximize cycle. The songs-tab maximize button cycles balanced → settings-maximized → list-maximized. Settings-maximized hides the song list and its filter/sort/controls row; list-maximized collapses the settings panel to its tab row; tapping a settings tab while collapsed maximizes the panel onto that tab. The list and filter section stay mounted (height 0 / Offstage) so scroll position and search text survive the cycle.
  • Edit saved layouts in one place. An edit button beside Save opens a dialog to rename, reorder (drag handle) and delete saved layouts; the per-row trashcan in the Load-layout popup is gone. Reorder persists by permuting existing timestamps — no schema change, no fabricated dates.
  • Default instrument & tuning for new songs. A Settings → General → Behaviour preference seeds the musical state of new songs and any song without its own display settings; per-song overrides still win. Defaults to guitar/standard so existing users see no change.
  • Sticky notes in normal view (Pro). Opt-in setting that also paints sticky notes over the song outside Theater / render-only mode. Defaults off.
  • Per-device sync direction in the roster. Each device's bidirectional / send-only / receive-only direction now shows in the roster (including receive-only devices). It rides the existing control-plane heartbeat upsert into user_devices — outside the outbox/data-plane, so the receive-only rule (which only suppresses pushing the outbox) is not weakened. Additive user_devices.sync_direction column (text, default 'bidirectional', CHECK), applied to the linked production DB; setSyncDirection re-fires the heartbeat so the roster updates within seconds via Realtime.
  • Steadier device roster. Device identity survives uninstall/reinstall — Keychain on iOS/macOS, an ANDROID_ID-derived UUID on Android — so reinstalls reuse the existing user_devices row instead of minting a duplicate. Roster rows show the real model/host name plus a short stable serial, with a per-device Remove button (owner-delete; a still-installed device reappears on its next heartbeat). The "Updating your library" restore banner replaces "under a minute" with a live, self-calibrating progress bar and elapsed/remaining ETA.
  • Songbook front-matter pagination. In setlist songbook export the cover, table of contents and index are now front matter and no longer count toward song page numbers: the first song always starts on page 1, and the footer "x / y", the ToC entries and the index references are all body-relative and measured in lock-step (the ToC page count is now measured exactly instead of estimated). Body pagination math extracted into SongbookPagination with unit tests. The Songbook preview is captioned as the whole-book preview.
  • On-screen break markers + key in lists. ChordPro {np}/{cb} now draw a subtle "page break" / "column break" marker in the editor and render view where they fall (the PDF side was already correct, and {cb} already mapped to a column break — the gap was purely on screen). The Library and Setlist panes both show the effective transposed/override key right after the artist ("Eagles • C"), matching the printed ToC.
  • Bracketed chords behave like normal chords. A chord in round brackets, like (Cmaj7), is still marked optional but now parses, transposes, draws its diagram, follows the Western/German/Latin notation setting and counts toward key detection on the inner chord while keeping the brackets visible.
  • Chord assignment dialog stays open after Remove. Clearing a fingering assignment now persists the cleared state and resets the local selection instead of popping the dialog, so you can keep browsing or pick a new shape.
  • Duplicate setlist positions healed. A library repair now detects and renumbers setlists where two songs share the same position before it pushes them out; (setlist_id, position) is now a partial UNIQUE index so the order stays consistent across devices.
  • Smaller fixes: sticky-notes "+" add button moved above the note list and inside the collapsible section to match the Tags convention; Hindi user-manual PDF no longer fails the glyph-coverage gate on the new B↔H arrow (U+2194); release pre-upload harness gate no longer false-positives on libmpv's bundled "/command" string, which bundles with media_kit on Android/Linux/Windows; support-report retrieval uses -o json (the only output mode that works on Supabase CLI 2.101).

Version 1.0.18-beta+1

May 30, 2026


A landmark beta on top of 1.0.17-beta+2 consolidating several feature waves — built-in tuner, DMX, OSC, sticky notes, a much bigger Chords tab, songbook export, linked-audio LAN sync and steadier Band Mode repair:

  • Built-in tuner (Pro). Status-bar button next to the metronome opens a chromatic-tuner dialog seeded from the current song's instrument + tuning. 27-instrument / 200+ tuning catalog, PCM16 mic capture + YIN pitch detection with presence envelope, harmonic snap and nearest-target hysteresis. Three visualizers (Classic needle, LED stripe, rotating Strobe) plus an open-string chip row; A4 reference 415–466 Hz; selection persisted to SharedPreferences; mic only listens while the panel is open. Window can shrink and degrade content gracefully, perfect-twelfth aliasing between open strings fixed, live detected pitch shown above the dial, feature toggle in Preferences → Pro. Platform mic permissions wired for iOS / macOS / Android.
  • DMX lighting (Pro, opt-in). New Controls → DMX sub-tab to author fixtures (1–512 channels, two universes, channel-role map), scenes (per-fixture sliders, optional fade) and chases (reorderable steps, per-step time/fade, loop / one-shot). Each setlist song binds one cue (scene or chase); a Riverpod cue dispatcher sends over Art-Net from a headless engine (44 Hz output, ~1 Hz keepalive, snap vs linear fade, auto-blackout on toggle-off). Preferences → Pro toggle (default OFF) + Art-Net config and a connection-test button. Drift schema + Supabase migration with explicit GRANTs and apply_field_lww allowlist update.
  • Expanded Chords tab (Pro + free tools). Related-chords palette (diatonic chords of the current key, free), harmonic-substitutions tool with the reason per chip (Pro), reverse chord finder that names a fingering placed on a blank fretboard (free), progression builder with playback + copy-to-new-song as ChordPro (Pro), flashcards trainer with three modes (Pro), and a custom-tuning editor (Pro, local-only via a process-global overlay so the 23 const-resolver call sites stay untouched). Mandolin (4-string) and banjo (5-string) join guitar / ukulele / piano with full diagrams and tuner-bridge integration; capo + instrument filters now show for all fretted instruments. Chord-diagram assignments are namespaced per transposed key (t<N>:: prefix) so a song played in two keys keeps separate shapes, with a one-time idempotent migration of legacy assignments.
  • OSC Control (Pro). Full parallel of MIDI — own Devices sub-tab, inbound (OSC → action) and outbound (event → OSC) mappings with Learn and panic, per-mapping routing, UDP + TCP/SLIP listen ports and outbound targets, and a Flutter-free OSC mini-codec with SLIP 1.0 framing.
  • Sticky notes (Pro). Per-song, per-setlist and setlist-wide floating notes; draggable, resizable (writes width/height fractions), lockable, per-note title + body styling (font / size / colour / bold / italic via the shared section-font picker), per-note hide flag synced across devices, status-bar "hide all", and a render-only view when the editor pane and right sidebar are both hidden. Two synced tables (song_sticky_notes, setlist_sticky_notes) flow through the standard outbox + apply_field_lww so partial updates propagate field-by-field; setlist notes inherit the parent setlist's sharing scope. Editor popup adds Copy / Paste / Duplicate / Delete via a Riverpod-backed clipboard.
  • Chord-name notation switch. Preferences → General → ChordPro Layout switches every on-screen and PDF chord symbol between Western (A–G), German/Hungarian (B↔H, is/es accidentals) and Latin (Do Re Mi). Storage, sync, ChordPro export and the chord parser stay canonical Western so files remain portable; live-switches across render view, theater, sidebar chart, edit dialog, key chip, inline diagrams, slash bass labels and exported PDFs (single-song + songbook).
  • Linked audio promoted to a real Pro feature + LAN sync. Drops the kDebugMode gate; MediaLink reduced to a single localFile path (legacy musicLibrary/url entries dropped at decode) and ~3.5 kloc of streaming-source plumbing removed (Cobalt, youtube_explode, yt-dlp installer, url_media_cache). Desktop→mobile sync over the same Wi-Fi: a shelf HTTP server + bonsoir mDNS advert (_songbookbuddy._tcp, TXT-filtered by Supabase user id); mobile discovers, downloads SHA-256-mismatched entries into a mobile-local JSON store (never round-tripped through MediaLink), and playback prefers the local copy, falling back to the cloud path. A linked file now derives the song's tempo (pure-Dart onset/autocorrelation BPM detection) and playtime (SoLoud duration); editable BPM field + tap tempo; optional count-in before playback (also honoured in the dialog Preview); user-selectable recording format (AAC/WAV/FLAC, default AAC); copy-imported-audio preference (default reference-in-place) with a direct-download service for direct audio URLs (HEAD probe, content-type + 100 MB guards); remembers the last audio folder and suggests recent direct-audio links.
  • Per-device sync direction. Bidirectional / send-only / receive-only, persisted in local-only AppMeta (never leaves the device), gated inside the sync cycle — authoritative repair, band pulls and live sessions stay bidirectional. Switching away from receive-only schedules a drain of the outbox; receive-only devices no longer prompt to upload local data.
  • In-app announcements + service gates. New app_notices / app_service_gates tables drive a status-bar bell + inbox (severity-tinted markdown cards, optional CTA), a top banner for warning/critical notices, and a one-shot critical modal. Five service entry points (sync, update check, support upload, band realtime, live session) consult a ServiceKind gate so outdated clients skip the call and surface a localized reason; notices refresh on AppLifecycleState.resumed behind a 15-minute debounce; SELECT granted to anon so banners appear pre-sign-in.
  • Setlist export as a songbook + per-song print. Single multi-song PDF with cover, two-pass TOC with real page numbers, alphabetical back-of-book index, header/footer placeholders ({title}/{artist}/{key}/{setlist}/{page}/{total}), song-order choice, new-page-per-song + even-page/duplex options, columns/landscape/monochrome controls, live preview, and synced named presets. The setlist print dialog gains Songs and Songbook modes with per-song overrides persisted to a synced setlist_print_layouts table. PDF header now shows the transposed key even without a {key:} directive.
  • Library management. Multi-select mode in the song sidebar for bulk tag / archive / delete with undo (Cmd/Ctrl+click toggles, Shift+click ranges; one __bulk__ outbox entry per op via archiveByIds/unarchiveByIds/restoreByIds); tri-state library scope (active → archived → deleted) with a deleted-songs view and a return banner; audio tag is now filterable.
  • Band Mode reliability. Band removal asks "keep as personal copies" (snapshot decryptable band_songs first) vs "delete band content"; restoreBand un-tombstones every band_songs / band_song_prefs / setlist / setlist_songs row tied to the band. Library Repair adds a purgingOrphans phase that hard-deletes songs/setlists/band_songs whose band_id no longer exists, tracks all ~20 sync tables with a linear progress bar + per-category counters + ETA, propagates restoreResync errors to state.lastError, and forgetBandLocally wipes band_songs/prefs. The "Complete resync" button is replaced by "Repair library across devices". Bulk duplicate cleanup is a single __bulk__ outbox entry reporting the deleted count. Authoritative resync heals truncated artist/album blobs.
  • Sidebar & editor polish. Song Format panel grouped into accordion sections (Tags, Notes, Appearance, Visibility, Indentation, Fonts, Layouts) that open one at a time, with persisted open/pin state and a three-state tap cycle; Save Defaults/Reset moved into Layouts. ChordPro source-driven vertical spacing between sections; {np}/{cb} layout sections preserved so page breaks reach the PDF. Position slider stays at the end when a song stops without auto-scrollback. Theater-mode layout preset (restored on exit, musical state preserved).
  • Chord catalogue + parser aliases. 12 new qualities (min7#5, 13sus4, 7#11, m11b5, m13b5, minMaj13, 7b5b9, 7b5#9, 7b9#11, 7#9#11, 7b9b13, 7#9b13) plus aliases (m(maj7)/mMaj7/mΔ7/m/maj7, Δ/Δ7/Δ9, M7/M9/M11/M13/MA7/CM, °/o/o7, ø, sus/7sus/9sus/13sus, add2/add4), all dynamically fingered. PDF fret-position label moved to the left to match the render view; a favourite no longer overrides per-chord shape assignments.
  • Anonymous support uploads. INSERT-to-anon RLS policy on support_reports (gated on user_id IS NULL + length caps); the in-app sheet now chooses direct upload vs mailto based on connectivity state instead of auth state, so logged-out users' reports (first-run crashes, sign-in problems) come through.
  • Smaller fixes: count-in "Clicks" label no longer clips and follows the dialog's edited BPM; DMX/OSC transport settings moved into their own Devices sidebars; Advanced log-areas checklist hides DMX/OSC/Media/Band rows when off or unavailable; DMX scene-editor fixture-card width accounts for the 1 px border; AudioImportController moved to the Riverpod Notifier API; check_patched_deps.sh repointed at doc/todo/dev/patched-deps.md; English help + manual catch-up across all the above; translation sweep across all 22 locales including 22 rebuilt user_manual_.pdf and a fixed setlist_printing help-manifest parity drift.

Version 1.0.17-beta+2

May 22, 2026


A performance-focused beta on top of 1.0.17-beta+1 — person-to-person sharing, a rebuilt footswitch gesture model, sheet-song page turns, and multi-device library repair:

  • Person-to-person sharing (lifetime Pro to send; any signed-in user can receive). New People sub-tab on the Bands tab: connect via a 6-char code (direct-connect Edge Function → mutual artists rows), then send songs/setlists with attachments through the share-transfer Edge Function and share-payloads bucket. Receiver gets a Realtime inbox, a red-dot tab badge, and a refresh-connections button (targeted artists pull, no full sync). Imports always create fresh ids (plain copy). Non-Pro receivers get the songs but a setlist surfaces a "requires Pro" toast. Daily cleanup_expired_shares pg_cron sweep (30d TTL / 7d declined).
  • Footswitch gesture model. Replaces press-cycle tracking with a gesture state machine that survives AirTurn BT200S auto-repeat: snappy single/double taps plus one untimed Long hold recognized at 3 key events and bridged across the pedal's 1–2 s mid-hold dropouts. SupportLog timestamps now carry milliseconds.
  • Controller mapping UX. Drag-to-reorder MIDI (per-direction) and footswitch mapping lists; new MIDI rows default to "Unknown" and auto-learn the next inbound message. New app actions: theater on/off, first/last setlist entry; "Last input" lines show the dispatched action + trigger.
  • Theater page-turn for sheet songs. PDF/image songs participate in page-turn modes (pill chevrons, double-tap middle thirds, arrow keys, footswitch, MIDI); auto-page-turn drives an equal-time timer, images treated as viewport-height pages. New manual half-page advance mode; bare ↑/↓ bound to prev/next page; left/right thirds step the active setlist in every mode.
  • Finger numbers on chord diagrams. New Preferences → General toggle (default off) prints the suggested fingering digit inside each fretted dot in the render view, theater mode, side chart, and PDF. Decoupled from the note-name row; PDF gets a positioned-digit overlay.
  • Per-occurrence chord-shape overrides. Inline chord-shape assignments now key on occ:<name>:<index> (the Nth occurrence in document order) instead of raw parse position, so adding lines above an assigned chord no longer reverts it. One-time per-song migration rewrites legacy seg:<id> overrides on open.
  • Multi-device library repair. New user_devices roster (owner-only RLS, Realtime) with per-sign-in heartbeat. "Repair library across devices" takes a safety backup, bumps user_library_generation, and pushes truth via restoreResync; other devices detect the bump, ask before a destructive slave catch-up (Not now / Restore), then wipe, re-pull at the new generation, and stamp acknowledged_generation. Confirmable per-device completion dialog + live "X of Y devices up to date" status. All other sync entry points hard-stop on a device while its repair runs.
  • Stranded-row & account reconcile. After a server reset/reseed, a cheap server-id diff per owned table flags local synced rows the server no longer has and offers Upload / Delete / Leave as-is (auto after explicit sync, plus Settings → Maintenance → "Check library against server"). Sign-in with a different account than created the local data now prompts once to adopt / delete / keep instead of leaving the rows invisible to sync. Stranded detection is owner-id-agnostic.
  • Pro feature toggles + ChordPro #comments. Active-Pro master toggles for Tags / Metronome / Bands in Preferences → Pro (UI-only gating, data and sync untouched). ChordPro # lines are author comments per spec — dropped from render/PDF by default with an opt-in "Show #comments" setting; mid-line # is now literal text.
  • Smaller fixes: delete saved layouts from the sidebar popup + a Maintenance manage dialog; deleting/archiving a song keeps the viewport at its slot instead of jumping to the top; macOS Window menu restores minimized windows (explicit NSApp.windowsMenu wiring); Start Setlist pins the songs-tab filter on the leader; setlist step wraps at both ends; status-bar setlist switch mirrors into the songs filter; status-bar media button mutes while playing; media engine lazy-init so debug startup survives missing libs; YouTube rate-limit fails fast instead of hanging; bulk profile lookup in share list_incoming/list_sent; libmpv native bundle dropped from non-debug builds; English help + user-manual refresh.

Version 1.0.17-beta+1

May 18, 2026


A backup-and-attachments beta on top of 1.0.16-beta+3 — sheet-attachment binary sync, the new bundle backup format, live per-category Complete Resync progress, and the Pro / Pro Cloud entitlement split:

  • Sheet-attachment binary sync (Phase 2). Per-user Supabase Storage bucket, outbox-safe upload on save, download-on-demand in the viewer with a friendly placeholder, post-sign-in self-heal sweep + Settings button to re-run it. Behind kAttachmentSyncV1, now on for local multi-device validation.
  • Bundle backup format (.sbbk). New single-file backup that packs songbook.db together with sheet-attachment binaries; classic .db backup still available. Confirm dialogs show per-category counts including a deleted-songs breakdown, with an opt-out for soft-deleted songs. Attachments phase label clarified to "files, not songs".
  • Backup & restore progress dialog. Live per-phase progress with counts; restore mirrors probe + close diagnostics to a new "Backup/Restore" advanced SupportLog category.
  • Complete Resync — per-category live progress + unhang fix. Per-table progress rows in the UI; legacy built-in chord_fingerings server seeds are cleaned up once per user and skipped on push + pull so resync no longer hangs. Tombstones replicate during resync (deleted songs stay deleted), and the __default__ display layout is skipped.
  • Pro / Pro Cloud entitlement split. Pro one-off unlock for the offline feature set; Pro Cloud annual for sync, Band Mode and attachment sync. handle_new_user grants the beta Pro Cloud entitlement; existing Pro users backfilled server-side.
  • Print layouts: save / load / sync. Named print-layout presets persisted in print_layouts (with sync_rev + sync_library_generation columns and triggers), plus a header-separator-line toggle in the PDF output.
  • Auto-detect song key from chords. When {key:} is absent, the renderer infers the key from the chord progression; transpose, the Key chip and the chord chart all reflect the transposed key. {year} directive now rendered.
  • ChordPro picker pinned beside editor in split mode. Format panel: tightened visibility / indent layout, Meta section renamed, compact visibility-switch rows, indent sliders right-aligned with uniform width, chord-dialog grid spacing compressed.
  • Devices → Controls. Sidebar tab renamed with a title bar; search bar always visible on songs / setlists when nothing is selected.
  • Wipe local database shows progress + result dialog instead of an opaque action.
  • Restore hardening (macOS). Drift close timeout bumped to 30s with a WAL checkpoint, sidecar fallback when close still hangs, header stream subscriptions cancelled before close, broader stream-cancel sweep with double-microtask yield. Manual .db restore is local-only — no auto cloud push.
  • Sync correctness fixes. band_song_prefs added to the apply_field_lww allowlist; owner_id stripped when pushing chords-catalog rows; failing row ids included in PushAll error messages.
  • Supabase / DB hardening. support_report_notify migration self-installs pg_cron; pg_net moved out of public schema; deny-all RLS on server-only tables; tightened search_path and EXECUTE grants per security advisor; production Phase 7 sync migration deployed 2026-05-17.
  • Smaller fixes: Import Songs dialog now returns the user's choice and the caller drives the picker (fixes a picker-after-dispose race), print dialog footer / load-layout / preview-thumbnail Row overflow on narrow windows, full-resync confirm dialog, Pro tab routing + chord eraser polish, manifest auto-update self-heals across hosts via live-fetch + merge, English help + user-manual refresh, and a new /release-internal skill for private beta tester builds.

Version 1.0.16-beta+3

May 17, 2026


A polish follow-up to 1.0.16-beta+2 covering the new unified import dialog, persistent sign-in, MIDI gating, and a tag-filter correctness fix:

  • Unified Import Songs dialog. ⌘O now opens a single dialog with File, Folder, Web and Paste tabs, replacing the four separate menu entries. The chords sidebar and status bar get a matching polish pass — transpose, the chord-import dialog, and Basic / Standard / Advanced selection levels.
  • Persistent sign-in across launches. The Supabase session is restored from disk at startup so the Account tab stays signed in; the first sync no longer races sign-in.
  • MIDI fully idle when disabled. All MIDI I/O and port inventory are gated on the Enabled switch; CoreMIDI registration is deferred to first use. Fixes a ProviderException on the Devices tab and silences MIDINotification spam during startup when MIDI is off. Port dropdowns list only active ports when MIDI is on.
  • Manual sync "never ask" mode. Background-pull permission prompts can be dismissed for the session and re-enabled from Sync settings.
  • iOS .db backup picker. The Restore picker now uses FileType.any and verifies the SQLite header itself, since iOS doesn't map .db to a selectable UTType.
  • Editor caret stability. ChordPro reloads wait for the live buffer to catch up with disk; same-song refreshes preserve the caret position.
  • Sync hardening. Lazy Supabase init, friendly sync-unavailable errors, E2EE derived before the auth-change sync runs, and a subscription-stream dispose race fixed during first-login.
  • Tag filter correctness. Multi-tag include mode returns the right list when no song matches every selected tag (previously fell back to unfiltered); tag filter row and assign-tags UI hidden when Pro is inactive.
  • Devices tab cleanup. Dropped the Network sub-tab, added explicit MIDI / Footswitch titles, MIDI Enabled gate off by default, footswitch enabled only in the sidebar; playback toolbar hidden on Devices and Bands tabs.
  • Archive sidebar reveal. Archiving a song now reveals it under the Archived filter instead of hiding it behind active filters.
  • Smaller fixes: Import dialog Riverpod lifecycle fix when picking file/folder, sheet sidebar spacing now matches the chords tab, section bars no longer render on blank lines outside section blocks, sidebar/center placeholder overflow fix in narrow split panes, sync lastError preserved on copyWith, support-reports known-issue matching driven by payload only (ignores user-chosen category), and a full English help + user-manual refresh via /update-help.

Version 1.0.16-beta+2

May 16, 2026


A reliability follow-up to 1.0.16-beta+1 covering sync timing and editor coherence:

  • Manual-only sync interval is honored. Scheduled and auth-restore full syncs are skipped when the Sync interval is set to "Manual only"; explicit user actions, invite/setlist prerequisites, live-leader outbox flush, and band pulls scoped to an active live session still run.
  • Chord editor refreshes after a sync pull. Chord-fingerings list now uses a content revision stamp instead of row count, so an in-place fingering edit pulled from another device updates the open chord editor immediately.
  • Song editor stays coherent with disk after a remote pull. Clean drafts no longer shadow the on-disk Song row; a song updated on another device shows its new title and ChordPro body in the open editor.
  • Theater mode hides disabled status-bar buttons. Preferences, Help, Print, transpose-at-limits, and setlist-nav buttons render as nothing instead of greyed-out chips when they can't act.
  • Smaller fixes: Android status-bar sync icon stays tappable during an in-flight sync (48 dp hit target on touch platforms); release-tooling fix so manifest commits land on origin/main from any build host.

Version 1.0.16-beta+1

May 15, 2026


A big feature beta on top of 1.0.15-beta+3 — a manual-save document model, selectable colour themes, web and text import, theater page-turning — plus a wide reliability pass:

  • Manual-save document model. Preferences › General replaces the auto-save interval with three modes — save instantly, save after a pause, don't save automatically. Existing installs migrate to "after a pause" with no behaviour change. Manual mode adds an unsaved-edits dot in the song list, a hover Save action on dirty rows, real Cmd/Ctrl+S boundary saves, and File ▸ Save / Save All.
  • Selectable colour themes (Pro). Four light + four dark curated palettes, each with a high-contrast variant, plus customizable chord-diagram colours and a "Theme colors" panel in the colour picker. Pro-gated; non-Pro users stay on the original defaults.
  • Import from other sources. New File ▸ Import entry (⌥⌘O / Ctrl+Alt+O) imports a song from a pasted song-page URL or pasted/dragged text — generic site-agnostic HTML extraction, ChordPro / Ultimate Guitar / chords-above-lyrics / "Label: value" header parsing, an editable ChordPro preview with live re-convert, and a mandatory legal-acknowledgement checkbox. Imported songs get an "Imported" tag.
  • Smarter text importer and PDF import plan dialog. Improved chord-line recognition in the text importer; per-category PDF import plan dialog with a per-PDF preview.
  • Theater page-turning advance modes. Three advance modes — continuous autoscroll (default, unchanged), automatic page-turn (full or half pages timed across the playback duration), and manual page-turn. Manual controls via keyboard, an on-screen arrow pill, screen-edge double-tap zones, and footswitch / MIDI-learnable actions. Page boundaries are marked on the status-bar position slider.
  • Resizable sidebar, lockable list rows, sort-field dropdown. Sidebar drag-resizes from 260–390 px (persisted); songlist/setlist destructive row actions hide behind a per-session Edit toggle; three sort buttons replaced with a field dropdown plus a direction toggle.
  • Tri-state include/exclude tag filter and bulk-assign instrument & tuning from Preferences.
  • Identity-seed escrow for Band Mode. Server-side X25519 identity-seed escrow (two RLS-locked tables) so a reinstall or secure-storage wipe recovers band data instead of orphaning published songs; existing devices migrate lazily on next load. Also: append-only ownerless chord catalog, chord_fingerings recovery for rows whose parent chord is missing, and owner/member key rewrap without a needless fresh mint.
  • Print fixes. Beach-ball hang printing image and PDF sheet songs healed; print jobs use the real selected paper size instead of hardcoded A4; iOS vendors printing 5.14.3 with a thread-safe PrintJob.numberOfPages.
  • App data relocation. Windows & Linux move songbook.db, its SQLite sidecars and downloaded_fonts/ into Documents/Songbook Buddy/ via a one-shot first-launch migrator. iOS, Android and macOS paths unchanged.
  • Lifecycle save fixes. Pending drafts flush on Windows/Linux OS session end; the unsaved-changes prompt survives Cmd+Q on macOS.
  • Chord editor fixes. Barre honours the selected finger; custom diagrams savable and visible for G#/A#/D#; user-created diagrams stay visible regardless of the chord-count slider; Top-of-Song chord chart shows custom diagrams; 7#5 / 7+5 recognised as aug7; piano diagrams honour the custom chord-tone colour; chord assignment dialog gains a prefs shortcut.
  • Smaller fixes: SoLoud re-inits after a hot restart and deinits on iOS detached to avoid an AVAudioSession abort, editor scroll-mirror block re-armed on every keystroke, metronome section labels ellipsized for narrow sidebars, collapsed sidebar clipped in theater mode, sidebar toolbars / sort row / chord-colour legend reflow at narrow widths instead of clipping, file-picker passes bytes to saveFile on iOS & Android, Windows forces the in-build install prefix, pdfx CMakeLists patched for CMake 4.x, Windows EXE metadata tracks the pubspec version, songs no longer marked dirty just by opening them.

Version 1.0.15-beta+3

May 12, 2026


Hotfix on top of 1.0.15-beta+2 covering three sync and permission issues surfaced via support reports:

  • chord_fingerings UNIQUE pull loop healed for the live-twin case. The 1.0.14 fix only purged soft-deleted local twins; a live local row with the same natural key but a different id (two devices independently seeding the same built-in shape) still poisoned the pull every cycle and surfaced as "Sync finished with errors." The catch now purges live twins regardless of soft-delete state, drains any pending outbox entries for the purged id so the next push doesn't resend the deleted row, and retries.
  • Band-action permission checks read the local DAO directly. Mutation guards (assignSetlistToBand, addMember, createInvite, changeMembershipRole, setlist-entries write gate, …) used to read effectiveBandRoleProvider synchronously — a StreamProvider.autoDispose whose cold initial state is AsyncLoading. A legitimate admin whose UI showed admin (driven by the warm watchByBand stream) was denied because the role provider hadn't emitted yet. A new daoBandRoleProvider awaits the membership row directly from local DB.
  • iOS unclean-shutdown false-positive closed. The session marker is now cleared on lifecycle inactive/hidden in addition to paused/detached, and re-armed on resumed. Force-quit from the app switcher and OS-driven kills of suspended apps no longer leave the marker behind, so the next launch doesn't falsely prompt for a diagnostic report. macOS path was already covered in 1.0.14-beta+2.
  • Smaller fixes: marker arm/clear ops serialized through a single-slot queue so rapid inactive→resumed flips can't reorder, chord_fingerings twin purge logs is_user_created/deleted_at/sync_status for visibility into any future user-data loss.

Version 1.0.15-beta+2

May 12, 2026


Sheet music lands as a first-class song kind, plus a richer fonts panel, smarter setlists, and a long polish list across the editor, print pipeline and preferences:

  • Sheet music as a new song kind. Import PDF / image scores from disk; the song-content-kind + attachment-json schema (v18) stores the file locally and the library shows a Sheet badge. Sheet songs sit alongside ChordPro in setlists, theater mode and the print menu.
  • Sheet viewer matches ChordPro ergonomics. Single-pane sidebar with playback, and a full playback strip in place of transpose / undo for notation songs.
  • Sheet playback autoscroll + print. Playback maps the duration evenly across loaded pages and seeks update the viewer fraction; sheet print goes through the OS print / PDF dialog via sheet_attachment_print.
  • Editable section fonts. Section-font popup gains an 8–80pt size field, a 10–150% per-section line-spacing slider (multiplied with global DisplaySettings.lineSpacing), and tooltips on every control. Orange "missing font" preview button now opens the font browser directly.
  • Setlist soft-deleted-song recovery. Soft-deleted setlist entries now render as Deleted: </strong> with a one-click Restore button (resolvedSetlistEntriesProvider + SongDao.getByIdIncludingDeleted) instead of the old red "Song no longer available" row.</li> <li><strong>Setlist filter parity.</strong> In-setlist song picker and setlist sidebar pick up the same tag / search filter controls used on the songs tab.</li> <li><strong>Theater mode</strong>: double-tap the screen edges to step the active setlist (touch only).</li> <li><strong>Preferences → Maintenance → Dangerzone: Delete duplicate songs.</strong> Scans the library and reports two buckets — same song / same settings, and same song / different settings — keeping the most recently edited copy in each group.</li> <li><strong>Language picker</strong> sorts by localized name and renders "<localized> / <native>" pairs; system default stays pinned at the top. Adds 22 new languageName* ARB keys across all 22 locales.</li> <li><strong>Tag-management tooltips</strong> added to Assign Tags / Filter Tags.</li> <li><strong>PDF manuals</strong>: Japanese, Korean and Simplified Chinese added. The PDF builder now runs a per-role TTF cmap coverage check before writing each locale and fails the build on missing glyphs; CJK + Devanagari mono uses the script-specific Noto face.</li> <li><strong>Refreshed translations across all 22 ARB locales</strong> (Tags labels renamed, catch-up sweep).</li> <li><strong>Print pipeline</strong>: inline chord diagrams now use an invisible diagram as the inline placeholder for exact height parity, and per-segment chord assignments are honored on the printed page instead of being collapsed to the first occurrence.</li> <li><strong>Chord diagram font scale</strong> is derived from a shared source so picks reproduce across devices.</li> <li><strong>Editor</strong>: scroll-mirror feedback loop is blocked during text-change layout settles, eliminating jumpy editor scroll while typing.</li> <li><strong>Bug-report viewer tool</strong>: triage-status filter dropdown, unified dialog button shapes, single send button that switches based on login state.</li> <li><strong>Smaller fixes</strong>: footswitch / MIDI dropdown popups legible in light mode, chord-card title overflow at large font scales, v18 DB migration idempotent against duplicate columns, iOS downloaded-font metadata refresh after sandbox UUID rotation, capo chip hidden when capo is 0, in-app help text unified import flow (.cpm / .gcp listed).</li> </ul> </div> </div> <hr class="sbb-divider"> </div> </section><section class="sbb-release-block sbb-release-block--older" aria-labelledby="release-40"> <div class="sbb-container"> <div class="sbb-release-block__header"> <div> <h2 id="release-40" class="sbb-release-block__title"> Version 1.0.14-beta+3 </h2> <p class="sbb-release-block__date">May 10, 2026</p> </div> </div> <hr class="sbb-divider sbb-divider--centered"> <div class="sbb-release-block__body"> <div class="prose-notes"><p>Polish-and-reliability follow-up to 1.0.14-beta+2. Highlights:</p> <ul> <li><strong>ChordPro <code>{key:}</code> and <code>{capo:}</code> directives now drive song settings on import</strong> — the value is lifted into the song's settings and the directive is stripped from the body, instead of being left as inline text.</li> <li><strong>Chord-assignment panel picks fan out across the song.</strong> Choosing a fingering from the side panel updates every occurrence with the same shape; inline picks on a chord cell still stay per-segment.</li> <li><strong>Edited song stays visible in the sidebar</strong> after saving, instead of scrolling out of view.</li> <li><strong>Metronome popup mirrors the full sidebar</strong> (BPM, time signature, count-in, on/off), and a long-press on the status-bar metronome button opens settings directly.</li> <li><strong>Theater mode</strong>: press <strong>Esc</strong> to exit (desktop), and a horizontal swipe steps the active setlist on touch devices.</li> <li><strong>Undo SnackBars auto-dismiss after 10 seconds</strong> instead of waiting forever for a click.</li> <li><strong>Refreshed translations and PDF manuals across all 19 locales.</strong></li> <li><strong>Band Mode reliability</strong>: faster recovery after key rotation (forceRefresh cooldown is preserved across decrypt retries), local mirror timestamps now match the sync wire format, fingering ids derive from the natural key so chord picks land on the right shape across devices, and your display-settings override clears correctly when the band default changes.</li> <li><strong>Live performance fixes</strong>: metronome no longer auto-starts when the song changes to none, and support reports stay debuggable during band-live sessions.</li> <li><strong>Print works in slim store builds</strong> — handles stripped bundled fonts on App Store / Play Store / Microsoft Store builds, plus mounted-guards across the print pipeline.</li> <li><strong>Updates & install</strong>: installer downloads always save instead of rendering in-place (<code>Content-Disposition: attachment</code>), macOS Tahoe DMG builds succeed reliably (two-stage build dodges a TCC prompt), the Android Play Store accepts every new beta build (monotonic versionCode derived from the full pubspec version), and Windows installers tolerate <code>+</code> in the version.</li> <li><strong>Smaller fixes</strong>: macOS <code>NSImage.advancedName</code> build break, R8 warnings on Android, bug-report viewer overflow on narrow windows, support session marker now clears after a healthy startup.</li> </ul> </div> </div> <hr class="sbb-divider"> </div> </section><section class="sbb-release-block sbb-release-block--older" aria-labelledby="release-41"> <div class="sbb-container"> <div class="sbb-release-block__header"> <div> <h2 id="release-41" class="sbb-release-block__title"> Version 1.0.14-beta+2 </h2> <p class="sbb-release-block__date">May 10, 2026</p> </div> </div> <hr class="sbb-divider sbb-divider--centered"> <div class="sbb-release-block__body"> <div class="prose-notes"><p>Polish-and-reliability follow-up to 1.0.14-beta+1. Highlights:</p> <ul> <li><strong>ChordPro <code>{key:}</code> and <code>{capo:}</code> directives now drive song settings on import</strong> — the value is lifted into the song's settings and the directive is stripped from the body, instead of being left as inline text.</li> <li><strong>Chord-assignment panel picks fan out across the song.</strong> Choosing a fingering from the side panel updates every occurrence with the same shape; inline picks on a chord cell still stay per-segment.</li> <li><strong>Edited song stays visible in the sidebar</strong> after saving, instead of scrolling out of view.</li> <li><strong>Metronome popup mirrors the full sidebar</strong> (BPM, time signature, count-in, on/off), and a long-press on the status-bar metronome button opens settings directly.</li> <li><strong>Theater mode</strong>: press <strong>Esc</strong> to exit (desktop), and a horizontal swipe steps the active setlist on touch devices.</li> <li><strong>Undo SnackBars auto-dismiss after 10 seconds</strong> instead of waiting forever for a click.</li> <li><strong>Refreshed translations and PDF manuals across all 19 locales.</strong></li> <li><strong>Band Mode reliability</strong>: faster recovery after key rotation (forceRefresh cooldown is preserved across decrypt retries), local mirror timestamps now match the sync wire format, fingering ids derive from the natural key so chord picks land on the right shape across devices, and your display-settings override clears correctly when the band default changes.</li> <li><strong>Live performance fixes</strong>: metronome no longer auto-starts when the song changes to none, and support reports stay debuggable during band-live sessions.</li> <li><strong>Print works in slim store builds</strong> — handles stripped bundled fonts on App Store / Play Store / Microsoft Store builds, plus mounted-guards across the print pipeline.</li> <li><strong>Updates & install</strong>: installer downloads always save instead of rendering in-place (<code>Content-Disposition: attachment</code>), macOS Tahoe DMG builds succeed reliably (two-stage build dodges a TCC prompt), the Android Play Store accepts every new beta build (monotonic versionCode derived from the full pubspec version), and Windows installers tolerate <code>+</code> in the version.</li> <li><strong>Smaller fixes</strong>: macOS <code>NSImage.advancedName</code> build break, R8 warnings on Android, bug-report viewer overflow on narrow windows, support session marker now clears after a healthy startup.</li> </ul> </div> </div> <hr class="sbb-divider"> </div> </section><section class="sbb-release-block sbb-release-block--older" aria-labelledby="release-42"> <div class="sbb-container"> <div class="sbb-release-block__header"> <div> <h2 id="release-42" class="sbb-release-block__title"> Version 1.0.14-beta+1 </h2> <p class="sbb-release-block__date">May 8, 2026</p> </div> </div> <hr class="sbb-divider sbb-divider--centered"> <div class="sbb-release-block__body"> <div class="prose-notes"><p>First production build of the 1.0.14 line. Polish-and-reliability update on top of the 1.0.13 Pro beta:</p> <p>Self-service account deletion — Preferences → Account → Advanced offers a guided delete with a 30-day grace window; cancel any time within those 30 days and your songs, setlists, custom chords, fingerings and subscription state come back as they were. The flow now uses fail-fast 15 s timeouts on dead networks, validates band-transfer targets, preserves the band roster across owner-transfer sweeps, and emails you when your deletion is scheduled.</p> <p>11 new UI languages (Czech, Danish, Finnish, Indonesian, Japanese, Korean, Dutch, Polish, Russian, Turkish, Ukrainian, Chinese) and 12 translated in-app help packs.</p> <p>Reworked colour picker with hex / RGB entry and a saved palette, per-element colour rows for chord row, lyric, section labels and custom blocks, and a separate font row for chord symbols.</p> <p>Spacing slider can now pull chords onto the lyrics. Tappable status-bar setlist jump button. Show / hide eye toggle on every password field. Imports recognise .gcp and .cpm files.</p> <p>Chord library: jazz-alteration parsing (7♭9, 9♯11, 13♭5, alt …) with built-in fingerings, clearer empty states, and a few save-time bug fixes.</p> <p>Smaller download for App Store / TestFlight / Play Store / Microsoft Store builds — the 119 MB sound bank and bundled fonts now lazy-download on first use, with inline progress on the first chord-audio tap. Direct-from-website downloads still ship everything bundled.</p> <p>Band Mode reliability: solo accounts can sync setlists again, custom ChordPro blocks survive saving, follower devices pick up newly shared songs immediately on first key handshake, and key rotations no longer leave "Song not available" gaps.</p> <p>Smaller fixes: Cmd+Q no longer triggers a false "unclean shutdown" prompt, your saved fingerings stay yours across devices, the Drift v9 upgrade no longer crashes a small set of older installs, and the song list rebuilds less often.</p> </div> </div> <hr class="sbb-divider"> </div> </section><section class="sbb-release-block sbb-release-block--older" aria-labelledby="release-43"> <div class="sbb-container"> <div class="sbb-release-block__header"> <div> <h2 id="release-43" class="sbb-release-block__title"> Version 1.0.14-beta </h2> <p class="sbb-release-block__date">May 7, 2026</p> </div> </div> <hr class="sbb-divider sbb-divider--centered"> <div class="sbb-release-block__body"> <div class="prose-notes"><p>Polish update on top of the 1.0.13 Pro beta. Highlights:</p> <ul> <li><strong>Delete your account from inside the app.</strong> Preferences → Account → Advanced now offers a guided delete with a 30-day grace window — change your mind and your songs, setlists and subscription come back.</li> <li><strong>11 new UI languages plus 12 translated help packs</strong> — Czech, Danish, Finnish, Indonesian, Japanese, Korean, Dutch, Polish, Russian, Turkish, Ukrainian and Chinese.</li> <li><strong>Better colour picker.</strong> Type a hex code or RGB value, save your custom colours to a palette, and the picker button itself shows the current colour as a solid swatch. The format sidebar grew its own row for the chord-symbol font and lets you set a separate colour per element (chord row, lyric, section labels, custom blocks).</li> <li><strong>Spacing slider can now pull chords onto the lyrics</strong> at its leftmost setting — handy for tight printed pages or stage view.</li> <li><strong>Status-bar setlist button is now tappable</strong> and jumps straight to the current setlist entry.</li> <li><strong>Show/hide eye toggle</strong> on every password field (sign-in, sign-up, change password).</li> <li><strong>Imports</strong> now also accept <code>.gcp</code> and <code>.cpm</code> files.</li> <li><strong>Chord library</strong>: recognises common jazz alterations (7♭9, 9♯11, 13♭5, alt …) with built-in fingerings, clearer empty states, and a few save-time bug fixes.</li> <li><strong>Smaller download for store builds.</strong> The 119 MB sound bank and bundled fonts now download on first use in App Store, TestFlight, Play Store and Microsoft Store builds, with inline progress on the first chord-audio tap. Direct downloads from the website still ship everything bundled.</li> <li><strong>Band Mode reliability</strong>: solo accounts can sync setlists again, custom ChordPro blocks survive saving, follower devices pick up newly shared songs immediately on first key handshake, and key rotations no longer leave "Song not available" gaps.</li> <li><strong>Smaller fixes</strong>: Cmd+Q no longer triggers a false "unclean shutdown" prompt next launch, your saved fingerings stay yours across devices, the Drift v9 upgrade no longer crashes a small set of older installs, and the song list rebuilds less often.</li> </ul> </div> </div> <hr class="sbb-divider"> </div> </section><section class="sbb-release-block sbb-release-block--older" aria-labelledby="release-44"> <div class="sbb-container"> <div class="sbb-release-block__header"> <div> <h2 id="release-44" class="sbb-release-block__title"> Version 1.0.13-beta+2 </h2> <p class="sbb-release-block__date">May 2, 2026</p> </div> </div> <hr class="sbb-divider sbb-divider--centered"> <div class="sbb-release-block__body"> <div class="prose-notes"><p>Hotfix: fixes a launch crash for users updating from older app versions whose local database is at schema 3 or earlier (Drift migration rebuilt the band_members table against the current schema and failed to find the position column on legacy installs). Same feature set as 1.0.13-beta+1.</p> </div> </div> <hr class="sbb-divider"> </div> </section><section class="sbb-release-block sbb-release-block--older" aria-labelledby="release-45"> <div class="sbb-container"> <div class="sbb-release-block__header"> <div> <h2 id="release-45" class="sbb-release-block__title"> Version 1.0.13-beta+1 </h2> <p class="sbb-release-block__date">May 2, 2026</p> </div> </div> <hr class="sbb-divider sbb-divider--centered"> <div class="sbb-release-block__body"> <div class="prose-notes"><p>The first beta of the Pro version of Songbook Buddy. Builds on top of 1.0.1-beta with subscription-gated power features for performing musicians and bands.</p> <p>New Pro features</p> <p>Chord shape editor — define and edit custom chord shapes (guitar / piano) and reuse them across songs.</p> <p>Band Mode — share encrypted songs and setlists across multiple band members. Each band has its own end-to-end-encrypted symmetric key; only invited members can decrypt. Owner / admin / member / viewer roles, invite-link flow, and a per-user overlay so personal transpose / display / playback settings stay private while the song content is shared.</p> <p>Band Live Sessions — one device leads, the others follow. Tab, theater mode, song selection, transpose, scroll position, playback phase (play/pause/stop), setlist cursor, count-in and the metronome's BPM + time signature all sync in real time. Followers can break off and re-join the leader without restarting.</p> <p>Synced metronome start — the leader's first beat lands at the same instant on every member's device (sample-accurate, network-clock-corrected). Tap the status-bar button to toggle on/off; the active state lights up the button and the icon flips between still and tilted-pendulum variants.</p> <p>Time signature picker — eight standard meters from 2/4 to 12/8. Numerator + denominator persist per-song; on/off persists globally so toggling the metronome once carries across song switches.</p> <p>Setlists — ordered programmes of songs with optional band binding, event date / location, key override per entry, drag-and-drop reordering, archive, and step-through navigation from the status bar (with footswitch / MIDI mapping support).</p> <p>Chord assignment dialog with per-song chord-symbol font picker, app-wide chord-diagram font scale (-30 % … +80 %), and a refined chord library with guitar fretboard + piano + audio preview.</p> <p>Custom ChordPro blocks — {start_of_block: …} / {end_of_block: …} directives let you label and highlight any region beyond the standard verse / chorus / bridge.</p> <p>Tags for filtering and grouping songs in the library.</p> <p>Footswitch & MIDI control — AirTurn BT-200, PageFlip, Stream Deck Pedal and other HID footswitches map to app actions (play/pause, next song, theater, …) via a shared dispatcher. Inbound + outbound MIDI mappings, RTP-MIDI on macOS, per-row Learn / Duplicate / Panic.</p> <p>Downloadable Google Fonts with preview, management, and debug tooling.</p> <p>Live performance polish</p> <p>Theater mode with floating scale control reachable without leaving theater, keep-awake during presentation, scroll-back behaviour for hands-free flow.</p> <p>Instrument icons in the band member list (guitar, ukulele, bass, drums, piano, flute, sax, trumpet, horn, panflute, synth, plus separate Les Paul and Flying V variants for "E-Gitarre" and "Lead-Gitarre"). The role-text matcher is separator-insensitive: "Lead Gitarre" / "Leadgitarre" / "Lead-Gitarre" all map to the same icon.</p> <p>Sample-accurate metronome ticks driven by an audio loop instead of a Dart timer — no more drift on long notes or background tabs.</p> <p>Quiet song list — sidebar refreshes never flash a spinner; the metronome status, sync state, and playback are reflected in stable in-place chrome.</p> <p>Reliability & sync</p> <p>Self-healing band key distribution: re-mints, member rewraps and song re-encryption now happen atomically so followers never see a "Song not available" gap during a key rotation.</p> <p>currentSongProvider is sticky across transient refreshes — the editor / center / status / window title stop blinking on every Drift notify or band-song decrypt cycle.</p> <p>Cooldown-gated pullBandImmediate and per-band recovery cycles to avoid retry storms.</p> <p>Hardened live-session leadership recovery after app restart; followers correctly mirror count-in instead of starting early.</p> <p>Other</p> <p>In-app purchase flows for App Store, Google Play and Microsoft Store; PayPal subscription path on web; subscription expiry cron on the server.</p> <p>Localized UI completed across the Pro surfaces (German fully translated; English fallback elsewhere).</p> <p>Descriptive tooltips across the entire app — every icon button explains itself on hover.</p> <p>Preferences gain Beta tab, automatic update checks, theater settings, font management.</p> <p>Status bar shows live sync state, transpose ±, undo / redo, MIDI / footswitch panic, import progress.</p> </div> </div> <hr class="sbb-divider"> </div> </section><section class="sbb-release-block sbb-release-block--older" aria-labelledby="release-46"> <div class="sbb-container"> <div class="sbb-release-block__header"> <div> <h2 id="release-46" class="sbb-release-block__title"> Version 1.0.13-beta </h2> <p class="sbb-release-block__date">May 2, 2026</p> </div> </div> <hr class="sbb-divider sbb-divider--centered"> <div class="sbb-release-block__body"> <div class="prose-notes"><hr> <h2>releaseDate: May 2, 2026</h2> <ul> <li><strong>Pro features:</strong><ul> <li>Band Mode with secure sharing and real-time sync across devices (Live Sessions)</li> <li>Setlists</li> <li>Chord shape editor</li> <li>extended Font management</li> <li>user defined chordpro blocks (for blocks like interlude, solo…)</li> <li>Metronome with BPM and time signature</li> <li>Footswitch & MIDI control</li> </ul> </li> </ul> </div> </div> <hr class="sbb-divider"> </div> </section><section class="sbb-release-block sbb-release-block--older" aria-labelledby="release-47"> <div class="sbb-container"> <div class="sbb-release-block__header"> <div> <h2 id="release-47" class="sbb-release-block__title"> Version 1.0.12-beta+13 </h2> <p class="sbb-release-block__date">April 12, 2026</p> </div> </div> <hr class="sbb-divider sbb-divider--centered"> <div class="sbb-release-block__body"> <div class="prose-notes"><p>Chord spacing fixes, editor autocorrect disabled, new Beta-Test preferences tab with update notifications. Pinch zoom gesture on touch devices.</p> </div> </div> <hr class="sbb-divider"> </div> </section><section class="sbb-release-block sbb-release-block--older" aria-labelledby="release-48"> <div class="sbb-container"> <div class="sbb-release-block__header"> <div> <h2 id="release-48" class="sbb-release-block__title"> Version 1.0.12-beta </h2> <p class="sbb-release-block__date">April 14, 2026</p> </div> </div> <hr class="sbb-divider sbb-divider--centered"> <div class="sbb-release-block__body"> <div class="prose-notes"><hr> <h2>releaseDate: April 14, 2026</h2> <ul> <li>chord spacing fixes</li> <li>editor autocorrect disabled</li> <li>new Beta-Test preferences tab with update notifications</li> <li>Pinch zoom gesture on touch devices</li> </ul> </div> </div> <hr class="sbb-divider"> </div> </section><section class="sbb-release-block sbb-release-block--older" aria-labelledby="release-49"> <div class="sbb-container"> <div class="sbb-release-block__header"> <div> <h2 id="release-49" class="sbb-release-block__title"> Version 1.0.1-beta </h2> <p class="sbb-release-block__date">April 4, 2026</p> </div> </div> <hr class="sbb-divider sbb-divider--centered"> <div class="sbb-release-block__body"> <div class="prose-notes"><hr> <h2>releaseDate: April 4, 2026</h2> <ul> <li>First beta release</li> <li>Full ChordPro editing workflow</li> <li>Built-in chord diagrams (guitar & piano)</li> <li>Import, export and PDF printing</li> <li>Optional cloud sync across devices</li> <li>Presentation mode for live performance</li> <li>Multi-language interface</li> <li>Added batch export for ChordPro files</li> <li>Improved PDF export quality</li> <li>Added indentation controls for song sections</li> <li>Fixed editor wrapping issues</li> <li>Fixed spellcheck and autocorrection problems</li> <li>Fixed layout and rendering issues in preview</li> <li>Improved default layout handling</li> </ul> </div> </div> <hr class="sbb-divider"> </div> </section> </div> </div> <script type="module" src="/_astro/BetaGatedContent.astro_astro_type_script_index_0_lang.BYdULHC8.js"></script> </main> <footer class="sbb-footer border-t border-[var(--sbb-color-border)] bg-[var(--sbb-color-cream)]"> <div class="sbb-container sbb-section text-center"> <p class="sbb-tagline-footer">Gebaut für Musiker - von Hobbyisten bis hin zu Profis.</p> <p class="sbb-tagline-footer-sm mt-2">Deine Songs bleiben deine. Kein Cloud-Lock-in.</p> <nav class="mt-8 flex flex-wrap justify-center gap-x-6 gap-y-2 text-sm" aria-label="Footer"> <a href="/de/privacy-policy/">Datenschutzerklärung</a> <a href="/de/imprint/">Impressum</a> <a href="/de/support/">Support</a> <a href="/de/release-notes/">Release Notes</a> <a href="/de/sitemap/">Sitemap</a> </nav> <p class="sbb-text-muted mt-8 text-xs"> © 2026 Songbook Buddy </p> </div> </footer> <dialog id="sbb-screenshot-lightbox" class="sbb-lightbox" aria-label="Screenshot-Vorschau in voller Größe"> <button type="button" class="sbb-lightbox__close" aria-label="Close Screenshot">×</button> <div class="sbb-lightbox__frame"> <img class="sbb-lightbox__img" alt="" decoding="async"> </div> </dialog> <script> (() => { if (window.__sbbScreenshotLightboxInit) return; window.__sbbScreenshotLightboxInit = true; const dialog = document.getElementById("sbb-screenshot-lightbox"); const img = dialog?.querySelector(".sbb-lightbox__img"); const closeBtn = dialog?.querySelector(".sbb-lightbox__close"); if (!dialog || !(img instanceof HTMLImageElement) || !(closeBtn instanceof HTMLButtonElement)) return; const open = (src, alt) => { img.src = src; img.alt = alt; dialog.showModal(); }; const close = () => { dialog.close(); img.removeAttribute("src"); img.alt = ""; }; document.addEventListener("click", (event) => { const trigger = event.target.closest("[data-sbb-screenshot-full]"); if (!(trigger instanceof HTMLElement)) return; const src = trigger.getAttribute("data-sbb-screenshot-full"); if (!src) return; event.preventDefault(); open(src, trigger.getAttribute("data-sbb-screenshot-alt") ?? ""); }); closeBtn.addEventListener("click", close); dialog.addEventListener("click", (event) => { if (event.target === dialog) close(); }); dialog.addEventListener("close", () => { img.removeAttribute("src"); img.alt = ""; }); })(); </script> </body></html>