MagicMirror² is an open source modular smart mirror platform. With a growing list of installable modules, the MagicMirror² allows you to convert your hallway or bathroom mirror into your personal assistant.
  • JavaScript 89.2%
  • CSS 8%
  • Nunjucks 2.2%
  • HTML 0.4%
  • TypeScript 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Kristjan ESPERANTO f138f5b690
Release 2.38.0 (#4286)
## Release Notes
Thanks to: @ago1776, @alkank, @Antra, @Blackspirits, @deBasMan21,
@flightlesstux, @i-xul, @jamalkamaladdin, @khassel, @KristjanESPERANTO,
@MannXo, @pascalpfammatter, @rejas
> ⚠️ This release needs nodejs version >=22.22.2 <23 || >=24

[Compare to previous Release
v2.37.0](https://github.com/MagicMirrorOrg/MagicMirror/compare/v2.37.0...develop)


### [core]
- Prepare Release 2.38.0 (#4285)
- fix: let Electron select the Wayland display (#4268)
- fix(http): improve access error messages (#4281)
- fix: always redact client configuration (#4275)
- refactor: migrate browser scripts to ESM (#4272)
- refactor: convert animateCSS to ES module (#4266)
- use filter instead of find to get all allowed secrets when multiple
instances of a module are active (#4265)
- refactor: convert notificationFx to ES module (#4263)
- refactor: enforce function expression style (#4262)
- fix: validate client IP behind trusted proxies (#4261)
- prefer arrow over function (#4252)
- refactor(utils): simplify configuration validation and error handling
(#4240)
- fix(server): validate request origins (#4234)
- remove codeql warning (#4231)
- refactor(socket): use direct ESM import in main (#4225)
- refactor(socket): load Socket.IO client via ESM (#4224)
- style: simplify Electron startup checks (#4213)
- refactor: consolidate electron bootstrap into async function (#4210)
- refactor(module): simplify and fix configMerge (#4203)
- refactor: convert Translator to ES module (#4202)
- docs: add CodeQL review steps and restructure after-release checklist
(#4200)
- refactor: centralize server port resolution (#4198)
- refactor: use const instead of let for variable declarations (#4196)
- refactor: replace Loader object with named exports (#4195)
- set next release dev number
- refactor(eslint): enforce prefer-arrow-callback rule (#4251)
- refactor(http_fetcher): make dynamic URL handling explicit (#4282)
- refactor: use explicit global config (#4233)
- expand logic of hideConfigSecrets, add more tests (#4229)
- refactor: make browser startup more explicit (#4214)

### [dependencies]
- update dependencies (#4276)
- update dependencies incl. electron to v44 (#4250)
- chore: update eslint incl. plugins + review rules (#4236)
- Bump actions/stale from 10 to 11 (#4215)
- update dependencies (#4221)
- Bump actions/setup-node from 6 to 7 (#4204)
- chore: update dependencies (#4201)
- Bump electron from 42.5.2 to 43.0.0 (#4192)

### [modules/alert]
- Move alert translations into common translations (#4284)

### [modules/calendar]
- Fixes issue 4243: Ensure while loop in calendar module does not get
stuck when no entries (#4244)
- fix(calendar): escape HTML in event title and location (#4260)
- calendar: allow custom events to override symbol class (#4257)
- Fix calendar crash when yearmatchgroup regex does not match (#4239)
- fix(calendar): keep yearly events in DTSTART's month when BYMONTH is
missing (#4222)
- fix(calendar): correct multi-day slice day counts (#4232)
- chore: update dependencies + adapt calendar tests (#4211)
- fix(calendar): sliced multi-day events start at 00:00, not 23:59
(#4208)

### [modules/newsfeed]
- newsfeed: don't use cors url in njk template (#4279)
- refactor(newsfeed): extract feed item normalization into feeditem.js
(#4271)
- refactor(newsfeed): replace feedme lib with feedparser (#4269)
- newsfeed: fix allowedBasicHtmlTags (#4258)
- newsfeed: update checkArticleUrl (#4256)

### [modules/updatenotification]
- feat(updatenotification): implement trusted module configuration for
update commands (#4259)

### [modules/weather]
- feat: add FMI weather provider (#4278)
- feat(weather): enable CSS ordering for forecast and hourly columns
(#4118)
- fix(weather): respect initial load delay (#4254)
- fix(weather): restrict provider loading to the providers directory
(#4235)
- refactor(weather): extract WeatherProvider base class (#4228)

### [testing]
- ci: fail lint on warnings (#4230)
- add test if install works for minimal node version (#4197)

### [translation]
- feat(i18n): add Azerbaijani translation (#4283)
- feat(i18n): complete Turkish translations (#4277)
- Improve Portuguese translations (#4274)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Kevin G. <crazylegstoo@gmail.com>
Co-authored-by: veeck <gitkraken@veeck.de>
Co-authored-by: Veeck <github@veeck.de>
Co-authored-by: Karsten Hassel <hassel@gmx.de>
Co-authored-by: Jboucly <33218155+jboucly@users.noreply.github.com>
Co-authored-by: Jboucly <contact@jboucly.fr>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jarno <54169345+jarnoml@users.noreply.github.com>
Co-authored-by: sam detweiler <sdetweil@gmail.com>
Co-authored-by: Jordan Welch <JordanHWelch@gmail.com>
Co-authored-by: Blackspirits <blackspirits@gmail.com>
Co-authored-by: Samed Ozdemir <samed@xsor.io>
Co-authored-by: in-voker <58696565+in-voker@users.noreply.github.com>
Co-authored-by: Andrés Vanegas Jiménez <142350+angeldeejay@users.noreply.github.com>
Co-authored-by: cgillinger <christian.gillinger@gmail.com>
Co-authored-by: Sonny B <43247590+sonnyb9@users.noreply.github.com>
Co-authored-by: sonnyb9 <sonnyb9@users.noreply.github.com>
Co-authored-by: Morgan McBee <egeekial@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Mike Bishop <mbishop@evequefou.be>
Co-authored-by: ago1776 <andi.goepfert@gmx.de>
Co-authored-by: pascalpfammatter <pascal.pfammatter@mirific.ch>
Co-authored-by: Pascal Pfammatter <304897782+pascalpfammatter@users.noreply.github.com>
Co-authored-by: Anders Demant van der Weide <antra@antra.dk>
Co-authored-by: Bas Buijsen <72604903+deBasMan21@users.noreply.github.com>
Co-authored-by: Parman Mohammadalizadeh <prmma23@gmail.com>
Co-authored-by: alkank <alkankizilca@gmail.com>
Co-authored-by: Henkka <121262594+i-xul@users.noreply.github.com>
Co-authored-by: Ercan Ermis <18646235+flightlesstux@users.noreply.github.com>
Co-authored-by: Jamal Kamaladdinoglu <jamalkamaladdin@gmail.com>
2026-10-01 16:34:56 +02:00
.github Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
.husky Release 2.30.0 (#3673) 2025-01-01 08:27:27 -06:00
clientonly Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
config Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
css Release 2.35.0 (#4072) 2026-04-01 12:35:16 +02:00
defaultmodules Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
js Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
modules Release 2.35.0 (#4072) 2026-04-01 12:35:16 +02:00
serveronly Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
tests Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
translations Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
.editorconfig Add prettier, configs and editorconfig 2020-05-07 14:09:22 +02:00
.gitattributes Release 2.24.0 (#3141) 2023-07-01 21:17:31 +02:00
.gitignore Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
.npmrc Release 2.27.0 (#3410) 2024-04-01 22:03:20 +02:00
.prettierignore Release 2.29.0 (#3568) 2024-10-01 00:02:17 +02:00
CHANGELOG.md Release 2.34.0 (#3999) 2026-01-01 08:45:36 -06:00
Collaboration.md Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
cspell.config.json Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
eslint.config.mjs Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
favicon.svg Release 2.35.0 (#4072) 2026-04-01 12:35:16 +02:00
index.html Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
jsconfig.json Run prettier over ALL files once 2020-05-11 22:22:32 +02:00
LICENSE.md Release 2.34.0 (#3999) 2026-01-01 08:45:36 -06:00
module-types.ts Release v2.25.0 (#3214) 2023-10-01 20:13:41 +02:00
package-lock.json Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
package.json Release 2.38.0 (#4286) 2026-10-01 16:34:56 +02:00
prettier.config.mjs Release 2.37.0 (#4194) 2026-07-01 22:01:42 +02:00
README.md Release 2.35.0 (#4072) 2026-04-01 12:35:16 +02:00
vitest.config.mjs Release 2.35.0 (#4072) 2026-04-01 12:35:16 +02:00

MagicMirror²: The open source modular smart mirror platform.

License GitHub Actions Build Status GitHub Stars

MagicMirror² is an open source modular smart mirror platform. With a growing list of installable modules, the MagicMirror² allows you to convert your hallway or bathroom mirror into your personal assistant. MagicMirror² is built by the creator of the original MagicMirror with the incredible help of a growing community of contributors.

MagicMirror² focuses on a modular plugin system and uses Electron as an application wrapper. So no more web server or browser installs necessary!

Animated demonstration of MagicMirror²

Documentation

For the full documentation including installation instructions, please visit our dedicated documentation website: https://docs.magicmirror.builders.

Contributing Guidelines

Contributions of all kinds are welcome, not only in the form of code but also with regards to

  • bug reports
  • documentation
  • translations

For the full contribution guidelines, check out: https://docs.magicmirror.builders/about/contributing.html

Enjoying MagicMirror? Consider a donation!

MagicMirror² is Open Source and free. That doesn't mean we don't need any money.

Please consider a donation to help us cover the ongoing costs like webservers and email services. If we receive enough donations we might even be able to free up some working hours and spend some extra time improving the MagicMirror² core.

To donate, please follow this link.

MagPi Top 50