Monit: an Electron desktop widget host built on Vue 3
🎯 Desktop Widget ( 桌面小组件 )
At a glance
- What is it?
- Monit is an MIT-licensed Electron application that hosts small desktop widgets, from a flip clock and todo list to a camera helper and a NetEase music panel, with a plugin table in the README that doubles as the roadmap, and releases that stopped in 2023 while commits continued into 2026.
- Who is it for?
- Monit suits someone who wants a small always visible desktop panel for a clock, a todo list, a music player or repository activity, and who is comfortable with an Electron app on their desktop. It is the wrong choice if you need a native widget, if you need the plugins that are still marked as not started, such as the chat bot, the virtual character tracking and the Bilibili, weather and course panels, or if you need a released build newer than 0.8.1.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 179 days ago.
- What is it written in?
- Mainly Vue, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A widget host rather than a single widget
Monit is described in the README as a desktop widget for displaying various kinds of information. That phrasing hides the more interesting design decision: the application is a host, and the widgets are plugins.
The plugin table in the README lists fourteen entries with a feature, a technology stack, a contributor and a status. Nine are marked as done and five are marked with a blocked symbol. The finished ones are guide, a user walkthrough built with the Vue Composition API; count, a counter written with the Vue Options API; github, an activity monitor built with VueO, Axios and Grid; clock, a flip clock built with VueC, Scss and keyframes; todo, a to-do list built with VueC, Pug and a draggable component; camera, a camera helper built with VueC, Canvas and MediaPipe; juejin, another activity monitor, contributed by Ned and built with VueO, Axios and Grid; image, an image panel built with VueC, IPC and a dialog; and music, a NetEase music panel built with VueC, Axios and Audio.
The stack column is the most useful part of that table. It shows two distinct Vue styles coexisting, the Composition API and the Options API, and it shows which plugins need native-ish capability: IPC and a dialog for the image panel, Canvas and MediaPipe for the camera helper.
This is a personal desktop utility rather than a product for a team. The audience is one person who wants a clock and a music player on top of their windows.
Six plugins are still on the list, and three are the interesting ones
The blocked entries are worth reading, because they show where the project wanted to go. chat is a question answering bot planned with VueC, Axios and OpenAI. vtube is virtual character tracking planned with VueC, Kalidokit and MediaPipe. bilibili, weather and course are all listed as information monitoring or timetable features with no technology stack and no contributor recorded.
Three of those have a real consequence for anyone considering the project today. The OpenAI powered chat plugin means a widget with a network call to a paid model API. The virtual character tracking plugin needs a webcam and a body tracking model running locally, which is the heaviest thing in the list by a wide margin. The course panel implies structured data about a timetable that the README never explains.
None of them are shipped. The chat and vtube rows carry a stack and a contributor but a blocked status, and the last three rows carry neither, so they are closer to ideas than to scheduled work.
For an adopter, that distinction matters. A widget host whose roadmap lists fourteen plugins is not the same as a product where a given widget exists. The status column is the only reliable guide, and it is the column to check first.
Installation is a downloaded package and one macOS command
The README does not ask you to clone and build. Installation means picking the installer for your operating system from the Release page or the project mirror, and the README notes that packaging is done automatically with GitHub Actions so there is no local build step and, in the project's words, no need to worry about security.
The one platform specific step is macOS. Because the app is not signed with an Apple developer account, opening it can produce an error saying Monit.app is damaged. The README gives the fix as a single command:
sudo xattr -rd com.apple.quarantine /Applications/Monit.appThat command strips the quarantine attribute from the downloaded bundle so Gatekeeper stops blocking it. It is a legitimate step for a locally built unsigned app, and it is also the point where a reviewer should think about what they are running: an unsigned desktop application that is allowed to sit on top of your windows.
The app also supports starting on boot, checking for updates, switching themes, sending notifications and invoking system commands. Those capabilities come from the Electron main process and the host rather than from any single widget, which is the point of hosting them centrally.
Vue 3, Pinia and a Vue CLI plugin that is still an alpha
The dependency list in package.json describes the stack precisely. Vue is at 3.2.47, with vue-router for navigation, pinia for state, vuedraggable for the draggable behaviour the todo plugin needs, axios for the network calls, electron-store for local persistence, node-fetch, and the MediaPipe packages for the camera work.
The build tooling is where the friction sits. The scripts call the Vue CLI with the Electron plugins:
"build": "vue-cli-service electron:build",
"dev": "vue-cli-service electron:serve",
"docs": "docsify serve docs",
"format": "prettier --write .",
"prepare": "husky install",
"release": "vue-cli-service electron:build --publish always"The Electron integration comes from vue-cli-plugin-electron-builder, pinned at version 3.0.0-alpha.4, with electron-builder itself at 23.6.0 and Electron at 21.4.4. A plugin dependency pinned to an alpha release from the Vue CLI era is the kind of choice that makes an upgrade painful, because the alpha is what couples the app to that particular generation of Vue CLI and Electron.
Styling is Tailwind CSS with PostCSS and autoprefixer, Pug is used for templates, and Prettier handles formatting with plugins for Pug and Tailwind class order, enforced through lint-staged and husky hooks on commit. The engines field requires node at 14 or later and pnpm at 7 or later, and the repository carries a pnpm-lock.yaml rather than an npm lockfile.
The directory split tells you where to add a plugin
The top level of the repository is more revealing than the README. Alongside app/, config/, core/, event/, lib/, public/, server/ and docs/ there are vue.config.js, tailwind.config.js, postcss.config.js, tsconfig.json, custom.d.ts, entitlements.mac.plist and a .husky/ directory.
Those names suggest a layered Electron application. app/ is the Vue renderer application, core/ holds shared logic, event/ is where the renderer and the main process exchange messages, and server/ is where the main process code lives, with public/ holding static assets and config/ holding application configuration. The custom.d.ts file sits next to the TypeScript config, which is where ambient module declarations for third party modules usually go.
entitlements.mac.plist is the macOS entitlements file, needed because an Electron app that wants things like a microphone or a camera must declare them, and the camera helper plugin with MediaPipe is exactly the kind of feature that needs it.
A contributor reading this layout can work out where to put a new widget, which is the real documentation value. The project also publishes a user guide and a development guide on its documentation site, and the docs/ folder in the repository is served locally with docsify through the docs script.
Maintenance: commits in 2026, releases frozen since 2023
The repository is not archived and the last push was on 2026-04-27, so work has continued on main. The release history tells a different story. The tagged versions are v0.8.1 from 2023-07-01, v0.8.0 from 2023-03-31 and v0.7.3 from 2022-12-19, and the version field in package.json is still 0.8.1.
So the code has moved since the last release, but no tagged build has been cut since July 2023. For an end user that matters, because the packages on the Release page are older than the source. The README's screenshot is labelled v0.7.0, which is older still.
The licence is MIT, and the LICENSE file sits at the repository root. MIT is permissive, so for a personal desktop utility the licence is rarely the deciding factor, though it is the reason the code can be forked and continued without asking.
Two details are worth noting for anyone building from source. The package is marked private, so it is not published to npm, and the release script uses the Electron builder with --publish always, which is what produces the installers that GitHub Actions uploads to the Release page.
Editorial conclusion
Monit suits someone who wants a small always visible desktop panel for a clock, a todo list, a music player or repository activity, and who is comfortable with an Electron app on their desktop. It is the wrong choice if you need a native widget, if you need the plugins that are still marked as not started, such as the chat bot, the virtual character tracking and the Bilibili, weather and course panels, or if you need a released build newer than 0.8.1. Before you install it, check the plugin table for the status of the widget you actually want, run the documented xattr command on macOS if the app is reported as damaged, and note that the last push was on 2026-04-27 while the last tagged release is v0.8.1 from 2023-07-01.
Frequently asked questions
What is the Monit desktop widget app built with?
Monit is an Electron application whose widget plugins are written in Vue 3 with TypeScript, using Pinia for state, vue-router, axios for network requests, electron-store for local persistence and MediaPipe for the camera helper plugin. The package.json requires node 14 or later and pnpm 7 or later.
How do I fix the damaged Monit.app error on macOS?
The README states that because the app has no Apple developer account, macOS can report Monit.app as damaged when it is opened. The documented fix is to run sudo xattr -rd com.apple.quarantine /Applications/Monit.app, which removes the quarantine attribute from the downloaded application.
Which Monit plugins are finished and which are still planned?
The README plugin table marks guide, count, github, clock, todo, camera, juejin, image and music as complete. The chat bot, the virtual character tracking plugin, and the bilibili, weather and course panels are listed with a blocked status, so those widgets are not available in a release.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/fzf404-monit)