v0.0.18
Tecolot
Theme system improvements
- Added theme lineage tracking (
baseThemeName) toTerminalTheme, so derived themes know which built-in theme they were forked from. - Added first-class theme forking/duplication helpers in
ThemeStore:- Smart de-duplicated naming (
<theme> (Custom),<theme> copy, with numeric suffixes) - Built-in themes are no longer edited directly; edits create a non-built-in fork.
- Custom themes duplicate with copy semantics while preserving lineage.
- Smart de-duplicated naming (
- Added robust theme operations in profile settings:
- In-place theme editing section with name editing, duplicate/revert/delete actions, and color pickers for background/foreground/selection/cursor + all 16 ANSI colors.
- Built-in/custom differentiation in previews and cards.
- “Revert to base theme” action for custom themes created from built-ins.
Theme browser + picker refinements
- Refactored theme browser into reusable sectioned view model:
- Favorites are separated from others and sorted alphabetically.
- Supports paged mode (popular/more) and full list mode for chooser sheets.
- Added optional “Done” action for modal usage.
- Updated theme cards:
- Added hover/focus-friendly favorite toggle on card.
- Added “CUSTOM” badge on non-built-in themes.
- Duplicate action for built-in themes now uses centralized forking logic.
Profile/settings reliability updates
- Updated profile update flow to return success/failure (
Bool) so multi-step operations can roll back on storage failures. - Theme edits in settings now use safer result-handling and rollback when persistence fails.
- Added delayed/batched save behavior for theme edits to reduce churn and preserve responsiveness.
App behavior and maintenance
- Fixed app reopen behavior: reopening with no visible windows now opens a new window.
- Release workflow now explicitly requests
contentsandactionspermissions for release/appcast dispatch needs. - Updated SwiftTerm dependency revision in
Package.resolved.
SwiftTerm Highlights
- Added formal fuzzer infrastructure and coverage for parser/stream/OSC behavior, plus documentation for live and corpus-driven fuzzing.
- Implemented XTGETTCAP support (DCS
+q) using generated terminfo-based reply data. - Added substantial hardening fixes around wide-cell seams, OSC bounds, and local process lifecycle safety.
- Expanded benchmarking and profiling tooling with dedicated hardening workloads and an executable profiler.
- Added extensive new regression test coverage (including Ghostty corpus and seam/OSC/XTGETTCAP tests).
New Features
-
Terminal protocol support
- Added XTGETTCAP DCS handler with multiple key support, malformed-key handling, terminal name (
TN) responses, and limits. - Added generated
SwiftTermTerminfotable from checked-inswifterm-terminfo. - Added docs for new Kitty graphics types and integration (
KittyGraphicsIntegration, configuration/policy/snapshot docs).
- Added XTGETTCAP DCS handler with multiple key support, malformed-key handling, terminal name (
-
New hardening and performance knobs
TerminalOptions.maximumOscBytesadded (default 65 MB).BenchmarkOptions-adjacent improvements for profiling:- Added hardening benchmark set in
VTEBenchWorkload. - Added
SwiftTermProfiletool for headless profiling.
- Added hardening benchmark set in
- Added profiling support for seam check counters (
SWIFTTERM_SEAM_COUNTER).
-
Fuzzing/testing assets
- Added
Docs/fuzzing.mdand Makefile targets for corpus replay and live fuzzing. - Added
Tools/import-ghostty-fuzz-corpus.swiftto import Ghostty fuzz corpora. - Added new fixture archives and provenance docs under
Tests/SwiftTermTests/Fixtures/GhosttyFuzzCorpus.
- Added
Fixed / Reliability Improvements
-
Wide-cell correctness & seam integrity
- Added destination-keyed seam repair in buffer writes.
- Added bulk scalar insertion path for valid homogeneous scalar runs.
- Fixed wide-character seam corruption risks in many editing/movement paths and margin-restricted operations.
- Added integrity regression tests asserting wide-cell invariants.
-
ESC/OSC parser hardening
- Reworked OSC buffering with explicit size caps and capped retained capacity.
- Added parser-level limit for oversized OSC payloads and memory release path after reset/completion.
- Replaced separator parsing representation (
_parsTxt-> bitmask) for safer, cheaper CSI separator handling.
-
Local process lifecycle safety
- Reworked
LocalProcesslifecycle to avoid stale callbacks and PID reuse races. - Added bounded output-drain + reaping behavior to preserve queued output before termination notifications.
- Added explicit termination escalation (
SIGTERMthenSIGKILL) and configurable delays. - Added state phases and generation-based guards for restart safety.
- Reworked
-
Pipeline robustness
- Added
TerminalIOPipeline.drainAvailableAndShutdown(timeout:)for bounded shutdown draining. - Introduced explicit run phases (streaming/draining/quitting) and control wakepipe for deterministic stop behavior.
- Added