pi-fancy-footer
A fancy footer extension for pi
Package details
Install pi-fancy-footer from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-fancy-footer- Package
pi-fancy-footer- Version
1.1.0- Published
- Apr 30, 2026
- Downloads
- 957/mo ยท 434/wk
- Author
- mavam
- License
- MIT
- Types
- extension
- Size
- 151.8 KB
- Dependencies
- 0 dependencies ยท 4 peers
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
โจ pi-fancy-footer
A pi extension that replaces the default footer with a compact, two-line fancy status footer.

๐ฆ Install
pi install npm:pi-fancy-footer
๐ What it shows
- Active model + thinking level
- Context window capacity and approximate usage
- Context usage bar with compaction reserve tail
- Total session cost
- Repo / path, branch, commit, open PR number, unresolved PR review threads, and PR CI status
- Git diff stats and ahead/behind status
๐ธ Screenshots
[!NOTE] Some screenshots include
pi-banner, which is now a separate extension.
๐ฎ Commands
/fancy-footer- open interactive footer config editor (small TUI)- settings are grouped into General, Built-in widgets, and Extension widgets sections
- built-in and 3rd-party widgets are listed directly (with icon prefixes)
- select a widget and press Enter for detailed settings
- in widget settings, adjust row/position/align/fill/min-width, visibility, icon hide, icon color, and text color
- use Enter/Space to cycle values
โ๏ธ Configuration
Create ~/.pi/agent/fancy-footer.json:
{
"refreshMs": 3000,
"iconFamily": "unicode",
"contextBarStyle": "blocks",
"defaultTextColor": "dim",
"defaultIconColor": "text",
"widgets": {
"context-bar": {
"align": "middle",
"row": 0,
"position": 0,
"fill": "grow",
"minWidth": 12
},
"total-cost": {
"enabled": false
},
"branch": {
"icon": "hide",
"textColor": "muted"
}
},
"extensionWidgets": {
"acme.build-status": {
"row": 1,
"position": 8,
"align": "right"
}
}
}
Top-level settings:
[!NOTE]
fancy-footer.jsonis validated strictly. Use only the documented keys and values. Invalid config falls back to defaults and logs a warning.
refreshMs(number)iconFamily(nerd|emoji|unicode|ascii)contextBarStyle(blocks|lines|circles|parallelograms|diamonds|bars|stars|specks)defaultTextColor(text|accent|muted|dim|success|error|warning)defaultIconColor(text|accent|muted|dim|success|error|warning)
Supported per-widget overrides for both widgets and extensionWidgets:
enabled(boolean)row(number)position(number, ordering within an aligned row group)align(left|middle|right)fill(none|grow)minWidth(number)icon(default|hide)iconColor(text|accent|muted|dim|success|error|warning)textColor(text|accent|muted|dim|success|error|warning)
Built-in widget IDs:
modelthinkingcontext-capacitycontext-barcontext-usagetotal-costlocationbranchcommitpull-requestpull-request-review-threadspull-request-ci-statusdiff-addeddiff-removedgit-status
3rd-party widget IDs are extension-defined and live under extensionWidgets.
๐งฉ Extension widgets
Other pi extensions can contribute fancy-footer widgets.
For users
- Contributed widgets appear in a separate Extension widgets section in
/fancy-footer. - Their overrides are stored in
extensionWidgetsinside~/.pi/agent/fancy-footer.json. - They use the same layout controls as built-in widgets, so you can mix and match them on any footer row.
For extension developers
If your extension depends on pi-fancy-footer, import the helper API from pi-fancy-footer/api:
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
import { contributeFancyFooterWidgets } from "pi-fancy-footer/api";
export default function (pi: ExtensionAPI) {
contributeFancyFooterWidgets(pi, {
id: "acme.build-status",
label: "Build status",
icon: {
nerd: "๓ฐจ",
emoji: "๐งช",
unicode: "โ",
ascii: "B",
},
row: 1,
order: 8,
align: "right",
render: () => "passing",
});
}
Available helpers:
defineFancyFooterWidget(widget)- identity helper for typing widget definitions.contributeFancyFooterWidgets(pi, widgetOrWidgets)- register one or more widgets for discovery.requestFancyFooterWidgetDiscovery(pi)- askpi-fancy-footerto re-discover contributed widgets.requestFancyFooterRefresh(pi)- ask the footer to re-render immediately.
Each contributed widget defines:
id- stable config key, ideally namespaced likevendor.widget-namerender(ctx, availableWidth?)- widget renderer; returnundefined,null,false, or an empty string to hide the widgetlabel- display name in/fancy-footer(defaults toid)description- help text in the config UI (defaults tolabel/id)row,order,align,grow, andminWidth- optional default layout controlsicon- a single icon, per-family icon map, function, orfalse- optional
textColorandstyled
๐ฃ Icon families
The following table shows the symbol used by each widget for each icon family.
For git-status, the table shows the rendered status symbols rather than a
leading widget icon.
[!NOTE] Some glyphs, especially in the
nerdfamily, may not render in your browser. If a cell looks blank or shows a replacement box, check the table in a terminal with the relevant font installed.
| Widget | nerd | emoji | unicode | ascii |
|---|---|---|---|---|
model |
๓ฐฉ |
๐ค |
โ |
% |
thinking |
๓ฐง |
๐ง |
โฆ |
? |
context-capacity |
๏ |
๐พ |
โก |
[] |
context-bar |
๓ฐพ |
๐ |
โง |
| |
context-usage |
๏ |
๐ |
โ |
~ |
total-cost |
๓ฐ |
๐ฒ |
$ |
$ |
location |
๏ |
๐ |
โ |
/ |
branch |
๏ |
๐ฟ |
โ |
* |
commit |
๏ |
๐ |
# |
# |
pull-request |
๏ |
๐ |
โ |
@ |
pull-request-review-threads |
๓ฐ
บ |
๐ฌ |
โ |
! |
pull-request-ci-status |
๏/๏/๏ |
โณ/โ/โ
|
โท/โ/โ |
~/x/+ |
diff-added |
โ |
โ |
+ |
+ |
diff-removed |
โ |
โ |
โ |
- |
git-status |
๏/๏/๏ฝ |
๐ผ/๐ฝ/๐ |
โ/โ/โ |
^/_/<> |
Notes:
- Most widgets use a leading icon.
context-barrenders a bar whose characters are controlled bycontextBarStyle, noticonFamily. Used cells are colored with the widget icon color; free and reserved cells stay dim.context-bargrows to fill the remaining horizontal space on its row, including on wide terminals.git-statususes symbols for ahead / behind / diverged status.pull-request-ci-statusis icon-only and uses symbols for running / failed / okay status. By default it uses semantic colors (warning / error / success); set this widget's icon color to override them.iconFamilylets you choose betweennerd,emoji,unicode, andasciipalettes.nerdkeeps the original Nerd Font look.emoji,unicode, andasciiwork better in terminals that don't use a Nerd Font.- Per-widget icon overrides only let you hide the icon. The selected
iconFamilycontrols which icon each widget uses. - The PR widgets appear only for open GitHub pull requests and rely on the
GitHub CLI (
gh) being available and authenticated. pull-request-review-threadscounts unresolved GitHub review threads on the current PR.pull-request-ci-statusshows GitHub Actions workflow runs for the current PR head commit. It links to the relevant run and switches to failed as soon as one workflow fails, even when other workflows are still running.- Reads compaction settings from:
~/.pi/agent/settings.json<project>/.pi/settings.json
๐งฑ Context bar styles
The contextBarStyle setting controls the characters used by the context-bar
widget. Each style defines three symbols for used, free, and reserved cells:
| Style | Used | Free | Reserved |
|---|---|---|---|
blocks (default) |
โ |
โก |
โจ |
lines |
โ |
โ |
โ |
circles |
โ |
โ |
โ |
parallelograms |
โฐ |
โฑ |
โฐ |
diamonds |
โ |
โ |
โ |
bars |
โ |
โ |
โ |
stars |
โ
|
โ |
โญ |
specks |
โข |
โฆ |
โข |