pi-zentui
A Starship-inspired statusline and Opencode-style TUI for Pi.
Package details
Install pi-zentui from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-zentui- Package
pi-zentui- Version
0.1.12- Published
- May 23, 2026
- Downloads
- 1,144/mo · 408/wk
- Author
- lmilojevic
- License
- MIT
- Types
- extension
- Size
- 97 KB
- Dependencies
- 0 dependencies · 3 peers
Pi manifest JSON
{
"extensions": [
"./extensions"
],
"image": "https://raw.githubusercontent.com/lmilojevicc/pi-zentui/main/assets/zentui.png"
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
Zentui
A Starship-inspired statusline and Opencode-style TUI for Pi.
Screenshots

What is this?
Zentui brings two popular aesthetics to Pi:
- Starship footer — shows your current directory, git branch, git status indicators, and runtime/version detection in a compact, icon-rich format
- Opencode editor — clean bordered input box with accent rail and model/provider display inside the editor frame
Features
Footer (Starship-inspired)
dirname— current directory with iconon branch— git branch with icon[!?↑]— git status indicators (modified, untracked, ahead/behind, stashed, etc.)via v5.5.0— runtime detection with version and Starship-style Nerd Font runtime/language modules- Right side shows context usage, token counts, and cost
- Third-party Pi extension statuses from
ctx.ui.setStatus()can be shown on the left, middle, or right side, or hidden per status key from/zentui
Editor (Opencode-inspired)
- Bordered input box with configurable accent rail and border colors
- Model name and provider displayed inside the editor frame
- Configurable model, provider, and thinking-level indicator colors
- Prompt-box-style user messages matching the ZentUI input chrome
Git Status Icons
| Icon | Meaning |
|---|---|
! |
Modified |
? |
Untracked |
+ |
Staged |
✘ |
Deleted |
» |
Renamed |
= |
Conflicted |
$ |
Stashed |
↑ |
Ahead |
↓ |
Behind |
⇕ |
Diverged |
Runtime Detection
Detects Starship Nerd Font runtime/language modules, uses the Starship Nerd Font symbols, and keeps Starship-style defaults such as bold green for Node.js. By default Zentui maps those styles through your active Pi theme; switch the Starship/footer color source to terminal in /zentui if you want your terminal colorscheme to supply the exact ANSI colors.
| Runtime/language | Detection examples |
|---|---|
| Buf | buf.yaml, buf.gen.yaml, buf.work.yaml |
| Bun | bun.lock, bun.lockb |
| C | .c, .h files |
| C++ | .cpp, .cc, .cxx, .hpp files |
| CMake | CMakeLists.txt, CMakeCache.txt |
| COBOL | .cbl, .cob files |
| Conda | CONDA_DEFAULT_ENV environment |
| Crystal | .cr files, shard.yml |
| Dart | .dart files, pubspec.yaml, .dart_tool/ |
| Deno | deno.json, deno.jsonc, deno.lock |
| .NET | .csproj, .fsproj, global.json, Directory.Build.* |
| Elixir | mix.exs |
| Elm | .elm files, elm.json, elm-stuff/ |
| Erlang | rebar.config, erlang.mk |
| Fennel | .fnl files |
| Fortran | .f, .f90, .f95, .f03, .f08, .f18, fpm.toml |
| Gleam | .gleam files, gleam.toml |
| Go | go.mod |
| Gradle | build.gradle, build.gradle.kts, gradle/ |
| Guix shell | GUIX_ENVIRONMENT environment |
| Haskell | .hs, .cabal, stack.yaml, cabal.project |
| Haxe | .hx, .hxml, haxelib.json, .haxerc |
| Helm | helmfile.yaml, Chart.yaml |
| Java | .java-version |
| Julia | .jl files, Project.toml, Manifest.toml |
| Kotlin | .kt, .kts files |
| Lua | .lua files, stylua.toml, .luarc.json, lua/ dir |
| Maven | pom.xml |
| Meson | MESON_DEVENV=1 and MESON_PROJECT_NAME environment |
| Mojo | .mojo files |
| Nim | .nim, .nims, .nimble, nim.cfg |
| Nix shell | IN_NIX_SHELL=pure or IN_NIX_SHELL=impure environment |
| Node.js | package.json, .nvmrc, .node-version |
| OCaml | .opam, .ml, .mli, dune, _opam/, esy.lock/ |
| Odin | .odin files |
| OPA/Rego | .rego files |
| Perl | .pl, .pm, Makefile.PL, cpanfile, META.* |
| PHP | composer.json |
| Pixi | pixi.toml, pixi.lock, PIXI_ENVIRONMENT_NAME environment |
| Pulumi | Pulumi.yaml, Pulumi.yml |
| PureScript | .purs files, spago.dhall, spago.yaml, spago.lock |
| Python | pyproject.toml, requirements.txt, setup.py, Pipfile |
| R | .R, .Rmd, .Rproj, DESCRIPTION, .Rproj.user/ |
| Raku | .raku, .rakumod, .p6, .pm6, META6.json |
| Red | .red, .reds files |
| Ruby | Gemfile, .ruby-version |
| Rust | Cargo.toml |
| Scala | .scala, .sbt, build.sbt, .metals/ |
| Solidity | .sol files |
| Spack | SPACK_ENV environment |
| Swift | .swift files, Package.swift |
| Terraform | .tf, .tfplan, .tfstate, .terraform/ |
| Typst | .typ files, template.typ |
| Vagrant | Vagrantfile |
| V | .v files, v.mod, vpkg.json |
| Xmake | xmake.lua |
| Zig | .zig files, build.zig |
Install
# From npm
pi install npm:pi-zentui
# From git
pi install git:github.com/lmilojevicc/pi-zentui
Config
User config lives at ~/.pi/agent/zentui.json. The file is optional: missing or invalid known values fall back to Zentui defaults, unknown keys are ignored at runtime, and /zentui can patch color-source settings plus active third-party status placements.
Default config values — copy this and change any value you want:
{
"projectRefreshIntervalMs": 30000,
"icons": {
"cwd": "",
"git": "",
"ahead": "↑",
"behind": "↓",
"diverged": "⇕",
"conflicted": "=",
"untracked": "?",
"stashed": "$",
"modified": "!",
"staged": "+",
"renamed": "»",
"deleted": "✘",
"typechanged": "T"
},
"colors": {
"cwd": "bold cyan",
"gitBranch": "bold purple",
"gitStatus": "bold red",
"contextNormal": "bright-black",
"contextWarning": "bold yellow",
"contextError": "bold red",
"tokens": "bright-black",
"cost": "bold green",
"extensionStatus": "bright-black",
"separator": "bright-black",
"runtimePrefix": "",
"editorAccent": "accent",
"editorBorder": "borderMuted",
"editorModel": "accent",
"editorProvider": "text",
"editorThinking": "muted",
"editorThinkingMinimal": "thinkingMinimal",
"editorThinkingLow": "thinkingLow",
"editorThinkingMedium": "thinkingMedium",
"editorThinkingHigh": "thinkingHigh",
"editorThinkingXhigh": "thinkingXhigh"
},
"colorSources": {
"starship": "theme",
"editor": "theme",
"userMessages": "theme"
},
"extensionStatuses": {
"defaultPlacement": "right",
"placements": {}
}
}
- Style values can be Starship/terminal strings (
bold purple,fg:202,#89b4fa,bg:blue fg:bright-green) or Pi theme tokens (accent,borderMuted,thinkingHigh). projectRefreshIntervalMs: project status polling interval;0disables polling.icons: every shown icon key is configurable; omit any key to use the Zentui default.colorSources:thememaps styles through Pi theme tokens;terminalemits terminal colors./zentuiswitches these sources; manual JSON controls specific style values.extensionStatuses: controls third-party statuses published by other Pi extensions throughctx.ui.setStatus().defaultPlacementand eachplacementsvalue can beoff,left,middle, orright./zentuilists only statuses that are currently active.- The shown
editor*values match the defaultthemesource. Omit those keys to keep Zentui's source-aware defaults when switching betweenthemeandterminal. editorAccentstyles the active editor rail and previous user-message rail.editorBorderstyles the active editor and previous user-message top/bottom border color only; the border glyph stays─.editorModel,editorProvider, andeditorThinking*style the editor metadata.editorThinkingapplies to every non-offthinking level unless a level-specific key is set.
Requirements
Development
npm install
npm run verify
npm run fmt
npm run pack:check
Test in Pi
The project keeps Pi core packages as peer dependencies for runtime and dev dependencies for
typechecking. To avoid accidentally running the local node_modules/.bin/pi shim, the dev scripts use
the globally installed Pi binary by default:
npm run pi:dev
npm run pi:install-local
Override the binary if your Pi install is somewhere else:
PI_BIN=/path/to/pi npm run pi:dev
Credits
Inspired by:
- Starship — the minimal, blazing-fast, and infinitely customizable prompt
- Opencode — terminal-based AI coding assistant
License
MIT