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

pi-webdesk

v0.1.0

Published

An opinionated web UI for Pi, with isolated task worktrees and code review

Downloads

156

Readme

Pi Webdesk

An opinionated web UI for Pi.

Webdesk is a local-first browser workspace built specifically for Pi. It gives a solo developer a calm, worktree-first place to run several coding tasks, inspect changes, validate them, and explicitly decide what gets committed or merged.

Pi remains the agent runtime and the source of truth for sessions, models, authentication, settings, skills, extensions, prompts, themes, and packages.

Status

The core vertical slice is runnable locally, including through Pi's package manager: an authenticated localhost browser can register repositories, create isolated task worktrees, run supervised Pi runtimes with policy approvals, stream and steer prompts, and reconnect with exact event replay or a Pi-reconstructed canonical snapshot. Tasks provide live bounded Git review, explicit validation, snapshot commit approval, local merge approval, and non-destructive archive/restore. Durable runtime ownership lets a restarted daemon terminate verified orphan process groups before accepting traffic; ambiguous ownership blocks only the affected task, and interrupted prompts are never resumed automatically. The current UI includes formatted conversations, expandable tool and skill-file activity with canonical reload recovery, proposed edit previews, compact session branches, persistent task selection, read-only Pi configuration/resource discovery, and schema-bound Webdesk appearance preferences.

Install in Pi

Install the public preview through Pi's package manager:

Requires Node.js 22.19+, npm, Git 2.38+, and an existing Pi setup. macOS is the primary platform; Linux uses xdg-open when available.

pi install npm:pi-webdesk

Restart Pi, or run /reload in an existing interactive session. Then:

/webdesk          Start Webdesk in the background and open its browser workspace
/webdesk status   Show whether the daemon is running
/webdesk stop     Gracefully stop the daemon and its active task runtimes

The npm package includes the compiled browser app and daemon. Pi loads only the launcher extension; loading or reloading it never starts a daemon. /webdesk opens a fresh one-time login link to http://127.0.0.1:4517 (valid for 15 minutes). If the browser cannot open automatically, copy the link from Pi. Repeating /webdesk reuses the running daemon and replaces any unused login link.

The daemon keeps running when Pi or the browser closes. /webdesk stop preserves task worktrees, metadata, and Pi sessions; it stops active execution without replaying interrupted prompts. Use it before updating or removing the package, then restart Pi or /reload to load the updated launcher. Removing the Pi package does not remove ~/.pita or Pi's files. Webdesk opens its workspace; your current terminal conversation is not moved automatically. Existing sessions can be continued through Webdesk's session workflow.

After stopping Webdesk, update it from your terminal:

pi update npm:pi-webdesk

Then restart Pi or /reload, and run /webdesk again. Package updates are managed by Pi; Webdesk's resource UI is read-only.

You can also install the current GitHub source with pi install https://github.com/luka-zivkovic/pi-webdesk. This runs npm install --omit=dev and builds the package automatically. If switching from a Git installation to npm, stop Webdesk and run pi remove https://github.com/luka-zivkovic/pi-webdesk before the npm install to avoid duplicate launcher extensions. Your worktrees and sessions are preserved.

Configuration is inherited from the environment that starts Pi:

| Variable | Default | Purpose | | --- | --- | --- | | PITA_PORT | 4517 | Loopback HTTP port | | PITA_STATE_DIR | ~/.pita | Private state directory, worktrees, and background log (daemon.log) | | PITA_PI_EXECUTABLE | Package's tested Pi runtime | Explicit Pi executable override |

Webdesk keeps its tested Pi runtime dependency alongside the application and uses Pi's existing configuration, authentication, resources, and session formats. Set Pi's own PI_CODING_AGENT_DIR to use a different Pi configuration directory. Binding to other interfaces is not supported.

To install a local development checkout:

pnpm install
pnpm build
pi install "$PWD"

The distribution also includes a pi-webdesk executable for npm installations. From a built checkout, run node dist/apps/daemon/src/cli.js --no-browser to serve the UI in the foreground; Ctrl+C stops it. open, status, and stop are also available as CLI commands. Pi package installation does not add this executable to your shell's global PATH.

Existing Pita installations

Webdesk was previously named Pita. /pita remains an alias for /webdesk. The existing ~/.pita data directory and PITA_* environment variables retain their names, so tasks, worktrees, sessions, preferences, and launch configuration continue to work without moving data. Existing browser storage and internal protocol identifiers are also preserved.

Development and verification

pnpm install
pnpm --filter @pita/daemon start   # terminal 1
pnpm --filter @pita/web dev       # terminal 2

The development daemon prints a login link for the Vite origin, http://localhost:5173. PITA_ALLOWED_ORIGIN configures that development origin; PITA_DAEMON_PORT configures Vite's proxy when using a different daemon port.

pnpm test
pnpm typecheck
pnpm build
pnpm test:package

The package check performs a fresh npm source install, packs and installs production dependencies into an isolated directory, registers the package with an isolated Pi configuration, verifies the launcher and real Pi policy handshake, and checks browser authentication and daemon restart. It makes no model calls. npm pack rebuilds the distribution. Only the root pi-webdesk package is published; internal workspace packages stay private.

For a release, run the checks above plus pnpm test:process, then pack and test the exact archive before publishing it:

npm pack
WEBDESK_PACKAGE_TARBALL="$PWD/pi-webdesk-0.1.0.tgz" pnpm test:package
npm publish ./pi-webdesk-0.1.0.tgz --access public --ignore-scripts

Use the version from package.json in the archive name. WEBDESK_PACKAGE_TARBALL makes the package check install that archive while still verifying a fresh Git-source build.

Locked technology direction

  • Browser UI: React, TypeScript, Vite
  • Styling and components: Tailwind CSS v4, shadcn/ui on Base UI, Lucide icons
  • Local service: Node.js/TypeScript daemon bound to localhost
  • Runtime: one supervised Pi runtime per active task
  • Repository model: one Git worktree per task

The first implementation milestone is a thin vertical slice: open a repository, create a task worktree, talk to Pi with streamed events, survive a browser reconnect, and inspect the resulting diff.