From pake
Wraps any website or local web build into a lightweight (~5MB) desktop app using Pake (Tauri/Rust). Handles CLI packaging, proxy config, icon/bundle ID customization, and JSON output for automation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pake:pakeThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Pake wraps any webpage or local web build into a native desktop app via Tauri (Rust + system WebView). Output is ~5MB (vs Electron's ~150MB).
Pake wraps any webpage or local web build into a native desktop app via Tauri (Rust + system WebView). Output is ~5MB (vs Electron's ~150MB).
"name": "pake-cli"): build once with pnpm run cli:build, then use node dist/cli.js.npm install -g pake-cli and run pake, or run without installing via npx pake-cli.All examples below use pake; substitute node dist/cli.js inside a checkout.
Pass --json on every automated run: logs move to stderr and stdout carries exactly one JSON result object.
pake "https://example.com" --name MyApp --json
# stdout -> {"ok":true,"name":"MyApp","platform":"darwin","arch":"arm64",
# "outputs":[{"path":"/abs/MyApp.dmg","sizeBytes":5242880,"format":"dmg"}],
# "warnings":[],"error":null}
--json (and any non-TTY stdin) disables every interactive prompt.
Exit codes: 0 success, 2 invalid input, 3 build failure, 4 missing environment or dependency setup failure, 1 unexpected. On failure error carries {code, message, hint}:
error.code | What to do |
|---|---|
INVALID_INPUT | Fix the flag, name, or config field named in message; hint states the accepted form |
ENV_MISSING | Environment setup needed (usually Rust); relay hint to the user, or install and rerun |
BUILD_FAILED | Rerun once with --debug for verbose logs; check platform notes below before changing anything |
NETWORK | Reserved, not emitted today; network failures arrive as ENV_MISSING or BUILD_FAILED instead |
UNEXPECTED | Report the message upstream; do not loop on retries |
On success, report outputs[].path to the user; that is the installer/bundle they need. On Linux multi-target builds, ok: true can carry fewer outputs than requested formats (failed targets land in warnings); check outputs[].format before declaring all formats built.
cat > app.json <<'EOF'
{
"$schema": "https://raw.githubusercontent.com/tw93/Pake/main/schema/pake.schema.json",
"url": "https://example.com",
"name": "MyApp",
"width": 1280,
"hideTitleBar": true
}
EOF
pake --config app.json --json
Fields are the camelCase CLI option names plus url; an explicit CLI flag wins over a config field. Unknown fields and wrong types fail fast with INVALID_INPUT.
For the full option list, run pake --help or read the schema above. Do not guess option names; the schema is the source of truth. Complete reference: https://github.com/tw93/Pake/blob/main/docs/cli-usage.md
Pake packages local web artifacts, not just URLs:
# A directory of static files (must contain index.html at its root)
pake ./dist --name MyTool --json
# A single HTML file
pake ./page.html --name MyPage --json
Hash-based routing works out of the box; history-mode SPA routing is not yet supported for local packaging.
Confirm with the user before building:
| Parameter | Why it matters |
|---|---|
| URL or local path | The target website or build output |
| Name | Becomes the .app / .exe name and productName |
Bundle ID (--identifier) | Defaults to com.pake.a{md5hash}; set explicitly for clean installs (e.g. com.pake.youtube) |
Proxy (--proxy-url) | Baked into the binary at build time; not runtime-configurable. Format: http://host:port or socks5://host:port |
| Icon | Auto-fetched from website if omitted; can be a local path or URL |
Pake auto-fetches icons from multiple services (logo.dev, brandfetch, clearbit, Google favicons, direct favicon.ico). However:
The icon download does NOT use --proxy-url. That flag only configures the packaged app's WebView proxy. If the icon URL requires a proxy to reach (e.g. Google/GitHub assets from China), download it manually first:
curl -x http://<proxy-host>:<proxy-port> -o /tmp/icon.png "<icon-url>" --connect-timeout 15 -s
pake "<URL>" --icon /tmp/icon.png --json
Icon tips:
.icns (macOS), .ico (Windows), .png (Linux)src-tauri/icons/<name>.icns is reused; rename or remove it to force re-fetchBuild takes ~40s with cache, ~2min cold; the very first build on a fresh machine compiles Tauri dependencies and can take 10+ minutes. After a successful build:
outputs[].pathmdls -name kMDItemCFBundleIdentifier <path-to>.app (macOS)| Platform | Status | Notes |
|---|---|---|
| Windows | Full | Via --proxy-server browser arg |
| Linux | Full | Via --proxy-server browser arg |
| macOS | macOS 14+ | Uses Tauri native macos-proxy feature; auto-detected at build time |
Not supported. Pake uses the system WebView (WKWebView on macOS, WebView2 on Windows, WebKitGTK on Linux), not a full Chrome browser. Use --inject to add custom JS/CSS as an alternative.
--new-window allows popup auth windows and --safe-domain keeps SSO callbacks in-app, but some providers (especially Google) block sign-in inside embedded webviews regardless of flags. Warn the user before promising OAuth support.
If an AppImage opens but clicks or keyboard input do not reach the page on a pure Wayland compositor (especially niri), first rebuild with the latest pake-cli, then try the native WebKit path:
PAKE_LINUX_WEBKIT_SAFE_MODE=0 ./YourApp.AppImage
If that produces a blank window on the same system, re-enable the conservative workaround with PAKE_LINUX_WEBKIT_SAFE_MODE=1. Do not diagnose this from GTK, appindicator, or GStreamer warnings alone; those are often unrelated optional runtime warnings.
npx claudepluginhub tw93/pake --plugin pakeConfigures Tauri v2 to package web frontends as native Android, Windows, macOS, and Linux apps. Handles builds, permissions, and native features like notifications and file system.
Guides desktop app development with Electron and Tauri — cross-platform apps for Windows, macOS, Linux using a single codebase.
Turns a finished or buildable web app into a macOS Dock-launchable .app that serves the built output with no dev server. Detects build command and output directory, builds once, serves via tiny static server or file://.