RELEASE
HISTORY

Every update, feature, and fix — documented.

// BUG_FIXES
  • * Fixed expansion system freezing after inject() early return — two early-return paths in TextInjector.inject() (no frontmost app, or frontmost app is Wordy itself) skipped calling onInjectionComplete, leaving isInjecting permanently true and causing all subsequent keystrokes to be silently dropped. Both paths now fire the completion callback.
// BUG_FIXES
  • * Fixed snippet expansion pasting clipboard content instead of snippet — removed the clipboard-based injection path which had a race condition during the paste window. All text is now injected via CGEvent Unicode events regardless of length or content.
  • * Fixed surrogate pair splitting at chunk boundaries — emoji and other non-BMP characters could be corrupted when a UTF-16 surrogate pair was split across two CGEvent chunks. Chunk boundaries now respect surrogate pairs.
// NEW_FEATURES
  • + Text injection now uses CGEvent key simulation for fast, clipboard-free expansion
  • + Automatically falls back to clipboard paste for long text (500+ chars) or emoji/supplementary Unicode characters
  • + European diacritics and accented characters use the fast CGEvent path
  • + {{shell:...}} and {{js:...}} placeholders now resolve asynchronously — no more UI freezes
  • + New folder creation shows a popover with name and color picker — choose from 8 preset colors or pick a custom color
// IMPROVEMENTS
  • ~ Held modifier keys (Shift, Cmd, etc.) are released before injection to prevent garbled output
  • ~ Keyboard monitoring pauses during injection to prevent re-triggering
  • ~ Cached regex compilation for named capture groups (avoids recompiling on every expansion)
  • ~ Nested snippet resolution captures the snippet array once instead of re-reading on each level
  • ~ Added unit test target with 51 tests covering the expansion pipeline, text injector, and slow placeholder detection
// BUG_FIXES
  • * Fixed thread-safety issue with keystroke buffer access in KeyboardMonitor
  • * Fixed fill-in panel stealing focus unnecessarily via NSApp.activate
// NEW_FEATURES
  • + New AI Translation — select text in any app and press Option+T to translate it using Claude AI
  • + Floating preview panel shows original text and translation side by side
  • + Choose from 28 target languages with a quick picker
  • + Replace pastes the translation over the original selection
  • + Copy copies the translation to clipboard
  • + Configurable hotkey in Settings → Global Hotkeys
  • + Requires an Anthropic API key (same key used for AI snippet generation)
// NEW_FEATURES
  • + New {{open:URL_OR_PATH}} placeholder that opens URLs, apps, or files after snippet expansion
  • + Opens in the default browser or app via macOS — works with https://, file paths, and .app bundles
  • + Supports dynamic URLs with nested placeholders: {{open:https://jira.com/browse/{{clipboard}}}}
  • + Resolves to empty string — combine with text insertion or use standalone
  • + Multiple {{open:...}} per snippet allowed
  • + Works with fill-in forms, quick search, and direct expansion
  • + Tilde paths (~/Documents/...) expanded automatically
  • + Available in the Insert Placeholder menu under Advanced > "Open URL / Path..."
  • + Syntax highlighted in brown in the snippet editor
// IMPROVEMENTS
  • ~ Snippet editor opens instantly — eliminated Keychain I/O that ran on every snippet selection (10–80 ms per click)
  • ~ Snippet list and editor views are now preserved instead of destroyed and recreated on each navigation, avoiding full NSTextView reconstruction
  • ~ Back button in the snippet editor has a larger click target for easier navigation
  • ~ Shell command blocklist now uses regex patterns, making it resistant to bypass tricks like variable expansion, absolute paths, and string concatenation
  • ~ Clipboard placeholder resolution uses a thread-safe container to prevent potential memory issues on timeout
  • ~ iCloud sync version counter uses timestamp-based versioning to prevent cross-device collisions
  • ~ Fill-in form window uses a proper state machine to prevent race conditions between submit and close
  • ~ Secure input app detection caches results for 2 seconds to reduce subprocess spawning
  • ~ LicenseStore gracefully handles missing Application Support directory instead of force-unwrapping
  • ~ Regex triggers that match empty strings are now rejected to prevent firing on every keystroke
// BUG_FIXES
  • * Fixed suggestion count mismatch — menu bar could show "Suggestions 1" while the suggestions sheet showed no results due to sub-phrase deduplication not being applied to the count
  • * Fixed sidebar click targets — clicking the gap between a folder name and its snippet count now correctly selects the folder
  • * Fixed version history losing intermediate edits during rapid saves
// NEW_FEATURES
  • + New {{datepicker:Name}} placeholder type for fill-in forms — shows a graphical calendar picker when the snippet expands
  • + Optional custom date format for date picker: {{datepicker:Name:yyyy-MM-dd}}
  • + Required flag support for date picker: {{datepicker:Name::required}}
  • + Date picker available in the Insert Placeholder menu under Date & Time
  • + Snippet version history — automatically saves a snapshot before each snippet edit, keeps the last 5 versions per snippet
  • + New History button in the snippet editor to browse and restore previous versions, persisted across app restarts
  • + Snippet suggestions — detects repeated multi-word phrases as you type and surfaces suggestions in the menu bar dropdown after 3+ repetitions
  • + Menu bar icon changes to a lightbulb when suggestions are available, with one-click "Create Snippet" to turn a suggestion into a snippet
  • + Deduplicates overlapping sub-phrases for cleaner suggestion results
  • + Toggle snippet suggestions on/off in Settings > General
  • + Fully isolated suggestion detection — no impact on typing performance
  • + New "Test" button in the snippet editor header to preview how a snippet expands — supports fill-in fields, regex snippets with placeholder capture group values, and includes a Copy button for the result
  • + Regex pattern field now highlights syntax with distinct colors — named capture groups, escape sequences, character classes, and quantifiers are color-coded
// IMPROVEMENTS
  • ~ Redesigned fill-in form to use a horizontal two-column layout — fields on the left, live preview on the right, replacing the previous stacked vertical layout
  • ~ Added draggable vertical divider between fields and preview columns with a grip handle and left-right resize cursor (default 45% fields / 55% preview, adjustable 25%-70%)
  • ~ Both columns scroll independently — fields scroll when there are many inputs, preview scrolls when snippet content is long
  • ~ Increased window size to accommodate side-by-side layout (860x500 default, 700x400 minimum)
  • ~ Removed horizontal resize divider between fields and preview that was used in the old vertical layout
// IMPROVEMENTS
  • ~ Fill-in form preview now displays actual clipboard content instead of [clipboard]. Falls back to [clipboard] when the clipboard is empty or contains non-text data.
// NEW_FEATURES
  • + New app logo
// NEW_FEATURES
  • + Complete UI Redesign — The entire app has been restyled with a bold, monospace-heavy developer-tool aesthetic. New centralized design system with dark/light mode support and yellow accent color.
  • + Custom Folder Colors — Folders can now have arbitrary custom colors beyond the 8 presets. Colored pill badges show folder names throughout the snippet list.
  • + Redesigned Fill-in Forms — Numbered fields, new "MEMORIZE" toggle for remembering values, inline placeholder preview with colored pills, and keyboard hints.
  • + Table-Style Snippet List — New three-column layout (Name, Abbreviation, Folder) with themed search and "NEW SNIPPET" button.
// IMPROVEMENTS
  • ~ Redesigned sidebar with numbered items, monospace uppercase typography, and tinted active selection with accent border.
  • ~ Themed Quick Search with monospace font and accent-colored result highlighting.
  • ~ Themed Statistics views with styled card backgrounds, mono values, and accent chart styling.
  • ~ All windows now use the new design system — Settings, Global Variables, License Activation, Import, and Permission Request.
  • ~ AI components restyled with subtle pill buttons and themed prompt/preview sheets.
  • ~ Editor improvements: themed text fields, placeholder highlighter with accent color, and new native dropdown component.
// NEW_FEATURES
  • + Notes in Fill-in Forms — Add reference information to your fill-in forms with {{note:...}}. Notes display in the form with an info icon but are stripped from the final output. Perfect for including email addresses, instructions, or context when filling out forms.
  • + Auto-Update Checking — Wordy now checks for updates automatically and notifies you when a new version is available. View release notes and install updates with one click. Configure in Settings → Updates or check manually from the menu bar.
// BUG_FIXES
  • * Fixed the way the app starts on system startup - making it more reliable.
// NEW_FEATURES
  • + AI Snippet Generation — Let Claude AI write your snippets for you. Describe what you need in plain English and Wordy generates the trigger, replacement text, and placeholders automatically.
  • + Create with AI — Click the sparkles button in the snippet editor to generate a new snippet from a natural language description. Claude builds it complete with the right placeholders, fill-in fields, and formatting.
  • + Improve with AI — Click the wand button to enhance an existing snippet. Ask Claude to add fill-in fields, use date math, shorten the trigger, make sections optional, or any other improvement.
  • + Preview & Refine — Review every AI suggestion before it touches your snippet. See the proposed title, trigger, replacement, and regex status. Apply, refine your prompt to iterate, or discard.
  • + Model Selection — Choose your preferred Claude model in Settings → AI: Sonnet 4.5 (default) for best quality or Haiku 4.5 for faster responses.
  • + Secure API Key Storage — Your Anthropic API key is stored in the macOS Keychain, never written to disk as plaintext. Remove it anytime to disable AI features entirely.
// IMPROVEMENTS
  • ~ Regex Triggers UI — When "Use as regular expression" is enabled, the editor now shows two separate fields: Trigger displays the human-readable format (e.g., ;jira<project>-<number>[space]) while Pattern shows the actual regex. This makes it clearer what you need to type versus the underlying pattern.
// NEW_FEATURES
  • + Refreshed Window Design — The main Manage Snippets window now features a modern translucent sidebar that blurs the content behind it, giving the app a more refined macOS-native feel. The detail panel appears as an elevated card with rounded corners and a subtle shadow, creating a clear visual hierarchy between navigation and content.
  • + Translucent sidebar with vibrancy effect
  • + Elevated detail panel with rounded corners
  • + Collapsible sidebar with toolbar toggle
  • + Unified transparent titlebar
// NEW_FEATURES
  • + Native macOS text expander living in your menu bar
  • + Create snippets with custom triggers that expand instantly
  • + Organize snippets into folders for easy management
  • + Regex-powered triggers for dynamic expansions
  • + Global variables for reusable content across snippets
  • + Fill-in fields for interactive snippet completion
  • + Light and dark mode support
// END_OF_LOG