{"id":49037210,"url":"https://github.com/schizza/snapdash","last_synced_at":"2026-04-19T12:03:43.276Z","repository":{"id":351360845,"uuid":"1210510127","full_name":"schizza/snapdash","owner":"schizza","description":"A pluggable desktop widget system - Home Assistant today, anything tomorrow.","archived":false,"fork":false,"pushed_at":"2026-04-14T17:24:15.000Z","size":6565,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-14T18:27:30.637Z","etag":null,"topics":["cross-platform","dashboard","desktop-app","gui","home-assistant","iced","linux","macos","rust","widgets","windows"],"latest_commit_sha":null,"homepage":"https://snapdash.schizza.cz","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/schizza.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"schizza","ko_fi":"schizza","buy_me_a_coffie":"schizza"}},"created_at":"2026-04-14T13:40:56.000Z","updated_at":"2026-04-14T14:21:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/schizza/snapdash","commit_stats":null,"previous_names":["schizza/snapdash"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/schizza/snapdash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schizza%2Fsnapdash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schizza%2Fsnapdash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schizza%2Fsnapdash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schizza%2Fsnapdash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/schizza","download_url":"https://codeload.github.com/schizza/snapdash/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schizza%2Fsnapdash/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32005837,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cross-platform","dashboard","desktop-app","gui","home-assistant","iced","linux","macos","rust","widgets","windows"],"created_at":"2026-04-19T12:03:38.449Z","updated_at":"2026-04-19T12:03:43.262Z","avatar_url":"https://github.com/schizza.png","language":"Rust","funding_links":["https://github.com/sponsors/schizza","https://ko-fi.com/schizza","schizza"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# SnapDash\n\n**A pluggable desktop widget system - Home Assistant today, anything tomorrow.**\n\n[![CI](https://github.com/schizza/snapdash/actions/workflows/ci.yml/badge.svg)](https://github.com/schizza/snapdash/actions/workflows/ci.yml)\n  [![License: Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n  [![Rust](https://img.shields.io/badge/rust-1.85+-orange.svg)](https://www.rust-lang.org/)\n  [![Platforms](https://img.shields.io/badge/platforms-macOS_|_Windows_|_Linux-lightgrey.svg)]()\n\n[Website](https://snapdash.schizza.cz) · [Releases](https://github.com/schizza/snapdash/releases) · [Issues](https://github.com/schizza/snapdash/issues) · [Roadmap](https://github.com/schizza/snapdash/projects)\n\u003c/div\u003e\n\n---\n\nSnapdash gives you a clean, always-visible snapshot of live data\n— sensors, metrics, anything that streams.\nBuilt in **Rust** for stability, performance, and 24/7 reliability, it sits quietly\non your desktop without leaks, lag, or surprises.\n\n  Today it speaks **Home Assistant**. Tomorrow, anything you can wire up via plugins.\n\nBuilt with **Rust** for stability, performance, and long-running reliability —\nSnapDash is designed to run quietly in the background without leaks, lag, or surprises.\n\n🚧 **Status: Early development / MVP** — first public release, expect rough edges.\n\n| Widget | Settings |\n|:---:|:---:|\n| ![Screenshot](screenshots/settings.png) | ![Widget1](screenshots/widget_1.png) ![Widget2](screenshots/widget_2.png) |\n\n## Features\n\n- **Real-time** updates via Home Assistant WebSocket API\n- **Frameless widgets** - pin individual sensors as floating macOS-style cards\n- **Native look** - Mac Light / Mac Dark themes, smooth pulse animations on state change\n- **Secure token storage** - credentials lives in OS keychain (macOD Keychain / Windows Credential Manager / Linux Secret Service), never in plain text\n- **Cross-platform** - macOS, Windows, Linux\n- **Lightweight** - low CPU / memory footprint, designed to run 24/7 in background\n- **Pluggable (planned)** - Home Assistant is the first integration; plugin API for arbitrary data sources is on the roadmap\n- **Fully customizable cards and layouts** - in progress\n- **Sensor history and lightweight charts** - in progress\n\n## Why Rust?\n\nBecause SnapDash is meant to be boring in the best possible way.\n\nRust lets us build a widget that doesn’t slowly eat memory, doesn’t spike the CPU, and doesn’t need babysitting. You start it, pin it to your desktop, and it just keeps doing its job.\n\n## Installation\n\n### Pre-built binaries\n\nGrab the latest release for your platform from the [Releases page](https://github.com/schizza/snapdash/releases):\n\n- **macOS**: `.tar.gz` (Apple Silicon) / `.dmg` will be added later\n- **Windows**: `.zip` portable / `.msi` installer (will be added later)\n- **Linux**: `.tar.gz` portable / `.AppImage`\n\n⚠️ macOS binaries are **not yet code-signed**. Signing of application is in process now.\nmacOS will warn about an \"unidentified developer\" — open it via `Right-click → Open` once.\n\n**\"Snapdash is damaged and can't be opened\" on macOS**\n\nmacOS blocks unsigned apps from the internet. Snapdash is not yet\nsigned with an Apple Developer ID - we are tracking this in\n[#12](https://github.com/schizza/snapdash/issues/12).\n\n**Remove the quarantine attributes** (one-time, recommended):\n\n```bash\nxattr -cr /Applications/Snapdash.app  # or where your Snapdash.app lives\n```\n\nOr right-click the app -\u003e **Open** -\u003e click **Open** in the dialog.\nEither way, very the download first:\n\n```bash\nshasum -a 256 -c snapdash-vX.Y.Z-macos-aarch64.tar.gz.sha256\n```\n\n**Easier: install via Homebrew** (recommended):\n\n```bash\nbrew tap schizza/tap\nbrew install --cask snapdash\n```\n\nHomebrew automatically removes the quarantione attributes and handles\nupdates via `brew upgrade`.\n\n### Build from source\n\nRequires **Rust 1.85** (2024 edition)\n\n```bash\ngit clone https://github/schizza/snapdash.git\ncd snapdash\ncargo build --release\n\n# Run directly\ncargo run --release\n```\n\n## Quick start\n\n1. Launch Snapdash - the **Settings** window opens automatically on first run.\n2. Enter your Home Assistant URL (e. g. `http://localhost:8123`).\n3. Paste your **Long-Lived Access Token** (see below).\n4. Hit **Save** - Snapdash connects and lists your sensors.\n5. Tick any sensor -\u003e a floating widget appears for it.\n6. Drag widget anywhere on screen. They remember their position.\n\n## Getting a Home Assistant Long-Lived Token\n\n1. Open your Home Assistant UI in a browser.\n2. Click your **user profile** (avatar in bottom-left)\n3. Go to **Security -\u003e Long-Lived Access Tokens**\n4. Click **Create token**, name it (e.g. `Snapdash`), confirm\n5. Copy the token immediately - Home Assistant only shows it once.\n6. Paste it into Snapdash Settings , confirm\n7. Copy the token immediately - Home Assistant only shows it once.\n8. Paste it into Snapdash Settings -\u003e **Home Assistant token** field.\n\nAfter saving, the token is moved to your OS keychain. The `config.json` file never contains the token.\n\nIf the token is compromised: delete it in HA, generate a new one, paste it into Snapdash Settings (the `🗑` button next to the token field also clears the keychain entry).\n\n### Configuration\n\nSnapdash uses a simple JSON config in your user profile.\nIf the config is corrupted, Snapdash falls back to defaults and writes a fresh file on next save.\n\n### File locations\n\n| OS | Config | Log |\n| --- | --- | --- |\n| **macOS** | `~/Library/Application Support/dev.snapdash.Snapdash/config.json` | `~/Library/Application Support/dev.snapdash.Snapdash/debug.log` |\n| **Windows** | `%APPDATA%\\dev.snapdash.Snapdash\\config.json` | `%APPDATA%\\dev.snapdash.Snapdash\\debug.log` |\n| **Linux** | `~/.config/snapdash/config.json` | `~/.local/share/snapdash/debug.log` |\n\n## Troubleshooting\n\n**Settings window doesn't open**\nFirst run with no config auto-opens Settings. If it stays closed, check the log file.\n\n**`Invalid JSON ... using defalut config` in log**\nThe config file got corrupted. Delete it or fix the JSON manually, then reconfigure via Settings.\n\n**No widget windows appear despite saved entities**\nCheck the log for HA WebSocket errors - token expired, URL unreachable, network blocked.\nOpen Settings, hit **Save** again to force a reconnect.\n\n**Token issues**\nOn macOS/Windows the token only lives in the keychain. To reset: in Settings, click `🗑` to clear, then paste a fresh token and save.\n\n## Roadmap\n\n- [X] Frameless widget windows + macOS-style theming\n- [X] Home Assistant WebSocket integration with reconnect\n- [X] Secure token storage in OS keychain\n- [X] Real-time state updates with pulse animations\n- [X] Multi-widget configuration via Settings\n- [X] Local history \u0026 24h sparkline charts\n- [ ] System tray menu \u0026 autostart\n- [ ] Plugin API for non-HA data sources\n- [ ] Linux-specific window hacks (XShape rounded corners)\n- [ ] Code-signed releases (macOS notarization, Windows signing)\n- [ ] Auto-update mechanism\n\nSee the [issue tracker](https://github.com/schizza/snapdash/issues) and [project board](https://github.com/schizza/snapdash/projects) for current work.\n\n## Tech Stack\n\n- **[Rust](https://www.rust-lang.org/)** (2024 edition) - core language\n- **[Iced](https://github.com/iced-rs/iced)** (forked) - GPU-accelerated GUI via wgpu\n- **[Tokio](https://github.com/tokio-rs/tokio)** - async runtime\n- **[tokio-tungstenite](https://github.com/snapview/tokio-tungstenite)** - WebSocket client\n- **[reqwest](https://github.com/seanmonstar/reqwest)** - HTTP client (initial state fetch)\n- **[keyring](https://github.com/hwchen/keyring-rs)** - cross-platform OS credential storage\n\n## Contributing\n\nContributions welcome! Pleas read [CONTRIBUTING.md](CONTRIBUTING.MD) (TODO) and check open [issues](https://github.com/schizza/snapdash/issues) for places to start.\n\nBug reports and feature requests via the [issue tracker](https://github.com/schizza/snapdash/issues/new/choose).\n\n## License\n\nLicensed under the [Apache License, Version 2.0](LICENSE).\n\nSee [NOTICE](NOTICE) for third-party attribution.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschizza%2Fsnapdash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fschizza%2Fsnapdash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschizza%2Fsnapdash/lists"}