Skip to content
CAI
Software that uses CAICheck a score

vercel/hyper

46.7

Weak · 28 September 2026

8.9k

lines of production code

TypeScript

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a cross-platform terminal emulator application built on Electron and React, featuring a modernized TypeScript codebase with a robust plugin architecture. It manages terminal sessions and UI state via Redux, supporting multiple shell profiles and platform-specific features like native CLI installation and context menu integration. The application handles renderer-main communication through a typed RPC system and includes tooling for automated testing, build optimization, and distribution across Windows, macOS, and Linux.

How it got here

2016–2017 — TypeScript migration and build modernization

7 changes.

The project underwent a comprehensive migration from JavaScript to TypeScript, restructuring the codebase with modern tooling like ESLint and pnpm. This period also involved rewriting the application shell, removing legacy CSS and distribution artifacts, and enhancing the build system with V8 snapshots and macOS notarization.

2018–2019 — TypeScript migration and CLI integration

16 changes.

This period focused on migrating the codebase from JavaScript to TypeScript across utilities, actions, reducers, and menus to improve type safety and maintainability. It also introduced comprehensive CLI support for Linux, macOS, and Windows, alongside a new JSON-based configuration format with profile management.

2020–2023 — TypeScript migration and store modernization

5 changes.

The codebase underwent a significant modernization effort, migrating core UI components from JavaScript to TypeScript and rewriting them as function components with hooks. Concurrently, the Redux store was refactored to support environment-aware configuration and optimized write middleware, while centralized type definitions were introduced to enhance type safety and developer experience.

Features

Context menus now support profile selection and shell integration

The application's context menu has been updated to include shell-related commands and allow users to open new windows or tabs in specific profiles. This change integrates the profile list from the configuration into the shell menu template, enabling direct interaction with different shell profiles via the right-click context menu.

app/ui · high confidence

Linux CLI tool installation and bootstrap script

The Linux build process now includes a CLI tool that can be used to search for plugins or launch the application. This is enabled by a new \after-install.tpl\ script that creates a symlink in \/usr/local/bin\ pointing to the executable, and a \hyper\ shell script that serves as the entry point, handling root-user checks and delegating execution to the Node-based CLI.

build/linux · high confidence

Windows installer adds context menu and CLI support

The Windows installation process now registers 'Open Hyper here' entries in the right-click context menu for directories, drive backgrounds, and drives themselves, allowing users to launch the application from file explorers. Additionally, new shell scripts (hyper, hyper.cmd) are introduced to enable command-line interface usage, and the installer includes logic to automatically uninstall any previous version of Hyper found in the local app data directory before proceeding with the new installation.

build/win · high confidence

macOS CLI tool and notarization entitlements added

A new CLI entry point (build/mac/hyper) is introduced to allow users to install, search for plugins, or launch the application from the command line. To support this and ensure the app passes macOS notarization, a new entitlements file (build/mac/entitlements.plist) is added, granting permissions for automation, JIT execution, audio/camera input, and access to contacts, calendars, location, and photos.

build/mac · high confidence

Removals

Removed legacy terminal and tab styling CSS files

The application has removed the CSS files for the previous terminal implementation and tab UI: \hyperterm.css\, \tabs.css\, and \xterm.css\. This cleanup eliminates the styling rules for the old terminal container, header, resize indicator, and tab navigation (including active states and activity indicators), as well as the default xterm.js color and font styles. These files are no longer used, likely in preparation for or following the switch to a different terminal component (such as hterm).

app/css · high confidence

Removed pre-built distribution bundle

The pre-compiled \app/dist/bundle.js\ file has been removed from the repository. This file contained the bundled React application code (including React DOM and Hyperterm components) generated by Webpack. Users should no longer rely on this committed artifact; the application must be built from source to generate the distribution files.

app/dist · high confidence

Architecture

Project restructured with TypeScript, ESLint, and pnpm

The project has been restructured to support TypeScript development and modern tooling. This includes adding configuration files for TypeScript (tsconfig.json, tsconfig.base.json), ESLint (.eslintrc.json), and the pnpm package manager (pnpm-workspace.yaml, .npmrc). The build system now uses a TypeScript-based webpack configuration (webpack.config.ts) and Babel (babel.config.json). Legacy JavaScript entry points (index.js, rpc.js, session.js) and the old build script (build.sh) have been removed, and documentation has been updated (README.md, PLUGINS.md) to reflect the new development workflow.

(repo-wide) · high confidence

Behavioural changes

6 commits (0 fixes) modifying build

A change to existing behaviour in build — 6 commits, 5 files.

build · medium confidence · unverified

App shell rewritten in TypeScript with new plugin and session architecture

The application's core logic has been ported from JavaScript to TypeScript, introducing a strongly typed RPC system for renderer-main communication and a new session management layer that batches terminal output for improved performance. This change also brings a redesigned plugin system that patches module loading to resolve dependency conflicts, adds support for shell profiles to allow per-tab shell configuration, and implements a custom auto-updater for Linux alongside the existing platform-specific update mechanisms.

app · high confidence

Build system now uses V8 snapshots and macOS notarization

The build process in the bin directory has been updated to improve startup performance and meet macOS distribution requirements. New scripts (mk-snapshot.js, download-mksnapshot.js, cp-snapshot.js) and a snapshot-libs.js manifest are introduced to generate and embed V8 startup blobs, caching dependencies for faster initialization. Additionally, a new notarize.js script has been added to automatically notarize the macOS application bundle using Apple ID credentials during the build process.

bin · high confidence

CLI rewritten in TypeScript with improved plugin management and output formatting

The CLI source files have been migrated from JavaScript to TypeScript, introducing stricter type safety and fixing various linting and promise-handling errors. This change includes a new \cli/api.ts\ module for lazy-loading and managing the \hyper.json\ configuration, ensuring that config parsing failures do not crash subcommands. The \list-remote\ command now fetches and displays a larger set of available plugins from npm, and the output formatting for plugin lists has been improved using \columnify\ for better readability. Additionally, error messages are now consistently routed to \console.error\, and the \open\ command no longer passes the deprecated \url\ option.

cli · high confidence

Centralized TypeScript type definitions for terminal configuration and state

The project has introduced a dedicated \typings\ directory containing comprehensive TypeScript definitions for the application's core data structures and behaviors. This includes explicit types for terminal configuration options (such as font settings, colors, and shell arguments), session management states, UI actions, and IPC communication protocols between the main and renderer processes. By defining these interfaces and types in separate files (e.g., \config.d.ts\, \common.d.ts\, \constants/\), the codebase now provides stricter type safety and better IDE support for developers working with the terminal's state management and configuration logic.

typings · high confidence

Configuration format migrated from JavaScript to JSON with profile support

The application configuration file has changed from the legacy .hyper.js JavaScript module format to a new hyper.json JSON format. This migration includes a new schema for validation, support for multiple named profiles (with a 'default' profile), and a migration path that converts existing Hyper 3 customizations into a local plugin if they cannot be directly merged. Users upgrading will have their settings automatically converted to the new JSON structure, while new installations will use the default JSON configuration.

app/config · high confidence

Environment-aware store configuration and new write middleware

The store initialization logic has been refactored to support separate development and production builds. A new \configure-store.ts\ entry point now selects between \configure-store.dev.ts\ and \configure-store.prod.ts\ based on the \NODE\_ENV\ variable. The development configuration integrates Redux DevTools via \@redux-devtools/extension\, while the production configuration omits this overhead. Additionally, a new \write-middleware.ts\ has been introduced to handle \SESSION\_PTY\_DATA\ actions by writing data directly to the terminal term instance, optimizing performance by avoiding intermediate state updates for this specific action type.

lib/store · high confidence

Introduce profiles to the shell menu

The shell menu now dynamically includes items for each configured profile, allowing users to switch between or manage their defined profiles directly from the application menu bar.

app/menus · high confidence

Introduces V8 snapshot caching and a new command registry for improved startup and key handling

The application now uses V8 snapshots to cache dependencies, significantly reducing startup time by intercepting module loads via a custom \Module.\_load\ implementation in \lib/v8-snapshot-util.ts\. Additionally, a new \lib/command-registry.ts\ centralizes command handling, allowing for dynamic registration of keybindings and distinguishing between commands that should prevent default browser behavior and those delegated to Electron roles (e.g., window controls). The main entry point \lib/index.tsx\ has been updated to initialize the Redux store, configure IPC listeners for session and UI events, and apply platform-specific adjustments like the Linux zoom factor.

lib · high confidence

The application menus have been rewritten in TypeScript and split into distinct modules (darwin, edit, help, shell, tools, view, window) to improve maintainability. This change introduces profile-specific entries in the Shell (File) menu, allowing users to open new tabs, windows, or splits using a specific profile directly from the menu. The Tools menu replaces the previous Plugins menu, adding options to update plugins and install the Hyper CLI command in PATH, while also including Windows-specific context menu management. The Help menu now handles 'Report Issue' more robustly by copying large issue bodies to the clipboard when the URL exceeds size limits, and the Window menu adds a 'Toggle Always on Top' option. Additionally, the Edit menu now includes Preferences on non-macOS platforms, and the Darwin menu uses the app name property for its label.

app/menus/menus · high confidence

Port container components to TypeScript

The container components in lib/containers (header, hyper, notifications, and terms) have been converted from JavaScript to TypeScript. This change introduces strict type definitions for state and dispatch props, improving code reliability and developer experience without altering the user-facing behavior of the application.

lib/containers · high confidence

Port core utilities to TypeScript and implement native CLI installation

The application's utility layer has been migrated from JavaScript to TypeScript, introducing strict typing for components such as plugin extensions, color mapping, keybinding resolution, and window positioning. A significant behavioral update is the new \cli-install\ module, which replaces the previous \winreg\ dependency with \native-reg\ to natively manage Windows registry entries for adding the Hyper CLI to the user's PATH. This change also extends CLI availability to Linux and macOS via symlinks (with AppImage support) and improves the Windows context menu integration by using native registry calls instead of external processes.

app/utils · high confidence

Port lib/actions to TypeScript

The action creators in lib/actions (config, header, index, notifications, sessions, term-groups, ui, updater) have been converted from JavaScript to TypeScript, introducing strict typing for Redux actions, dispatchers, and state interactions. This change improves developer experience and code reliability by catching type errors at build time, while preserving the existing runtime behavior of session management, UI updates, and RPC communication.

lib/actions · high confidence

Port lib/utils to TypeScript and enforce renderer-process security boundaries

The utility modules in lib/utils have been converted from JavaScript to TypeScript, introducing strict type definitions for configuration, IPC, and plugin systems. This change enforces a security boundary by redirecting child process execution (exec, execFile) from the renderer to the main process via IPC, while explicitly disabling synchronous execution methods (execSync, spawnSync, etc.) to prevent renderer-side blocking. Additionally, the plugin system now utilizes a typed RPC client for main-renderer communication, and a new Redux middleware is introduced to handle side effects defined in actions.

lib/utils · high confidence

Ported Redux reducers to TypeScript with enhanced session and term-group management

The Redux reducers in lib/reducers have been rewritten in TypeScript, introducing strict typing for the application state and actions. This change adds support for terminal session profiles (storing the profile name in session state) and refines the term-group logic to better handle pane splitting, resizing, and removal with automatic size rebalancing. The UI reducer now explicitly validates configuration options for cursor shapes, bells, and window controls, and initializes with WebGL rendering enabled by default.

lib/reducers · high confidence

UI components migrated to TypeScript and React function components

The core UI components in lib/components (header, tabs, searchBox, notifications, split-pane, term, and others) have been converted from JavaScript to TypeScript and rewritten as React function components using hooks (useState, useEffect, useRef, forwardRef). This improves type safety and modernizes the codebase while preserving existing behavior for window controls, tab management, search functionality, split-pane resizing, and terminal rendering.

lib/components · high confidence

Updated Husky configuration and pre-push hook

The project has updated its Husky configuration to version 5 and switched its package management to pnpm. The pre-push hook now explicitly invokes pnpm to run tests, ensuring that the test suite executes correctly using the new package manager.

.husky · high confidence

Windows terminal process cleanup adjustment

A patch applied to node-pty on Windows modifies the PtyKill function to stop explicitly disconnecting and closing the standard input and output named pipes, while retaining the closure of the shell handle. This changes how the terminal process is terminated on Windows, potentially affecting resource cleanup behavior for spawned shells.

app/patches · high confidence

Test coverage

Added TypeScript test suite and utility functions; Added unit tests for CLI API, color conversion, and window utilities.

Dependencies

Routine dependency updates across the project

This change updates a wide range of dependencies across the project's manifests, including Babel tooling, ESLint and TypeScript-ESLint plugins, Webpack and its loaders, React and its type definitions, Electron, xterm.js and its add-ons, and various utility libraries. These updates bring the project's tooling and runtime libraries to their latest compatible versions to maintain security, stability, and compatibility.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 41 → 47 (+6.2)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.16) — scores are not directly comparable.

Lenses

  • Code Health 91 → 87 (-4.1)
  • Architecture 90 (new)
  • Maturity 61 → 50 (-10.6)
  • Readiness 21 → 52 (+31.1)
  • Security 50 → 62 (+12.3)
  • Accessibility 37 (new)
  • Performance 60 (new)

Resolved (82)

  • Change coupling: sessions.ts ↔ ui.ts (lib/actions/sessions.ts)
  • Change coupling: term-group.tsx ↔ terms.tsx (lib/components/term-group.tsx)
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Dimension evaluation failed
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (app/pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (app/pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • …and 62 more

New (137)

  • Concentrated knowledge decay
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • FunctionTooLong: header.Header (lib/components/header.tsx)
  • FunctionTooLong: new-tab.DropdownButton (lib/components/new-tab.tsx)
  • FunctionTooLong: notifications.Notifications (lib/components/notifications.tsx)
  • FunctionTooLong: searchBox.SearchBox (lib/components/searchBox.tsx)
  • FunctionTooLong: split-pane.SplitPane (lib/components/split-pane.tsx)
  • FunctionTooLong: tab.Tab (lib/components/tab.tsx)
  • FunctionTooLong: ui.reducer (lib/reducers/ui.ts)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • …and 117 more

Changes since last survey

  • 1 commits — 1 feature/other, 0 fixes

By area

  • .github/workflows — 1 commit

Notable commits

  • change: Delete .github/workflows/e2e_comment.yml (#8207)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

vercel/hyper was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 28 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 30ec0a2a91de17eeb32dd71998fe8a8ec59f98eb — the exact code this score is about.
  • Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-eb9197011364.