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

nagi-terminal

v1.1.29

Published

Touch-friendly web-based terminal for iOS/iPad with tmux support

Readme

Nagi

Touch-friendly web-based terminal optimized for vibe coding. Access your terminal from iPad/iPhone without a hardware keyboard and enjoy coding from anywhere - your couch, bed, or cafe.

Supports fullscreen applications like tmux and Claude Code.

Security: Token-based authentication is enabled by default. Tailscale authentication is also supported for secure access within your Tailnet.

日本語版 README

Features

  • Touch-optimized: Fully usable without a hardware keyboard
  • Special keys: Ctrl, Alt, Esc, Tab, Enter, Arrow keys, etc.
  • tmux support: Quick button panel for tmux operations
  • File browser: Browse files, view source code with syntax highlighting, play videos and images
  • Color themes: Dark/Light mode with 12 accent colors
  • Custom buttons: Add your own command buttons (default: yes, commit & push)
  • Text input: Modal for pasting long text or CJK characters
  • Auto-execute: Run commands automatically on connection
  • Token auth: Secure access with auto-generated token
  • Tailscale auth: Zero-config authentication via Tailscale network
  • QR code: Scan to connect from your phone instantly
  • xterm.js: Full-featured terminal emulation

File Browser

Click the Files button (top-right) to open the side panel file browser.

  • Directory navigation: Browse folders, go up with ↑ button
  • Syntax highlighting: View source code with highlight.js (Python, Go, Rust, TypeScript, etc.)
  • Video streaming: Play videos with seek support
  • Image viewer: View images with fullscreen support
  • Hidden files: Toggle visibility with checkbox

Installation

npm (Recommended)

npm install -g nagi-terminal

Manual Installation

git clone https://github.com/shi3z/nagi.git
cd nagi
uv sync

Usage

npm

nagi
nagi -p 8080  # Custom port
nagi -c /path/to/config.json  # Custom config file

Manual

uv run python main.py

On startup, the access URL with token and QR code will be displayed. Scan the QR code with your phone to connect instantly.

Configuration

Edit config.json:

{
    "startup_command": "tmux a || tmux new",
    "shell": "/bin/bash",
    "port": 8765,
    "auth": {
        "mode": "tailscale",
        "allowed_users": []
    }
}

| Option | Description | Default | |--------|-------------|---------| | startup_command | Command to run on connection | tmux a \|\| tmux new | | shell | Shell to use | /bin/bash | | port | Listen port | 8765 | | token | Fixed access token (optional) | Random on startup | | auth.mode | Authentication mode: token or tailscale | token | | auth.allowed_users | Allowed Tailscale users (empty = all) | [] |

Authentication Modes

Token mode (default): Uses auto-generated or fixed token. QR code displayed on startup.

Tailscale mode: Authenticates via Tailscale network. No token needed - only users within your Tailnet can access. Users outside your Tailnet are completely blocked.

{
    "auth": {
        "mode": "tailscale",
        "allowed_users": ["[email protected]"]
    }
}

You can also set NAGI_TOKEN environment variable to use a fixed token (token mode only).

Control Panel

Basic Keys

  • Ctrl / Alt: Modifier keys (toggle)
  • Esc / Tab / Enter: Special keys
  • Arrow keys: Cursor movement
  • Home / End / PgUp / PgDn: Navigation

Shortcuts

  • ^C: Interrupt (Ctrl+C)
  • ^D: EOF (Ctrl+D)
  • ^Z: Suspend (Ctrl+Z)

tmux Panel

Expand with the tmux button:

  • c: New window
  • n / p: Next/Previous window
  • d: Detach
  • % / ": Split vertical/horizontal
  • o: Switch pane
  • z: Zoom
  • [: Copy mode

Text Input

Click the Text button to open a modal for pasting long text or CJK characters.

Color Themes

Click the 🎨 button to open the theme selector. Choose between Dark/Light mode and 12 accent colors. Your selection is saved in the browser.

Custom Buttons

Click Cmd to toggle custom command buttons. Default buttons include yes and commit & push.

To customize, create ~/.nagi/buttons.html:

<div class="button-row">
    <button class="btn" data-cmd="yes">yes</button>
    <button class="btn" data-cmd="commit &amp; push">commit & push</button>
    <button class="btn" data-ctrl="c">^C</button>
</div>

Available attributes: | Attribute | Description | Example | |-----------|-------------|---------| | data-cmd | Send command + Enter | data-cmd="ls -la" | | data-send | Send text (use \n for newline) | data-send="hello\n" | | data-ctrl | Send Ctrl+key | data-ctrl="c" |

Requirements

  • Python 3.10+
  • FastAPI
  • uvicorn
  • websockets

License

MIT