deskify

A blazing fast, lightweight Nativefier alternative written in Rust & Tauri.
Instantly turn any website or web app into a native, standalone Linux desktop application.

Linux only Written in Rust Tauri v2 Alpha status

--- ## โšก Why deskify? The original [Nativefier](https://github.com/nativefier/nativefier) project (Node.js/Electron) was an incredible tool, but it is now unmaintained and deprecated. Furthermore, packaging an entire Chromium V8 engine for *every single web app* you create consumes massive amounts of RAM and disk space. **deskify** solves this by leveraging [Tauri](https://tauri.app/). Instead of bundling a heavy browser engine, it uses your native system webview (e.g., `webkit2gtk` on Linux). ## ๐Ÿšง Project Status (Alpha / Early MVP) `deskify` is ready for public use and testing as an **early MVP**, but it is **not production-hardened yet**. - **Platform scope:** Linux only - **Build model:** `deskify` compiles a local Tauri wrapper app on your machine - **First build can take a while:** Rust crates + Tauri build steps may need to compile - **Test coverage:** currently limited (core behavior is implemented, but automated coverage is still growing) ### Known Limitations - Requires Tauri/Linux system dependencies to be installed locally before `deskify build` - Generated app build success can vary by distro/system setup (WebKitGTK/Tauri prerequisites) - No official cross-platform support (Windows/macOS) yet - GitHub Releases / binary automation for `deskify` itself may lag behind source updates during early MVP ### ๐ŸŒŸ Features - **Extremely Lightweight:** Generated binaries are tiny (~4-6 MB) and RAM consumption is minimal. - **Automatic Icon Fetching:** Scrapes high-quality 128x128 favicons automatically using the Google Favicon API. - **XDG-Compliant System Integration:** Safely creates `.desktop` entries in `~/.local/share/applications` and manages application icons in `~/.local/share/icons/hicolor/`. - **Wayland/X11 Ready:** Perfectly binds `StartupWMClass` to ensure your DE groups the app exactly to its custom icon (no generic gear icons in GNOME/KDE taskbars). - **Kiosk / Fullscreen Mode:** Pin applications perfectly as dashboards. - **User-Agent Spoofing:** Trick picky sites (like WhatsApp Web) into working within the webview. - **Clean App Management:** Effortlessly list and remove created apps without leaving orphaned files behind. --- ## ๐Ÿš€ Installation ### 1. System Dependencies Because `deskify` compiles Tauri applications natively on your machine, you need the standard Tauri prerequisites installed before using it. On **Ubuntu / Debian**: ```bash sudo apt update sudo apt install libwebkit2gtk-4.1-dev \ build-essential \ curl \ wget \ file \ libssl-dev \ libgtk-3-dev \ libayatana-appindicator3-dev \ librsvg2-dev ``` On **Arch Linux / Manjaro**: ```bash sudo pacman -S webkit2gtk-4.1 \ base-devel \ curl \ wget \ file \ openssl \ appmenu-gtk-module \ gtk3 \ libappindicator-gtk3 \ librsvg \ libvips ``` *(For Fedora or other distros, refer to the [Tauri Prerequisites Guide](https://v2.tauri.app/start/prerequisites/).)* ### 2. Rust & Tauri CLI You'll need the Rust compiler and the Tauri CLI to compile the generated apps. ```bash # Ensure Rust is installed curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Install Tauri-CLI globally cargo install tauri-cli --version "^2.0.0" ``` ### 3. Install deskify Clone the repository and install it directly via Cargo: ```bash git clone https://github.com/spalencsar/deskify.git cd deskify cargo install --path . ``` --- ## ๐Ÿ› ๏ธ Usage ### Creating an App (`build`) The `build` subcommand requires a `--url` and a `--name`. ```bash deskify build --url "https://chatgpt.com" --name "ChatGPT" ``` Once the build finishes, `ChatGPT` will instantly appear in your system Application Launcher (e.g., Rofi, Wofi, GNOME Dash). `deskify` derives a safe internal ID from the app name (for example, `ChatGPT` becomes `chatgpt`). #### Advanced Build Options ```bash deskify build \ --url "https://netflix.com" \ --name "Netflix" \ --fullscreen \ --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36" \ --dark-mode \ --width 1280 \ --height 720 ``` * `--icon `: Provide a custom PNG icon instead of auto-downloading one. * `--fullscreen`: Starts the app in Kiosk mode. * `--user-agent `: Useful to bypass webview restrictions on certain platforms. * `--dark-mode`: Forces the Tauri webview into a dark theme. * `--width ` / `--height `: Sets the startup resolution. ### Managing Apps (`list` & `remove`) You can view all applications generated by `deskify`: ```bash deskify list ``` *Output:* ```text Installed Deskify Apps: - ChatGPT (Internal ID: chatgpt) - Netflix (Internal ID: netflix) ``` To entirely uninstall an app (including the binary, desktop entry, and icons): ```bash deskify remove chatgpt ``` `remove` expects this **internal ID** (sanitized lowercase letters, numbers, `-`), not the display name. --- ## ๐Ÿงช Manual Smoke Test Checklist (Before a Public Release) ```bash deskify build --url "https://example.com" --name "Example" deskify list deskify remove example ``` Also test invalid IDs: ```bash deskify remove ../foo deskify remove FooBar ``` Expected: clean validation error and no unintended file deletion. --- ## ๐Ÿท๏ธ Versioning & GitHub Releases (MVP) - Recommended tag format during MVP: `v0.1.0-alpha.N` - Start with **source-first** releases (repository + tags) - Add automated binary releases later via GitHub Actions For the first public launch, tagging `v0.1.0-alpha.1` is a sensible default. --- ## ๐Ÿ“ฆ Open Source Acknowledgements `deskify` is built on the shoulders of giants. It leverages the following fantastic open-source projects: * **[Tauri](https://tauri.app/)** - The core framework driving the native wrap. * **[Clap](https://crates.io/crates/clap)** - Command-Line Argument Parser for Rust. * **[Anyhow](https://crates.io/crates/anyhow)** - Excellent error handling context. * **[Ureq](https://crates.io/crates/ureq)** - Minimalist sync HTTP request library (used for icon fetching). * **[Directories](https://crates.io/crates/directories)** - Abstractions for standard OS directories (XDG Base Dirs). ## ๐Ÿ“ License This project is licensed under the [MIT License](LICENSE).