Skip to content

Repository files navigation

EdgeControl

macOS Swift License

If you find EdgeControl useful, consider giving it a star — it helps the project show up in search results and reach platforms like Homebrew. No ads, no premium tiers, just a tool I built for myself and wanted to share.

A native macOS system dashboard that turns any display into a fully customizable monitoring station.

Built from scratch in Swift & SwiftUI — no third-party dependencies. Works on any screen: ultrawide monitors, iPads via Sidecar, vertical displays, TVs, or the CORSAIR XENEON EDGE. Includes macOS desktop widgets, notes you can actually write in, and full touch support.

EdgeControl Dashboard

Why I Built This

I got the XENEON EDGE because I loved the idea of a dedicated touchscreen dashboard on my desk. But on macOS, there's no software for it — it just shows up as another monitor. So I built my own.

What started as a basic system monitor for one specific display has grown into a universal dashboard platform that adapts to any screen. 27 widgets, dynamic grid layout, macOS desktop widgets, complete theme customization, and a plugin system. Contributors then pushed it past a thing to glance at: it has a real note editor now, a key that captures a line from any app, and a door to Apple Reminders. It's something I use every single day, and it keeps getting better.

What It Does

EdgeControl turns any display into a fully customizable system dashboard. You create pages, place widgets wherever you want on a dynamic grid that automatically adapts to your screen, resize them, and configure everything from colors to fonts. Run it full-screen on a secondary display or as a resizable window on your main monitor. And when you need to write something down, the notes are right there rather than in another app.

27 Built-in Widgets

System (9) — CPU Gauge, Memory Gauge, CPU History, Memory History, Process List, Disk I/O, Storage Bars, Memory Pressure, CPU Cores (per-core usage)

Temperature (5) — CPU Temp, GPU Temp, SSD Temp, Temperature History, Per-Core Temp (P-core/E-core breakdown)

Network (3) — Network Stats (up/down speeds), WiFi Info (SSID, signal, channel), Bluetooth Devices

Media (2) — Now Playing (Safari, Chrome, Edge, Spotify, Apple Music — controls, artwork, progress), Audio Devices (output, volume)

Info (7) — Weather (current + 5-day forecast), Clock (10 visual themes), World Clocks, Day Progress, Moon Phase, Sticky Note (a real editor — see below), Reminders (your actual Reminders lists)

DevTools (1) — CI/CD Runs (GitHub Actions and Forgejo/Gitea, across all your hosts)

Dynamic Grid Layout

  • Grid adapts to any screen: 6x4 to 24x12 cells, ~120px per cell
  • Works on any display — XENEON EDGE (20x6), 1080p monitor (16x9), iPad Sidecar (10x7), vertical screens, TVs
  • Kiosk mode (full-screen borderless) or window mode (resizable)
  • Drag to move, corner handles to resize, collision detection
  • Unlimited pages with swipe navigation
  • Each widget adapts its layout to its size (compact, bar, chart, full)

Full Theme Customization

  • 8 presets: Default Dark, OLED Black, Midnight Blue, Neon Cyan, Neon Purple, Arctic, Ember, Terminal
  • Custom color scheme: individually set all 8 scheme colors (backgrounds, text, borders)
  • Accent color: 9 presets + native color picker for any color
  • Per-widget colors: primary/secondary/tertiary color overrides with native color picker
  • Font system: 4 font families, global scale, 6 individually adjustable font levels
  • Widget appearance: opacity, corner radius, gap

Clock Widget — 10 Themes

Digital, Analog, LCD Retro, Minimal, Split, Rings, Day Bar, Neon, Binary, Dot Matrix

macOS Desktop Widgets

EdgeControl provides native macOS desktop widgets via WidgetKit — add system metrics directly to your desktop without opening the app.

  • System Monitor — CPU and memory gauges (small/medium)
  • Temperature — CPU, GPU, SSD temps with color coding (small/medium)
  • Disk I/O — Read/write speeds (small/medium)
  • Network — Upload/download speeds (small/medium)
  • WiFi Info — SSID, signal strength, channel (small/medium)
  • CI/CD — Workflow run status from GitHub and Forgejo/Gitea (small/medium/large)

See CI/CD setup for adding accounts and the token scopes required.

  • Note — The unfinished to-dos of a note from the dashboard (small/medium/large)
  • Plugin Widget — Any plugin with desktopWidget support rendered as a desktop widget

Notes

The Sticky Note widget is a rich text editor, not a text field. Markup converts as you type — - becomes a bullet, - [ ] a checkbox, # a heading, --- a rule, `code` a chip, ``` a block — and a slash at the start of a line offers the same things as a menu. Selecting text raises a formatting bar, which is how any of this is reachable on a touch panel with no keyboard.

  • Notes are files. ~/Library/Application Support/EdgeControl/Notes/ holds one real RTF per note, a plain-text mirror Spotlight indexes, and the last twenty versions of each. Back up the folder and you have backed up the notes.
  • Markdown in and out. Paste markdown and it becomes a note; ⌘⇧C copies a note — or a selection — back out. Export Notes in General writes every note as Markdown with its images alongside, so the exported folder stands on its own.
  • Images paste in and live next to the note rather than inside it, which is what keeps the folder readable.
  • Quick capture. ⌃⌥Space opens a box from any app; what you type lands in the Inbox note. Turn it off in General if the key is spoken for.
  • Reminders. ⌘⇧R sends the caret's unfinished to-do — or every one in a selection — to Apple Reminders, skipping what is already there.
  • Fill the panel. A note in a small cell is a note you cannot write in; the corner button expands it to the whole display, Esc brings the dashboard back.
  • Several notes per widget. Point a widget at any note, or keep a few within reach as tabs.

Plugin System

Extend EdgeControl with custom HTML/JS widgets:

  • .ecplugin bundle format with manifest.json
  • WKWebView rendering with full JavaScript SDK
  • 14 permissions: 9 data (system metrics, temperature, network, etc.) + 5 actions (notifications, clipboard, storage, URL, network access)
  • Dynamic theme integration — CSS custom properties (--ec-*) auto-injected and live-updated
  • Persistent key-value storage per plugin
  • Network sandbox with domain whitelisting
  • Lifecycle events: resize, theme change, visibility
  • Install from zip, enable/disable, hot reload
  • Plugin Developer Documentation

Screenshots

System Monitor Temperatures Media Control
System Temps Media
Network Clocks Connectivity
Network Clocks Connectivity

Install

Homebrew

brew tap kemalandic/edgecontrol
brew trust kemalandic/edgecontrol
brew install --cask edgecontrol

Recent Homebrew refuses to load a cask from a third-party tap until you trust it, so the middle line is not optional — without it the install stops at Refusing to load cask ... from untrusted tap. Older Homebrew has no brew trust command and does not need one; skip it there.

Manual

Download the latest .dmg from Releases, open it, and drag EdgeControl to Applications.

Requires macOS 14.0 or later. Works on any display — the grid adapts automatically to your screen resolution.

Build from Source

git clone https://github.com/kemalandic/edgecontrol.git
cd edgecontrol
xcodegen generate      # requires: brew install xcodegen
open EdgeControl.xcodeproj
# Cmd+R to run

The Xcode project is generated from project.yml and is not in the repository — xcodegen generate creates it, and re-running it picks up any files added since.

Touch Support

EdgeControl has native HID touch input support for touchscreen displays (including the CORSAIR XENEON EDGE). Every button and control works with both mouse clicks and direct touch taps. The touch system auto-calibrates to your display positioning. On non-touch displays, all controls work with standard mouse input.

Architecture

Sources/EdgeControl/
├── App/            # Entry point, window placement
├── Models/         # WidgetProtocol, DynamicGrid, LayoutConfig, ThemeSettings, PluginManifest, WidgetData
├── Services/       # AppModel, LayoutEngine, WidgetRegistry, PluginManager, WidgetDataBridge, PluginWidgetRenderer
├── UI/
│   ├── Components/ # RadialGauge, HistoryGraph, ThemeEnvironment, WidgetHeader
│   ├── Settings/   # 6-tab settings window (Pages, Widgets, Theme, Plugins, Display, General)
│   ├── DashboardShell.swift  # Main dashboard container with dynamic grid
│   └── GridPageView.swift    # Widget grid renderer with edit mode
└── Widgets/
    ├── System/       # CPU, Memory, Storage, Pressure, Cores, DiskIO, ProcessList
    ├── Temperature/  # CPU/GPU/SSD Temp, TempHistory, PerCoreTemp
    ├── Network/      # NetworkStats, WiFiInfo, Bluetooth
    ├── Media/        # NowPlaying, AudioDevices
    ├── Info/         # Weather, Clock, WorldClocks, DayProgress, MoonPhase
    ├── DevTools/     # CICDRuns
    └── Plugin/       # PluginWebWidget (WKWebView renderer + JS SDK)

Sources/EdgeControlWidgets/   # macOS Desktop Widget Extension (WidgetKit)
├── Providers/     # TimelineProviders for each widget type
└── Views/         # SwiftUI widget views + shared styles

Permissions

  • Location — weather data (Open-Meteo, free API)
  • Bluetooth — connected device list

Community & Support

Contributions welcome — see Build from Source to get started.

License

MIT


Built by PaksLab

About

Native macOS system dashboard — works on any display. CORSAIR XENEON EDGE, iPad Sidecar, monitors, TVs. 27 widgets, notes with Markdown and quick capture, macOS desktop widgets, dynamic grid, plugin system. Swift & SwiftUI.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

18 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages