npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

quakeshell

v1.0.16

Published

Quake-style drop-down terminal for Windows, distributed as a global npm command.

Readme

QuakeShell

Quake-style drop-down terminal for Windows — instant shell access, always one keystroke away.

Press a hotkey. Terminal slides down. Use it. Press again. It vanishes. No window management, no alt-tabbing — just a terminal that's always there when you need it.

QuakeShell is a tray-resident Electron app that brings the beloved Guake/Yakuake drop-down terminal experience to Windows, with GPU-accelerated rendering and sub-100ms toggle latency.

The current repo state already includes most of the planned Phase 2 runtime work: tabs, split panes, theming, a dedicated settings window, window sizing controls, and Explorer integration. The active delivery channels today are GitHub Releases and the global npm package; broader package-manager automation is the remaining distribution work.


Features

  • Global hotkey toggleCtrl+Shift+Q (customizable) shows/hides the terminal instantly
  • Multi-tab workflow — create, close, reorder, and jump between tabs with Ctrl+T, Ctrl+W, Ctrl+Tab, and Ctrl+1-Ctrl+9
  • Split panes — split the active tab with Ctrl+Shift+D for side-by-side terminal sessions
  • Per-tab shell selection — start tabs in PowerShell, PowerShell Core, WSL, Command Prompt, Git Bash, or a custom shell path
  • Dedicated settings windowCtrl+, opens live settings for General, Appearance, Themes, Keyboard, and Distribution
  • Built-in and community themes — ships with Tokyo Night, Retro Green, Solarized Dark, plus extra bundled dark/light theme packs, and supports user JSON themes from %APPDATA%/QuakeShell/themes
  • Slide animation — smooth drop-down from the top of your screen with configurable animation speed
  • GPU-accelerated — xterm.js with WebGL rendering for buttery terminal output
  • Window sizing controls — configurable height, width, and monitor targeting per display
  • Transparent overlay — configurable opacity with optional acrylic blur support on supported systems
  • Focus-fade — terminal auto-hides when you click away (configurable)
  • Multi-monitor aware — terminal appears on the monitor where your cursor is
  • Hide ≠ Close — your session, scrollback, and running processes survive every toggle
  • Hot-reload config — change settings without restarting the app
  • Explorer integration — optional Open QuakeShell here right-click menu for folders and folder backgrounds
  • System tray resident — no taskbar clutter, just a tray icon
  • Silent autostart — launches on Windows boot with zero visible splash
  • Single instance — only one QuakeShell runs; second launch focuses the existing one
  • Shell crash recovery — auto-restarts the shell if it crashes unexpectedly
  • Onboarding overlay — teaches the hotkey on first run, lets you configure basics in <30 seconds
  • Hardened Electron — context isolation, sandbox, CSP, disabled node integration, @electron/fuses

Requirements

  • Windows 10 version 1809 or later (requires ConPTY)
  • Windows 11 fully supported
  • Windows x64 runtime for the packaged release asset consumed by the npm wrapper
  • Node.js 20+ for the global npm installer (npm 10+ recommended)
  • Node.js 24+ if you plan to clone the repo, run npm ci, or use the release:* scripts from source
  • Git only if you plan to clone and develop from source

Installation

npm install -g quakeshell

After install, launch QuakeShell from any terminal with:

quakeshell

The npm package is a thin Windows-only wrapper. During install it downloads the version-matched QuakeShell release zip from GitHub Releases into %USERPROFILE%\.quakeshell\npm, verifies the SHA-256 sidecar, and wires the quakeshell command to that cached executable.

If you prefer a manual install, download quakeshell-<version>-win32-x64.zip from GitHub Releases, extract it anywhere, and launch quakeshell.exe directly.

Advanced installer overrides:

  • QUAKESHELL_BINARY_PATH — use an existing local quakeshell.exe instead of downloading
  • QUAKESHELL_ASSET_URL or QUAKESHELL_RELEASE_BASE_URL — point the installer at a custom release mirror
  • QUAKESHELL_INSTALL_ROOT — change the cache/install root from %USERPROFILE%\.quakeshell\npm

To remove the npm-managed QuakeShell payload and cached downloads:

quakeshell uninstall

That command removes the wrapper-managed versions and tmp directories under %USERPROFILE%\.quakeshell\npm or your custom QUAKESHELL_INSTALL_ROOT, while preserving %APPDATA%\QuakeShell user settings and themes. After cleanup, remove the wrapper command itself with:

npm uninstall -g quakeshell

If you installed into a non-default cache root, pass it explicitly:

quakeshell uninstall --install-root C:\path\to\quakeshell\npm

npm and GitHub Releases are the active delivery channels today. Scoop and Winget publishing are the main remaining distribution tasks.


Usage

| Action | How | |--------|-----| | Toggle terminal | Press Ctrl+Shift+Q (or your configured hotkey) | | New tab | Press Ctrl+T | | Close tab | Press Ctrl+W | | Cycle tabs | Press Ctrl+Tab / Ctrl+Shift+Tab | | Jump to tab 1-9 | Press Ctrl+1 through Ctrl+9 | | Split active tab | Press Ctrl+Shift+D | | Open settings | Press Ctrl+, | | Toggle via tray | Left-click the tray icon | | Open context menu | Right-click the tray icon | | Launch into a folder | Register Open QuakeShell here from Settings -> Distribution, then use Explorer right-click | | Copy text | Select text, then Ctrl+C or Ctrl+Shift+C | | Paste text | Ctrl+V or Ctrl+Shift+V | | Scroll history | Mouse wheel or Ctrl+Shift+Home / End | | Open URL | Click any URL in terminal output | | Quit | Right-click tray → Quit |


Configuration

QuakeShell stores its config at %APPDATA%\QuakeShell\config.json and user themes at %APPDATA%\QuakeShell\themes\*.json. Settings are validated against a Zod schema, and most of them hot-reload as soon as you save.

Out of the box, QuakeShell includes 15 shipped presets: the 3 core themes (tokyo-night, retro-green, solarized-dark) and 12 additional presets from the bundled dark/light theme packs. User community themes in %APPDATA%\QuakeShell\themes are layered after those shipped presets and cannot override shipped theme IDs.

A typical modern config looks like this:

{
    "hotkey": "Ctrl+Shift+Q",
    "defaultShell": "powershell",
    "opacity": 0.85,
    "focusFade": true,
    "animationSpeed": 200,
    "fontSize": 14,
    "fontFamily": "Cascadia Code, Consolas, Courier New, monospace",
    "lineHeight": 1.2,
    "theme": "tokyo-night",
    "autostart": true,
    "acrylicBlur": false,
    "window": {
        "heightPercent": 40,
        "widthPercent": 100,
        "monitor": "active"
    },
    "tabs": {
        "maxTabs": 10,
        "colorPalette": [
            "#7aa2f7",
            "#9ece6a",
            "#bb9af7",
            "#e0af68",
            "#7dcfff",
            "#f7768e"
        ]
    },
    "firstRun": true
}

dropHeight is still read for older configs, and the current runtime keeps a compatibility bridge between that legacy value and window.heightPercent. The example above shows the effective 40% window height most users will expect in current builds.


Architecture

graph TB
    subgraph Main Process
        IX[index.ts - startup] --> CS[ConfigStore]
        IX --> WM[WindowManager]
        IX --> TAB[TabManager]
        IX --> TM[TerminalManager]
        IX --> TH[ThemeEngine]
        IX --> HK[HotkeyManager]
        IX --> TR[TrayManager]
        IX --> CTX[ContextMenuInstaller]
        WM --> MW[Main Window]
        WM --> SW[Settings Window]
        CS -->|hot-reload| WM
        CS -->|hot-reload| TH
        TAB -->|spawn/close| TM
        HK -->|toggle| WM
        TR -->|toggle| WM
        CTX -->|launch with --cwd| TAB
        TM -->|node-pty| PTY[PowerShell / pwsh / WSL / CMD / Bash]
    end

    subgraph Renderer Processes
        APP[Main UI] --> XT[xterm.js + WebGL]
        APP --> SIG[Signals + config store]
        SETUI[Settings UI] --> SIG
        SETUI --> CFG[Theme / keyboard / distribution controls]
    end

    MW <-->|typed IPC| APP
    SW <-->|typed IPC| SETUI
    TAB <-->|tab events| APP
    TH <-->|theme updates| APP

Key design decisions:

  • Main process owns tabs, PTY lifecycle, window state, and themes
  • Renderer communicates exclusively through typed IPC channels via contextBridge
  • The terminal window is pre-created and hidden instead of spawned on demand, keeping toggle latency low
  • Settings live in a dedicated lightweight window, so the terminal surface stays focused and reusable
  • The published npm package is wrapper-first: install pulls the matching packaged release asset instead of shipping the Electron app inside the tarball

Tech Stack

| Layer | Technology | |-------|-----------| | Runtime | Electron 41 | | Language | TypeScript | | Terminal | xterm.js 6 + WebGL addon | | PTY | node-pty (Windows ConPTY) | | UI | Preact + @preact/signals | | Config | Zod + electron-store | | Build | Electron Forge + Vite | | Testing | Vitest + Playwright |


Development

# Clone and install
git clone https://github.com/jatson/QuakeShell.git
cd QuakeShell
npm ci

# Start dev server with hot-reload
npm start

# Run the app test suite
npm test

# Run only the npm wrapper/distribution tests
npm run test:npm

# Package the app
npm run package

# Build installers
npm run make

# Produce the versioned wrapper release zip + checksum locally
npm run release:dry-run

Releases are driven by .github/workflows/release.yml, not by running npm publish manually from a workstation. The workflow expects a git tag that exactly matches package.json.

git tag v1.0.1
git push origin v1.0.1

That tag triggers wrapper tests, builds release/quakeshell-<version>-win32-x64.zip, creates the GitHub release, and then publishes the npm package.


Security

QuakeShell follows the Electron security checklist in full:

  • contextIsolation: true — main and renderer processes are fully separated
  • sandbox: true — renderer has no Node.js access
  • nodeIntegration: false — no require() in the renderer
  • Strict CSP — default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'
  • @electron/fuses — disables debugging and remote code loading in production
  • Typed IPC via contextBridge — no raw ipcRenderer exposure
  • Zero telemetry, zero remote resource loading, fully offline by default

Status

  • Most Phase 2 runtime features are already in the repo: tabs, split panes, per-tab shell selection, themes, window sizing, settings, and Explorer integration.
  • The remaining Phase 2 gap is broader distribution rollout. GitHub Releases and npm are live; Scoop and Winget automation are next.

Roadmap

Near Term

  • Finish Scoop publishing automation
  • Finish Winget PR automation
  • Keep tightening onboarding and update polish

Longer Term

  • SSH, telnet, serial connections
  • Plugin architecture
  • Cross-platform (macOS, Linux)
  • Profile system with shareable configs
  • Full MobaXterm feature parity (long-term vision)

Comparison

| Feature | QuakeShell | Windows Terminal | ConEmu | Tabby | |---------|-----------|-----------------|--------|-------| | Drop-down mode | Core | No | Dated | Heavy | | Modern rendering | WebGL | DirectX | GDI | WebGL | | Open source | MIT | Yes | Yes | Yes | | WSL support | Yes | Yes | Partial | Yes | | Focus-fade | Yes | No | Basic | Basic | | Lightweight | ~150 MB | ~30 MB | ~15 MB | ~120 MB |


Contributing

Contributions are welcome. For runtime or UI changes, run npm test. For packaging or release changes, also run npm run test:npm and npm run release:dry-run before opening a PR.


License

MIT — built by Barna.