Your CLI home video recorder 📼
20.3k
Stars
441
Forks
161
Open issues
30
Contributors
AI Analysis
VHS is a terminal recording tool that converts CLI sessions into GIFs and videos through a declarative tape file format, enabling developers to create reproducible terminal demos and integration test recordings. It's specialized for CLI tool creators and technical communicators who need to automate terminal session capture; not suitable for general video editing or non-terminal recording needs.
Inferred from signals mentioned in the README (tests, CI, type safety) — not a review of the actual code.
AI's overall editorial judgment — not an average of the bars above, can weigh other factors too.
VHS lets developers write terminal recordings as code, producing reproducible GIFs and videos from script files
VHS is a CLI tool from Charmbracelet that converts declarative tape script files into terminal GIF/video recordings. It solves the pervasive problem of manually recording, re-recording, and maintaining terminal demos for documentation, READMEs, and CI pipelines. Its primary audience is CLI tool developers and developer-experience engineers who need reproducible, version-controllable terminal recordings. With 20K+ stars and broad package manager support (Homebrew, Arch, Nix, Scoop, Winget, Debian, RPM), it has moved well beyond hobby use into a recognized standard for this workflow.
Created in July 2022 by Charmbracelet, the company behind popular Go TUI libraries. It emerged as a natural complement to their terminal UI ecosystem, addressing the need to demo those tools effectively and reproducibly.
Growth was rapid after launch, driven by viral GitHub README adoption — developers discovered VHS when they saw polished terminal GIFs in other projects and wanted to replicate the workflow. Charmbracelet's existing reputation and large ecosystem (gum, glow, etc.) gave VHS an immediate audience. The 81 stars/week pace nearly 4 years post-launch indicates sustained organic discovery rather than a short-lived spike.
VHS is available in major package managers (Homebrew, Arch pacman, Nix, Scoop, Winget, Debian/RPM repos), indicating maintainer investment in distribution. The tool appears extensively used for README GIFs across the open source ecosystem, particularly within the Charmbracelet project family. A publish hosting service (vhs.charm.sh) and SSH server mode suggest real infrastructure investment for real users. Concrete production-scale usage metrics are not publicly documented, but adoption signals are strong across OSS projects.
Appears to use a custom DSL parser for .tape files, driving a headless terminal emulator (ttyd) with ffmpeg for video encoding. Likely orchestrates terminal sessions over a virtual PTY. The built-in SSH server mode suggests a well-structured server/client separation. Docker image availability implies dependency management is handled at the container level.
README includes a CI build badge (GitHub Actions), indicating automated builds are in place. The presence of integration testing as a stated use case suggests test fixtures likely use VHS itself. Specific test coverage metrics are not documented in README.
Last push was May 4, 2026 — approximately 7.5 weeks before the evaluation date. For a mature tool in a stable problem domain, this cadence is consistent with active maintenance. The project is backed by a funded company (Charmbracelet), reducing bus-factor risk. No signs of stagnation.
ADOPT IF: you maintain CLI tools and need reproducible, version-controlled terminal demos for READMEs, docs, or CI pipelines. AVOID IF: you need to capture authentic, unscripted user interactions — VHS is deterministic by design, not a session recorder. MONITOR IF: your workflow involves very complex terminal state or you depend on ttyd/ffmpeg availability in constrained environments where dependency management is difficult.
Independent dimensions
Mainstream potential
6/10
Technical importance
7/10
Adoption evidence
7/10
- Hard runtime dependency on both ttyd and ffmpeg makes installation non-trivial in locked-down or minimal CI environments, though Docker image mitigates this.
- The tape DSL is proprietary to VHS; scripts are not portable to other tools, creating mild lock-in for teams with large tape file libraries.
- Charmbracelet is a small company — if it pivots or winds down, maintenance continuity depends on community uptake of an MIT-licensed codebase.
- Complex terminal applications with state-dependent rendering or timing sensitivity may produce inconsistent GIF outputs, requiring careful Sleep tuning.
- The publish hosting service (vhs.charm.sh) is a third-party dependency for the sharing feature; its long-term availability is not guaranteed.
VHS is likely to become the de facto standard for scriptable terminal recording in the Go/DevTool OSS ecosystem, growing steadily as CLI documentation practices mature, without threatening asciinema's interactive-recording niche.
Newsletter
Get analyses like this every Monday
Free weekly digest of the most interesting open-source discoveries.
Languages
Information
- Language
- Go
- License
- MIT
- Last updated
- 2w ago
- Created
- 48mo ago
- Analyzed with
- anthropic/claude-haiku-4-5
Stars over time
Contributors over time
Top 100 contributors only — repos with more will plateau at 100.
Open issues
Windows: recorded shell (WSL bash) doesn't see the invoking terminal's PATH — expected? worth a docs note?
Nested vhs render inside a recording panics with 'use of closed network connection'
POSIX-compliant
Support Temporarily increasing PlaybackSpeed
VHS freezes when I do vhs test.tape
Top contributors
Similar repos
charmbracelet/wish
Wish is a Go library for building custom SSH servers with sensible defaults and...
| Repository | Stars | Week Δ | Language | Score | Updated |
|---|---|---|---|---|---|
|
|
20.3k | +71 | Go | 8/10 | 2w ago |
|
|
7k | — | Go | 8/10 | 4d ago |
|
|
24k | — | Go | 8/10 | 4w ago |
|
|
3.3k | — | Go | 8/10 | 4d ago |
|
|
5.3k | — | Go | 8/10 | 4d ago |
|
|
1.6k | — | Go | 7/10 | 3w ago |
asciinema records real interactive sessions and produces text-based replays; VHS produces scripted, reproducible GIFs/videos. asciinema output is more authentic but non-deterministic; VHS output is controllable and CI-friendly. Different goals rather than direct competition.
terminalizer is a Node.js tool for recording terminal sessions to GIF. VHS differentiates with code-as-config reproducibility, CI integration, and a purpose-built DSL. terminalizer has seen slower maintenance in recent years.
These older Unix tools capture real terminal sessions. They lack VHS's scripting model, making them unsuitable for reproducible automated recordings. VHS is the modern, developer-ergonomics-focused successor in practical usage.
GUI screen recorders are manual, non-reproducible, and not scriptable. VHS is categorically different — it produces code-driven outputs suitable for version control and CI pipelines.
Converts asciinema recordings to animated SVG. Complementary to asciinema's workflow rather than a direct competitor to VHS. VHS offers a more integrated, standalone pipeline without requiring a prior recording step.