4 min read

Pake: Turn Any Website into a Desktop App (GitHub, Scanned)

Turn any website into a small native desktop app with one command, on macOS, Windows and Linux.

Pake logo
✅
Scan: safe. Nothing to warn about: no secrets, no suspicious patterns and no installer scripts, and the advisories sit in build and test tooling. Scanned Oct 26, 2026; the full report is below.

Pake wraps a website in its own desktop window. Give it a URL and a name and it builds a native app for macOS, Windows or Linux, with its own dock or taskbar icon, keyboard shortcuts for back, forward and zoom, and a window that remembers you. Because it is built on Rust and Tauri, which use the system's own web view instead of shipping a browser, the result is usually under 10 MB rather than the 100 MB-plus of an Electron wrapper.

It earns its place by being the easiest way to give a web tool you live in, such as ChatGPT, Notion, Excalidraw or YouTube Music, a home outside your browser tabs. The releases page has ready-made builds of popular sites, the pake-cli package builds anything else, and there is a GitHub Actions route for people who would rather not install a toolchain.

The limit is that the app is still the website. It needs the site to be online, logins happen inside the web view, and how well a site behaves depends on that site. The first local build also downloads the Rust toolchain and takes a while.

  • Repository: github.com/tw93/Pake
  • Licence: GPL-3.0 (GNU General Public License v3.0)
  • Language: Rust. Stars: 62.3K. Forks: 12.8K. Last push: Oct 26, 2026.
  • Scan: safe, Oct 26, 2026, commit a44f328

Who it is for

Anyone who keeps the same few web apps open all day and wants them as separate windows, and developers who want to ship a local web build as a lightweight desktop app.

Getting started

1. Install the CLI (needs Node; the first build sets up Rust)

pnpm install -g pake-cli

2. Package a website, fetching its icon automatically

pake https://github.com --name GitHub

3. Or set the window size and hide the title bar

pake https://weekly.tw93.fun --name Weekly --width 1200 --height 800 --hide-title-bar

No build tools? The README's Popular Packages table links prebuilt apps for ChatGPT, Gemini, Notion, YouTube and others on the releases page.

Safety scan

We cloned tw93/Pake at commit a44f328 on Oct 26, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • No secrets, no pattern hits, no committed binaries and no bare-IP URLs across about 39,000 lines of Rust and TypeScript.
  • The odd hostnames in the network list (evil.com, victim.example, a crypto exchange's site) come from tests/unit/event-link-guard.test.js, which checks how the app handles links and downloads on real-world pages.
  • The one build hook is src-tauri/build.rs, the standard Tauri build step. There are no npm install scripts.
  • 46 known advisories in total. The one critical is Vitest, the test runner, which never ships in a built app; the Rust side (src-tauri/Cargo.lock) has 6 high and 19 unrated, mostly in the Tauri dependency tree.
  • Six workflows, none using pull_request_target, and all 17 third-party actions pinned to a commit. Contributing guide and code of conduct present; no security policy, Dependabot or CodeQL.

What the scanner counted

CheckResult
SecretsNone found.
Suspicious codeNone found.
Install-time code1 Cargo build script
Committed binariesNone.
CI workflows6 workflows. None use pull_request_target. 0 of 17 third-party actions pinned to a tag rather than a commit.
Network hosts40 distinct hosts referenced from source; most often github.com, outside.example, mail.example.com, accounts.google.com. No URLs to bare IP addresses.
Known vulnerabilities65 advisories across 867 pinned packages: 1 critical, 19 high, 18 moderate, 8 low, 19 unrated. pnpm-lock.yaml: 300 packages, 30 advisories; src-tauri/Cargo.lock: 567 packages, 35 advisories.
Project hygieneHas licence file, contributing guide. Missing security policy, automated dependency updates, CodeQL.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

Worst known vulnerabilities (24 of 65)
AdvisorySeverityPackageSummary
GHSA-5xrq-8626-4rwpcriticalvitest@4.0.18When Vitest UI server is listening, arbitrary file can be read and executed
GHSA-28wg-ghj8-5hjvhighnanoid@3.3.11nanoid: non-secure generators can loop indefinitely with negative size
GHSA-2v37-7h3g-55p8highnanoid@3.3.11nanoid: custom generators can loop indefinitely when size is zero
GHSA-xwg4-73v4-xw9whighnanoid@3.3.11nanoid: Integer Overflow or Wraparound
GHSA-c2c7-rcm5-vvqjhighpicomatch@2.3.1Picomatch has a ReDoS vulnerability via extglob quantifiers
GHSA-c2c7-rcm5-vvqjhighpicomatch@4.0.3Picomatch has a ReDoS vulnerability via extglob quantifiers
GHSA-6g55-p6wh-862qhighpostcss@8.5.6PostCSS: Arbitrary file read and information disclosure via attacker-controlled sourceMappingURL in CSS comments
GHSA-r28c-9q8g-f849highpostcss@8.5.6PostCSS: Path Traversal in Previous Source Map Auto-Loading (sourceMappingURL) leads to Arbitrary .map File Disclosure
GHSA-5c6j-r48x-rmvqhighserialize-javascript@6.0.2Serialize JavaScript is Vulnerable to RCE via RegExp.flags and Date.prototype.toISOString()
GHSA-68fv-2mgg-jv7qhighsource-map-js@1.2.1source-map-js allows event-loop denial of service through indexed source-map section offsets
GHSA-587h-7wmj-h5pmhighvite@7.3.1launch-editor: `fs.existsSync()` existence check can be bypassed on Windows
GHSA-fx2h-pf6j-xcffhighvite@7.3.1vite: `server.fs.deny` bypass on Windows alternate paths
GHSA-p9ff-h696-f583highvite@7.3.1Vite Vulnerable to Arbitrary File Read via Vite Dev Server WebSocket
GHSA-v2wj-q39q-566rhighvite@7.3.1Vite: `server.fs.deny` bypassed with queries
RUSTSEC-2026-0194highquick-xml@0.37.5Quadratic run time when checking a start tag for duplicate attribute names
RUSTSEC-2026-0195highquick-xml@0.37.5Unbounded namespace-declaration allocation in `NsReader` enables memory-exhaustion denial of service
RUSTSEC-2026-0194highquick-xml@0.38.4Quadratic run time when checking a start tag for duplicate attribute names
RUSTSEC-2026-0195highquick-xml@0.38.4Unbounded namespace-declaration allocation in `NsReader` enables memory-exhaustion denial of service
GHSA-3g6h-r5qx-f6hqhighquinn-proto@0.11.15Peer minimum ACK delay can panic quinn-proto when ACK_FREQUENCY transmission is enabled
GHSA-qfwj-vfxf-92j2highquinn-proto@0.11.15Stream reassembly memory-exhaustion guard in quinn-proto can be bypassed
GHSA-82fw-gwwq-j7x9moderate@vitest/mocker@4.0.18Vitest: Path Traversal / Arbitrary File Read via @vitest/mocker Redirect Mock
GHSA-qxg6-89mg-rqv8moderate@vitest/mocker@4.0.18Vitest: Code injection via unauthenticated manual mock registration
GHSA-3v7f-55p6-f55pmoderatepicomatch@2.3.1Picomatch: Method Injection in POSIX Character Classes causes incorrect Glob Matching
GHSA-3v7f-55p6-f55pmoderatepicomatch@4.0.3Picomatch: Method Injection in POSIX Character Classes causes incorrect Glob Matching

By the numbers

Stars62.3K
Forks12.8K
Contributors99
Commits2,509
Open issues1
Open pull requests2
Releases57
Latest releaseV3.17.6
LicenceGPL-3.0
Main languageRust
Project age4 years
Last pushOct 26, 2026
Tracked files333
Lines of code39.1K
Checkout size19 MB

Lines by language: JavaScript 11.6K, TypeScript 11.2K, Rust 6,519, Markdown 6,504, YAML 1,884, JSON 1,247.

Questions

Is Pake free?

Yes. Pake is GPL-3.0, and a separate licence exception says the apps it produces are not themselves bound by the GPL, so you can distribute a packaged app under your own terms.

How is Pake different from Nativefier or an Electron app?

Pake uses Tauri, which renders with the operating system's own web view instead of bundling Chromium. That makes the apps much smaller and lighter on memory; the trade-off is that rendering follows the system browser engine, so a site can look slightly different on each platform.

Does Pake work offline?

Only as far as the website itself does. Pake gives the site a window and shortcuts; the content still loads from the web.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.