Skip to content
 
 

Repository files navigation

cloudy-af

License: GPL v3

The project is Cloudy AF (originally Arcticfox Config), a Linux desktop configuration utility for vape battery mods that run the ArcticFox firmware. It is a community fork that modernizes the decade-old Electron-based app into a Tauri desktop application, packaged as a Flatpak.

This fork reworks hobbyquaker's Electron-based Linux/macOS project as a Rust Tauri desktop app, packaging it as a sandboxed Flatpak image for Linux, permission-controllable (through Flatseal), because current npm is a minefield, Wine USB passthrough is a headache, and so is creating Windows VMs. The fork also adds quality-of-life improvements such as window scaling, an eternally dark UI, Freedom Unit selection that works (original defaulted to Celsius and capped F at 400), Autofire as a multi-click/shortcut option, device auto-reconnect, and a "Lite" appearance mode for small devices.

demo Screenshot Screenshot_

Download / Install

Linux Build Images (Flatpak, Appimage)

Pre-built Flatpak bundle is available on the releases page and in the local builds/ directory after running the build scripts.

Or click here for a direct link.

Portable Appimage binary also provided on the releases page. Installable .deb and .rpm files can be found there as well. And in the local builds/ directory after running the build scripts.

Install from the '.flatpak' bundle after downloading

flatpak install --user ~/Downloads/cloudy-af.flatpak

Install from the .flatpak bundle after building from source

flatpak install --user builds/cloudy-af.flatpak

Run

flatpak run org.cloudy.af

USB permissions- use if device not connecting

The Flatpak manifest requests --device=all, but HID access also requires udev rules for unprivileged users. Install the provided rules after downloading source:

sudo cp flatpak/50-cloudy-af.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger

Then unplug and reconnect your device.

Linux (AppImage / .deb / .rpm)

Native Linux packages are produced by scripts/build-appimage.sh and placed in builds/:

  • Cloudy_AF-<version>-x86_64.AppImage — portable, no install required
  • Cloudy AF_<version>_amd64.deb — Debian/Ubuntu installer
  • Cloudy AF-<version>-1.x86_64.rpm — Fedora/openSUSE installer

These can also be found here.

AppImage

Make the file executable and run it:

chmod +x builds/Cloudy_AF-1.14.1-x86_64.AppImage
./builds/Cloudy_AF-1.14.1-x86_64.AppImage

The AppImage uses a static runtime and works on systems with only FUSE3.

.deb / .rpm

# Debian / Ubuntu
sudo apt install ./builds/Cloudy\ AF_1.14.1_amd64.deb

# Fedora
sudo dnf install ./builds/Cloudy\ AF-1.14.1-1.x86_64.rpm

USB permissions

Native packages also need the udev rules for unprivileged HID access:

sudo cp flatpak/50-cloudy-af.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger

Then unplug and reconnect your device.

macOS

macOS builds are not officially produced by this fork, but the Tauri app can be built from source on macOS using Homebrew. The resulting .app / .dmg uses the Homebrew-installed Node.js runtime to run the HID sidecar.

Install prerequisites with Homebrew

# Install Homebrew if you don't have it:
# /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

brew install node@22 rust

Make sure Homebrew's node@22 is in your PATH:

# For Apple Silicon Macs:
echo 'export PATH="/opt/homebrew/opt/node@22/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

# For Intel Macs:
echo 'export PATH="/usr/local/opt/node@22/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

Build

npm install
npm run sidecar:build
npm run tauri:build -- --bundles dmg

The .dmg is written to src-tauri/target/release/bundle/dmg/.

USB access on macOS

macOS does not allow unprivileged HID access out of the box. The app must be granted Input Monitoring permission in System Settings → Privacy & Security → Input Monitoring after the first launch attempt. You may also need to right-click the app and choose Open the first time to bypass Gatekeeper.

Building from source

Requirements

  • Node.js 22 (LTS)
  • Rust stable toolchain
  • Flatpak Builder (for the Flatpak package)
  • org.gnome.Platform runtime 49 and matching SDK
  • org.freedesktop.Sdk.Extension.node22
  • org.freedesktop.Sdk.Extension.rust-stable

Local development

npm install
npm run tauri:dev

Build a native release

npm install
npm run build:native

The native release binary is copied to builds/cloudy-af. The AppImage / .deb / .rpm build script also copies completed packages to builds/.

Build the Flatpak

cd flatpak
flatpak-builder --force-clean --repo=repo build-dir org.cloudy.af.yml
flatpak build-bundle repo cloudy-af.flatpak org.cloudy.af
mv cloudy-af.flatpak ../builds/

Build the AppImage / .deb / .rpm

npm install
npm run appimage:build

All native Linux packages are copied to builds/.

Usage

Start the application and connect your ArcticFox device. The app will automatically detect the device and download its configuration. Use the tabs to edit profiles, power curves, TFR tables, and device settings, then click Upload to write the configuration back to the device.

Debug

Work in progress. Issues welcome.

If no device detected, follow the USB permissions instruction above.

Project structure

  • src/ – Frontend source (HTML/CSS/JS, Vite build)
  • src-tauri/ – Tauri Rust host
  • sidecar/ – Node.js HID bridge run as a Tauri sidecar
  • flatpak/ – Flatpak manifest, desktop entry, appdata, and udev rules
  • public/ – Static assets (i18n, default config)

Programming language / stack composition:

  • Rust — Tauri 2.x host shell (src-tauri/), window management, and IPC.
  • JavaScript (ES2021) + HTML/CSS — Frontend UI built with Vite, jQuery, and Photon-style CSS (src/, index.html).
  • Node.js — HID sidecar (sidecar/) that bridges USB HID communication via node-hid and the arcticfox npm module.
  • YAML / Shell — Flatpak manifest, desktop entry, appdata, and build scripts (flatpak/).
  • JSON — i18n translations, default configuration, and package manifests.

Fork differences

Key deviations from the original hobbyquaker/arcticfox-config are documented inline with DEVIATION comments in:

  • index.html
  • src/renderer.js
  • src-tauri/src/lib.rs
  • sidecar/hid-bridge.js
  • sidecar/afcfile.js
  • sidecar/patches/arcticfox+11.0.3.patch

Notable changes include:

  • Tauri 2.x desktop shell replacing Electron
  • Flatpak packaging with bundled Node.js sidecar for HID access
  • Dark UI by default. Up Material UIrs
  • Window scaling
  • Freedom units by default
  • Autofire added to multi-click / shortcut dropdowns
  • Device auto-reconnect on unexpected disconnect
  • Lite mode support in Appearance settings
  • Hover tooltips on all settings rows (specific vape-function descriptions where available)
  • Dependency security updates (highcharts 9.x, xml2js 0.6.2, local put replacement)

Planned developments include:

  • Firmware update tool
  • Screen animations
  • Auto TFR curve plotting

Contributing

Clone the repo, run npm install, and use npm run tauri:dev for development. Submit issues and pull requests. Go crazy.

Related

Credits

Based on the work of NFE Team and hobbyquaker

This software uses Highcharts which is free only for non-commercial use.

Kimi Code assisted in software rewrite. Images all edited by mouse using OSS.

Donations

Accepting cryptocurrency donations for rework

  • BTC bc1qpfq3c6hdflafccqmsl4v7ussvlw8pazpwez09m
  • XMR 85YdUQXSMTgTeySZCyJjh9QTnzevgCHtZA6dhmFYMZqtE529pUZ5K8ceEC2ysaV2o4CuMuYtoaYPYdJfHYGX7m1WMgyM53i

License

GPLv3

Copyright (c) Sebastian Raff

Flatpak packaging and rework by OneButtFarting

TuxAndFox

About

Linux Tool for ArcticFox Vape Mod Configuration 🗣️ ☁️ 🔧 Works wherever Flatpak does. And macOS, reluctantly.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages