Highlights
Get Switchboard: now on F-Droid. On Google Play, Switchboard is in closed testing, which is wrapping up. iOS is available as a public TestFlight beta.
- Features
- Bookmarks: tag chats from a per-chat checklist, browse every bookmark and its chats, and the star is now Favorite
- The sidebar's footer links fold into a Workspace tray, and you can pin the ones you use most back to the footer
- Provider API Keys shows each key's real status and expiry, survives leaving the app to copy a key, and chat takes you straight to the missing key and back
- Swipe between tabs in Files, Search and the Media page
- On Android, Switchboard appears in other apps' "Open with" list to add a file to a chat
- Continue a reply that was cut short, and a sweeping animation when temporary chat is toggled
- Bug Fixes
- Model specs apply their preset settings, tools, groups, icons and landing text as set up on the web, including the second model in Compare
- Web search sends a single search instead of two, which could fail on some custom endpoints
- Bookmarks set on the web are no longer wiped by changes made in the app
- Projects, pinning and other features no longer disappear when your server is newer than the app recognizes
- Compare's placeholder no longer hides under the A·B badges on phones, and turning Compare off on a new chat returns to the welcome screen
- Misc Tech Debt Refactors
- Misc Stability Improvements
What's Changed
- fix(chat): apply a model spec's preset settings (#639) by @garfiec in #650
- fix(chat): make the tools toolbar follow the active model spec (#640) by @garfiec in #651
- fix(chat): show model spec groups, landing title and icons (#641) by @garfiec in #652
- fix(chat): keep Compare's second model spec and settings (#642) by @garfiec in #661
- feat(settings): overhaul Provider API Keys by @garfiec in #669
- feat(bookmarks): add Bookmarks screens and keep web-set tags on every write by @garfiec in #672
- fix(auth): prevent cross-server bearer and refresh token leaks by @Sanady in #662
- fix(chat): keep the Compare placeholder clear of the A·B badges on phones by @garfiec in #673
- fix(auth): preserve OpenID reuse session cookies by @Sanady in #671
- feat(ui): swipe between tabs in Files, Search and the Media page by @garfiec in #674
- fix(chat): return to the landing when Compare is turned off on a new chat by @garfiec in #675
- feat(chat): animate the temporary chat toggle with a sweeping band by @garfiec in #676
- fix(auth): keep OpenID markers when an image redirects to an API path by @garfiec in #677
- test(ui): check SecretTextField's shown text, not its stuck Password flag by @garfiec in #678
- docs(readme): add store badges and fix the Obtainium link by @garfiec in #679
- docs(readme): use official store badge artwork by @garfiec in #680
- docs: add SECURITY.md with the app's security guarantees by @garfiec in #681
- docs(license): name the copyright holder by @garfiec in #682
- fix(chat): make the one web-search control send exactly one search (#663) by @garfiec in #684
- fix(chat): keep one rule for leaving a model spec and close the enforce seams (#664) by @garfiec in #685
- feat(drawer): fold the footer links into a Workspace tray with pinning by @garfiec in #686
- fix(config): place servers built past the commit map by build branch or date by @garfiec in #687
- chore(deps): bump gradle/actions/setup-gradle from 6.4.0 to 6.4.1 by @dependabot[bot] in #693
- chore(deps): bump co.touchlab:kermit from 2.1.0 to 2.2.0 by @dependabot[bot] in #694
- chore(deps): bump gradle/actions from 6.4.0 to 6.4.1 by @dependabot[bot] in #691
- chore(deps): bump org.jetbrains.kotlinx:kotlinx-serialization-json from 1.11.0 to 1.12.0 by @dependabot[bot] in #690
- docs(readme): show the F-Droid badge and live version badges by @garfiec in #688
- feat(share): receive files from other apps' "Open with" list by @garfiec in #697
- docs(license): relicense from MIT to Apache 2.0 by @garfiec in #683
Full Changelog: v2026.10.8...v2026.11.0