2.1.5
2026-08-20 09:11
CHANGED
- Idle widget taps remain inert when no –action-kind is set (placeholder Hello World does not clear on click).
NEW
- Pie charts with
--chart-format pieandlabel:value[:color]tokens (space- or comma-separated), optional per-slice colors, JSONslicesarrays, inline side legend on medium/extra-large widgets, and percentage labels in the legend. - Multi-series line charts with
--chart-format series(slash-separated groups), shared Y scaling, and optional--chart-series-labelsfor legend names. --chart-keylegend placement (auto,inline/left,bottom,external,none) for pie and series charts on macOS and iOS widgets.--key-targetto write legend rows to a second widget (for examplecpu-key), including legend-only key widgets that inherit colors from the main chart and scale text to fill the widget.--chart-bar-style glasssupport for pie slices (liquid glass wedge fills).- Quad4 multi-goal progress with comma-separated
--progressvalues,--progress-format quad4(quad-4alias), and optional--progress-layoutgrouping across CLI, URL, AppleScript, Shortcuts, and JSON.
IMPROVED
- Matrix charts keep up to 2048 cells (was 128, same as sparklines) and shrink cell size to fit the widget so extra-large heatmaps can show a dense series.
- Series line colors now match legend swatches instead of using a single foreground color for every line.
- External key widgets inherit foreground, background, gradient, and padding from the main chart update.
--fit-textfor tables grows cell fonts until width or height binds, persists on table updates, and vertically centers with--center-table(auto layout).- Table fit-text width safety so grown cells stop before truncating, instead of overshooting into ellipses.
--fonton tables uses the same installed font for cells and column measurement as--text(macOS and iOS).
FIXED
- Figlet and other
--no-wrapASCII blocks no longer clip the first lines in WidgetKit. Multiline terminal art is rasterized to an image, scaled with the same 10pt inset as--padding fill, and centered when--fit-textis on. - Comma-separated pie literals such as
Work:40,Play:25,Sleep:35now parse correctly (commas insidergb(...)colors are preserved). - iOS pie/series widget updates by adding pie, series, and legend fields to the host app payload and URL handler so Shortcuts and URL updates persist and reload widgets.
- External key widget updates from CLI and URL scheme now write legend payloads to the
--key-targetwidget instead of leaving it on the placeholder. - Whole-widget taps on Mac and iPhone/iPad use App Intents (same path as launcher buttons) so configured actions keep working when custom-scheme widgetURL delivery fails.
2.1.4
2026-08-19 14:29
NEW
- Quad4 multi-goal progress accepts comma-separated
--progresspercentages with--progress-format quad4(quad-4alias) and optional--progress-layoutquadrant grouping across CLI, URL, AppleScript, Shortcuts, and JSON automation.
IMPROVED
--fonton tables uses the same installed font for table cells as for--text(including--fit-textcolumn measurement), on macOS and iOS.
FIXED
- Whole-widget taps on Mac and iPhone/iPad use App Intents (same path as launcher buttons) so configured actions keep working when custom-scheme
widgetURLdelivery fails.
CHANGED
- Idle widget taps remain inert when no
--action-kindis set (placeholder Hello World does not clear on click).
2.1.3
2026-08-18 09:40
IMPROVED
- Matrix charts keep up to 2048 cells (was 128, same as sparklines) and shrink cell size to fit the widget so extra-large heatmaps can show a dense series.
FIXED
- Figlet and other
--no-wrapASCII blocks no longer clip the first lines in WidgetKit. Multiline terminal art is rasterized to an image, scaled with the same 10pt inset as--padding fill, and centered when--fit-textis on.
2.1.2
2026-08-18 09:40
CHANGED
- Auto table columns hug their measured text instead of stretching leftover width into every cell. Extra space stays after the last column; use
--table-layout equalfor uniform columns that fill the widget. - Center table (
--center-table) centers a content-sized table horizontally in the widget instead of leaving leftover space after the last column. Applies only to--table-layout autoand is ignored for equal and fill. Horizontal rules span the table, not the full widget. Also on AppleScript (center table), Shortcuts (Center Table on Update Widget and Show Table), JSON (tableCenter/center-table), and the URL scheme (tableCenter=1). A fresh--tablewithout--center-tablewrites the default (left-aligned block). - Per-column table alignment with
--table-align(left/center/right, plusl/c/r,leading/trailing, andcentre). Too few values repeat the last column; extras are ignored. Default is all left. Also on AppleScript (table align), Shortcuts (Table Align on Update Widget and Show Table), JSON (tableAlignstring or array), and the URL scheme (tableAlign=). A fresh--tablewithout--table-alignwrites the default instead of keeping a previous alignment. - Table layout fill (
--table-layout fill) measures columns from content then stretches them proportionally to the widget width (the previous auto behavior). Also on AppleScript (table layout), Shortcuts (Table Layout on Update Widget and Show Table), JSON, and the URL scheme (tableLayout=fill).
2.1.0
2026-08-16 10:19
CHANGED
- Background image for all chart types
- Image detection and URL handling ignore blank stored values and accept lowercase backgroundimage URLs.
- JSON background images now import with the background role without storing raw URLs as relative paths.
- Deferred image imports preserve whether the image is foreground content or a background.
- Image role conflicts are rejected across CLI flags and structured JSON.
- Table row and type sizing keeps dense Medium tables from overflowing with uneven rows, and sizes Large table type from the width needed to show the cells instead of growing the font to fill leftover height (which truncated columns).
- Fill table layout is no longer rewritten to auto on macOS and iOS widgets, so columns actually stretch instead of hugging.
NEW
- Background image for all chart types
- Quadrant progress widgets render segmented arcs for the quadrant progress format.
- Mobile quadrant progress widgets mirror the Mac segmented arc layout, captions, and footer behavior.
- Quadrant progress automation accepts quadrant through AppleScript and Shortcuts update requests.
- Widget auto-update recipe design for Shortcut re-run and image URL re-fetch on Mac host timers with optional Open at Login.
- Auto-update recipes persist per widget for Shortcut re-run or http(s) image refresh on Mac host timers.
- Open at Login toggle keeps the menu bar app (and timers) running across reboots without helpers.
- Shortcuts Run Every fields configure shortcut auto-update from Update TerminalWidget.
- Markdown link labels can include nested square brackets (for example Item [nested])
- Quadrant progress captions use the same centered layout and footer behavior as circle progress.
- CLI progress formats parse, document, complete, and emit quadrant payloads.
- Oversized gaps no longer drop partial segments; applyGaps
- gapRadians NaN cap asin argument at 1 so gap stays finite.
- Quadrant progress arc direction on Mac now sweeps CCW from 12
- Quadrant progress arcs now use clockwise: true so segments draw the short CCW path from 12 toward 9 instead of the long way through 3 and 6.
- Quadrant URL updates preserve the quadrant progress format on Mac and mobile.
- Quadrant segment gaps remain visible around round stroke caps at typical widget sizes.
- Quadrant progress grows stroke thickness on a full ring instead of shortening the active quadrant arc
2.0.10
IMPROVED
- Markdown link labels can include nested square brackets (for example Item [nested])
2.0.9
IMPROVED
- ANSI colors apply to text next to markdown links (for example a colored flag prefix before a tappable label)
2.0.7
CHANGED
- Tap URL helpers return nil for nil or unconfigured actions on Mac and iOS
- Image URL imports now use authorized image folders before asking you to choose a file.
- Synced transparent images materialize as PNG (opaque photos still use JPEG) so widget backgrounds show through after sync.
NEW
- Table cells (CSV/TSV/JSON, including headers) support CommonMark
[label](url)inline links on Mac and iPhone/iPad, same rules and tap behavior as--textlinks. - Image folder bookmarks persist allowed image directories in the App Group as security-scoped bookmarks
- Folder path helper checks whether a file path lies under a granted folder prefix
- Image folder management lets Mac users grant and remove folders for local image automation.
- Idle taps Widget taps with no action do nothing; app does not open
- Image folders CLI docs for Mac folder grants, chooser fallback, FDA note
- AppleScript image paths Same folder grant rules as CLI
- Image folders (Info/Debug on Mac) let you grant one or more folders so CLI, AppleScript, and Shortcuts can load local images without a permission prompt for every file.
IMPROVED
- GUI startup avoids duplicate activation verification.
- In-app help explains the permission prompt and what to do if TerminalWidget is missing from Settings > Notifications.
- AppleScript image updates now offer the image chooser when a supplied image URL cannot be read.
- Local image imports try granted folders first, then fall back to a file chooser when the app can prompt (including AppleScript/Shortcuts), instead of failing silently.
FIXED
- Mac open-url and markdown link taps now open in the system default browser (including Choosy or Zen) instead of always preferring Safari.
- Idle widget taps no longer open the app when no tap action is configured
- Image folder list stays current when CLI sync triggers reloadFromDiskAndRefreshWidgets
- Image-folder imports continue to later granted folders when an earlier access attempt does not copy the file.
- Widget taps with no action do nothing on Mac and iPhone/iPad instead of opening Terminal Widget.
- iCloud image sync keeps transparency for PNG/alpha sources instead of flattening them to white JPEG on Mac and iPhone/iPad.
- Stale white JPEG sync blobs refresh when the on-disk source image still has alpha.
2.0.6
NEW
- Direct licensing adds Paddle purchase, activation, and seven-day trial handling.
- License gates block expired Direct CLI access and present the GUI licensing flow.
- License menu adds purchase, activation, and trial status controls to Direct builds.
- TerminalWidget Direct app target builds a Developer ID variant with bundle ID com.brettterpstra.TerminalWidget.direct, the DIRECT compile flag, and Paddle 4.5.1 plus Sparkle 2.9.5 linked and embedded.
- WidgetExtension Direct widget extension uses bundle ID com.brettterpstra.TerminalWidget.direct.Widget and is embedded only in the Direct app.
- TerminalWidget Direct scheme is shared for build, run, and archive.
- –help, -h, –version, and completions run without a license check at all
- Trial not started is a distinct state, so a fresh install is offered the trial instead of being told the trial ended
IMPROVED
- GUI startup avoids duplicate activation verification.
- In-app help explains the permission prompt and what to do if TerminalWidget is missing from Settings > Notifications.
FIXED
- AppleScript append/limit now use dictionary terms
append dataandlimitonrender widget, fixing parse errors from the reserved wordappendand missing sdef parameters. - CLI licensing waits for Paddle verification and denies access when verification times out or fails.
- Mac App Store app no longer copies Info-Direct.plist into its Resources bundle.
- Sparkle updates now work in the sandboxed Direct build via the -spks/-spki mach-lookup exception and SUEnableInstallerLauncherService
- iCloud sync in Direct builds targets the Production CloudKit container explicitly, in both the app and widget entitlements
- terminal-widget no longer contacts Paddle on every command: a successful verification is cached for 24 hours and unlicensed copies rely on local trial state
- Offline use keeps a verified license working for 24 hours instead of failing on the first network hiccup
- Revoked licenses now destroy the local activation instead of lingering until the next launch
- TerminalWidget Direct now refuses to run with a usable menu bar when licensing cannot initialize; it offers Retry or Quit
- Install Command Line Tool finds the executable in Direct builds, where the product is named “TerminalWidget Direct” rather than “TerminalWidget”
- terminal-widget wakes and launches the app it was installed from, so a Direct install no longer signals the App Store build
- Desktop widget updates no longer stall until Edit Widget when the instance registry balloons from ephemeral WidgetKit Intent UUIDs; pathological registries are compacted instead of preserving every target-matching id.
- Instance registry growth from Intent gallery churn is capped at 8 placement ids per target name so the shared registry cannot climb back into multi-megabyte territory.
- iPhone/iPad notification settings now appear under Settings > Notifications after first open because the app requests authorization on launch instead of only when a notify-on-change alert fires.
2.0.5
CHANGED
- –fit-text scaling is skipped when any markdown link is present so link hit targets stay reliable.
- iOS launcher buttons mute
open-appandrun-command(unsupported) whileopen-url,run-shortcut, andrefreshstill work.
NEW
- Markdown links in widget text use CommonMark
[label](url)syntax and render as tappable buttons on macOS and iOS. - Link taps open the linked URL while non-link areas keep the existing widget tap/–action-kind behavior.
- Launcher buttons via JSON
buttons(label, color, action-type, action-value; max 12) render as a tappable footer grid under any widget content on macOS and iOS. - button-columns accepts
smart/autoor1/2/3to force the footer grid; omit keeps the previous setting, and"buttons": []clears buttons. - Smart button layout on medium/large uses 3 columns when the count is divisible by 3, otherwise 2, pads incomplete rows for uniform widths, and keeps small widgets single-column.
- Button borders support per-button
border/border-color/border-width(0-12) /border-radius(0-48) plus root defaults viabutton-border,button-border-color,button-border-width, andbutton-border-radius. - Border shorthand accepts values like
2px #0f0aff(either order); color alone implies width 1, and omitted radius defaults to 8. - Button tap intents ship for macOS and iOS so launcher actions run from the widget (host intents handle refresh/run-command).
IMPROVED
- Buttons-only widgets vertically center the button grid when there is no other content.
- Edit Widget shows only Target name and hides the internal Instance ID field.
FIXED
- –json overlays now persist text, colors, theme, and related fields instead of dropping them when only JSON supplied those values.
- Inline –json ‘{…}’ is accepted as JSON instead of being treated as a missing file path.
- URL and app opens from widget buttons and markdown links stay on the Mac instead of Continuity-handing off to iPhone.
- Edit Widget target names (including
widget1) are always honored instead of being remapped ontowidgetNvia the instance registry. - Instance registry repair no longer wipes mappings just because many named CLI targets exist.
- Mac widget gallery shows “Terminal Widget” again so Desktop widgets are easier to find beside Continuity copies.
- Invalid launcher icons ASCII names that are not valid SF Symbols now leave the reserved gutter empty.
- Widget taps without a configured action on macOS now open the non-mutating action URL instead of update?target=, which was rebuilding an empty payload and blanking the widget.
- Target-only update URLs are ignored on macOS and iOS so stale widget timelines cannot wipe existing content.
2.0.3
2026-08-02 05:17
CHANGED
- Chart hard max keeps the newest 128 points instead of the oldest when series overflow.
NEW
- –append adds chart columns (same syntax as –chart, including slash-grouped series and rangebar low-high pairs) or text lines to an existing widget while preserving unrelated settings.
- –limit N keeps the newest N chart columns or text lines in storage, persists on the target, works with chart/text/append or alone, and uses 0 to clear the soft limit.
- Append and limit are available from CLI, AppleScript, Shortcuts, URL scheme, and structured JSON with shape checks for incompatible chart data.
2.0.2
CHANGED
- Allow user to disable iCloud entirely
2.0.1
IMPROVED
- The TerminalWidget iOS app adds an Updating widgets section that explains Shortcuts and the URL scheme on iPhone and iPad, notes that the Mac app and CLI are the most efficient way to control widgets, and links to terminalwidget.app/integrations.
- The iOS app help screen notes that notification permission is required so push can wake the app for iCloud sync when another device updates a widget.
1.2.1
NEW
--titleadds an optional single-line title at the top of chart, text, image, and progress widgets (inside padding, with main content height reduced accordingly); supported via URLtitle, Shortcuts, and AppleScript.--title-colorsets the title color separately from--foreground(falls back to foreground/theme when omitted); URL keytitleColor, Shortcuts, and AppleScript.--timestampworks on any widget type (text, image, table, etc.), not only charts and progress; the update time appears at the bottom when no chart/progress caption row already shows it.--caption-textsets custom footer text below widget content (replaces auto[min/max]or[n%]captions); implies--captionso both flags are not required. Supported via URLcaptionText, Shortcuts, AppleScript, and structured JSON.- GitHub
:emoji:shortcodes in--titleand--caption-textexpand the same way as--textand--icon. --title-alignment(left,center,right) controls horizontal alignment of the widget title (defaults tocenterwhen--titleis set); supported via URLtitleAlignment, Shortcuts, AppleScript, and structured JSON.
1.2.0
CHANGED
- Preserve and round-trip neo chart character settings in widget payloads so neo rendering stays consistent across updates and devices.
- Combining chart data with images is rejected from the CLI and automation (Shortcuts Update Widget and related flows); AppleScript dictionary notes that images omit chart data; terminalwidget URLs resolve chart-vs-image conflicts by dropping the conflicting side.
- Existing Shortcuts that used the free-text Action Kind field on Update Terminal Widget may need that parameter re-selected after upgrading.
- URL scheme handling accepts
fitTextandfit-textquery keys as aliases for text full width alongsidetextFullWidth/text-full-width.
NEW
- Grouped sparkline/bar charts accept slash-separated value sets in
--chart(for example0 1 5 2/1 2 5 3) with side-by-side sub-bars per column, shared Y scaling, default series opacity stepping, and comma-separated--foregroundcolors (first color for text/icons, full list for series). The same slash literal works in Shortcuts and AppleScriptchartparameters; JSON chart input may use a nested numeric array (for example[[0,1,5],[1,2,5]]) which normalizes to the slash form for URLs and storage. - Circle progress format supports
--chart-bar-style glassfor a gradient glass ring (CLI, URL, Shortcuts, and AppleScript via existing chart bar style). - Add –base N and –base-zero so chart scaling can start from a fixed baseline instead of the series minimum.
- Add a neo chart format with selectable katakana, ascii, or binary characters across CLI, URL updates, AppleScript, and Shortcuts on macOS and iOS.
- Add –chart-height N[%] to CLI updates so chart widgets can be constrained by points or percent while keeping 100% as the default behavior.
- Add chart height support to URL updates, AppleScript commands/dictionary, and Shortcuts intents on macOS and iOS so automation can set chart size consistently.
- Add –bg-gradient-from, –bg-gradient-to, and –bg-gradient-start so widgets can render directional background gradients directly from the CLI.
- Add background gradient parameters to URL updates, AppleScript, and Shortcuts (macOS and iOS) so automation workflows can set gradient colors and direction consistently.
- Optional alpha in image filter specs; CLI expands tilde in local image paths and can hand off permission-restricted image files to the running app for import instead of failing silently; Show Chart shortcut intent exposes optional image path and filter when there is no chart.
- Shortcuts widget tap action kind is a fixed picker (Open URL, Open App, Run Shortcut, Run Shell Command) instead of typing raw strings; optional tap action kind, value, and clear action are available on Show Terminal Widget Text, Chart, Progress, Image, and Table intents on macOS and iOS, not only Update Terminal Widget.
- CLI
--fit-textenables fitting text in text-only and text+icon layouts without enabling fill/full-width image behavior; AppleScript recognizes fit text / fit-text / fit-text as aliases for full-width-style fitting flags where mapped. - Apple Watch app lists iCloud-synced widget targets, opens a square preview with back navigation and remembers the last viewed target across launches, merges quick text edits into existing CloudKit JSON without stripping chart or table fields, and handles terminalwidgetwatch:// deep links from the complication.
- Watch complication (accessory rectangular): CloudKit timelines with simplified chart or synced image preview, clear widget container background, one App Intent recommendation per known target (cached from the CloudKit index), no SF Symbol overlay, and plain text display with ANSI escape stripping.
- Structured JSON refresh overlay and shared chart literal parsing through macOS and iOS automation, the bundled CLI, Shortcuts, and AppleScript update flows.
- CLI and automation support for chart baseline (–base / –base-zero), neo chart character sets, chart height in points or percent, background gradient colors and direction, and fit-text for text layouts.
IMPROVED
- Show mirrored y-axis labels for waveform charts so symmetric top/bottom halves read consistently with –label-y.
- Support chart baseline values in AppleScript and Shortcuts chart updates for parity with CLI behavior.
- Update chart rendering for neo mode with direction-aware y-axis labels and full-height layout behavior to better fit widget families.
- Apply chart height constraints in macOS and iOS widget rendering so sparkline, graph, waveform, matrix, and rangebar charts respect explicit height overrides.
- Keep gradient rendering stable across partial updates by preserving gradient output when only one stop or direction is provided in a later update.
- IOS widget payloads decode background gradients and chart options (baseline, height, neo characters) from shared storage; CloudKit-driven payload merges accept newer widget revisions when sync metadata is stale.
- Bundled and app CLI default output stays quiet: stderr hints for empty
--command, deferred--imageimport, App Group image fallback, and image copy diagnostics print only when--verboseis passed. - MacOS and iOS widgets: text fitting uses a lower minimum scale, height-aware scaling with multiline no-wrap, and line caps that cooperate with text full width for ANSI and plain multiline content.
- Shortcuts widget tap action kind is a fixed picker across Update and Show intents; chart and image updates reject conflicting payloads with clearer behavior; default CLI output stays quieter with optional –verbose diagnostics for image and command edge cases.
- MacOS and iOS widgets honor chart height and baseline, preserve partial background gradients, improve waveform y-axis labeling, tighten text fitting for multiline ANSI, and fix full-width layouts for images and gradient progress bars.
FIXED
- Fall back to embedded base64 image data when App Group image copies fail, so –image updates can still succeed in restricted environments.
- Reject invalid chart height values and enforce that chart height can only be set when chart content is present, with clear validation errors.
- Fill missing background gradient stop colors from –bg (or theme defaults) so one-sided gradient updates do not collapse to solid backgrounds.
- MacOS and iOS widgets lay out gradient progress and fill-mode images across the full widget without leaving empty chart space above images; sparkline bar charts honor the payload chart baseline.
- Waveform charts honor optional chart baseline (
chartBase) when normalizing bar heights on macOS and iOS widget extensions. - Widget and CLI validation for chart height, base64 image fallback when App Group file copies fail, waveform scaling with chartBase, and several gradient or fill layout edge cases on macOS and iOS extensions.
1.1.5
NEW
- Add –base N and –base-zero so chart scaling can start from a fixed baseline instead of the series minimum.
- Add neo chart mode: a full-height cascading character-rain chart style for numeric series values.
- Add –neo-characters (katakana|ascii|binary) to control the character set used by neo charts.
IMPROVED
- Show mirrored y-axis labels for waveform charts so symmetric top/bottom halves read consistently with –label-y.
- Support chart baseline values in AppleScript and Shortcuts chart updates for parity with CLI behavior.
- Wire neo chart and –neo-characters through URL automation, AppleScript, and Shortcuts (macOS + iOS).
1.1.4
CHANGED
- Menu bar extra icon asset switched to MenuBarAppIconVector.pdf (Contents.json updated).
- Xcode icon catalog (terminalwidget3.icon/icon.json layer scale and translation tweaks; PNG sources refreshed).
IMPROVED
- The iOS app help screen notes that you can assign a widget tap action via Shortcuts, the URL scheme, or the TerminalWidget CLI on Mac.
- CloudKit pulls coalesce behind a single in-flight guard, a lightweight throttle for routine callers, forced pulls for startup, pushes, explicit URL sync requests, plus one queued follow-up when callers stack during an active fetch.
FIXED
- Tapping an iOS widget when no tap action is configured no longer wipes widget content because the tap URL always uses the non-mutating scheme host instead of falling through to update parsing.
- Medium and large iOS text widgets with an icon keep the icon and text grouped and centered together instead of pinning the icon on the left while only the text centers.
1.1.3
CHANGED
- Keep
--background COLORas the widget background color option while treating bare--backgroundas background update mode. - Update the TerminalWidget app icon artwork used by the macOS, iOS, and watchOS app targets.
- Refreshed the terminalwidget3 app icon asset.
- Bundled/hosted CLI: default zebra opacity documentation and parsing match 0.24; clearer stdin behavior when combining tables with implicit piped text and explicit –text.
NEW
- Improved dropdown menu on macOS and app screen on iOS
- Add bare
--backgroundand--background-modeCLI options for prompt hooks that update widgets without launching TerminalWidget or opening the refresh URL. - Optional notify-on-change on widget payloads (synced); local Notification Center alerts when display content changes after CLI, URL, Shortcuts, AppleScript, or CloudKit pull on macOS and iOS.
- CLI and standalone CLI package: –notify, –no-notify, and –notify-once after widget updates when content changed.
- AppleScript and Shortcuts (macOS and mobile): persistent notify, notify-once, and sdef parameters for render widget and convenience commands.
- Widgets can store a tap/click action per target and route configured taps through Terminal Widget while preserving the existing update/open behavior when no action is set.
- MacOS widget actions can open URLs, run Shortcuts, launch apps by bundle identifier, or run shell commands through Terminal Widget.
- IOS widget actions can open URLs and run Shortcuts; synced macOS-only app and shell actions fall back to the normal widget open/update behavior instead of no-op taps.
- CLI and standalone CLI package: –action-kind, –action-value, –tap-action, –tap-action-value, and –clear-action configure or remove persisted widget actions.
- AppleScript and Shortcuts on macOS and iOS can configure or clear widget actions through the same update pipeline.
- Adds a rangebar chart format for macOS and iOS widgets, drawing each data item as a contiguous low-high bar from values like “1-3,2-3,1-4”.
- CLI, URL automation, AppleScript, and Shortcuts can create rangebar charts and preserve range data in widget payloads.
- Optional glass-style bar and heatmap fills for supported chart types (sparkline, waveform, matrix, rangebar, delta), exposed via –chart-bar-style, URL chartBarStyle, AppleScript, Shortcuts, and the AppleScript dictionary on macOS and iOS.
- Separate colors for main widget text vs chart/progress captions and timestamps (–text-color, –caption-color, matching URL keys and automation).
- Optional last-update time shown below captions when timestamp is enabled, driven by a stored update time on each successful widget apply.
IMPROVED
- Rangebar charts expand to fill available vertical space on medium and large widgets while still supporting captions, annotation, icons, and Y-axis labels.
- The documentation site can show a docked table of contents on long pages, including the CLI page.
- URL and CLI alpha now also scales opacity for text and caption colors when those colors are set.
- Chart glass fills use a stronger vertical gradient and outer rim so glass reads clearly versus solid fills on small widgets.
- Glass bars add an inset inner stroke (translucent white toward top-leading, soft dark toward bottom-trailing) a few points inside the pill for a reflective glazed edge like glossy UI references.
- Default table zebra striping is lighter (CLI and widgets default to 0.24 unless –zebra-opacity overrides).
- Vertical gradient progress moves the “[n%]” caption below the bar when the bar is too narrow so it does not wrap one character per line.
- Sync-debug-app.sh caps pluginkit, mdfind, and lsregister work during –deep-refresh so stale LaunchServices cleanup cannot hang indefinitely.
- IOS widget payload model carries tableGridMode, tableLayout, and tableZebraOpacity like the desktop payload.
- Menu bar extra icon uses the vector MenuBarAppIcon asset at a slightly larger template frame.
FIXED
- Cold TerminalWidget launches from the CLI now use
open -gso updates do not steal focus from Terminal or hide visor-style terminals. - Terminal-widget and non-app CLI no longer crash with –notify (UserNotifications when running inside a .app bundle; AppleScript display notification fallback when main bundle is not available).
- Bar glass style is preserved when follow-up URLs update the chart but omit chartBarStyle, so configured glass no longer briefly appears then reverts to solid.
- Range bar glass mode draws with Canvas plus the same liquid-glass helper as the waveform chart so WidgetKit snapshots show gradients and bezel instead of flattening layered SwiftUI fills to a flat color.
- Range bar (and other charts combined with title text) no longer take the text-only layout branch, so range bars and glass styling render under the headline like on macOS.
- ANSI-colored text in widgets no longer has the widget tint forced over escape-sequence colors, and reset segments use the normal text color again.
- ANSI background colors (SGR 40-47 / 100-107) render reliably on iOS widgets by compositing segments with SwiftUI backgrounds where AttributedString background colors are ignored.
1.1.2
NEW
- Improved dropdown menu on macOS and app screen on iOS
1.1.1
FIXED
- Allow
--text -with no piped input to clear widget text instead of failing with a stdin error.
1.0.0
CHANGED
- Replace the repo-root
terminal-widgetbash/Python script with a small launcher that runs the embedded app binary, a local SwiftPM build, or respectsTERMINAL_WIDGET_CLI. - Sparkline rendering and icon/sparkline layout are more consistent in desktop widgets.
- Sparkline visuals no longer draw the rounded background or outline, showing bars only.
- Removed the bottom-right widget target indicator from the widget UI.
- Removed experimental polling options after unreliable update behavior in real use.
- CLI status output is now quiet by default and only prints detailed update/debug information when
--verboseis set. - Updated macOS and iOS widget rendering to support full-width image mode while keeping default image fit behavior when the flag is omitted.
- Changed image fill semantics from –full-width to –padding fill for clearer, mode-based image layout control.
- Updated macOS and iOS widget rendering to use the new image fill mode flag while preserving default fit behavior when fill is not enabled.
- CLI validation now enforces chart context for –caption so the flag is only used with –sparkline or –matrix.
- Expanded chart format parsing to accept waveform/wave while preserving existing sparkline, graph, and matrix aliases.
- Split smooth and sine behavior so smooth keeps curve smoothing while sine uses half-sine interpolation between points.
- Removed in-app privileged install buttons and moved system-path install flow to Terminal-driven sudo execution.
- Matrix progress now uses a 9-column layout for more consistent completion behavior.
- Refine matrix/dots progress and chart layout alignment so captions and grids render more consistently across widget families.
- Progress updates now preserve gradient settings in payload and URL updates, with defaults that fall back to foreground color when explicit gradient colors are omitted.
- Added
--gridmodes (none,row/horizontal,column/vertical,both,zebra,zebra-row,zebra-column) and made header separators always render under header rows. - Gradient progress bars now always render with rounded corners in both macOS and mobile widget extensions.
- Updated CLI usage and validation so filter and table formatting options are explicitly documented and normalized.
- Full-width text rendering now adapts alignment per payload content on both macOS and iOS widgets while preserving centered layout for regular text.
- AppleScript automation commands now use parser-safe
render ...verbs (render widget,render text,render chart,render progress,render image,render table) so scripts compile reliably. - AppleScript
render imageconvenience command now supportsfull widthandpaddingoptions for layout control parity with broader widget updates. - AppleScript
render progressconvenience command now acceptsforegroundandbackgroundcolor parameters for colorized progress updates. - Shortcuts convenience actions for text, progress, image, and table now expose padding, full width, and fullsize controls in the action UI.
- Automation text updates now expand GitHub-style
:emoji:shortcodes (for example:rocket:) consistently outside the standalone CLI path. - CLI execution now routes through the main TerminalWidget app binary, including updated launcher path guidance for /Applications and /Applications installs.
- CLI text, icon, and table content now support GitHub-style 📝 shortcodes such as 🚀 and 👍.
- Refresh macOS, menu bar, and iOS app icon assets.
NEW
- Ship a Swift
terminal-widgetMach-O binary built via SwiftPM and embedded in the app bundle so users do not need Python or other scripting runtimes for the helper. - Widget progress bar (0-100) and min-max bar sparkline from payload; CLI –progress and –sparkline/–spark (comma or space separated values, up to 128 points).
- Terminalwidget://update URLs accept progress= and sparkline= query parameters alongside existing fields.
- –image now accepts remote http(s) URLs in addition to local file paths so API-generated images can be displayed directly.
- Added –padding N and –fullsize flags to control widget content inset, including edge-to-edge image layouts.
- Added –font “FONT NAME” to set widget text to an installed system font for a target.
- Added –mode as an alias for –theme so dark/light/system overrides can be set with either flag.
- Added –padding N and –fullsize controls for per-widget content inset, including edge-to-edge image layouts.
- –image accepts remote http(s) URLs as well as local file paths for API-generated images.
- Added –foreground/–fg and –background/–bg with support for RRGGBB, #RRGGBB, rgb(…), and rgba(…) color formats.
- Added –alpha to override foreground/background transparency per update.
- Added –font “FONT NAME” support for text rendering with installed system fonts.
- Added –poll MINUTES to refresh a target automatically while the app is running, with support for command or image poll sources.
- Added polling stop controls via –poll 0/false/off and –clear for per-target disable.
- Added –clear to reset widget content and styling fields for a target in one command.
- Added a matrix heatmap chart mode that can render numeric series in the widget alongside existing icon and image layouts.
- Added iPhone and iPad app/widget support with shared target-based widget updates.
- Added mobile App Intent configuration so iOS/iPadOS widgets can pick and render synced targets.
- Added –full-width for –image to fill widget width and crop vertically like Photos-style widgets.
- Added –caption mode for sparkline and matrix updates to show a centered [min/max] label below the chart.
- Added waveform chart support for serial numeric data with centered mirrored bars and interpolation between values for a denser visual style.
- Added chart formats for area, lollipop, strip/dot, radial, delta, threshold, smooth, sine, and peak to visualize serial numeric data in multiple styles.
- Added a Run in Terminal action next to Copy sudo command to open Terminal and prefill the install command automatically.
- Added –progress-format bar|matrix so progress can render as a 10x4 matrix with fractional lower-row opacity and foreground color styling.
- Added a centered [NN%] caption for matrix progress when –caption is used.
- Added a watchOS companion app and watch complication so you can browse targets and push quick text updates from Apple Watch.
- –caption now works with standard progress bars and shows a right-aligned [NN%] label inline with the bar.
- Add –font-size and full-width text scaling for text-only and text+icon layouts when using –padding fill/–full-width, while keeping –image fill behavior unchanged.
- Add dots as a supported –progress-format across CLI, macOS widgets, and iOS widgets.
- Add watch complication target selection backed by CloudKit target discovery, with target-aware payload rendering in inline/circular/rectangular families.
- Added a stack progress format that renders 10 full-width horizontal bars and fills bottom-up using 10 opacity levels per bar.
- Added gradient progress modes: gradient (alias), gradient-horizontal, and gradient-vertical for macOS and iOS widgets.
- Added –gradient-from, –gradient-to, and –gradient-width so gradient colors and bar thickness can be controlled from the CLI.
- Added
--tablesupport for CSV, TSV, and JSON sources from files or stdin with automatic format detection. - Added a dedicated table renderer in macOS widgets with header support, status coloring, and content-measured column sizing.
- Added GitHub emoji shortcode expansion for
--icon,--text, and table cell values so shortcodes like:x:render as emoji. - Added built-in image filters for widgets (
grayscale,sepia,negative,pixelate,blur) via--filter. - Added table layout and zebra tuning controls with
--table-layout auto|equaland--zebra-opacity. - Added a “CLI docs” action to the menu bar app menu that opens https://terminalwidget.app/cli.
- Added a matching “CLI docs” action to the setup/install window so help is available during onboarding.
- Add iOS Shortcuts actions for updating widgets with text, charts, progress, images, and tables.
- Add GitHub emoji shortcode expansion for automated text updates.
- Add automation support for no-wrap text, ANSI rendering modes, stripping ANSI colors, and sparkline bar radius.
IMPROVED
- Widget refresh behavior with a shorter timeline fallback, tighter staggered
WidgetCenterretries, and applying custom-scheme URLs on the main thread immediately when already there. - Load payload from App Group JSON with an optional UserDefaults mirror and pick the newest revision; mirror defaults when reloading from disk from the host app.
- Expose a stable App Group container path for the unsandboxed CLI so it writes the same JSON the app and widget read.
- CLI output: manual test URL includes progress and sparkline when set; prints sparkline value count or cleared when –sparkline is used.
- CLI and widget payload rules for icon-only vs text, progress, sparkline, and image updates (omit flags to clear bars and sparkline where documented).
- Widget refresh behavior is more reliable with real timeline timestamps and automatic compaction of oversized instance registry data.
- Custom font selection now resolves common family/display/PostScript names more reliably instead of silently falling back.
- Fullsize image mode now reaches true edge-to-edge by disabling WidgetKit content margins and using low-radius corners for flush images.
- Poll settings are persisted and restored per target while the app remains active, without requiring external services.
- Appearance controls remain available and stable, including font and color customization support.
- Added
--matrixsupport in the CLI so matrix values can be sent directly to the widget payload. - Added stdin dash-input support for
--text,--sparkline, and--matrix, plus piped-stdin fallback to text when no explicit stdin flag is used. - Expanded iCloud payload sync between macOS and iOS with source-device tracking, pull/push diagnostics, and retry queue behavior.
- Kept –full-width as a compatibility alias so existing scripts continue to work while migrating to –padding fill.
- Fill mode is now orientation-aware: portrait images fill width and crop height, while landscape and panorama images fill height and crop width.
- Chart captions are now rendered consistently on both macOS and iOS widgets with compact numeric formatting for integer and decimal series.
- Chart payload parsing and rendering now stay in sync across macOS and iOS targets, including caption behavior for all chart modes.
- Icon-only widgets now scale symbols to fill available vertical space inside the current padding on macOS and iOS.
- Added –annotate labels for sparkline, graph, and waveform chart formats.
- IOS widget updates now refresh more reliably after payload writes and preserve current rendering state.
- Matrix progress now scales to fill available widget space so squares grow in wider widget layouts.
- Improve watch cloud diagnostics with clearer iCloud/capability error messages and add an in-app watch payload preview section.
- Dots progress now keeps previously filled dots in place between updates so increasing progress adds dots and decreasing progress removes dots without reshuffling.
- IOS widget timeline loading now prefers newer cloud payload revisions and persists refreshed payload data for more reliable cross-device updates.
- Gradient progress now supports caption overlays with automatic contrast-aware text color for better readability.
- Added iOS URL sync support for base64
tablePayloadupdates, including clamping and table/chart mode coordination. - Updated icon rendering on macOS and iOS to gracefully handle both SF Symbols and literal emoji text.
- Gradient progress now places its midpoint at 20% of the remaining range from the progress start, making the active color more readable.
- Filter chaining now works in order with repeated
--filterflags and comma-separated lists like--filter "sepia:20,blur:10". - Multiline widget text now automatically left-aligns when lines start with spaces or tabs, so ASCII art and preformatted terminal output keep their intended shape instead of being centered.
- AppleScript image path handling now normalizes alias-style and URL-style inputs and uses a copy fallback path so valid images render consistently in widgets.
- Shortcuts action discovery is more reliable by using a non-empty app display name and refreshing app shortcut parameters on app launch.
- CLI payload writes now prefer the real App Group container when available, improving update reliability from the app-bundled executable.
- Bring AppleScript, Shortcuts, and CLI update options closer to parity across text, chart, progress, image, and table widgets.
- Render ANSI foreground/background color sequences in widget text while allowing callers to force ANSI on, off, or stripped.
- Improve sparkline widgets with configurable bar corner radius.
- Declare the macOS app’s App Store category as Productivity.
FIXED
- Stop the desktop widget from updating tens of seconds or minutes after the menu bar already showed new text by posting a Darwin notification after payload writes and reloading timelines from the widget extension process (avoids WidgetKit throttling
WidgetCenterreloads from the LSUIElement host). - Handle
terminalwidget:///update?sync=1by reloading from disk so URL-based refresh does not merge stale in-memory state over fresh CLI writes. - Prevent a crash when the “Set up terminal-widget” / Install CLI tool window opens by disabling NSHostingView-driven window min/max sync, using a fixed content width, and setting explicit window content size limits so AppKit’s constraint update cycle no longer throws during display.
- Install to system PATH from the app now triggers the admin password dialog instead of failing immediately with a permissions error.
- Widget instances keep stable target names instead of drifting into high widget numbers, so –target updates the expected widget again.
- Renaming a widget target now updates the stock demo command text to the new –target value.
- Widgets recover cleanly after payload files are deleted by recreating missing payload JSON and avoiding stale mirrored fallback content.
- Progress-only widgets are vertically centered instead of sticking to the top.
- Text-only and text-plus-progress layouts now remain vertically centered consistently with other widget content combinations.
- Running terminal-widget now fully replaces widget content with only the flags provided, so stale images/icons no longer persist when omitted.
- Text-only, progress-only, and mixed text/progress layouts are consistently vertically centered.
- Fullsize image rendering now reaches widget edges by disabling WidgetKit content margins, while preserving low-radius corners for flush images.
- CLI updates now replace prior content state, clearing stale fields such as image/icon/padding/font when omitted from a command.
- Custom fonts now resolve more reliably from common installed font names (family/display/PostScript matches) instead of silently falling back.
- Text-only, progress-only, and mixed text/progress combinations stay vertically centered.
- CLI updates now fully replace prior widget content, clearing stale image/icon/padding/font/color state when those flags are omitted.
- CLI now validates poll usage so –poll requires either –command or –image as the refresh source.
- Widget update flow remains immediate and reliable without background polling side effects.
- Added argument validation errors for conflicting chart modes and conflicting stdin dash usage to prevent ambiguous command behavior.
- Local –image updates now sync across devices by embedding a scaled image payload that each device decodes into local widget image storage.
- Restored reliable Xcode scheme behavior by adding shared schemes so the app and widget extension can be rebuilt and run consistently.
- Updated CLI install AppleScript success handling to avoid false warning behavior with newer NSAppleScript APIs.
- Commands now write a fresh payload each time so unspecified fields are cleared and old chart/text/image content never leaks into later updates.
- Improved Terminal launch reliability by explicitly opening/activating Terminal and retrying command injection during startup.
- –full-width now implies zero padding so image fill mode behaves as edge-to-edge by default.
- Explicit widget target names are now preserved more reliably instead of being remapped to stale widgetN slots.
- Matrix progress now fills the active 10s column correctly for 1-9 remainder values instead of spilling into the next column.
- Matrix progress now pre-fills prior lower-row columns consistently so values like 57% render with the expected solid and partial blocks.
- Matrix progress now renders 100% as fully completed, with lower rows darkening to match the top-row fill color.
- Watch app and complication bundle IDs now align with the iOS companion app prefix requirements so watch simulator installs succeed.
- Progress format parsing and payload handling now accept stack consistently across CLI and URL-driven updates on macOS and iOS.
- Full-width text scaling now keeps a built-in 10pt inset so text does not render edge-to-edge when using padding fill mode.
- Gradient bars now render with a 6px corner radius when constrained by –gradient-width, while full-bleed gradients stay square.
- Prevented filtered images from going blank by hardening widget-side Core Image rendering for large inputs.
- AppleScript scripting metadata now registers correctly so TerminalWidget appears as a usable dictionary in Script Editor instead of reporting a corrupted dictionary.
- AppleScript
render imagenow accepts direct file arguments (includingPOSIX file) and named image/path values more reliably instead of failing or silently dropping the image update. - Shortcuts
Update TerminalWidgetnow accepts icon-only updates instead of requiring text, chart, progress, image, or table content. - Embedded CLI signing now uses the app’s code-sign identity with hardened runtime so notarization checks pass for nested binaries.
- Running terminal-widget with no flags now exits with clear guidance instead of unintentionally launching duplicate app instances when TerminalWidget is already running.
- Fix iOS widget updates so the app and widget extension apply fresh CloudKit payloads instead of letting stale local files block newer remote content.
- Fix iOS CloudKit push handling so sync can run before SwiftUI views appear.
- Fix macOS CLI update handoff so command-line writes notify the app through SIGUSR1 and the URL scheme, with permission warnings suppressed.
- Allow
--text -to accept empty or whitespace-only piped input so the widget text can be cleared while preserving specified options such as background color.
TerminalWidget
1.0
CHANGED
- Replace the repo-root
terminal-widgetbash/Python script with a small launcher that runs the embedded app binary, a local SwiftPM build, or respectsTERMINAL_WIDGET_CLI. - Sparkline rendering and icon/sparkline layout are more consistent in desktop widgets.
- Sparkline visuals no longer draw the rounded background or outline, showing bars only.
- Removed the bottom-right widget target indicator from the widget UI.
- Removed experimental polling options after unreliable update behavior in real use.
- CLI status output is now quiet by default and only prints detailed update/debug information when
--verboseis set. - Updated macOS and iOS widget rendering to support full-width image mode while keeping default image fit behavior when the flag is omitted.
- Changed image fill semantics from –full-width to –padding fill for clearer, mode-based image layout control.
- Updated macOS and iOS widget rendering to use the new image fill mode flag while preserving default fit behavior when fill is not enabled.
- CLI validation now enforces chart context for –caption so the flag is only used with –sparkline or –matrix.
- Expanded chart format parsing to accept waveform/wave while preserving existing sparkline, graph, and matrix aliases.
- Split smooth and sine behavior so smooth keeps curve smoothing while sine uses half-sine interpolation between points.
- Removed in-app privileged install buttons and moved system-path install flow to Terminal-driven sudo execution.
NEW
- Ship a Swift
terminal-widgetMach-O binary built via SwiftPM and embedded in the app bundle so users do not need Python or other scripting runtimes for the helper. - Added first-party AppleScript automation (
render widgetand conveniencerender ...commands) with full update-parameter coverage andannotation truesupport parity with CLI behavior. - Added Shortcuts App Intent automation actions (
Update TerminalWidgetplus convenience actions) with parity mapping for annotation/caption/label toggles. - Widget progress bar (0-100) and min-max bar sparkline from payload; CLI –progress and –sparkline/–spark (comma or space separated values, up to 128 points).
- Terminalwidget://update URLs accept progress= and sparkline= query parameters alongside existing fields.
- –image now accepts remote http(s) URLs in addition to local file paths so API-generated images can be displayed directly.
- Added –padding N and –fullsize flags to control widget content inset, including edge-to-edge image layouts.
- Added –font “FONT NAME” to set widget text to an installed system font for a target.
- Added –mode as an alias for –theme so dark/light/system overrides can be set with either flag.
- Added –padding N and –fullsize controls for per-widget content inset, including edge-to-edge image layouts.
- –image accepts remote http(s) URLs as well as local file paths for API-generated images.
- Added –foreground/–fg and –background/–bg with support for RRGGBB, #RRGGBB, rgb(…), and rgba(…) color formats.
- Added –alpha to override foreground/background transparency per update.
- Added –font “FONT NAME” support for text rendering with installed system fonts.
- Added –poll MINUTES to refresh a target automatically while the app is running, with support for command or image poll sources.
- Added polling stop controls via –poll 0/false/off and –clear for per-target disable.
- Added –clear to reset widget content and styling fields for a target in one command.
- Added a matrix heatmap chart mode that can render numeric series in the widget alongside existing icon and image layouts.
- Added iPhone and iPad app/widget support with shared target-based widget updates.
- Added mobile App Intent configuration so iOS/iPadOS widgets can pick and render synced targets.
- Added –full-width for –image to fill widget width and crop vertically like Photos-style widgets.
- Added –caption mode for sparkline and matrix updates to show a centered [min/max] label below the chart.
- Added waveform chart support for serial numeric data with centered mirrored bars and interpolation between values for a denser visual style.
- Added chart formats for area, lollipop, strip/dot, radial, delta, threshold, smooth, sine, and peak to visualize serial numeric data in multiple styles.
- Added a Run in Terminal action next to Copy sudo command to open Terminal and prefill the install command automatically.
IMPROVED
- Updated README automation docs with AppleScript and Shortcuts examples, including
annotation trueusage and parity guidance between automation and CLI surfaces. - Widget refresh behavior with a shorter timeline fallback, tighter staggered
WidgetCenterretries, and applying custom-scheme URLs on the main thread immediately when already there. - Load payload from App Group JSON with an optional UserDefaults mirror and pick the newest revision; mirror defaults when reloading from disk from the host app.
- Expose a stable App Group container path for the unsandboxed CLI so it writes the same JSON the app and widget read.
- CLI output: manual test URL includes progress and sparkline when set; prints sparkline value count or cleared when –sparkline is used.
- CLI and widget payload rules for icon-only vs text, progress, sparkline, and image updates (omit flags to clear bars and sparkline where documented).
- Widget refresh behavior is more reliable with real timeline timestamps and automatic compaction of oversized instance registry data.
- Custom font selection now resolves common family/display/PostScript names more reliably instead of silently falling back.
- Fullsize image mode now reaches true edge-to-edge by disabling WidgetKit content margins and using low-radius corners for flush images.
- Poll settings are persisted and restored per target while the app remains active, without requiring external services.
- Appearance controls remain available and stable, including font and color customization support.
- Added
--matrixsupport in the CLI so matrix values can be sent directly to the widget payload. - Added stdin dash-input support for
--text,--sparkline, and--matrix, plus piped-stdin fallback to text when no explicit stdin flag is used. - Expanded iCloud payload sync between macOS and iOS with source-device tracking, pull/push diagnostics, and retry queue behavior.
- Kept –full-width as a compatibility alias so existing scripts continue to work while migrating to –padding fill.
- Fill mode is now orientation-aware: portrait images fill width and crop height, while landscape and panorama images fill height and crop width.
- Chart captions are now rendered consistently on both macOS and iOS widgets with compact numeric formatting for integer and decimal series.
- Chart payload parsing and rendering now stay in sync across macOS and iOS targets, including caption behavior for all chart modes.
- Icon-only widgets now scale symbols to fill available vertical space inside the current padding on macOS and iOS.
FIXED
- Stop the desktop widget from updating tens of seconds or minutes after the menu bar already showed new text by posting a Darwin notification after payload writes and reloading timelines from the widget extension process (avoids WidgetKit throttling
WidgetCenterreloads from the LSUIElement host). - Handle
terminalwidget:///update?sync=1by reloading from disk so URL-based refresh does not merge stale in-memory state over fresh CLI writes. - Prevent a crash when the “Set up terminal-widget” / Install CLI tool window opens by disabling NSHostingView-driven window min/max sync, using a fixed content width, and setting explicit window content size limits so AppKit’s constraint update cycle no longer throws during display.
- Install to system PATH from the app now triggers the admin password dialog instead of failing immediately with a permissions error.
- Widget instances keep stable target names instead of drifting into high widget numbers, so –target updates the expected widget again.
- Renaming a widget target now updates the stock demo command text to the new –target value.
- Widgets recover cleanly after payload files are deleted by recreating missing payload JSON and avoiding stale mirrored fallback content.
- Progress-only widgets are vertically centered instead of sticking to the top.
- Text-only and text-plus-progress layouts now remain vertically centered consistently with other widget content combinations.
- Running terminal-widget now fully replaces widget content with only the flags provided, so stale images/icons no longer persist when omitted.
- Text-only, progress-only, and mixed text/progress layouts are consistently vertically centered.
- Fullsize image rendering now reaches widget edges by disabling WidgetKit content margins, while preserving low-radius corners for flush images.
- CLI updates now replace prior content state, clearing stale fields such as image/icon/padding/font when omitted from a command.
- Custom fonts now resolve more reliably from common installed font names (family/display/PostScript matches) instead of silently falling back.
- Text-only, progress-only, and mixed text/progress combinations stay vertically centered.
- CLI updates now fully replace prior widget content, clearing stale image/icon/padding/font/color state when those flags are omitted.
- CLI now validates poll usage so –poll requires either –command or –image as the refresh source.
- Widget update flow remains immediate and reliable without background polling side effects.
- Added argument validation errors for conflicting chart modes and conflicting stdin dash usage to prevent ambiguous command behavior.
- Local –image updates now sync across devices by embedding a scaled image payload that each device decodes into local widget image storage.
- Restored reliable Xcode scheme behavior by adding shared schemes so the app and widget extension can be rebuilt and run consistently.
- Updated CLI install AppleScript success handling to avoid false warning behavior with newer NSAppleScript APIs.
- Commands now write a fresh payload each time so unspecified fields are cleared and old chart/text/image content never leaks into later updates.
- Improved Terminal launch reliability by explicitly opening/activating Terminal and retrying command injection during startup.
- –full-width now implies zero padding so image fill mode behaves as edge-to-edge by default.