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.
⚡ Why deskify?
The original 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. 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:
deskifycompiles 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
deskifyitself 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
.desktopentries in~/.local/share/applicationsand manages application icons in~/.local/share/icons/hicolor/. - Wayland/X11 Ready: Perfectly binds
StartupWMClassto 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:
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:
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.)
2. Rust & Tauri CLI
You'll need the Rust compiler and the Tauri CLI to compile the generated apps.
# 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:
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.
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
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 <PATH>: Provide a custom PNG icon instead of auto-downloading one.--fullscreen: Starts the app in Kiosk mode.--user-agent <UA>: Useful to bypass webview restrictions on certain platforms.--dark-mode: Forces the Tauri webview into a dark theme.--width <PX>/--height <PX>: Sets the startup resolution.
Managing Apps (list & remove)
You can view all applications generated by deskify:
deskify list
Output:
Installed Deskify Apps:
- ChatGPT (Internal ID: chatgpt)
- Netflix (Internal ID: netflix)
To entirely uninstall an app (including the binary, desktop entry, and icons):
deskify remove chatgpt
remove expects this internal ID (sanitized lowercase letters, numbers, -), not the display name.
🧪 Manual Smoke Test Checklist (Before a Public Release)
deskify build --url "https://example.com" --name "Example"
deskify list
deskify remove example
Also test invalid IDs:
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 - The core framework driving the native wrap.
- Clap - Command-Line Argument Parser for Rust.
- Anyhow - Excellent error handling context.
- Ureq - Minimalist sync HTTP request library (used for icon fetching).
- Directories - Abstractions for standard OS directories (XDG Base Dirs).
📝 License
This project is licensed under the MIT License.