{"id":51590564,"url":"https://github.com/bentimor/powerui","last_synced_at":"2026-07-11T14:02:43.935Z","repository":{"id":367558934,"uuid":"1281269964","full_name":"BenTimor/PowerUI","owner":"BenTimor","description":"OSS UI for AI power users.","archived":false,"fork":false,"pushed_at":"2026-07-05T08:00:08.000Z","size":723,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-07-05T10:03:21.715Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BenTimor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-26T11:40:53.000Z","updated_at":"2026-07-05T08:00:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/BenTimor/PowerUI","commit_stats":null,"previous_names":["bentimor/powerui"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BenTimor/PowerUI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenTimor%2FPowerUI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenTimor%2FPowerUI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenTimor%2FPowerUI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenTimor%2FPowerUI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BenTimor","download_url":"https://codeload.github.com/BenTimor/PowerUI/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenTimor%2FPowerUI/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35364269,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-11T02:00:05.354Z","response_time":104,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-11T14:02:43.005Z","updated_at":"2026-07-11T14:02:43.905Z","avatar_url":"https://github.com/BenTimor.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PowerUI\n\nA power-user desktop chat app for open-source and OpenAI-compatible models.\nThink \"Codex Desktop / ChatGPT Desktop, but for any provider you bring.\"\n\nPowerUI is built with **Tauri 2.0** (Rust + system webview), **React + Vite +\nTypeScript**, **Tailwind v4 + shadcn/ui**, and **SQLite** for local\npersistence. It talks to any endpoint that implements the OpenAI-compatible\nAPI (`/v1/models` + `/v1/chat/completions`) — Ollama, LM Studio, OpenRouter,\nGroq, vLLM, OpenAI, and more.\n\n## Features\n\n- **Chats** — create, rename, delete chats from a left sidebar. Titles\n  auto-derive from your first message.\n- **Per-chat provider + model** — pick a provider and model for each chat\n  from a searchable popover; supports cached model dropdowns and free-text\n  custom model ids.\n- **Providers** — configure any number of OpenAI-compatible providers\n  (name, base URL, API key). Models are fetched automatically and cached.\n- **MCP servers** — add stdio Model Context Protocol servers and choose\n  whether their tools are available to the chat manager, coding sub-agents, or both.\n- **Streaming** — responses stream token-by-token with markdown rendering\n  (code blocks, lists, tables via GFM). Stop button to abort mid-stream.\n- **Dark-first UI** — clean, keyboard-friendly, no telemetry.\n\n## Getting started\n\n### Prerequisites\n\n- [Node.js](https://nodejs.org/) 20+\n- [Rust](https://www.rust-lang.org/tools/install) (stable)\n- Tauri 2 system dependencies — see the\n  [Tauri prerequisites](https://v2.tauri.app/start/prerequisites/)\n\n### Run in development\n\n```bash\ncd powerui\nnpm install\nnpm run tauri dev\n```\n\n### Build a production binary\n\n```bash\nnpm run tauri build\n```\n\nThe installer / executable appears under `src-tauri/target/release/bundle/`.\n\n### Host a remote PowerUI server\n\nPowerUI can run local-first, or sync chats/configuration through a small VPS\nserver so multiple machines can continue the same workspaces.\n\n```bash\ncd powerui\nPOWERUI_SERVER_TOKEN='change-me' npm run server\n```\n\nExpose the server behind HTTPS (for example with Caddy/Nginx) and connect from\nthe desktop app via **Remote server** in the sidebar. The server stores its JSON\nstate in `powerui-server-data.json` by default; set `POWERUI_SERVER_DATA` to\nchange that path. Synced clients share providers, model preferences, chats,\ntasks, sub-agents, run traces, MCP configuration, and app settings. Each device\nkeeps a machine id/name, and chats show an indicator when their last activity\nwas on another machine so agents know to verify local files/processes before\ncontinuing.\n\n### Android APK builds\n\nPowerUI uses the same React/Tauri codebase for desktop and Android.\n\n```bash\nnpm run android:init   # one-time; creates src-tauri/gen/android/\nnpm run android:dev\nnpm run android:build:apk\nnpm run android:sign:debug # signs the generated unsigned APK for sideloading\n```\n\n`tauri android build --apk` can emit `app-universal-release-unsigned.apk` when\nrelease signing is not configured. Android will reject that file as an invalid\npackage. For quick device testing, install `dist/powerui-android-debug-signed.apk`\nafter running `npm run android:sign:debug`, or use\n`npm run android:build:apk:debug-signed` to build and sign in one step. Use a\nreal release keystore before distributing publicly.\n\nAndroid builds use `src-tauri/tauri.android.conf.json` and the mobile\ncapability set. Stdio MCP servers and arbitrary workspace folders are\ndesktop-only for now; chat, providers, model selection, HTTP APIs, SQLite\nhistory, and remote server sync use shared code.\n\n## Using it\n\n1. Open **Providers \u0026 models** (bottom of the sidebar, or the model selector).\n2. Add a provider. Some presets are pre-filled (Ollama, OpenRouter, Groq,\n   OpenAI, LM Studio). Models are fetched on save. For a local Ollama\n   install, just use `http://localhost:11434` with no API key.\n3. Start a new chat. Pick a model from the selector in the top bar.\n4. Type a message and press **Enter** (Shift+Enter for a newline).\n\n## Project structure\n\n```\npowerui/\n├── src/                          # Frontend (React + TS)\n│   ├── components/\n│   │   ├── ui/                   # shadcn/ui primitives\n│   │   ├── chat/                 # Sidebar, ChatView, ModelSelector, MessageBubble\n│   │   └── provider/             # ProviderSettingsDialog\n│   ├── stores/                   # zustand stores (chats, providers)\n│   ├── lib/\n│   │   ├── db.ts                 # typed SQLite wrapper (tauri-plugin-sql)\n│   │   ├── api/openai.ts         # OpenAI-compatible client (models + streaming)\n│   │   └── utils.ts\n│   ├── types/index.ts\n│   ├── App.tsx\n│   └── main.tsx\n└── src-tauri/\n    ├── migrations/001_init.sql   # DB schema\n    ├── capabilities/default.json # Tauri permissions (http + sql scopes)\n    └── src/lib.rs                 # Plugin + migration registration\n```\n\n## Tech notes\n\n- **Storage** — SQLite via `tauri-plugin-sql`, with a migration registered in\n  Rust (`src-tauri/src/lib.rs`). The DB file lives in the app data directory\n  as `powerui.db`.\n- **Networking** — HTTP goes through `tauri-plugin-http`'s `fetch`, which\n  bypasses browser CORS and supports streaming `ReadableStream` bodies. The\n  capability grants `http://**` and `https://**` so you can point at any host.\n- **Streaming** — server-sent events from `/v1/chat/completions` are parsed\n  incrementally; deltas update the assistant message live and are persisted\n  at the end (and on stop).\n\n## Roadmap\n\nThis is the initial slice. Planned next:\n\n- System prompts \u0026 conversation parameters (temperature, max tokens)\n- Model metadata (context length, pricing)\n- Multi-message editing / regeneration\n- Coding-agent mode (this is where PI agents may plug in)\n- Export / import chats\n- Light theme toggle\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbentimor%2Fpowerui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbentimor%2Fpowerui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbentimor%2Fpowerui/lists"}