Prepare GitHub alpha launch (README, CI, tests, release workflow)
This commit is contained in:
196
README.md
Executable file
196
README.md
Executable file
@@ -0,0 +1,196 @@
|
||||
<h1 align="center">deskify</h1>
|
||||
|
||||
<p align="center">
|
||||
<b>A blazing fast, lightweight Nativefier alternative written in Rust & Tauri.</b><br>
|
||||
Instantly turn any website or web app into a native, standalone Linux desktop application.
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/OS-Linux-blue?style=flat-square" alt="Linux only" />
|
||||
<img src="https://img.shields.io/badge/Language-Rust-orange?style=flat-square" alt="Written in Rust" />
|
||||
<img src="https://img.shields.io/badge/Powered_by-Tauri_v2-grey?style=flat-square" alt="Tauri v2" />
|
||||
<img src="https://img.shields.io/badge/Status-Alpha-yellow?style=flat-square" alt="Alpha status" />
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
## ⚡ 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 <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`:
|
||||
```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).
|
||||
Reference in New Issue
Block a user