Skip to content

Releases: HalFrgrd/evp

v0.18.0

Choose a tag to compare

@github-actions github-actions released this 01 Jul 22:18

Mainly worked on speed ups for evp record

v0.17.0

Choose a tag to compare

@github-actions github-actions released this 01 Jul 06:36

🚀 v0.17.0 Changelog

GIF engine overhaul

• Pure Rust GIF Engine: Replaced gifski / pngquant dependencies with the pure-Rust gif crate,
simplifying the build toolchain.
• Cohesive Theme Palette: Generates a 256-color palette directly from the active theme using CIELAB
colorspace trilinear interpolation, reserving index 255 for transparency.
• Delta Frame Compression: Emits only the minimum bounding box containing changed pixels for each frame.
This achieves up to 67% file size reduction in generated GIFs.

Cursor

• Typing Cursor Optimization: Temporarily halts cursor blinking while actively typing or moving (resets
to solid/visible). Blinking only resumes once stationary for 300ms (affects both SVG and GIF renderers).

v0.16.0

Choose a tag to compare

@github-actions github-actions released this 30 Jun 07:43

EVP v0.16.0 Release Notes

🚀 Key Highlights

🖱️ Mouse Modifiers Support

EVP now fully supports mouse clicks, drags, movements, and scrolls combined with modifier keys (Ctrl, Alt, Shift, Super/Cmd/Windows).

  • Tapes Syntax: You can now prefix mouse actions in your .tape scripts:
    • Shift+Click 10 20
    • Ctrl+RightClick 10 20
    • Shift+Ctrl+MouseDrag 0 0 10 10
    • Ctrl+MouseScroll 10 20 Up
  • Interactive Recording: The evp record session has been upgraded to capture these modifier combinations live as you interact with your terminal subshell.
  • Under the Hood: Mapped directly to libghostty input parameters via map_mods_to_ghostty in src/runner.rs.
  • Testing: The test suite (tests/mouse_events.rs) and the internal key/mouse helper tool (evp_helper_tool/src/main.rs) have been updated to exercise and assert modifier behavior.

⏱️ Wait / Synchronization Upgrades

The Wait instruction has been streamlined and made more robust:

  • Scope Suffix Syntax: Replaced the legacy space-separated syntax (e.g. Wait Screen / Wait Line) with the unified command-modifier suffix syntax:
    • Wait+Screen /regex/
    • Wait+Line /regex/
    • Timeout overrides can also be appended, e.g. Wait+Screen@10s /regex/.
  • Spaces in Regex Patterns: Fixed a tokenization issue where regular expressions containing spaces (e.g. /evp: evp finished/) would get split. The parser (src/script/parser.rs) now correctly reassembles space-separated regex segments during parsing.

⚡ Performance Optimizations

1. Lazy Font Loading and Decompression

Previously, all embedded fallback fonts were parsed and decompressed from WOFF2 to TTF at startup.

  • On-Demand Font Decompression: Embedded fallback faces are now lazily loaded and decompressed using OnceLock in src/font.rs on the first glyph request via FontInfo::get_font and FontInfo::get_ttf_bytes.
  • Global caching: The primary loaded font family is now cached globally in a static OnceLock<LoadedFontFamily>, avoiding costly layout metrics calculations on consecutive rendering passes.

2. Fast GIF Encoding

  • gifski is now configured with fast: true to accelerate color quantization and frame compilation.

3. Matrix-Parallelized CI Example Builds

  • GitHub Actions workflow (.github/workflows/ci.yml) was refactored to compile and render example .tape files concurrently using a Matrix strategy, significantly lowering build times.

🎨 Visual Enhancements & Styling

Window Title Bar Refinement

  • Solid Window Controls: The three macOS-style window bar controls are now always rendered as solid, filled circles instead of outlines, improving aesthetic clarity.
  • Readable Title: The window title size was increased (up to 76.5% of bar height in GIFs and 53.5% in SVGs) and rendered with normal font weight instead of bold.
  • Text Color: The title text color has changed from #8e8e93 to a warmer #626268 for improved contrast and look.

Output & Terminal Enhancements

  • Metadata Embedding: Output GIF comments and SVG XML tags now embed diagnostic metadata:
    <!-- Created with EVP v0.16.0 (sha: <git_sha>, frames: 42, cols: 80, rows: 24, fps: 30, render_time: 154ms) -->
  • Screenshots: Screenshots now officially support .txt and .ascii exports alongside .png, .svg, and .json.

📊 Telemetry System

  • Timing Registry: A new ScopeTimer in src/telemetry.rs collects execution durations for major blocks (font_init, pty_spawn, runner_execution, enforce_require, etc.).
  • Telemetry in Stats: Timing durations are now exposed in the .stats output files, allowing developers to inspect frame capture/drop metrics alongside execution cost.
  • Automated Summary: A Python script (scripts/generate_stats_summary.py) runs post-CI build to parse all .stats files and generate a Markdown speed summary.

v0.15.0

Choose a tag to compare

@github-actions github-actions released this 28 Jun 19:04

The headline feature of this release is the introduction of Interactive Session Recording (evp record), which allows you to record your live terminal sessions directly to a .tape file and a corresponding .gif!


Headline Feature: Interactive Session Recording (evp record)

You can now record your live terminal sessions in real time! EVP turns your host terminal into raw mode, captures all keystrokes, mouse clicks, drags, movements, and scrolling, and compiles them directly:

  • Usage:
    # Record your session (saves to demo.tape and demo.gif by default)
    > evp record
    
    # Customize the outputs, shell, theme, and geometry:
    > evp record --output my_demo.tape --output demo.svg --shell zsh --theme "Catppuccin Mocha" --cols 100 --rows 40
  • Robust Wrapped Header Layout: Features a dynamic cell-by-cell simulated flow layout for the interactive header. If the terminal window is narrow, the header text gracefully wraps onto multiple lines without breaking.
  • Dynamic Geometric Offsets: Cursor positioning and terminal grid partitions dynamically adjust to match the calculated height of the wrapped header text.
  • Coordinate-based Click/Hover Tracking: Mouse hover and left-click coordinates dynamically check against coordinates printed during layout rather than relying on hardcoded columns.
  • Interactive Recording Demo: Added an interactive demo tape (examples/evp_record_demo.tape) compiling inside Docker and integrated it into the README.md.

Other Improvements in v0.15.0

⚡ Performance & Startup Latency Fixes

  • Instantaneous PTY Spawning: Removed a blocking passwd database query (getpwuid_r) from the fallback shell path resolver. This eliminates a 5–8 second latency/hang in Docker containers and sandboxed GitHub Actions runner environments.

📦 Workspace modularization

  • Crate Separation: Extracted the helper program out of the main package binaries list into a separate workspace package: evp_helper_tool/.
  • Dynamic Integration Tests: Refactored the test suite to locate target executables dynamically at test runtime (common::get_helper_bin_path()) across debug, release, and musl target profiles.

🚀 CI/CD & GHA Release Pipeline

  • Emulation-free Cross-Compilation: Ported ci/libghostty-pkgconfig.Dockerfile to compile natively on the host runner (--platform=$BUILDPLATFORM) and cross-compile to the target architecture. This avoids slow and buggy QEMU emulation hangs when compiling the static Ghostty library for aarch64.
  • Draft-to-Pre-release workflow: Rewrote the GitHub Actions release workflow to register a draft release first, upload compiled targets natively using the gh CLI, and publish as a pre-release only when all targets build successfully.

🔧 Installer & Script Cleanups

  • API Rate-Limit Bypass: Updated install.sh to resolve the latest version tag using HTTP redirect headers (curl -sI) instead of querying the GitHub JSON API, avoiding API rate-limiting blocks.
  • Cross-platform checksum verification: Standardized install script validation to support both Linux sha256sum and macOS shasum.
  • Code Deduplication: Centralized script comment headers, physical keyboard shift key modifier translation, and target backend output resolution (RendererBackend::for_path).

v0.14.0

Choose a tag to compare

@github-actions github-actions released this 24 Jun 07:07

Full Changelog: v0.13.0...v0.14.0

Full Changelog: v0.13.0...v0.14.0

Full Changelog: v0.13.0...v0.14.0

Full Changelog: v0.13.0...v0.14.0

v0.13.0

Choose a tag to compare

@github-actions github-actions released this 12 Jun 20:47

Full Changelog: v0.12.0...v0.13.0

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 12 Jun 18:56

Full Changelog: v0.11.0...v0.12.0

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 11 Jun 21:24

What's Changed

Full Changelog: v0.10.0...v0.11.0

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 06 Jun 12:36

Full Changelog: v0.9.0...v0.10.0

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 04 Jun 22:05

What's Changed

Full Changelog: v0.8.1...v0.9.0