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-stickybar

v1.0.1

Published

Configurable two-line status bar and fixed editor extension for pi coding agent

Readme

StickyBar

Input bar extension for pi coding agent.

Preview

StickyBar preview

Features

  • Fixed editor - prompt is always visible
  • Two configurable status rows with model, git state and more, check table below
  • Last-prompt preview under the input prompt line
  • Themed working vibes: generated realtime based on your input or loaded from a local file, with optional rainbow animation.

Installation

pi install npm:pi-stickybar

Restart pi after installation or call /reload.

Configuration

The extension has opiniated defaults, but it also configurable via settings.json

Put settings under a single stickybar object. Pi reads global settings first, then project settings, so .pi/settings.json overrides ~/.pi/agent/settings.json.

Full configuration example:

{
  "stickybar": {
    "fixedEditor": true,
    "mouseScroll": true,
    "showLastPrompt": true,

    "top": [
      "git",
      "context_pct",
      "token_in",
      "token_out",
      "cost",
      "time_spent"
    ],

    "bottom": [
      "model",
      "thinking",
      "path",
      "extension_statuses"
    ],

    "options": {
      "path": { "mode": "basename", "maxLength": 32 },
      "git": {
        "polling": "full",
        "showBranch": true,
        "showStaged": true,
        "showUnstaged": true,
        "showUntracked": true
      },
      "time": { "format": "24h", "showSeconds": false }
    },

    "vibe": {
      "theme": "evil corporation",
      "mode": "generate",
      "model": "openai-codex/gpt-5.4-mini",
      "rainbow": true,
      "fallback": "Working",
      "refreshInterval": 30,
      "prompt": "Generate a {theme} loading message for: {task}. {exclude}",
      "maxLength": 65
    }
  }
}

Status items

top and bottom are ordered arrays. An item can appear only once, and unknown IDs are ignored.

| Item | Description | Example | | --- | --- | --- | | model | Current model in use | gpt-5.4-mini | | thinking | Reasoning/thinking level | medium | | path | Current file path (see options) | src/index.ts | | git | Git branch + working-tree state | main ⇡3 ✗2 ?1 | | context_pct | Context window usage percentage | 45% | | context_total | Total context tokens used | 12,450 tok | | token_in | Input tokens for current turn | 3,200 | | token_out | Output tokens for current turn | 840 | | token_total | Total tokens (in + out) | 4,040 | | cost | Estimated cost of current session | $0.012 | | time_spent | Elapsed time for current turn | 3s | | time | Current clock time | 14:35 | | session | Session identifier or name | sess-abc123 | | hostname | Machine hostname | my-laptop | | cache_read | Cache read hits | 128 | | cache_write | Cache write hits | 35 | | extension_statuses | All published extension statuses | ci: passing · deploy: ready |

Path options

Configure how file paths are displayed via options.path:

| Option | Values | Description | | --- | --- | --- | | mode | basename, abbreviated, full | How the path is rendered. basename shows only the filename (index.ts). abbreviated keeps the full path but truncates from the start with when it exceeds maxLength. full always shows the complete absolute path. | | maxLength | number (default: 32) | Maximum length for abbreviated mode. Longer paths are truncated from the beginning and prefixed with . |

Git polling options

Configure git status detail via options.git:

| Option | Values | Description | | --- | --- | --- | | polling | full, branch, off | How much git info to gather. full polls for branch name plus staged, unstaged, and untracked counts. branch shows only the current branch name without scanning working-tree changes. off skips local polling entirely and relies on whatever branch info pi provides. | | showBranch | boolean (default: true) | Include the branch name in the segment. | | showStaged | boolean (default: true) | Show the count of staged changes (). | | showUnstaged | boolean (default: true) | Show the count of unstaged changes (). | | showUntracked | boolean (default: true) | Show the count of untracked files (?). |

Custom status items

Use custom:<id> in a row and declare the matching item in customItems:

{
  "stickybar": {
    "top": ["model", "path", "custom:ci", "git"],
    "bottom": ["context_pct", "extension_statuses"],
    "customItems": [
      {
        "id": "ci",
        "statusKey": "ci-status",
        "prefix": "CI",
        "hideWhenMissing": true,
        "excludeFromExtensionStatuses": true
      }
    ]
  }
}

Extensions publish a value with:

ctx.ui.setStatus("ci-status", "passing");

Working vibes

Manage vibes from pi with /stickybar vibe:

/stickybar                    Show current status
/stickybar vibe               Show vibe status
/stickybar vibe pirate        Enable a theme
/stickybar vibe off           Disable vibes
/stickybar vibe rainbow on    Enable rainbow animation
/stickybar vibe mode file     Use ~/.pi/agent/vibes/<theme>.txt
/stickybar vibe model provider/model
/stickybar vibe generate evil cat corporation 100

generate mode requests a short message from the configured model while Pi is working. file mode rotates through messages in ~/.pi/agent/vibes/<theme>.txt and does not make a model request.

This project is a rework of pi-powerline-footer with simplified approach to customization and limited feature list.