{"id":51274361,"url":"https://github.com/dingdaoyi/simple-iot","last_synced_at":"2026-07-01T22:01:13.760Z","repository":{"id":263388860,"uuid":"890224204","full_name":"dingdaoyi/simple-iot","owner":"dingdaoyi","description":"The Minimal IoT Platform — single-binary Spring Boot 4 + Vue 3 IoT platform. Built-in MQTT broker, visual rule engine, hot-loaded protocol scripts.","archived":false,"fork":false,"pushed_at":"2026-06-24T08:48:05.000Z","size":4129,"stargazers_count":21,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-06-24T10:46:03.143Z","etag":null,"topics":["dashboard","docker","element-plus","glassmorphism","iiot","influxdb","iot","iot-platform","java","java-25","mqtt","mqtt-broker","rule-engine","self-hosted","spring-boot","spring-boot-3","thing-model","thingsboard-alternative","vue","vue3"],"latest_commit_sha":null,"homepage":"https://dingdaoyi.github.io/simple-iot/","language":"Java","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/dingdaoyi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-11-18T07:54:37.000Z","updated_at":"2026-06-24T08:48:10.000Z","dependencies_parsed_at":"2025-05-14T08:32:06.084Z","dependency_job_id":"6b1418bc-76bb-44b8-b497-95915344bb7c","html_url":"https://github.com/dingdaoyi/simple-iot","commit_stats":null,"previous_names":["dingdaoyi/sample-iot","dingdaoyi/simple-iot"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/dingdaoyi/simple-iot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingdaoyi%2Fsimple-iot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingdaoyi%2Fsimple-iot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingdaoyi%2Fsimple-iot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingdaoyi%2Fsimple-iot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dingdaoyi","download_url":"https://codeload.github.com/dingdaoyi/simple-iot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingdaoyi%2Fsimple-iot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35024365,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-01T02:00:05.325Z","response_time":130,"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":["dashboard","docker","element-plus","glassmorphism","iiot","influxdb","iot","iot-platform","java","java-25","mqtt","mqtt-broker","rule-engine","self-hosted","spring-boot","spring-boot-3","thing-model","thingsboard-alternative","vue","vue3"],"created_at":"2026-06-29T20:00:35.371Z","updated_at":"2026-07-01T22:01:13.737Z","avatar_url":"https://github.com/dingdaoyi.png","language":"Java","funding_links":[],"categories":["Projects Using Vue.js","Platform"],"sub_categories":["Open Source","Android Things"],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"doc/brand/banner.png\" alt=\"Simple IoT — The Minimal IoT Platform\" width=\"100%\"/\u003e\n\n# Simple IoT\n\n**The Minimal IoT Platform — lightweight, single-binary, ready in 60 seconds.**\n\n[![CI](https://github.com/dingdaoyi/simple-iot/actions/workflows/ci.yml/badge.svg)](https://github.com/dingdaoyi/simple-iot/actions/workflows/ci.yml)\n[![License](https://img.shields.io/github/license/dingdaoyi/simple-iot?color=blue)](LICENSE)\n[![Java](https://img.shields.io/badge/Java-25-orange?logo=openjdk)](https://openjdk.org/)\n[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-4.0.2-6DB33F?logo=springboot)](https://spring.io/projects/spring-boot)\n[![Vue](https://img.shields.io/badge/Vue-3.x-42b883?logo=vue.js)](https://vuejs.org/)\n[![Docker](https://img.shields.io/badge/Docker-Ready-2496ED?logo=docker)](docker-compose.yml)\n[![GitHub Stars](https://img.shields.io/github/stars/dingdaoyi/simple-iot?style=social)](https://github.com/dingdaoyi/simple-iot/stargazers)\n\n**English** · [简体中文](README.zh-CN.md) · [Live Demo](https://dingdaoyi.github.io/simple-iot/guide/demo) · [Documentation](https://dingdaoyi.github.io/simple-iot/) · [Report Bug](https://github.com/dingdaoyi/simple-iot/issues)\n\n\u003c/div\u003e\n\n---\n\n## ✨ What is Simple IoT?\n\n**Simple IoT** is a self-hosted IoT platform for teams that want to connect devices, model telemetry, build rule flows and operate alarms without assembling a large distributed stack first.\n\nThe project keeps the runtime intentionally compact: one Spring Boot application, one Vue 3 console, PostgreSQL for business data, InfluxDB for telemetry and Docker Compose for deployment. It is easy to read, fork, run on a small server and adapt to real projects.\n\n## 🌟 Release Highlights\n\nThis release focuses on making Simple IoT easier to try, operate and present:\n\n| Area | What's new |\n|---|---|\n| **International UI** | Full `zh-CN` / `en-US` frontend i18n, semantic translation keys, language switcher and Element Plus locale sync. |\n| **Rule-chain authoring** | Improved editor usability with canvas zoom/pan, keyboard shortcuts, node search, validation and debug path highlighting. |\n| **Scriptable automation** | Script filter nodes and safer protocol/script test handling: user script mistakes now return readable validation results instead of noisy server errors. |\n| **Integration reliability** | Push configuration validation, signed push testing and better delivery-setting checks. |\n| **Demo \u0026 release quality** | Hardened GitHub Actions, frontend lint in CI, stable demo deployment and public smoke verification. |\n\n\u003e **In short** — Simple IoT is a practical, lightweight IoT console you can run yourself, inspect end-to-end and evolve with your product.\n\n---\n\n## 🚀 Quick Start (60 seconds with Docker)\n\n```bash\ngit clone https://github.com/dingdaoyi/simple-iot.git\ncd simple-iot\nchmod +x deploy.sh\n./deploy.sh deploy\n```\n\nThen open:\n\n| Service | URL | Default credentials |\n|---------|-----|--------------------|\n| Web UI | http://localhost | `admin` / `123456` |\n| API docs | http://localhost:5010/iot/doc.html | — |\n| MQTT broker | `mqtt://localhost:1883` | — |\n| MQTT WebSocket | `ws://localhost:8083/mqtt` | — |\n\nThe Docker stack seeds a demo sensor by default (`demo-sensor-001` / `demo-secret`) so the dashboard and MQTT smoke path are useful immediately. See [MQTT Quick Test](docs/guide/mqtt-test.md) for a copy-paste telemetry publish command.\n\nThat's it. PostgreSQL, RustFS (S3-compatible), the backend and the frontend all spin up together.\n\n\u003e Want to develop locally? See the [development guide](#-development).\n\n---\n\n## 🎯 Core Features\n\n| Module | What it does |\n|--------|--------------|\n| **Device Management** | Registration, online/offline tracking, batch operations, command dispatch |\n| **Product \u0026 Thing Model** | Product types, properties, services and events for structured device capabilities |\n| **Protocol Engine** | Hot-loaded scripts in **Java / JavaScript / Groovy / Lua**, no restart needed |\n| **Visual Rule Engine** | Drag-and-drop chain editor with validation, debug paths, script filters and reusable nodes |\n| **Alarm Center** | Severity levels (info / warning / critical / urgent), active / cleared lifecycle |\n| **Data Ingestion** | InfluxDB 3 time-series storage, Caffeine in-process cache |\n| **Notifications** | Email \u0026 SMS push, HTTP callbacks, MQTT forward, device commands |\n| **Dashboard** | Device totals, online stats, system metrics (CPU / memory / disk), live alarms |\n| **Auth \u0026 Permissions** | Sa-Token based, fine-grained, role/menu/button level |\n| **International UI** | Modern Vue 3 console with `zh-CN` / `en-US`, light/dark/auto theme and responsive layouts |\n\n---\n\n## 🖼️ Screenshots\n\n\u003cdiv align=\"center\"\u003e\n\n### Dashboard\n\u003cimg src=\"doc/screenshots/dashboard.png\" alt=\"Dashboard\" width=\"80%\"/\u003e\n\n### Visual Rule Engine\n\u003cimg src=\"doc/screenshots/rule-chain-editor.png\" alt=\"Rule Engine Editor\" width=\"80%\"/\u003e\n\n### Device Management\n\u003cimg src=\"doc/screenshots/device.png\" alt=\"Device\" width=\"80%\"/\u003e\n\n### Protocol Scripts\n\u003cimg src=\"doc/screenshots/protocol.png\" alt=\"Protocol\" width=\"80%\"/\u003e\n\n### Alarms\n\u003cimg src=\"doc/screenshots/alarm.png\" alt=\"Alarm\" width=\"80%\"/\u003e\n\n\u003c/div\u003e\n\n---\n\n## 🏗️ Architecture\n\n```\n┌──────────────────────────────────────────────────────────────────┐\n│                          Simple IoT                              │\n├──────────────────────────────────────────────────────────────────┤\n│                                                                  │\n│   Vue 3 + Vite + Element Plus  (Minimal UI)                │\n│           │                                                      │\n│           ▼  REST / WebSocket                                    │\n│   ┌──────────────────────────────────────────────────────────┐   │\n│   │   Spring Boot 4 (single JVM, single binary)              │   │\n│   │                                                          │   │\n│   │   • Sa-Token auth         • MyBatis-Plus                 │   │\n│   │   • Caffeine local cache  • Knife4j OpenAPI              │   │\n│   │   • Visual rule engine    • Hot-loaded protocol scripts  │   │\n│   │   • mica-mqtt broker (1883 / 8083 ws)                    │   │\n│   └──────────────────────────────────────────────────────────┘   │\n│           │                          │                           │\n│           ▼                          ▼                           │\n│   ┌──────────────┐          ┌────────────────┐                   │\n│   │ PostgreSQL   │          │ InfluxDB 3     │                   │\n│   │ (business)   │          │ (telemetry)    │                   │\n│   └──────────────┘          └────────────────┘                   │\n│                                                                  │\n│   ┌──────────────────────────────────────────────────────────┐   │\n│   │  Devices  →  MQTT / TCP / HTTP  →  Protocol scripts      │   │\n│   └──────────────────────────────────────────────────────────┘   │\n└──────────────────────────────────────────────────────────────────┘\n```\n\n### Stack\n\n**Backend** — Java 25 · Spring Boot 4.0.2 · Sa-Token · MyBatis-Plus · PostgreSQL · InfluxDB 3 · mica-mqtt · Caffeine · Hutool · AWS S3 SDK\n**Frontend** — Vue 3 · Vite · Element Plus · Pinia · Vue Router · Axios · ECharts\n**Infra** — Docker Compose · RustFS (S3-compatible) · GitHub Actions\n\n---\n\n## 📦 Project Layout\n\n```\nsimple-iot/\n├── iot-server/         # Main Spring Boot service (REST + MQTT broker + rule engine)\n├── iot-common/         # Shared base classes (BaseEntity, ResultCode, paging)\n├── iot-driver/         # System-supplied protocol drivers\n├── iot-web/            # Vue 3 admin frontend\n├── doc/                # Docs, SQL schema, screenshots, brand assets\n├── docker-compose.yml  # Stack: postgres + rustfs + iot-server + iot-web\n├── deploy.sh           # One-command deploy / start / stop / logs\n└── pom.xml             # Maven multi-module build\n```\n\n---\n\n## 🛠️ Development\n\n### Prerequisites\n- JDK 25+\n- Node.js 18+\n- pnpm 8+\n- PostgreSQL 14+\n- Docker \u0026 Docker Compose (optional, recommended)\n\n### Backend\n\n```bash\n# 1. Start PostgreSQL + RustFS only (skip backend/frontend)\ndocker compose up -d postgres rustfs\n\n# 2. Run the server in your IDE / via Maven\ncd iot-server\nmvn spring-boot:run\n```\n\nAPI ready at `http://localhost:5010/iot/`, OpenAPI at `http://localhost:5010/iot/doc.html`.\n\n### Frontend\n\n```bash\ncd iot-web\npnpm install\npnpm dev\n```\n\nWeb ready at `http://localhost:5173`. Vite proxies `/iot` → `http://localhost:5010` automatically.\n\n\u003e See [`AGENTS.md`](AGENTS.md) for the full coding conventions used by this project (component patterns, design tokens, naming rules).\n\n---\n\n## 🗺️ Roadmap\n\n- [x] **v0.1** — Stable single-node release, bilingual docs, CI, public demo\n- [x] **v0.2** — `zh-CN` / `en-US` UI, rule-chain editor polish, demo deploy hardening\n- [ ] **v0.3** — thing-model import/export, device groups\n- [ ] **v0.4** — Custom data dashboards (drag-and-drop widgets)\n- [ ] **v0.5** — OTA upgrade flow, edge gateway packaging\n- [ ] **v0.6** — Plugin system (protocol packs as standalone JARs)\n- [ ] **v1.0** — Production hardening, performance benchmarks, helm chart\n\nOpen an issue or [Discussion](https://github.com/dingdaoyi/simple-iot/discussions) if there's a feature you want to see prioritised.\n\n---\n\n## 🤝 Contributing\n\nContributions are very welcome. Whether it's a typo fix, a new protocol script, a UI tweak, or a translation — every PR helps.\n\n1. Read [CONTRIBUTING.md](CONTRIBUTING.md)\n2. Fork → branch → commit (use [Conventional Commits](https://www.conventionalcommits.org/): `feat:`, `fix:`, `docs:`, ...)\n3. Open a Pull Request\n\nFound a bug or have a question? [Open an issue](https://github.com/dingdaoyi/simple-iot/issues/new/choose) or join the [Discussions](https://github.com/dingdaoyi/simple-iot/discussions).\n\n---\n\n## 🛡️ Security\n\nIf you discover a security vulnerability, please **do not** open a public issue. See [SECURITY.md](SECURITY.md) for the responsible-disclosure process.\n\n---\n\n## ⭐ Star History\n\n\u003ca href=\"https://star-history.com/#dingdaoyi/simple-iot\u0026Date\"\u003e\n  \u003cimg src=\"https://api.star-history.com/svg?repos=dingdaoyi/simple-iot\u0026type=Date\" alt=\"Star History\" width=\"600\"/\u003e\n\u003c/a\u003e\n\nIf this project helps you, please **drop a star ⭐** — it's the easiest way to support the work and helps others discover it.\n\n---\n\n## 📄 License\n\n[Apache License 2.0](LICENSE) © dingdaoyi \u0026 contributors\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n\u003csub\u003eBuilt with ❤️ for makers, integrators and small teams shipping practical IoT products.\u003c/sub\u003e\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdingdaoyi%2Fsimple-iot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdingdaoyi%2Fsimple-iot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdingdaoyi%2Fsimple-iot/lists"}