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

kamal-tools

v1.0.0

Published

Interactive TUI for managing Kamal 2 deployments

Readme

kamal-tools

An interactive terminal TUI for managing apps deployed with Kamal 2. Connect to any server over SSH and inspect, tail logs, or destroy apps — no project deploy.yml required.

Zero runtime dependencies. Node.js built-ins only.


Requirements

  • Node.js 18+
  • SSH access to a server running Kamal 2

Installation

npm install -g kamal-tools

Or run directly using NPX

npx kamal-tools

Usage

Interactive TUI

kamal-tools [email protected]

Or set the host via environment variable and omit it from the command:

export [email protected]
kamal-tools

On launch, kamal-tools connects to the server over SSH, discovers all Kamal-managed apps, and presents them as a navigable menu. Select an app to open its action submenu.

Main menu navigation:

| Key | Action | |-----|--------| | ↑ / ↓ | Navigate | | Enter | Select | | Esc | Quit |

App actions:

| Action | Description | |--------|-------------| | Info | Show containers, images, and volumes for the app | | Logs | Tail live logs from the most recently started container | | Destroy | Stop and remove all containers, images, and volumes |

Global actions (below the app list):

| Action | Description | |--------|-------------| | Prune | Remove stopped containers and dangling images server-wide | | Show Kamal proxy status | List all apps routed through kamal-proxy |


Non-interactive (scriptable) mode

Pass a command after the host to run it non-interactively and print output to stdout:

kamal-tools [email protected] list
kamal-tools [email protected] info <app>
kamal-tools [email protected] logs <app>
kamal-tools [email protected] remove <app>
kamal-tools [email protected] prune
kamal-tools [email protected] proxy

Non-interactive remove skips the confirmation prompt — the caller is responsible for confirming intent.


How apps are identified

kamal-tools identifies Kamal-managed apps by their container naming convention:

<appname>-<env>-web-<env>-<hash>
<appname>-<env>-worker-<env>-<hash>

The logical app name is everything before -web-, -worker-, or -cron-. For example:

codepilot-production-web-production-1b7dce  →  codepilot-production
infernalpizza-staging-web-staging-6e0ea9    →  infernalpizza-staging

Destroying an app

The Destroy action removes all Docker resources associated with an app:

  1. Stops and removes all matching containers
  2. Removes all images tagged with the app name
  3. Removes all volumes matching the app name

After removal, kamal-tools queries kamal-proxy for any routes still registered for the app and offers to remove them automatically via docker exec kamal-proxy kamal-proxy remove <service>.

If you prefer to clean up the proxy manually, you can also run locally from your project directory:

kamal proxy reboot --hosts [email protected]
# or
kamal app remove

Environment variables

| Variable | Description | |----------|-------------| | KAMAL_TOOLS_SSH | Default SSH host, used when no host is passed as an argument |


License

MIT