Skip to content
/ deq Public

Homelab control plane with native Android app, Wear OS, and Android Auto. SSH-based control from a dashboard. Single Python file. Zero dependencies. Dynamic config. No YAML.

License

Notifications You must be signed in to change notification settings

deqrocks/deq

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DeQ

A bare-metal homelab control plane with native Android companion app

  • Full file manager. Task and Backup scheduling. Container control. Push alerts to your phone
  • Vanilla code. No dependencies. One Python file 350KB. 20MB RAM

DeQ Hero

Website: deq.rocks · FAQ: deq.rocks/faq · Support: Patreon

Basics You Need to Know

  • The server.py lives on your server. It offers access to DeQ via your browser. It wraps SSH commands into a user interface.
  • The Android companion app connects to that server.py and polls it for stats.
  • By using a VPN like Tailscale you can remote control or schedule your machines from anywhere and get reliable notifications by setting alert thresholds.
  • Neither the server.py, nor the app ever phone home or collect your data.
  • The server.py runs SSH commands as root. Hide it behind a VPN! Do not expose to public internet!
  • For controlling other devices in your network you MUST exchange keypairs first. Please exactly follow the instructions when running the install.sh.

Features

  • Android Companion app - free app for your smartphone to manage your servers or get notified when things go wrong
  • Device Control - Wake-on-LAN, shutdown, suspend, Docker start/stop
  • Scheduled Tasks - Automated backups, wake, shutdown, suspend, and scripts
  • Scripts - Run shell scripts from the web interface or on a schedule
  • File Manager - Dual-pane file browser, copy/move/upload between devices
  • System Stats - CPU, RAM, temperature, disk usage
  • Quick Links - Bookmarks to your services with custom icons (Lucide or Dashboard Icons)
  • Theming - Custom colors, wallpapers, and transparency/blur effects
  • PWA Support - Install as web app on any desktop or smartphone

Android App

Native companion app with background monitoring and push notifications when devices go offline, containers stop, or backups fail.

DeQ Pro adds custom polling intervals, widgets, live wallpaper, screen saver, Android Auto, and Sleep With Me automation. Your purchase keeps this project alive as a full-time effort.

DeQ Pro on Google Play DeQ Free on Google Play Free APK on GitHub

See all app features →

Concept

DeQ runs bare metal, not in Docker.

It's designed for low-power devices that are already online 24/7 - a Pi, a mini PC, even a WRT router. These give you always-on access to your homelab via Tailscale or LAN, without the overhead of a full server.

Docker would negate its own isolation benefits while adding overhead. To provide actual system control, a containerized DeQ would need host networking, Docker socket access, privileged mode, and volume mounts for every path - at that point, you're running a "container" with full host access anyway, just with extra steps.

DeQ stays up when everything else breaks.

When your Docker daemon crashes, when an update borks the container network, when Portainer can't reach its own backend - your containerized tools go down with the ship. DeQ, running as a simple systemd service, is often still reachable when everything else is on fire.

Yes, it runs as root. Here's why that's okay.

The security model is "trusted tool on a trusted network." DeQ assumes you're behind a VPN (Tailscale, WireGuard). The code is auditable - all 350KB of it. A technically competent user can read exactly what DeQ does in an afternoon. Compare that to trusting a 200MB Docker image with layers of abstraction you'll never inspect.

  • Never expose DeQ to the public internet
  • Use Tailscale, WireGuard, or another VPN for remote access

Installation

wget https://github.com/deqrocks/deq/releases/latest/download/deq.zip
unzip deq.zip -d deq && cd deq
sudo ./install.sh

The installer asks a few questions (IP, port) and gives you your access URL.

Getting Started

  1. Open your DeQ URL in a browser (like 192.168.1.1:5050)
  2. Follow the onboarding wizard to scan your network for devices and containers
  3. Click the pencil icon to edit existing items or to add devices manually
  4. Add links and notes - assign icons
  5. Drag links or devices to reorder them
  6. Click the eye icon to hide sections you don't need
  7. Click the palette icon to toggle monochrome icons
  8. Scroll down to the Theme section to customize colors and wallpaper

The server running DeQ is automatically added as the "Host" device with local stats.

Icons

Links and devices support three icon sources:

Format Example Description
Lucide server Default. See lucide.dev/icons
Dashboard Icons dash:proxmox Self-hosted app icons. See dashboardicons.com
Custom URL https://... Any image URL

In edit mode, click the palette icon next to "Links" to toggle monochrome mode for all icons.

Adding Devices

Manually

You can manually add devices by activating the edit mode > go to the devices section > click "+". After you added the device you can manually add containers or scan for containers running on that device.

Using the Wizard

You can automatically add devices and containers by using the wizard: activate edit mode > go to the devices section > click "scan". Add your devices and SSH user name. Next step it will scan for Docker containers. Make sure to have ssh keypairs exchanged for that to work.

Each device can have:

Feature What it does
Wake-on-LAN Power on the device remotely
Quick Connect Buttons for RDP, VNC, or web interfaces
Docker Scan for containers or add manually, start/stop, optional RDP/VNC/Web buttons
SSH Enables stats and shutdown for remote devices

Understanding IP addresses

DeQ uses different IPs for different purposes:

  • Local IP (device settings): Always your LAN IP (192.168.x.x). Used by the DeQ server for Wake-on-LAN, SSH connections, and ping checks.

  • Quick Connect / Docker IPs: These are for your browser/phone to connect. Use LAN IPs when at home, or Tailscale IPs when accessing remotely.

Example with Tailscale:

  • Device Local IP: 192.168.1.100 (for WOL/SSH)
  • Docker VNC: 100.x.x.x:8006 (Tailscale IP, so VNC works from anywhere)

Connecting via SSH (optional)

To see stats or shutdown remote devices, DeQ needs SSH access. This is optional - devices without SSH still work for Wake-on-LAN and links.

Quick setup:

# Generate a key (skip if you already have one)
ssh-keygen -t ed25519

# Copy it to your device
ssh-copy-id user@device-ip

# DeQ runs as root, so copy the key there too
sudo cp ~/.ssh/id_ed25519* /root/.ssh/
sudo chmod 600 /root/.ssh/id_ed25519

# Test it
sudo ssh user@device-ip 'echo OK'

Enable passwordless sudo (if needed on target devices):

DeQ uses sudo for power control and SMART disk monitoring. If your SSH user isn't root, run this on the target device:

echo "$USER ALL=(ALL) NOPASSWD: /usr/bin/systemctl poweroff, /usr/bin/systemctl suspend, /usr/sbin/smartctl" | sudo tee /etc/sudoers.d/deq
sudo chmod 440 /etc/sudoers.d/deq

This grants access only to power commands and disk health monitoring, nothing else.

Remote Access

For secure remote access, use Tailscale or another VPN. Access DeQ via your Tailscale IP.

Admin Password (optional)

Protect DeQ with a password:

# Set or change password
sudo ./install.sh --set-password

# Remove password (disable auth)
sudo ./install.sh --remove-password

When set, a login screen appears before accessing DeQ. Sessions persist until logout or password change.

Scheduled Tasks

DeQ can run tasks automatically:

  • Power On - Wake a device (WoL) or start a Docker container
  • Power Off - Shutdown a device (SSH) or stop a Docker container
  • Suspend - Put a device to sleep (devices only)
  • Backup - Sync files between devices using rsync
  • Script - Run a shell script from /opt/deq/scripts/

Example workflow: Wake your NAS at 3 AM, run a backup from your main server, shut it down when done.

Scripts

Run shell scripts directly from the web interface. Place executable scripts in /opt/deq/scripts/ and they appear in the Scripts section.

# Example: Create a simple script
sudo mkdir -p /opt/deq/scripts
sudo nano /opt/deq/scripts/docker-prune.sh
#!/bin/bash
docker system prune -af
sudo chmod +x /opt/deq/scripts/docker-prune.sh

In edit mode, click the scan button in the Scripts section to discover new scripts. Scripts can also be scheduled as tasks.

File Manager

Click the folder icon (top right) to open the dual-pane file manager. Browse files on any device with SSH configured. File Manager will also work on your smartphone. BE CAREFUL with what you're doing in the root folder!

Features:

  • Copy and move files between devices
  • Upload files (button or drag & drop)
  • Delete files
  • Create new Folders
  • Create zip archives (or tar.gz as fallback)
  • Download individual files
  • Progress indicator with speed and ETA
  • Preflight checks (verifies free space before transfer)
  • Remembers your last folder per device

Navigation:

  • Click to select (single pane only)
  • Double-click to open folders
  • Drag files from your desktop to upload

How transfers work:

Transfer type How it works
Host ↔ Remote Direct rsync over SSH
Same device Direct copy on that device (no network transfer)
Remote ↔ Remote Routes through host (download then upload). Preflight checks free space on host.

Theming

In edit mode, scroll down to the Theme section to customize the look:

Setting Description
Colors Background, cards, borders, text, accent color
Transparency Transparency effect for cards (0-100%)
Blur Background blur amount (0-30px)
Wallpaper Background image URL (https://...)

Click "Reset to Defaults" to restore the original dark theme.

Mobile App

Get notified when something goes wrong - even when you're not home. The app monitors your homelab in the background and alerts you when devices go offline, containers stop, or backups fail.

Android

Native Android apps for DeQ - faster startup, background notifications, no browser needed.

Compatible with Android 8+ - Perfect for repurposing old phones or tablets as wall-mounted status displays.

Download: Google Play · APK on GitHub · Pro on Google Play

Free vs Pro

Feature DeQ (Free) DeQ Pro (€6.99)
WebView Interface
Background Polling 30 min custom
Push Notifications
Home Screen Widgets
Lock Screen Widgets
Live Wallpaper
Screen Saver (Daydream)
Android Auto
Sleep With Me

Why a paid version?

Unlike Patreon tiers with "exclusive updates" or "Discord access", the paid app offers real features that take real work to build:

  • Custom Polling: Set your own interval - from seconds to hours
  • Android Auto: Check your homelab status from your car's dashboard
  • Home Screen Widgets: 5 different widget styles - from minimal dots to detailed lists
  • Lock Screen Widgets: Same widgets on your lock screen (Android 16+)
  • Live Wallpaper: Animated status display as your home screen background
  • Screen Saver: Ambient display with BCD clock when charging - perfect for a wall-mounted status display
  • Sleep With Me: Automate your homelab based on your phone's charging state - sleep when you sleep, wake when you wake

Your support keeps this project alive as a full-time effort.

Widgets

DeQ Pro includes 5 widget styles:

Widget Description
DeQ Less Minimal colored dots - green/gray for online/offline
DeQ List Scrollable list with device names and stats
DeQ Ultra Q-symbols: rotated = online, normal = offline
DeQ Mega Green squares for online devices only
DeQ Containers Green circles for running containers only

All widgets support custom background color, transparency, and corner radius.

Live Wallpaper & Screen Saver

Turn an old phone into a wall-mounted status display:

  • DeQ Live: Animated wallpaper showing device squares and container circles
  • DeQ Ambient: Screen saver (Daydream) with BCD binary clock, breathing animations, and drift movement for OLED burn-in protection

Color coding:

  • Offline devices: Gray (#666666) - neutral, non-alarming
  • Online devices: Color indicates CPU load - green (idle) → orange → red (100% load)
  • Stopped containers: Gray circle
  • Running containers: Green circle

Both feature pure black backgrounds (#000000) for OLED efficiency and auto-scaling for any number of devices.

Sleep With Me

Automatically put your homelab to sleep when you go to bed, wake it up when you get up - triggered by your phone's charging state.

How it works:

  • Plug in at night → Selected devices suspend/shutdown, containers stop
  • Unplug in morning → Selected devices wake up, containers start

Configuration:

Setting Description
Active Window Time range when feature is active (e.g., 22:00 - 08:00)
Delay Minutes to wait before executing (time to unplug if needed)
Plug tab Select containers to stop, devices to suspend or shutdown
Unplug tab Select containers to start, devices to wake

The feature checks at window start - even if you plug in before bedtime, devices won't sleep until the window begins.

Requirements: SSH access for remote devices, Wake-on-LAN for devices you want to wake, battery optimization disabled for DeQ.

iOS

Install DeQ as a PWA: Safari → Share → Add to Home Screen. Works like a native app. Native iOS app planned when funding allows.

Desktop App

Install DeQ as a desktop app - no more hunting through browser tabs. One click in your dock or taskbar, and you're in.

Why install as an app?

  • Clean window without browser UI
  • Lives in your dock/taskbar - always one click away
  • No tabs to dig through
  • Same interface, instant access

How to install:

Platform Steps
macOS (Safari) File → Add to Dock
macOS (Chrome) Menu (⋮) → "Cast, save, and share" → "Install page as app..."
Windows (Edge) Menu (···) → Apps → "Install this site as an app"
Windows (Chrome) Menu (⋮) → "Cast, save, and share" → "Install page as app..."
Linux Chrome → Menu (⋮) → "Cast, save, and share" → "Install page as app..."

Once installed, DeQ opens in its own window and lives in your dock.

Service Commands

sudo systemctl status deq     # Check status
sudo systemctl restart deq    # Restart
sudo journalctl -u deq -f     # View logs

Data Storage

All data is stored in /opt/deq/config.json. To backup: just copy config.json. To restore: copy it back and restart.

Updating

To update DeQ, download the latest release and run the installer again:

wget https://github.com/deqrocks/deq/releases/latest/download/deq.zip
unzip deq.zip -d deq && cd deq
sudo ./install.sh

Your config.json is preserved - the installer only overwrites server.py.

Uninstall

sudo systemctl stop deq
sudo systemctl disable deq
sudo rm /etc/systemd/system/deq.service
sudo rm -rf /opt/deq
sudo systemctl daemon-reload

Or as single command

sudo systemctl stop deq && sudo systemctl disable deq && sudo rm /etc/systemd/system/deq.service && sudo rm -rf /opt/deq && sudo systemctl daemon-reload

Clean up remote devices (optional):

If you configured passwordless sudo on target devices, you can remove it:

sudo rm /etc/sudoers.d/deq

Disclaimer

DeQ is provided "as is" without warranty. The authors are not liable for any damages resulting from its use. By installing DeQ, you accept full responsibility for securing your system. See LICENSE for details.

License

CC BY-NC 4.0 - Free for personal use, no commercial use without permission. See LICENSE.

Credits