vercel/hyper
46.7
Weak · 28 September 2026
8.9k
lines of production code
TypeScript
primary language
4
measurements over time
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
Menus restructured into platform-specific TypeScript modules with profile support and new options
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.