One question wide
No project picker, no setup wizard, no tour — just a composer and Ponpoko. You type, and the app grows from there.
Ponpoko is a quiet chat app — a companion who starts as nothing and becomes whatever the work needs. Chat is built in. Every other screen is a surface you install.
Apple Silicon (arm64) · macOS · free download · updates in-app
curl -fsSL https://ponpoko.app/install.sh | bash
There is no project to pick and no setup wizard. The window opens on a conversation, and the composer is the whole front door. You say what you want in your own words — Ponpoko answers with the model you chose.
No project picker, no setup wizard, no tour — just a composer and Ponpoko. You type, and the app grows from there.
Nine tools, and nothing else: list, read, scaffold, install, call and remove surfaces, read and set palettes, and see which screen you are looking at. Bounded at eight tool rounds a message and 16 KiB a result.
Every tool call becomes a tool row: its name, whether it worked,
one line about what happened, and the answer. A transcript is plain rows you
can search, export and delete.
A surface is a screen inside Ponpoko. It is a folder with a
surface.json at its root, a page, and — if it needs one — its own
backend process. The host draws the tab; the surface never holds authority.
A real programming editor, not a preview: explorer, tabs with scroll memory, highlighting, quick open, a command palette, search and replace, per-language formatting, previews, and go-to-definition over a static index.
A real terminal whose tabs are shell child processes on real PTYs, started and stopped by its own backend. It has its own command line too, for the same methods without an app in between.
The manifest is parsed closed-world: an unknown field, permission, nav
slot or icon fails the whole install. The permission vocabulary is exactly
two verbs — tool.file and backend.call — and the
bridge a surface may speak is the same two. There is no third.
{
"id": "editor",
"name": "Editor",
"version": "1.0.0",
"entry": "index.html",
"permissions": ["tool.file", "backend.call"],
"methods": ["fs.read", "fs.write", "workspace.search"]
}
Trust, plainly. An installed surface is code you chose to install. It runs as you, with your rights. There is no sandbox — Ponpoko cannot see inside a surface and does not mediate what it does. The install screen says this before you install.
Conversations, prompts, palettes and installed surfaces live in one SQLite database under your app data folder. Installed surfaces are copied into the app's own folder, never into a project you are working in.
Chat calls go from Rust straight to the provider you configured; the webview
never holds the key. Credentials are one plaintext file per provider
(0600) inside the app data folder. That is not the OS keychain,
and the settings window says exactly that.
Threads, prompts and palettes are plain rows in one SQLite database: searchable, renameable, exportable to Markdown, deletable. A text file you attach is read once, capped at 256 KiB, and stored with the turn.
A database this build does not recognise — corrupt, empty, or written by a newer version — is renamed aside and kept, never removed; a fresh one opens in its place. Upgrades run in a transaction. An existing installation is moved once, on first launch, with its transcripts and keys together.
Ponpoko itself talks to two places: the provider you chose, when you send a
message, and the signed update check at ponpoko.app. There is no
account and no analytics SDK in the app.
The awkward parts, in the same voice as the rest. A short page is only honest if it says them too.
Ponpoko.app into /Applications and clears the quarantine flag; in-app updates are verified with minisign.Generated from the repository's commits at release time. If it is not committed, it cannot appear here.
Apple Silicon, macOS. Use the button or the script — both fetch the same release from ponpoko.app.
curl -fsSL https://ponpoko.app/install.sh | bash
The script reads latest.json, downloads the arm64 disk image, copies Ponpoko.app into /Applications, clears the quarantine flag, and opens it.