Cumbersome Changelog
The curated release notes I published through Apple, from Version 1.0.0 onward.
Cumbersome changes fast. Apple only displays the newest slice of Version History on its public listing, so this page preserves the full English record from App Store Connect. Private commits, rejected builds, and internal release notes are excluded.
This archive was last updated and can lag behind the newest release. Check Cumbersome on the App Store (opens in new tab) for the current version and its latest changes.
Version 1.64.0
- feat(settings): simplify AI connections and configuration
- fix(settings): enable headless mode by default
- fix(mac-chat): avoid model picker popovers on macOS 27
- fix(privacy): gate iCloud Drive diagnostics to debug
- fix(mac-chat): defer selection until model picker dismisses
- fix(ios-chat): stabilize VoiceOver composer focus
- fix(mermaid): retain WebKit renderer session
- perf(mac-chat): reduce long-transcript scroll stalls
- perf(latex): move equation rendering off the main thread
- refactor(settings): collapse provider details and simplify MCP
- refactor(settings): unify conversation retention policy
- refactor(browser): make headless mode govern parallel tools
- refactor(settings): remove redundant on-device copy
- refactor(mcp): enable bounded parallel execution by default
Version 1.63.0
- feat(annotations): add conversation passage notes
- feat(read-aloud): add playback and voice guidance
- feat(mermaid): render fenced diagrams automatically
- feat(read-aloud): add spoken replies and auto-read
- fix(latex): stabilize macOS equation sizing
- fix(latex): pin MathJaxSwift after braced exponent regression
- fix(ios-chat): dismiss keyboard after message submission
Version 1.62.0
- feat(markdown): add code block copy controls
- feat(mermaid): add offline diagram rendering
- feat(conversation-export): add Markdown export
- feat(chat-toolbar): make title the conversation actions menu
- feat(message-details): add request diagnostics
- feat(data-analysis): add on-device Python tool
- fix(ios-attachments): keep picker labels on one line
- fix(ios-chat): preserve conversation title width
Version 1.61.0
- feat(providers): add custom Responses endpoints
- feat(gemini): add file-backed video uploads
- feat(settings): add current date context to AI requests
- fix(accessibility): stop auto-follow during VoiceOver review
- perf(local-browser): bound extraction work off main actor
- refactor(settings): centralize preference persistence
Version 1.60.1
- fix(face-off): safely recover every legacy persistence shape
- fix(sidebar): retain footer backing above iOS keyboard
- fix(persistence): harden legacy message migration
Version 1.60.0
- feat(mcp): add bounded parallel tool execution
- feat(local-tools): add bounded parallel headless execution
- feat(chat-ui): refine conversation actions and navigation
- fix(face-off): recover legacy messages without SwiftData crashes
- fix(find): highlight matches without strikethrough
- fix(chat): preserve compaction and attachment ownership
- fix(chat): preserve partial streams and navigate find matches
- fix(mac-chat): target the realized transcript tail
- fix(mac-chat): preserve streams and guard restart popovers
- fix(mac-chat): stabilize long transcript scrolling
- fix(tools): preserve valid streamed tool names
- fix(tools): decode quoted search summaries correctly
- fix(markdown): refresh LaTeX renderer when input changes
- fix(ios-navigation): restore hamburger menu taps
- fix(chat-ui): clarify token usage accounting
- fix(mind-meld): stabilize iOS model configuration
- fix(mind-meld): refine macOS configuration disclosure
Version 1.59.0
- feat(ios-chat): show conversation title in toolbar
- feat(macOS): show conversation title in toolbar
- feat(chat): modernize transcript message presentation
- feat(chat): consolidate composer model selection
- feat(sidebar): modernize navigation controls
- feat(settings): relocate clear-all conversation action
- feat(chat): add adaptive multi-AI Mind/Meld synthesis
- fix(mac-chat): stabilize long transcript entry scroll
Version 1.58.0
- feat(localization): add complete Simplified Chinese support
- feat(privacy): encrypt sensitive CloudKit fields for new records
- feat(chat): focus composer on New Chat across platforms
- fix(release): use Apple Git on Apple silicon
- fix(macos): restore composer file drag and drop
- fix(openrouter): replay stateless Responses tool history
- fix(macos): group controls in material toolbars
- fix(macos): rebalance chat toolbar controls
- fix(macos): refine chat and settings toolbars
- fix(chat): size message info popover for ADP footer
- fix(markdown): stop currency $ from swallowing headings and tables
- fix(privacy): Drive-back oversized tool and Face/Off payloads
- fix(chat): stream Ghost/Write drafts into the placeholder
- fix(providers): drop max_tokens from custom OpenAI titles
- fix(providers): decode Together-style custom models lists
- fix(macos): label Cmd-N as New Chat in File menu
- fix(chat): capture Compact confirm before sheet dismiss
- fix(chat): harden Compact cancel and drain pending queue
- chore(privacy): plan CloudKit ADP encryption
- perf(chat): throttle light streaming UI updates to ~20fps
- perf(chat): drop streaming dots TimelineView to ~12fps
- refactor(custom-params): drop duplicate JSONValidator helper
Version 1.57.0
- feat(chat): import conversations from JSON on macOS
- feat(chat): add Ghost/Write
- fix(settings): preserve serif font and clarify local preferences
- fix(latex): pin SwiftDraw below 0.28 to restore equation images
- fix(chat): label MCP transcript rows as MCP, not local tools
- perf(chat): cache LaTeX parse/blocks across MarkdownTextView body evals
- perf(chat): avoid full collapse checks for row identity
- perf(chat): reduce long-transcript streaming CPU
- perf(chat): stop idle long-transcript CPU hangs
- perf(chat): avoid transcript refetches during streaming
Version 1.56.0
- feat(chat): display streaming performance diagnostics
- feat(tools): remote MCP client with settings UI and tool routing
- feat(chat): include info-bubble metadata in Final JSON
- fix(core): replace expired Discord invite with new permanent link
- fix(chat): stop cloud models mimicking local tool transcript text
Version 1.55.0
- feat(settings): theme picker and font options
- fix(ios-chat): stop transcript blanking when typing during stream
- fix(anthropic): request summarized thinking on adaptive models
Version 1.54.0
- feat(chat): default-collapse local tool transcript rows with summaries
- feat(folders): add folder-level system message presets and editor
- feat(chat): assign draft new chats to folders before first send
- fix(latex): detect simple inline math without currency false positives
- fix(sidebar): adaptive bottom buttons for large Dynamic Type
- fix(ios-chat): anchor collapse/expand to the toggled row, not the bottom
- fix(vercel): route Anthropic thinking through providerOptions
- fix(local-browser): format local tool metadata as markdown bullets
- fix(local-browser): bound DOM snapshot timeout to unstick auto-extract
- fix(ios-chat): descramble scroll overlap without settle jump
- fix(chat): default thinking section collapsed during streaming
- refactor(core): replace regex HTML extraction with SwiftSoup
- style(ios-chat): inset message rows from screen edges
- style(chat): soften message row corners on iOS and macOS
Version 1.53.0
- feat(vercel): unwrap nested stream errors
- feat(settings): default Anthropic prompt caching toggles on
- feat(chat): surface prompt-cache usage across providers
- feat(settings): add Anthropic prompt caching toggles
- fix(vercel): send PDF attachments in gateway file shape
- fix(gemini): send toolConfig and round-trip thought signatures
- fix(chat): gate send and streaming on global model selection
- fix(chat): descramble edited messages on iOS
- fix(chat): keep sibling thinking toggles clickable on macOS
- fix(chat): right-align RTL (Farsi/Arabic/Hebrew) markdown per block
- fix(icons): enable alternate app icons on iPad
- fix(chat): defer preset selection on draft new chat (iOS)
Version 1.52.0
- feat(settings): add reusable system message presets per conversation
- feat(settings): offload long global system messages to iCloud Drive
- feat(settings): add toggle to pause custom API parameters
Version 1.51.0
- feat(chat): option to compact conversation to reduce API context credits
- feat(settings): add Discord to About feedback support bullets
- fix(chat): stop ChatFindResponder republishing on every streaming frame
- fix(settings): stop model picker emptying on macOS/iOS sync
- perf(streaming): remove O(n²) chunk joins and per-token cost scans
Version 1.50.0
- feat(chat): run HTML and JavaScript code blocks in WebView preview
- fix(chat): enable send when sole custom provider is selected
- fix(macos-chat): keep penultimate reply full until off screen on send
- fix(chat): resolve sends against the global model selection
- perf(sidebar): speed up drawer search and gate message highlights
Version 1.49.0
- feat(settings): default local tools on and link to Tools tab
- feat(settings): OpenRouter PDF processing engine picker in Settings
- feat(settings): OpenRouter search picker in Settings
- feat(core): offload oversized message text to iCloud Drive
- fix(settings): show OpenRouter picker row labels on iOS
- fix(openrouter): migrate web search from deprecated plugin to server tool
- fix(ios-chat): stop post-send scramble when penultimate reply truncates
- fix(settings): make API key optional for OpenAI-compatible providers
- fix(ios-chat): descramble transcript on send via layout revalidation
- fix(macos): stop file-missing banner from blowing up window height
- build(deps): bump textual for empty table cell fix
Version 1.48.0
- feat(onboarding): tighten API-key welcome copy and vendor list
- feat(about): personalize About tab and trim onboarding chrome
- feat(settings): organize Settings into Models/Tools/App/About tabs
- fix(ios-chat): stop transcript squash on send/delete/loading toggle
- fix(ios-chat): clear stale streaming indicator on previous assistant rows
- fix(ios-chat): stop transcript drift after breaking streaming auto-follow
- fix(core): omit reasoning_effort by default on customOpenAI chat
- fix(settings): match iOS About legal row typography to intro copy
- perf(chat): add extraHeavy streaming throttle tier and retune gates
Version 1.47.0
- feat(local-tools): cross-reference search and browse tools when both are on
- feat(core): enable KVS model-list compression writer (phase 2)
- feat(macos): configurable Quick Prompt shortcut and App Visibility settings
- feat(ui): apply brand backdrop across chat, Settings, and onboarding
- feat(chat): International Orange backdrop and clearer message bubbles
- feat(folders): unify move-folder menus with icons and tinted glyphs
- fix(macos-chat): pin transcript to bottom on send in long convos
- fix(settings): stop model picker and "Updated " from emptying
- fix(local-tools): make OpenAI Responses follow-up work on OpenRouter
- fix(chat): unwrap OpenRouter error.metadata in chat banners
- fix(chat): surface gateway API errors in banners
- fix(chat): also silence SwiftLint redundant_discardable_let
- fix(chat): keep pending-queue subscribe line SwiftFormat-safe
- fix(chat): restore ViewBuilder builds for pending queue subscription
- fix(chat): subscribe pending-message bar to queue change counter
- fix(core): stop stale sheet onDismiss cancelling chained local tools
- fix(ios): pause streaming auto-scroll during user touch/deceleration
- fix(ios): tighten toolbar spacing between org chip and new chat
- fix(macos): align chat toolbar chrome with primary styling
- fix(ui): align iOS chat toolbar organize chip and menus
- refactor(chat): split StandardMessageContentView into support file
- refactor(core): split Responses DTOs and test helpers across files
- refactor(macos-chat): relocate folder chip beside New Chat toolbar cluster
Version 1.46.0
- feat(core): conversation folders, grouping, and organize flows
- fix(chat): unbreak OpenAI image-edit follow-ups in /responses
- fix(core): raise local tool hop limit from 5 to 25
- fix(chat): resolve huge-code-block crash via Textual TextBuilder fix
- fix(chat): restore VoiceOver body for expanded message rows
- fix(chat): macOS empty-state inset + Ready to Chat body typography
- fix(macos): replace hero Image Button with tap gesture layout
Version 1.45.0
- feat(sidebar): collapsible conversation sections with synced persistence
- fix(macos): re-anchor LazyVStack transcript after mount race
- fix(chat): persist built-in provider before model picker resolves
- fix(chat): seed message cache and stabilize macOS transcript layout
- fix(settings): tolerate transient iCloud Keychain misses
- fix(macos): make error observation archive-safe
- fix(macos): bound long chat errors in bottom controls
- fix(settings): keep model refresh freshness device-local
- fix(ios): improve chat toolbar picker sizing
- fix(streaming): compile render-cost logging in release
- fix(chat): stop streaming dots from bouncing
- fix(chat): keep streaming indicator visible during thinking
- fix(ios): allow chat errors to wrap
- fix(chat): stream indicator in layout, not over Textual
- fix(chat): macOS streaming dots overlay streak
- fix(settings): eliminate the "marketing screen with keys present" regression
- fix(ios): stop transcript bounce during streaming
- fix(ios): restore Liquid Glass toolbar capsules and picker colors
- chore: bump deps.
- perf(streaming): defer LaTeX rendering while streaming
- perf(streaming): adapt UI cadence to render cost
- perf(streaming): restore ~30fps UI throttle; align Quick Prompt
Version 1.44.0
- feat(chat): native transcript lists on iOS and macOS
- feat(images): add streaming partial previews for OpenAI image generation
- feat(images): stream OpenAI image previews
- feat(images): OpenAI image gen on OpenRouter; drop Vercel path
- feat(images): OpenAI image generation via Responses API image_generation tool
- feat(images): Gemini image output via OpenRouter + Vercel gateways
- feat(images): Gemini image output, origin tag, full-width render
- fix(chat): VStack multi-block markdown; iOS transcript cell sizing
- fix(ios): compose UICollectionView insets from measured safeAreaBar heights
- fix(settings): ship compressed model-list reader before writer
- fix(settings): chat readiness gates on key presence, not stale test
- fix(errors): surface hallucinated tool name and special-case hop limit
- fix(local-tools): headless mode uses WebPage API, not URLSession
- fix(endemic-llm): stop referencing disabled local tools to the model
- perf(chat): consolidate streaming auto-follow on revision signal
- perf(chat): trim message accessibility payloads
- perf(chat): cache parsed message content for visible rows
- perf(settings): LZFSE-compress provider model lists in iCloud KVS
- refactor(chat): remove automatic conversation collapse
- refactor(core): remove dead code and align build metadata
- refactor(chat): remove "long press any message to edit" helper tip
Version 1.42.0
- feat(core): Chat Completions local tool loop for Z.AI and gateways
- feat(core): stream Gemini tool calls end-to-end via local tool loop
- feat(core): stream Anthropic tool calls end-to-end via local tool loop
- feat(settings): split Local Browser Use into Search + Browse toggles
- feat(core): in-modal recovery for local search
- feat(core): stream OpenAI post-tool continuations end-to-end + parallel tool calls
- style(settings): make macOS section headers dominant
Version 1.41.0
- fix(core): non-thinking responses fail on Anthropic Opus 4.7+ due to explicit temperature
- fix(core): heal streaming-thinking tables broken by mid-row blank lines
- fix(core): restore macOS chat hit-testing after sidebar collapse
Version 1.40.0
- feat(chat): searchable model picker for large lists
- fix(chat): match searchable model picker to Menu styling
- fix(chat): Textual markdown chunking and truncation mask only when fading
- fix(chat): cap last-message auto-expand to avoid markdown stack blowups
- fix(ios): prevent content scrolling during sidebar edge swipe
- fix(ui): remove Beta chip from AI Reasoning in advanced modal
- fix(core): review prompt uses host app product name
- fix(core): harden chat sync, URLs, and title generation for crash mitigation
- fix: add remote-notification background mode for CloudKit sync
- fix(core): per-message expand stuck after Collapse All
- fix(core): stream thinking UI before think close tag
- chore: track Xcode workspace Package.resolved in git
- perf(a11y): scale preview icons with @ScaledMetric
- perf(core): replace release prints with os.Logger via AppLog
- refactor(core): extract large files into focused modules
- refactor(core): replace ScrollViewReader with ScrollPosition in sidebar
- refactor(core): migrate settings and helpers to @observable
- refactor(core): remove LegacyChatMessage alias and getWebSearchTools
- refactor(core): remove dead DrawerView struct and clean up tests
Version 1.39.0
- feat(message): always show full content for last message, no Show more
- feat(message): add header actions menu button for message actions
- fix(chat): replace position-based auto-scroll break with gesture detection
- fix(markdown): close unclosed code fences from truncated responses
- fix(message): rename Copy to Copy Message in context menu
- perf(chat): auto-collapse older messages on new message submission
- perf(streaming): reduce observation cascades during streaming
Version 1.38.1
fix: bug fixes and improvements
Version 1.38.0
- fix(build): pin Textual to patched revision for iOS archive
- refactor(ui): consolidate beta chips, simplify Ollama settings copy
- refactor(markdown): migrate MarkdownUI to Textual, keep LaTeXSwiftUI for math, remove code block copy
Version 1.37.0
- feat(reasoning): always display thinking when returned, regardless of toggle
- feat(reasoning): support reasoning option for all providers including custom OpenAI
- feat(vercel): add reasoning/thinking support for Vercel AI Gateway
- fix(providers): send reasoning_effort none for custom OpenAI-compatible title generation
- fix(settings): preserve model selection per custom OpenAI provider
- fix(zai): send explicit thinking.type disabled when toggle off
- fix(custom-provider): parse native Ollama token counts and remove token estimation fallback
Version 1.36.0
- feat(settings): double system message character limit to 10k
- fix(ios): preserve show-more position while keeping initial bottom placement
- fix(scroll): restore scroll-to-bottom, auto-follow, and geometry-based break detection (iOS and macOS)
Version 1.35.0
- feat(quickprompt): render markdown continuously during streaming
- feat(shortcuts): save conversations to history
- feat(ios): swipe from left edge to open drawer
- fix(ios): prevent scroll jump when expanding last message at bottom
- fix(links): support ticket and markdown links open correctly on macOS and iOS
Version 1.34.0
- feat(widget): add iOS lock screen widget
- feat(settings): option to auto-delete conversations after X days
- feat(ui): remove bubble view, standardize on document layout
- fix(sidebar): fix conversation group ordering and add comprehensive tests
Version 1.33.1
refactor(ToS): centralize receipt store, global ToS agreement
Version 1.33.0
- feat(macos): add View menu zoom in/out for macOS
- feat(local-browser-tools): Phase 1 local browser tool use for OpenAI direct
- feat(local-browser): hardcode extraction limit, inline links, parser extraction, settings copy
- feat(local-browser): improve tool transcript visibility, extraction, and OS gating
- feat(settings): refine local browser tools + server-side web search UX
- feat(gemini): add thinking/reasoning support for Google AI Studio
- feat(ui): hide reasoning section for unsupported providers
- feat(zai): add thinking support
- feat(anthropic): use adaptive thinking for all 4.6+ variants
- feat(anthropic): add extended thinking support
- feat(widget): implement AI Digest widget extension
- feat(widget): AI Digest Widget WIP implementation
- revert(widget): back out AI Digest Widget implementation... too frustrating to get working
- feat(sidebar): add Duplicate to conversation context menu
- fix(openai): support dual-tool selection and valid web_search encoding
- fix(settings): persist provider selection when switching to previously-used provider
- fix(ios): display zoom on iPhone SE 2022 truncates text and UI elements
- perf(test): remove mock streaming delay and reduce ensemble concurrency delay
- perf(test): speed up test suite from ~15s to ~7s
- refactor(settings): normalize typography, alignment, and spacing across macOS and iOS
- style(settings): use SettingsSectionHeader for Model Filters in iOS
Version 1.32.0
- feat(custom-provider): add OpenAI-compatible custom provider support
- feat(custom-params): prepend messages for Chat Completions system prompts
- feat(settings): add Beta chip to OpenAI-Compatible Providers section
- feat(settings): OpenAI-Compatible section intro, Add Provider UX, a11y
- feat(custom-provider): immediately fetch models when adding custom provider
- feat(custom-provider): enable attachments for OpenAI-compatible providers
- feat(custom-provider): add title model picker below API key row
- feat: disable AI Reasoning for unsupported providers; improve custom provider modal UI
- feat(custom-provider): harden API key requirements and fix ensemble metadata
- fix(openrouter): use provider-appropriate reasoning-off for Anthropic models
- fix(settings): improve macOS settings sizing and simplify status messages
- fix(latex): add horizontal scroll for wide block equations
- fix(settings): align macOS add-button styling across API key sections
- fix(custom-provider): OpenRouter compatibility, title picker UX, prune debug logs
- fix(custom-provider): apply model inclusion/exclusion filters to custom provider models
- fix(openrouter): explicitly disable reasoning when off
- perf(ensemble): parallelize Face/Off candidate calls with async let
- refactor(models): replace smart model selection with hardcoded defaults
- refactor: DRY pass across settings, URLs, and attachment views
- refactor: deduplicate SettingsManager init and title generation dispatch
- refactor(core): remove verified dead code paths
Version 1.31.0
- feat(search): add "Only Search When Requested" smart search toggle
- feat(attachments): add interactive preview and PDF thumbnails
- feat(chat): image paste support for iOS and macOS
- feat(chat): hide provider picker when only one provider is configured
- feat(model-filters): add positive model inclusion filters alongside existing exclusion filters
- fix(openrouter): add PDF file attachment support to chat completions
Version 1.30.0
- feat(openai): add reasoning/thinking support with collapsible UI
- feat(openrouter): add OpenAI-style reasoning support for streaming chat
- feat(settings): improve provider recommendations and web search warnings
- feat(settings): split API keys into Direct/Multi-providers, improve ZDR copy and UX
- fix(ui): restore link colors in markdown and unify with Link views
- fix(quick-prompt): persist thinking and raw API response
- fix(reasoning): gate capture by request config and prevent double-send race
- fix(streaming): preserve thinking content after streaming completes
- fix(streaming): repair chunk normalizer corruption and Face/Off judgment reliability
- fix(openrouter): add web search plugin support
- fix(openai): remove unnecessary reasoning param from title generation
- fix(markdown): stop chunking from splitting fenced code blocks
- chore: remove dead code (unused CoreData imports, empty deinit)
- docs(quick-prompt): document Face/Off intentionally not used
- docs(settings): clarify OpenRouter recommendation copy and link ZDR once
- style(settings): reduce API key toggle size on macOS
Version 1.29.0
- feat(shortcuts): add Siri and Shortcuts integration
- feat(vercel): add app attribution headers for Vercel AI Gateway
- feat(vercel): add Zero Data Retention toggle for Vercel AI Gateway
- fix(shortcuts): add Siri entitlement, fix phrase collision, add ping test
- refactor(settings): improve API key addition flow
- style(settings): remove redundant Provider row from Add API Key views
- style(onboarding): further copy refinements
- style(onboarding): tighten welcome screen copy and layout
Version 1.28.0
- feat(settings): add model exclusion filters for large provider lists
- feat: add Vercel AI Gateway as new API provider
- fix: improve title generation prompt for shorter titles
- fix(macos): fix Cmd-F Find in conversation
- refactor(settings): rename Test to Update in API keys UI
Version 1.27.0
- feat(a11y): add Voice Control, Differentiate Without Color, Larger Text, and Sufficient Contrast support
- fix(macos): restore arrow key navigation in sidebar
- fix(markdown): restore inter-block spacing in chunked content
- fix(streaming): show error banner for in-stream API failures
- fix(scroll): reduce excessive bottom spacer during auto-scroll
- refactor: DRY up duplicated view code in three files
- refactor: remove unused code identified by Periphery and manual review
Version 1.26.1
- perf(messages): string-truncate long messages to reduce CPU usage
- perf(scroll): VStack + scroll-to-bottom + 5fps throttle for reliable positioning
- perf(streaming): fix high CPU during streaming with @observable and scroll throttling
- perf(views): fix iOS watchdog crash by removing message view observation overhead
- refactor(messages): revert to VStack
- refactor(scroll): migrate to modern ScrollPosition API with auto-follow
Version 1.26.0
- feat(chat): add collapse/expand for messages in document view
- fix(a11y): improve accessibility for collapse/expand feature
- fix(a11y): add accessibility labels to ErrorBannerView
- fix(anthropic): discard pre-tool text to fix "double answer" with web search
- fix(anthropic): handle unsupported client-side tool requests gracefully
- fix(ios): show auto-scroll button on first AI response
- chore: auto-applied settings.
- perf(chat): improve CPU usage and fix scroll issues on macOS
- docs: add critical performance warnings for LazyVStack
Version 1.25.0
- feat(a11y): expose markdown headings to VoiceOver rotor navigation
- fix: resolve streaming buffer issues affecting UI and content preservation
- fix: render markdown headers in pure-markdown paragraphs
- fix: preserve user message and partial AI response on streaming error
- perf: use in-memory buffer for streaming to eliminate sidebar re-evaluation
- perf: reduce redundant LaTeX parsing in MarkdownTextView
- perf: throttle UI updates during streaming with VoiceOver bypass
- perf: throttle SwiftData saves during streaming to reduce CPU/energy usage
- refactor: DRY up duplicated code across providers and views
Version 1.24.0
- feat(a11y): complete accessibility assessment with P3 resolution
- feat(a11y): implement P2 accessibility features
- feat(a11y): implement P0 and P1 accessibility features
- fix(ios): position cursor snug against bottom gutter in chat input
- fix(ios): enable keyboard avoidance in expanded input sheet
- fix(ios): prevent text overlap with buttons in expanded chat input
- fix(macos): reduce excessive side margins in chat input
- fix(messages): prevent crash when accessing deleted SwiftData models
- fix(quick-prompt): Open in App button not working on macOS
- perf(launch): improve macOS app startup time and window activation
- chore: linting.
Version 1.23.0
- feat(openrouter): add OpenRouter provider integration
- feat: add OpenRouter to marketing screens and sort providers alphabetically
- feat(settings): add OpenRouter to Custom API Parameters examples
- fix(ui): align iOS pending messages box with macOS rectangular styling
- test: modernize and optimize test suite
- test: modernize and DRY test suite
- chore: complete feature and bump version.
- chore: update OpenRouter HTTP-Referer to folding-sky.com/cumbersome
- docs(plans): add OpenRouter integration plan
Version 1.22.0
- feat(chat): enable concurrent chats with per-conversation state
- feat(chat): add pending message queue system
- feat(chat): preserve streaming content when user stops response
- fix(streaming): add cancellation checks in provider streaming loops
- fix(ios): clear message text after sending
- fix(views): restore erroneously removed code from Periphery scan
- fix(chat): prevent sidebar thrashing during concurrent streaming
- chore: bump to 1.22.0
- refactor(settings): split SettingsViewModel into focused files
- refactor(viewmodel): extract ChatViewModel into focused helpers
- docs: add pending message queue to feature highlights
- docs: add concurrent chats to feature highlights
Version 1.21.0
- feat(zai): Add Z.ai provider support
- feat(attachments): add macOS drag-and-drop file support
- feat(attachments): enable multi-selection for image and file pickers
- fix(views): remove per-item copy buttons from JSONTreeView
- fix(latex): prevent false positives on currency ranges and prose content
- fix(markdown): reduce chunk size to 4000 chars for safer margin
- fix(markdown): prevent stack overflow when rendering large text
- chore: reduce image sizes using imageoptim.
- docs: document xAI abandonment, pivot to Z.ai support
Version 1.20.0
- feat(latex): LaTeX content parsing and rendering
- feat(copy): add Copy Conversation feature with context menu
- feat(export): add conversation JSON export from sidebar context menu
- refactor: remove dead legacy code, rename LegacyChatMessage to APIMessage
- docs(plans): add conversation JSON export feature plan
- docs: add SwiftUI-only policy to project rules
Version 1.19.0
- feat(deeplink): add conversation deep links with Copy Deep Link menu option
- feat(ui): add copy button to markdown code blocks
- chore: bump dependencies
Version 1.18.0
- feat(icons): add Joystick alternate icon and improve Settings UI
- feat(icons): add Gear Mesh alternate icon and fix macOS Dock sizing
- feat(settings): Redesign iOS Settings with card-based layout
- feat(settings): add alternate app icons and switcher UI
- feat(assets): add alternative 'Cu' periodic table style app icons
- feat(macos): toggle menu bar icon visibility
- fix(lint): move unused_declaration to analyzer_rules section
- fix(settings): separate icon choices, fix assets, align UI, use local storage
- fix(attachments): enforce API-safe image bytes for Anthropic
- fix: dedupe authenticated request building
- test: remove useless, redundant, and brittle tests
- refactor(views): extract components from large view files
- refactor: remove unused code identified by Periphery
- refactor(tooling): configure Periphery to be more strict
- refactor(views): remove unused @State properties from ChatInterfaceView
- refactor(views): extract ChatInterfaceView from MainNavigationView
- refactor(views): extract components from MacOSNavigationView.swift
- docs(plans): document local storage decision for icon preference
Version 1.17.0
- feat: auto-shrink images to 4mb to account for strict Anthropic image size limits.
- feat: long-click on any user message to restart convo from that point, allowing for renewing conversation history by restarting the chat at any prior user message in a convo.
- feat: long-press chat Send button provides context menu to send to new chat vs the existing one.
- fix: a bug prevented icloud sync of chats with images/pdfs/files across devices. this fixes. IMPORTANT: delete old convos that have images/files for sync to work again.
Version 1.16.0
- feat: enable pinned conversations from drawer/sidebar.
- chore: rename plans to .ai-plans.
- docs: plan pin convo feature.
Version 1.15.0
- feat: quick prompt (press Option + Space in macOS for super-fast prompting).
- feat: PDF and other attachment analysis and syncing between devices.
- fix: macOS specific copy.
- test: support PDF and other attachment analysis.
- chore: bump to 1.15.0.
- docs: help if processing.
- docs: closing out quick prompt feature.
- docs: key insights on missing CloudKit production promotion.
Version 1.13.0
- feat: ability to view raw API response.
- feat: enable iOS background tasks to allow completion of in-progress chats while in another app.
- fix: various improvements to raw API view.
- fix: DRY meta information in face/off responses; fix edited face/off.
- fix: change sidebar selected to branded orange with white text.
- fix: sidebar button colors.
- test: updated ensemble mode.
- test: add for sidebar, and update rules.
- chore: complete raw API viewer feature.
- chore: bump to 1.13.0.
- chore: rename docs to done.md.
- refactor: more logging for gemini calls.
- docs: raw API response plan.
- docs: mark background feature done.
- docs: plan iOS background streaming.
- docs: update README.
Version 1.12.0
- feat: search feature.
- feat: sidebar liquid glass.
- feat: new icons for iOS and macOS.
- fix: macOS sidebar button text in small width view.
- fix: button colors in non-liquid glass iOS.
- fix: iOS drawer fade-out extends above Search.
- fix: auto-increment build count.
- fix: iOS search input focus and soft keyboard.
- fix: fade in bottom of drawer.
- fix: make release ordering of edit types.
- fix: remove Sora as an OpenAI option.
- fix: Settings color when selected.
- fix: test improvement.
- fix: Unknown provider in intro iOS copy; missing macOS copy entirely.
- chore: update to reco settings and bump version.
- chore: bump to 1.12.0.
Version 1.10.1
- fix: soft cursor never vanishing in iOS.
- fix: iOS PhotosPicker selection state.
- fix: OpenAI follow-up message error to original message with attachment.
- chore: bump to 1.10.1.
- chore: reco entitlement fix.
- docs: for soft keyboard issue.
Version 1.10.0
Attach images and files to prompts in iOS, iPadOS, and macOS.
Version 1.9.0
- TUNE ALL API PARAMS: Power users can now send custom parameters directly to AI provider APIs. Access advanced features like reasoning effort controls, sampling parameters, and custom stop sequences without waiting for app updates.
- Configure parameters in Advanced Features modal (tap + button in chat)
- Works across OpenAI, Anthropic, and Gemini
- Override built-in settings when needed
- Syncs via iCloud across all your devices
- Other Improvements:
- Enhanced chat input layout with improved button placement
- Platform-specific UI refinements for iOS and macOS
- Better handling of complex API configurations
Version 1.8.0
- migrate to SwiftData for better cross-device syncing.
- overscroll UI improvements.
- more Liquid Glass for iOS and macOS 26.
- ### Bug Fixes
- scrolling spacing.
- deleting messages issue.
- streaming messages and swiftdata and cloudkit.
- face/off mode and migration.
- for smaller screens like 16e.
- indicate thinking + tools for all out tokens.
- glass style on ios >= 26.
- refine face/off button size in iOS.
- add more padding to input.
- auto-scroll.
- shorter input text.
- buttons inside macos chat input.
- ### Maintenance
- bump version to 1.8.0 build 27
- enable code stripping.
- bump to 1.8.0.
- try to fix legacy data.
- uninstall dev script.
- ### Tests
- swiftdata and cloudkit.
- complete swiftdata.
- keep refining.
- get them compiling.
- ### Documentation
- mostly complete swiftdata.
- plan swiftdata migration.
- add refactoring doc.
- liquid glass rules.
- ### Refactoring
- MainNavigationView.
Version 1.7.0
- organize convos by date.
- improve macOS title area.
- remove needless Your Chats and refresh in macOS and iOS.
- ### Bug Fixes
- adjust token counts.
- remove logos from sidebars.
Version 1.6.0
- feat: auto-scroll to bottom when going to old convo.
- feat: reorder convo list based on last update.
- fix: subtle issue with iOS auto-scrolling.
- ci: fix changelog auto-generation.
Version 1.5.1
Fix bug that was preventing full chat from being sent to OpenAI.
Version 1.5.0
- Gemini / Google AI Studio API key support now available.
- Auto-generate titles using low-cost AI now available and ON by default.
- ### Bug Fixes
- no extra spacing needed for OpenAI and Gemini.
- duplicated pre-search content in Gemini.
- bug related to re-using old title when trying to swap to old chat during in progress new chat.
- don't overly restrict auto-title length.
- title summary issue with OpenAI.
- iCloud sync issue across devices.
- errant spaces in AI responses.
- swap provider and model mid-convo based on drop-down changes.
- ### Maintenance
- update CHANGELOG for v1.5.0-build19
- bump version to 1.5.0 build 19
- update marketing copy.
- bump and DRY.
- tests and debugging refinements for auto-generate titles feat.
- adjust cursor rules.
- ### CI/CD
- bump to 1.5.0.
- remedy issue with release.
- ### Documentation
- duplicated pre-search content in Gemini.
- ### Tests
- new Gemini option.
Version 1.4.0
- ### Features
- auto-scroll option.
- add new chat icon in upper-right in macOS.
- ### Bug Fixes
- restore non-streaming OpenAI calls.
- remove PRODUCT_PACKAGE_TYPE.
- reduce scrolling into infinity whitespace.
- MacOS double carets in drop-downs.
- improve auto-release notes.
- ### Build System
- try to fix app store connect distro issue.
- refine UI tests.
- prep release 1.4.0
- test and DRY for scrolling refinements.
- Modernize to iOS 18/macOS 15 with replace ScrollViewReader with .scrollPosition.
- Modernize to iOS 18/macOS 15 with macOS Window Management.
- Modernize to iOS 18/macOS 15 with Swift 6 Typed Throws.
- Replace NotificationCenter with Swift Observation.
- Modernize to iOS 18/macOS 15 with SF Symbols 6 with Animations.
- Modernize to iOS 18/macOS 15 with Swift 6 strict concurrency.
Version 1.3.0
- Agent tool (search) option now available.
- Various bug fixes and improvements.
Version 1.2.1
Bump dependencies. Fix soft keyboard issue, allowing returns within prompts for better iOS editing.
Version 1.2.0
- FACE/OFF MODE IS HERE
- Generate 3 AI responses with different creativity levels (conservative, balanced, creative). Then an AI judge evaluates all 3, picks the winner, and tells you why it's superior.
- Stop doing manual trial-and-error. Get the best response on the first try.
- Perfect for critical tasks: business emails, complex code, research. When quality matters more than cost, Face/Off Mode delivers.
- Why consumer apps will never build this: Subscription models want you messaging more, not getting perfect answers immediately. With pay-per-use, our incentives align with yours.
- Uses ~5x the tokens, but when you need the absolute best response, it's worth it.
Version 1.1.0
- DOCUMENT WORKSPACE
- Finally. Stop squinting at chat bubbles. Full-screen document interface for actual work. Edit AI responses inline. Read long outputs without wanting to throw your phone.
- ICLOUD SYNC
- Your conversations, API keys, and settings now sync across iPhone, iPad, and Mac via your personal iCloud. Not our servers-yours. Start a conversation on your phone, finish it on your Mac.
- BETTER CONVERSATION EDITING
- Edit any message-yours or the AI's-to refine context. Delete off-topic tangents. Fix the AI's mistakes mid-conversation. Better context = better responses.
- And of course a bunch of bug fixes and little-bitty features.
Version 1.0.0
Initial release.