@xzzpig/pi-starline

A Starship-inspired statusline and Opencode-style TUI for Pi.

Packages

Package details

extension

Install @xzzpig/pi-starline from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:@xzzpig/pi-starline
Package
@xzzpig/pi-starline
Version
0.2.0
Published
Sep 5, 2026
Downloads
281/mo · 185/wk
Author
xzzpig
License
MIT
Types
extension
Size
449.6 KB
Dependencies
0 dependencies · 3 peers
Pi manifest JSON
{
  "image": "https://raw.githubusercontent.com/Andy8647/pi-starline/main/assets/starline.png",
  "extensions": [
    "./extensions"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

Starline

A Starship-inspired statusline, Opencode-style editor chrome, and fullscreen mouse control for Pi.

Starline is a fork of pi-zentui by Luka, renamed and released on its own. It has diverged well past upstream and adds a pill footer style, a colour palette with $ref expansion, model/thinking footer segments, a git host icon, per-segment display options, configurable editor cursor styles, and mouse selection and copying.

Screenshots

Starline

What is this?

Starline makes Pi's fullscreen mode feel like a finished terminal app — three pieces of one product, not a theme:

  • See the state — a Starship-inspired statusline and pill footer: current directory, git branch and status, runtime/version detection, context usage and token counts in a compact, icon-rich format
  • Type comfortably — Opencode-style editor chrome: a clean bordered input box with accent rail and copy-friendly mode, model and provider inside the frame, paste collapse, and a ctrl+g hint pointing at your $EDITOR when a draft outgrows the box
  • Drive with the mouse — fullscreen mouse control: select and copy anywhere, click a tool box to expand just it, click to move the caret, wheel to scroll the draft — see Mouse

Features

Footer (Starship-inspired)

  • dirname — current directory (basename by default; optional full path with directory depth via pathDisplay)
  • on 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
  • Optional segments (off by default): session name, user@host, current time, OS icon, session duration, and the project package version (e.g. package.json0.6.0) — distinct from the runtime segment, which shows the installed toolchain
  • Right side shows context usage, token counts, and cost
  • Built-in footer segments can be shown or hidden individually from /starline
  • Fully custom Starship-style layout via a footerFormat template string — see Footer Format Template
  • 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 /starline

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 Starline input chrome
  • Copy-friendly mode hides editor and previous-message rail glyphs so terminal selection copies less chrome

Mouse (fullscreen control)

The second half of the product: the statusline tells you where you are, the mouse lets you act on what you see. Starline drives Pi 0.84's own renderer (tuiMode: "fullscreen") by patching its methods directly — the extension API stops at high-level hooks, and the selection hint, click-to-expand and clean-copy all need to reach into the renderer itself. That is also why they live in Starline: they sit on the same prototype patches the footer and editor already use, and Pi keeps its core deliberately minimal — behaviours belong in extensions.

  • Select and copy anywhere. Drag to select in the transcript or the input box; double-click a word (paths and kebab-case stay whole), triple-click a line. Releasing copies — or set Pi's fullscreenCopyOnSelect: false and the selection stays highlighted, waiting for the copy key (Pi #7720, shipped in Pi 0.84.4).
  • Clean copies. Transcript selections drop Starline's rails, rule rows and pi-toolbox frame borders before they reach the clipboard; editor selections copy the draft's text, not the painted rows.
  • Selection hint. A selection that is not auto-copying shows exactly how many characters the copy key (ctrl+x by default, whatever app.message.copy is bound to) will copy, and a selection inside the editor names your editor — ctrl+g to edit in nvim.
  • Click to expand one tool box. A click on a box's hint row expands just that box (MCP boxes included), and the (ctrl+o to collapse) anchor row closes it again.
  • Click to move the caret in the input box; backspace/delete remove a selected range; the wheel scrolls the draft over the input box, and a draft taller than the box keeps the ctrl+g external-editor hint on screen.

0.2.x's fixedEditor config block was renamed to mouse (migrated automatically, see the changelog); the fixed editor itself is gone, superseded by Pi's fullscreen mode.

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 Starline maps those styles through your active Pi theme; switch the Starship/footer color source to terminal in /starline 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

Starline drives Pi 0.84's alternate-screen renderer, so it needs Pi ≥ 0.84.4. If you are on a distribution that bundles an older Pi, upgrade it or wait for it to catch up.

# From npm (local fork @xzzpig/pi-starline)
pi install npm:@xzzpig/pi-starline

# From upstream git
pi install git:github.com/Andy8647/pi-starline

Coming from pi-zentui? Run mv ~/.pi/agent/zentui.json ~/.pi/agent/starline.json to carry your config over — Starline does not read the old file automatically. Inside it, rename any colorMode: "zentui" value to colorMode: "themed".

What changed in each version, and what you need to do about it: Changelog.

Config

Settings live in ~/.pi/agent/starline.json. The file is optional — anything missing falls back to a default, and unknown keys are ignored at runtime.

{
	"footerStyle": "pill",
	"colors": { "gitBranch": "bold purple" },
	"mouse": { "clickToExpandTools": false }
}

/starline opens an interactive menu for the settings worth changing day to day: colour sources, feature toggles, which built-in segments show, and where third-party extension statuses go. Tab and Shift+Tab move between its five sections.

Full configuration reference → — every option with its default: the pill footer, the colour palette and its $name references, footer format templates, per-segment display options, icon overrides, and editor styling.

Requirements

  • Pi coding agent 0.84.4 or newer
  • A Nerd Font for icons (or set icons.mode to "ascii")

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

Forked from pi-zentui by Luka, whose work is the foundation of this project.

Inspired by:

  • Starship — the minimal, blazing-fast, and infinitely customizable prompt
  • Opencode — terminal-based AI coding assistant

License

MIT