vastsa / PI-Desktop
TypeScript · GitHub Trending 9 Sep 2026 · 393 stars today
Four named parts in one sentence

Electron, Rust, a harness, and plugins. Every layer is somebody else's runtime.

Most desktop agents name one stack. This description names four, and the interesting one is last: user-installable plugins means third-party code runs inside a thing that already has a Rust core and a shell. Local-first raises the stakes on that, because everything it touches is on your disk.

The stack, as the description names itNamed parts only
04
pluginsUser-installable. Code from outside the project, running beside everything below it.
named
03
pi Agent HarnessThe loop. Named as a component rather than described.
named
02
Rust host coreWhere the work happens. Chosen for the reason people choose Rust for a host process.
named
01
ElectronThe shell. It brings a browser engine and full filesystem reach with it.
named
—
the boundary between themWhat a plugin can reach, and what stops it reaching further. Nothing in the sentence draws this line.
not named
local-first means the data is hereso is the plugin no permission model published

Local-first is the whole appeal

A coding agent that keeps the repository, the keys, and the history on your machine removes the question of what a service retains. It also puts every one of those things within reach of anything running locally.

Rust core plus Electron shell is a common split

The pattern gives you a fast host process and a UI toolkit people already know. Naming both tells a reader roughly where each kind of bug will live.

What is not on this page

No plugin API, no permission model, no sandbox, no install source. The trending description names four layers and no boundaries between them.

Concept mock, not affiliated with the project. The GitHub Trending description on 9 September 2026 reads "Local-first AI coding agent desktop: Electron + Rust host core + pi Agent Harness + user-installable plugins." The four layers are those four names, ordered bottom to top by where each sits in a desktop application. The fifth row is drawn as absent because that sentence describes no boundary, permission model, or sandbox, and this page does not invent one.