MagicMirror

Developer Tools

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.

Latest v2.37.0 · by MagicMirrorOrgWebsiteMagicMirrorOrg/MagicMirror

Release activity

Release activity — 5 releases across 5 days in the last year. Each cell is one day; darker means more releases that day. Older weeks are hidden at this screen width.
JunJulAug
SundayNo releases on May 10, 2026No releases on May 17, 2026No releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026No releases on Aug 16, 2026No releases on Aug 23, 2026
MondayNo releases on May 11, 2026No releases on May 18, 2026No releases on May 25, 2026No releases on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026No releases on Aug 17, 2026No releases on Aug 24, 2026
TuesdayNo releases on May 12, 2026No releases on May 19, 2026No releases on May 26, 2026No releases on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 2026No releases on Aug 18, 2026
WednesdayNo releases on May 13, 2026No releases on May 20, 2026No releases on May 27, 2026No releases on Jun 3, 2026No releases on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 20261 release on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026No releases on Aug 12, 2026No releases on Aug 19, 2026
ThursdayNo releases on May 14, 2026No releases on May 21, 2026No releases on May 28, 2026No releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026No releases on Aug 13, 2026No releases on Aug 20, 2026
FridayNo releases on May 15, 2026No releases on May 22, 2026No releases on May 29, 2026No releases on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026No releases on Aug 14, 2026No releases on Aug 21, 2026
SaturdayNo releases on May 16, 2026No releases on May 23, 2026No releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026No releases on Aug 15, 2026No releases on Aug 22, 2026

5 releases in the last year

Changelog

v2.37.0

Latest
Added 3
  • include Git hash and branch in system information log
  • support object-based electronSwitches
  • add allowBasicHtmlTags option for basic emphasis in newsfeed
Changed 7
  • use ES module imports in browser core
  • rewrite Module as an ES6 class
  • rewrite NodeHelper as an ES6 class
  • update electron to v42
  • update dependencies to node v26
  • pre-filter ICS data before parsing in calendar
  • use async ICS parsing to avoid blocking event loop in calendar
Fixed 8
  • map IPv6 :: wildcard to localhost in electron
  • prevent unauthorized secret expansion in socket payloads
  • modules losing data after HTTP 304 responses
  • enforce ipWhitelist for Socket.IO
  • systeminformation thread not ending
  • output right used node version from parent process in systeminformation
  • skip postinstall git clean when not in a git repository
  • resolve CodeQL alerts in alert module
Removed 2
  • old Object.assign polyfill
  • ajv dependency

From MagicMirror

Release Notes

Thanks to: @angeldeejay, @egeekial, @khassel, @KristjanESPERANTO, @MikeBishop, @rejas

⚠️ This release needs nodejs version >=22.22.2 <23 || >=24 (no change to previous release)

Compare to previous Release v2.36.0

[core]
  • Prepare Release 2.37.0 (#4193)
  • fix(electron): map IPv6 :: wildcard to localhost (#4188)
  • refactor(main): modernize DOM update flow with async/await (#4186)
  • refactor(main): simplify _updateDom with async/await (#4185)
  • fix(security): prevent unauthorized secret expansion in socket payloads (#4184)
  • refactor(main): simplify updateDomWithContent async flow (#4182)
  • fix: modules losing data after HTTP 304 responses (#4180)
  • chore: add missing core defaults (#4181)
  • fix(server): enforce ipWhitelist for Socket.IO too (#4169)
  • feat(systeminfo): include Git hash and branch in system information log (#4167)
  • feat(electron): support object-based electronSwitches (#4161)
  • systeminformation thread not ending: move error handling from utils to app (#4160)
  • fix systeminformation thread not ending (#4155)
  • refactor: use ES module imports in browser core (#4158)
  • refactor(core): remove old Object.assign polyfill (#4157)
  • refactor: rewrite Module as an ES6 class (#4151)
  • refactor: rewrite NodeHelper as an ES6 class (#4147)
  • update eletron to v42 (#4144)
  • refactor(utils): drop ajv dependency (#4142)
  • fix(systeminformation): output right 'used node' version (from parent process) (#4141)
  • fix: skip postinstall git clean when not in a git repository (#4139)
  • Remove unnecessary conditionals and fix falsy property check in imperial conversion (#4135)
  • update version in package.json
[dependencies]
  • update dependencies (#4191)
  • Bump actions/checkout from 6 to 7 (#4190)
  • chore: update dependencies and adjust import path for SunCalc (#4189)
  • update dependencies incl. electron and revert yauzl-electron-install-fix (#4183)
  • update dependencies, add electron fix in package.json (#4175)
  • chore: update dependencies (#4162)
  • Bump actions/dependency-review-action from 4 to 5 (#4152)
  • Unify linting: replace Stylelint and markdownlint with ESLint (#4148)
  • update dependencies and workflows to node v26 (#4140)
[modules/alert]
  • CodeQL cleanup for alerts #18, #19, #20 (#4153)
  • fix: resolve CodeQL alerts #24 and #26 (#4145)
  • fix(electron): resolve CodeQL alerts #22 and #25 in electron.js (#4136)
[modules/calendar]
  • perf(calendar): pre-filter ICS data before parsing (#4168)
  • perf(calendar): use async ICS parsing to avoid blocking event loop (#4143)
[modules/newsfeed]
  • [newsfeed] add allowBasicHtmlTags option for basic emphasis (#4176)
[modules/updatenotification]
  • fix(updatenotification): don't spawn a child process when running under PM2 (#4166)
  • fix(updatenotification): use process.argv[0] as restart binary (#4163)
  • fix(updatenotification): preserve start mode on restart (#4156)
  • fix(updatenotification): fix ref diff parsing for fetch --dry-run (#4138)
  • refactor(updatenotification): replace pm2 usage with node logic (#4134)
[modules/weather]
  • feat(weather): add Buienradar provider (#4164)
[testing]
  • remove warning in unit tests (for nodejs >= v25) (#4149)
  • polish HTTP 304 docs/test/handling (#4129)
View originalPermalink
How v2.37.0 went

v2.36.0

Added 1
  • Add option to disable or restrict cors endpoint
Changed 2
  • Allow HTTPFetcher to pass through 304 responses
  • Migrate SMHI weather provider to SNOW1gv1 API replacing deprecated PMP3gv2
Fixed 12
  • Fix http-fetcher to fall back to reloadInterval after retries exhausted
  • Fix config endpoint to handle functions in module configs
  • Fix replaceSecretPlaceholder function
  • Prevent crash when config is undefined in socket handler
  • Fix cors function for alpine linux
  • Prevent duplicate parse error callback in newsfeed module when using pipeline
Security 4
  • Disable cors proxy by default and require explicit enablement in config.js
  • Prevent SSRF attacks via DNS rebinding in cors endpoint
  • Block private and reserved IP addresses from being accessed through the /cors endpoint
  • Restrict replaceSecretPlaceholder function to cors with allowWhitelist

From MagicMirror

Release Notes

Thanks to: @cgillinger, @khassel, @KristjanESPERANTO, @sonnyb9

⚠️ This release needs nodejs version >=22.21.1 <23 || >=24 (no change to previous release)

Compare to previous Release v2.35.0

This release falls outside the quarterly schedule. We opted for an early release due to:

  • Security fix for the internal cors proxy
  • API change of the weather provider smi
  • Several bug fixes
Breaking Changes

The cors proxy is now disabled by default. If required, it must be explicitly enabled in the config.js file. See the documentation.

⚠️ Security

You can find several publicly accessible MagicMirror² instances.

This should never be done. Doing so makes your entire configuration, including secrets and API keys, publicly visible. Furthermore, it allows attackers to target the host; this is only prevented beginning with this release.

Public MagicMirror² instances should always run behind a reverse proxy with authentication.

[core]
  • Prepare Release 2.36.0 (#4126)
  • Allow HTTPFetcher to pass through 304 responses (#4120)
  • fix(http-fetcher): fall back to reloadInterval after retries exhausted (#4113)
  • config endpoint must handle functions in module configs (#4106)
  • fix replaceSecretPlaceholder (#4104)
  • restrict replaceSecretPlaceholder to cors with allowWhitelist (#4102)
  • fix: prevent crash when config is undefined in socket handler (#4096)
  • fix cors function for alpine linux (#4091)
  • fix(cors): prevent SSRF via DNS rebinding (#4090)
  • add option to disable or restrict cors endpoint (#4087)
  • fix: prevent SSRF via /cors endpoint by blocking private/reserved IPs (#4084)
  • chore: add permissions section to enforce pull-request rules workflow (#4079)
  • update version for develop
[dependencies]
  • update dependencies (#4124)
  • chore: update dependencies (#4088)
  • refactor: enable ESLint rule "no-unused-vars" and handle related issues (#4080)
[modules/newsfeed]
  • fix(newsfeed): prevent duplicate parse error callback when using pipeline (#4083)
[modules/updatenotification]
  • fix(updatenotification): harden git command execution + simplify checkUpdates (#4115)
  • fix(tests): correct import path for git_helper module in updatenotification tests (#4078)
[modules/weather]
  • fix(weather): use nearest openmeteo hourly data (#4123)
  • fix(weather): avoid loading state after reconnect (#4121)
  • weather: fix UV index display and add WeatherFlow precipitation (#4108)
  • fix(weather): restore OpenWeatherMap v2.5 support (#4101)
  • fix(weather): use stable instanceId to prevent duplicate fetchers (#4092)
  • SMHI: migrate to SNOW1gv1 API (replace deprecated PMP3gv2) (#4082)
[testing]
  • ci(actions): set explicit token permissions (#4114)
  • fix(http_fetcher): use undici.fetch when dispatcher is present (#4097)
  • ci(codeql): also scan develop branch on push and PR (#4086)
  • refactor: replace implicit global config with explicit global.config (#4085)
View originalPermalink
How v2.36.0 went

v2.35.0

Added 3
  • Allow environment variables in CORS URLs
  • Add dark theme logo
  • Add Weather API Provider for weather module
Changed 10
  • Simplify internal require() calls
  • Change loading config.js to allow variables in config.js and protect sensitive data
  • Move custom.css from css to config
  • Move default modules from /modules/default to /defaultmodules
  • Update node-ical and support its rrule-temporal changes
  • Change default start scripts from X11 to Wayland
Fixed 9
  • Fix CORS proxy getting binary data (e.g. png, webp)
  • Correct secret redaction and optimize loadConfig
  • Fix systeminformation not displaying electron version
  • Fix calendar showEnd behavior to be more consistent across time formats
  • Fix calendar full-day recurrence lookup with node-ical 0.23.1
  • Correct day-of-week for full-day recurring events across all timezones
Removed 1
  • Remove kioskmode

From MagicMirror

Release Notes

Thanks to: @angeldeejay, @in-voker, @JHWelch, @khassel, @KristjanESPERANTO, @rejas, @sdetweil

⚠️ This release needs nodejs version >=22.21.1 <23 || >=24 (no change to previous release)

Compare to previous Release v2.34.0

⚠️ We introduced some internal changes with this release, please read this forum post before upgrading!

[core]
  • Prepare Release 2.35.0 (#4071)
  • docs: add security policy and vulnerability reporting guidelines (#4069)
  • refactor: simplify internal require() calls (#4056)
  • allow environment variables in cors urls (#4033)
  • fix cors proxy getting binary data (e.g. png, webp) (#4030)
  • fix: correct secret redaction and optimize loadConfig (#4031)
  • change loading config.js, allow variables in config.js and try to protect sensitive data (#4029)
  • remove kioskmode (#4027)
  • Add dark theme logo (#4026)
  • move custom.css from css to config (#4020)
  • move default modules from /modules/default to /defaultmodules (#4019)
  • update node versions in workflows (#4018)
  • [core] refactor: extract and centralize HTTP fetcher (#4016)
  • fix systeminformation not displaying electron version (#4012)
  • Update node-ical and support it's rrule-temporal changes (#4010)
  • Change default start scripts from X11 to Wayland (#4011)
  • refactor: unify favicon for index.html and Electron (#4006)
  • [core] run systeminformation in subprocess so the info is always displayed (#4002)
  • set next release dev number (#4000)
[dependencies]
  • update dependencies (#4068)
  • update dependencies incl. electron to v41 (#4058)
  • chore: upgrade ESLint to v10 and fix newly surfaced issues (#4057)
  • chore: update ESLint and plugins, simplify config, apply new rules (#4052)
  • chore: update dependencies + add exports, files, and sideEffects fields to package.json (#4040)
  • [core] refactor: enable ESLint rule require-await and handle detected issues (#4038)
  • Update node-ical and other deps (#4025)
  • chore: update dependencies (#4021)
  • chore(eslint): migrate from eslint-plugin-vitest to @vitest/eslint-plugin and run rules only on test files (#4014)
  • Update deps as requested by dependabot (#4008)
  • update Collaboration.md and dependencies (#4001)
[logging]
  • refactor: further logger clean-up (#4050)
  • Fix Node.js v25 logging prefix and modernize logger (#4049)
[modules/calendar]
  • fix(calendar): make showEnd behavior more consistent across time formats (#4059)
  • test(calendar): fix hardcoded date in event shape test (#4055)
  • [calendar] refactor: delegate event expansion to node-ical's expandRecurringEvent (#4047)
  • calendar.js: remove useless hasCalendarURL function (#4028)
  • fix(calendar): update to node-ical 0.23.1 and fix full-day recurrence lookup (#4013)
  • fix(calendar): correct day-of-week for full-day recurring events across all timezones (#4004)
[modules/newsfeed]
  • fix(newsfeed): fix full article view and add framing check (#4039)
  • [newsfeed] refactor: migrate to centralized HTTPFetcher (#4023)
[modules/weather]
  • fix(weather): fix openmeteo forecast stuck in the past (#4064)
  • fix(weather): fix weathergov forecast day labels off by one (#4065)
  • weather: fixes for templates (#4054)
  • weather: add possibility to override njk's and css (#4051)
  • Use getDateString in openmeteo (#4046)
  • [weather] refactor: migrate to server-side providers with centralized HTTPFetcher (#4032)
  • [weather] feat: add Weather API Provider (#4036)
[testing]
  • chore: remove obsolete Jest config and unit test global setup (#4044)
  • replace template_spec test with config_variables test (#4034)
  • refactor(clientonly): modernize code structure and add comprehensive tests (#4022)
  • Switch to undici Agent for HTTPS requests (#4015)
  • chore: migrate CI workflows to ubuntu-slim for faster startup times (#4007)
View originalPermalink
How v2.35.0 went

v2.34.0

Added 3
  • Add server:watch script with automatic restart on file changes
  • Add configurable forecast date format option for weather module
  • Add ESlint rule no-sparse-arrays for config check
Changed 6
  • Require Node.js version >=22.21.1 <23 || >=24
  • Migrate CalendarFetcher to ES6 class and improve error handling
  • Replace express-ipfilter with lightweight custom middleware
  • Replace module-alias dependency with internal alias resolver
  • Replace XMLHttpRequest with fetch and migrate e2e tests to Playwright
  • Migrate from jest to vitest for testing
Fixed 11
  • Allow browser globals in config files
  • Restore --ozone-platform=wayland flag for reliable Wayland support
  • Prevent excessive calendar fetching on client reload
  • Show repeatingCountTitle only if yearDiff > 0 in calendar module
  • Set compliments remote file minimum delay to 15 minutes
  • Fix duplicate query param in compliments module refresh url
Removed 1
  • Remove deprecated ukmetoffice datapoint provider

From MagicMirror

Release Notes

Thanks to: @Blackspirits, @Crazylegstoo, @jarnoml, @jboucly, @JHWelch, @khassel, @KristjanESPERANTO, @rejas, @sdetweil, @xsorifc28

⚠️ This release needs nodejs version >=22.21.1 <23 || >=24

Compare to previous Release v2.33.0

[core]
  • Merge branch 'master' into develop
  • Prepare Release 2.34.0 (#3998)
  • dependency update + adjust Playwright setup + fix linter issue (#3994)
  • demo with gif (#3995)
  • [core] fix: allow browser globals in config files (#3992)
  • [core] fix: restore --ozone-platform=wayland flag for reliable Wayland support (#3989)
  • [core] auto create release notes with every push on develop (#3985)
  • [core] chore: simplify Wayland start script (#3974)
  • [gitignore] restore the old Git behavior for the default modules (#3968)
  • [core] configure cspell to check default modules only and fix typos (#3955)
  • [gitignore] restoring the old Git behavior for the CSS directory (#3954)
  • feat(core): add server:watch script with automatic restart on file changes (#3920)
  • [check_config] refactor: improve error handling (#3927)
  • refactor: replace express-ipfilter with lightweight custom middleware (#3917)
  • refactor: replace module-alias dependency with internal alias resolver (#3893)
  • Release 2.33.0 (#3903)
[dependencies]
  • [chore] update dependencies and min. node version (#3986)
  • [core] bump dependencies into december (#3982)
  • Bump actions/checkout from 5 to 6 (#3972)
  • Update deps, unpin parse5 (#3934)
  • [core] Update deps and pin jsdom to v27.0.0 (#3925)
  • chore: update dependencies (#3921)
  • update deps, exclude node v23 (#3916)
  • remove eslint warnings, add npm publish process to Collaboration.md (#3913)
  • feat: add ESlint rule no-sparse-arrays for config check (#3911)
  • chore: bump dependencies into october (#3909)
[logging]
  • logger: add calling filename as prefix on server side (#3926)
  • [logger] Add prefixes to most Log messages (#3923)
[modules/alert]
  • Add new pt and pt-BR translations for Alert module and update global PT strings (#3965)
[modules/calendar]
  • add checksum to test whether calendar event list changed (#3988)
  • [calendar] fix: prevent excessive fetching on client reload and refactor calendarfetcherutils.js (#3976)
  • [calendar] refactor: migrate CalendarFetcher to ES6 class and improve error handling (#3959)
  • [calendar] Show repeatingCountTitle only if yearDiff > 0 (#3949)
  • [tests] suppress debug logs in CI environment + improve calendar symbol test stability (#3941)
  • [calendar] chore: remove requiresVersion: "2.1.0" (#3932)
  • [calendar] test: remove "Recurring event per timezone" test (#3929)
[modules/compliments]
  • [compliments] refactor: optimize loadComplimentFile method and add unit tests (#3969)
  • fix: set compliments remote file minimum delay to 15 minutes (#3970)
  • [compliments] fix: duplicate query param "?" in compliments module refresh url (#3967)
[modules/newsfeed]
  • [newsfeed] fix header layout issue (#3946)
[modules/weather]
  • [weatherprovider] update subclass language use override (#3914)
  • [weather] fix wind-icon not showing in pirateweather (#3957)
  • [weather] add error handling to weather fetch functions, including cors (#3791)
  • remove deprecated ukmetoffice datapoint provider, cleanup .gitignore (#3952)
  • fixes problems with daylight-saving-time in weather provider openmeteo (#3931)
  • Fix for envcanada Provider to use updated Env Canada URL (#3919)
  • [weather] feat: add configurable forecast date format option (#3918)
[testing]
  • testing: update "Enforce Pull-Request Rules" workflow (#3987)
  • [core] refactor: replace XMLHttpRequest with fetch and migrate e2e tests to Playwright (#3950)
  • [test] replace node-libgpiod with serialport in electron-rebuild workflow (#3945)
  • [ci] Add concurrency to automated tests workflow to cancel outdated runs (#3943)
  • [tests] migrate from jest to vitest (#3940)
View originalPermalink
How v2.34.0 went

v2.33.0

Added 3
  • Add configuration option for User-Agent, used by calendar & news module
  • Add prettier plugin for nunjuck templates in linter
  • Add clear log for occupied port at startup
Changed 11
  • Add CSS to prevent line breaking of sunset/sunrise time display in clock module
  • Enhance system information logging format and include additional env and RAM details
  • Add new file js/module_functions.js to move code used in several modules to one place
  • Use global.root_path where possible and add tests for config:check
  • Update defaultSymbol name in calendar module and the link to the icon search site
  • Update dependencies including electron to v38 as well as github actions
Fixed 6
  • Fixed broken unittest in calendar that only broke on the 1st of July and 1st of January
  • Fixed missing icons in clock when no other modules with icons is loaded
  • Fixed handling of empty values in weathergov providers handling of precipitationAmount in weather module
  • Fix regression handling of limit days in calendar module
  • Fixed regression of calendarfetcherutils.shouldEventBeExcluded in calendar module
  • Fixed socket.io timeout when server is slow to send notification, notification lost at client

From MagicMirror

[2.33.0] - 2025-10-01

Thanks to: @Crazylegstoo, @dathbe, @m-idler, @plebcity, @khassel, @KristjanESPERANTO, @rejas and @sdetweil!

⚠️ This release needs nodejs version v22.18.0 or higher

Added
  • Add configuration option for User-Agent, used by calendar & news module (#3255)
  • [linter] Add prettier plugin for nunjuck templates (#3887)
  • [core] Add clear log for occupied port at startup (#3890)
Changed
  • [clock] Add CSS to prevent line breaking of sunset/sunrise time display (#3816)
  • [core] Enhance system information logging format and include additional env and RAM details (#3839, #3843)
  • [refactor] Add new file js/module_functions.js to move code used in several modules to one place (#3837)
  • [refactor] Use global.root_path where possible and add tests for config:check (#3883, #3885, #3886, #3889)
  • [tests] refactor: simplify jest config file (#3844)
  • [tests] refactor: extract constants for weather electron tests (#3845)
  • [tests] refactor: add setupDOMEnvironment helper function to eliminate repetitive JSDOM setup code (#3860)
  • [tests] replace console with Log in calendar debug.js to avoid exception in eslint config (#3846)
  • [tests] speed up e2e tests, cleanup and stabilize weather e2e tests, update snapshot url (#3847, #3848, #3861)
  • [tests] refactor translation tests (#3866)
    • Remove sinon dependency in favor of Jest native mocking
    • Unify test helper functions across translation test suites
    • Rename setupDOMEnvironment to createTranslationTestEnvironment for consistency
    • Simplify DOM setup by removing unnecessary Promise/async patterns
    • Avoid potential port conflicts by using port 3001 for translator unit tests
    • Improve test reliability and maintainability
  • [tests] add alert module tests for different welcome_message configurations (#3867)
  • [lint-staged] use prettier --write --ignore-unknown in lint-staged to avoid errors on unsupported files (#3888)
Updated
  • [calendar] Update defaultSymbol name and also the link to the icon search site (#3879)
  • [core] Update dependencies including electron to v38 as well as github actions (#3831, #3849, #3857, #3858, #3872, #3876, #3882, #3891, #3896)
  • [weather] Update feels_like temperature calculation formula (#3869)
  • [weather] Update null value handling for weather type (#3892)
  • [layout] Update styles for weather and calendar (#3894)
Fixed
  • [calendar] Fixed broken unittest that only broke on the 1st of July and 1st of january (#3830)
  • [clock] Fixed missing icons when no other modules with icons is loaded (#3834)
  • [weather] Fixed handling of empty values in weathergov providers handling of precipitationAmount (#3859)
  • [calendar] Fix regression handling of limit days (#3840)
  • [calendar] Fixed regression of calendarfetcherutils.shouldEventBeExcluded (#3841)
  • [core] Fixed socket.io timeout when server is slow to send notification, notification lost at client (#3380)
  • [tests] refactor AnimateCSS tests after jsdom 27 upgrade (#3891)
  • [weather] Use apparent_temperature data from openmeteo's hourly weather for current feelsLikeTemp (#3868).
  • [weather] Updated envcanada Provider to use new database/URL schema for accessing weather data (#3878).
View originalPermalink
How v2.33.0 went

v2.32.0

Added 3
  • Allow to change module order for final renderer or dynamically with CSS via feature 'order' in config
  • Add option 'disableNextEvent' to clock module to hide next sun event
  • Implement short syntax for clock week
Changed 11
  • Simplify module loading process
  • Use 'node --run' instead of 'npm run' and adapt 'start:dev' script
  • Replace deprecated constants 'fs.F_OK' and 'fs.R_OK'
  • Replace 'ansis' with built-in function 'util.styleText'
  • Integrate stuff from 'vendor' and 'fonts' folders into main 'package.json' to simplify install and maintaining dependencies
  • Refactor 'calendarfetcherutils' in Calendar module to handle timezones better by removing unnecessary date conversions and using 'moment-timezone' when calculating recurring events
Fixed 5
  • Handle spellcheck issues
  • Fix fullday event rrule until with timezone offset
  • Add rule 'no-undef' in config file validation
  • Fix 'roboto.css' to avoid error message 'Unknown descriptor 'var(' in @font-face rule' in Firefox console
  • Fix e2e tests newsfeed and calendar to exit without open handles

From MagicMirror

[2.32.0] - 2025-07-01

Thanks to: @bughaver, @bugsounet, @khassel, @KristjanESPERANTO, @plebcity, @rejas, @sdetweil.

⚠️ This release needs nodejs version v22.14.0 or higher ⚠️ This release uses express v5 which has breaking changes that may cause problems with third-party modules

Added
  • [config] Allow to change module order for final renderer (or dynamically with CSS): Feature order in config (#3762)
  • [clock] Added option 'disableNextEvent' to hide next sun event (#3769)
  • [clock] Implement short syntax for clock week (#3775)
Changed
  • [refactor] Simplify module loading process (#3766)
  • Use node --run instead of npm run (#3764) and adapt start:dev script (#3773)
  • [workflow] Run linter and spellcheck with LTS node version (#3767)
  • [workflow] Split "Run test" step into two steps for more clarity (#3767)
  • [linter] Review linter setup (#3783)
    • Fix command to lint markdown in CONTRIBUTING.md
    • Re-activate JSDoc linting and fix linting issues
    • Refactor ESLint config to use defineConfig and globalIgnores
    • Replace eslint-plugin-import with eslint-plugin-import-x
    • Switch Stylelint config to flat format and simplify Stylelint scripts
  • [workflow] Replace Node.js version v23 with v24 (#3770)
  • [refactor] Replace deprecated constants fs.F_OK and fs.R_OK (#3789)
  • [refactor] Replace ansis with built-in function util.styleText (#3793)
  • [core] Integrate stuff from vendor and fonts folders into main package.json, simplifies install and maintaining dependencies (#3795, #3805)
  • [l10n] Complete translations (with the help of translation tools) (#3794)
  • [refactor] Refactored calendarfetcherutils in Calendar module to handle timezones better (#3806)
    • Removed as many of the date conversions as possible
    • Use moment-timezone when calculating recurring events, this will fix problems from the past with offsets and DST not being handled properly
    • Added some tests to test the behavior of the refactored methods to make sure the correct event dates are returned
  • [linter] Enable ESLint rule no-console and replace console with Log in some files (#3810)
  • [tests] Review and refactor translation tests (#3792)
Fixed
  • [fix] Handle spellcheck issues (#3783)
  • [calendar] fix fullday event rrule until with timezone offset (#3781)
  • [feat] Add rule no-undef in config file validation to fix #3785 (#3786)
  • [fonts] Fix roboto.css to avoid error message Unknown descriptor 'var(' in @font-face rule. in firefox console (#3787)
  • [tests] Fix and refactor e2e test Same keys in translations_spec.js (#3809)
  • [tests] Fix e2e tests newsfeed and calendar to exit without open handles (#3817)
Updated
  • [core] Update dependencies including electron to v36 (#3774, #3788, #3811, #3804, #3815, #3823)
  • [core] Update package type to commonjs
  • [logger] Review factory code part: use switch/case instead of if/else if (#3812)
View originalPermalink
How v2.32.0 went
v2.31.0

v2.31.0 - 2025-04-01

Added 7
  • Add CSS support to the digital clock hour/minute/second through the use of the classes clock-hour-digital, clock-minute-digital, and clock-second-digital
  • Add Arabic and Esperanto translation
  • Add Greek translation to Alerts module
  • Add specific ignoreOlderThan value per feed in newsfeed module
  • Add Humidity option to weather module hourly view
  • Add option to hide hourly weather entries that are zero, hiding the entire column if empty
  • Add option to iterate over modules directory instead of using modules defined in config.js in updatenotification module
Changed 5
  • Starting clientonly now checks for needed env var WAYLAND_DISPLAY or DISPLAY and starts electron with needed parameters, using wayland if both are set
  • Optimize systeminformation calls and output
  • Adapt start:x11:dev script
  • Yr weather provider now enforces a minimum updateInterval of 600 000 ms (10 minutes) to comply with terms of service, automatically increasing lower values to this minimum
  • Weatherflow weather provider fixed icons and added hourly support as well as UV, precipitation, and location name support
Fixed 8
  • Fix clipping events being broadcast in calendar module
  • Fix arrayed symbols in calendar module and add testcases
  • Fix wrong weatherCondition name in openmeteo provider which led to n/a icon
  • Fix wrong port in log message when starting server only
  • Fix NewYork event processed on system in Central timezone showing wrong time
  • Yr weather provider is now able to recover from bad API responses instead of freezing
  • Fix evening events being shown during the day in compliments module
  • Fix minor spacing issues when using UV Index in hourly weather view
Deprecated 1
  • Mark option secondsColor as deprecated in clock module

From MagicMirror

Thanks to: @Developer-Incoming, @eltociear, @geraki, @khassel, @KristjanESPERANTO, @MagMar94, @mixasgr, @n8many, @OWL4C, @rejas, @savvadam, @sdetweil.

⚠️ This release needs nodejs version v22.14.0 or higher

Added
  • Add CSS support to the digital clock hour/minute/second through the use of the classes clock-hour-digital, clock-minute-digital, and clock-second-digital.
  • Add Arabic (#3719) and Esperanto translation.
  • Mark option secondsColor as deprecated in clock module.
  • Add Greek translation to Alerts module.
  • [newsfeed] Add specific ignoreOlderThan value (override) per feed (#3360)
  • [weather] Added option Humidity to hourly View
  • [weather] Added option to hide hourly entries that are Zero, hiding the entire column if empty.
  • [updatenotification] Added option to iterate over modules directory instead using modules defined in config.js (#3739)
Changed
  • [core] starting clientonly now checks for needed env var WAYLAND_DISPLAY or DISPLAY and starts electron with needed parameters (if both are set wayland is used) (#3677)
  • [core] Optimize systeminformation calls and output (#3689)
  • [core] Add issue templates for feature requests and bug reports (#3695)
  • [core] Adapt start:x11:dev script
  • [weather/yr] The Yr weather provider now enforces a minimum updateInterval of 600 000 ms (10 minutes) to comply with the terms of service. If a lower value is set, it will be automatically increased to this minimum.
  • [weather/weatherflow] Fixed icons and added hourly support as well as UV, precipitation, and location name support.
  • [workflow] Run sudo apt-get update before installing packages to avoid install errors
  • [workflow] Exclude issues with label ready (coming with next release) from stale job
Removed
Updated
  • [core] Update requirements and dependencies including electron to v35 and formatting (#3593, #3693, #3717)
  • [core] Update prettier, ESLint and simplify config
  • Update Greek translation
Fixed
  • [calendar] Fix clipping events being broadcast (#3678)
  • [tests] Fix Electron tests by running them under new github image ubuntu-24.04, replace xserver with labwc, running under xserver and labwc depending on env variable WAYLAND_DISPLAY is set (#3676)
  • [calendar] Fix arrayed symbols, #3267, again, add testcase, add testcase for #3678
  • [weather] Fix wrong weatherCondition name in openmeteo provider which lead to n/a icon (#3691)
  • [core] Fix wrong port in log message when starting server only (#3696)
  • [calendar] Fix NewYork event processed on system in Central timezone shows wrong time #3701
  • [weather/yr] The Yr weather provider is now able to recover from bad API responses instead of freezing (#3296)
  • [compliments] Fix evening events being shown during the day (#3727)
  • [weather] Fixed minor spacing issues when using UV Index in Hourly
  • [workflow] Fix command to run spellcheck
View originalPermalink
How v2.31.0 went
v2.30.0

v2.30.0 - 2025-01-01 Another New year with exciting changes

Added 11
  • Add wayland and windows start options to package.json
  • Add test flag to index.html to pass to module js for test mode detection
  • Add export on animation names
  • Add support for refreshing remote compliments file
  • Re-add eslint-plugin-import now that it supports ESLint v9
  • Re-activate eslint-plugin-package-json to lint package.json
Changed 4
  • Run code style checks in workflow only once
  • Use project URL in fallback config
  • Switch to npx for lint-staged in pre-commit hook
  • Update electron dependency to v32
Fixed 3
  • Fix pm2 using detection when pm2 script is inside or outside MagicMirror root folder
  • Fix loading node_helper of modules to avoid black screen, display errors and continue loading with next module
  • Change default value for weatherEndpoint of provider openweathermap to /onecall
Removed 2
  • Remove node-pty and drivelist from rebuilded test
  • Remove @eslint/js dependency

From MagicMirror

Thanks to: @xsorifc28, @HeikoGr, @bugsounet, @khassel, @KristjanESPERANTO, @rejas, @sdetweil.

⚠️ This release needs nodejs version v20 or v22 or higher, minimum version is v20.18.1

Added
  • [core] Add wayland and windows start options to package.json (#3594)
  • [docs] Add step for npm publishing in release process (#3595)
  • [core] Add GitHub workflow to run spellcheck a few days before each release (#3623)
  • [core] Add test flag to index.html to pass to module js for test mode detection (needed by #3630)
  • [core] Add export on animation names (#3644)
  • [compliments] Add support for refreshing remote compliments file, and test cases (#3630)
  • [linter] Re-add eslint-plugin-importnow that it supports ESLint v9 (#3586)
  • [linter] Re-activate eslint-plugin-package-json to lint package.json (#3643)
  • [linter] Add linting for markdown files (#3646)
  • [linter] Add some handy ESLint rules.
  • [calendar] Add ability to display end date for full date events, where end is not same day (showEnd=true) (#3650)
  • [core] Add text to the config.js.sample file about the locale variable (#3654, #3655)
  • [core] Add fetch timeout for all node_helpers (thru undici, forces node 20.18.1 minimum) to help on slower systems. (#3660) (3661)
Changed
  • [core] Run code style checks in workflow only once (#3648)
  • [core] Fix animations export #3644 only on server side (#3649)
  • [core] Use project URL in fallback config (#3656)
  • [core] Fix Access Denied crash writing js/positions.js (on synology nas) #3651. new message, MM starts, but no modules showing (#3652)
  • [linter] Switch to 'npx' for lint-staged in pre-commit hook (#3658)
Removed
  • [tests] Remove node-pty and drivelist from rebuilded test (#3575)
  • [deps] Remove @eslint/js dependency. Already installed with eslint in deep (#3636)
Updated
  • [repo] Reactivate stale.yaml as GitHub action to mark issues as stale after 60 days and close them 7 days later (if no activity) (#3577, #3580, #3581)
  • [core] Update electron dependency to v32 (test electron rebuild) and all other dependencies too (#3657)
  • [tests] All test configs have been updated to allow full external access, allowing for easier debugging (especially when running as a container)
  • [core] Run and test with node 23 (#3588)
  • [workflow] delete exception allow-ghsas: GHSA-8hc4-vh64-cxmj in dep-review.yaml (#3659)
Fixed
  • [updatenotification] Fix pm2 using detection when pm2 script is inside or outside MagicMirror root folder (#3576) (#3605) (#3626) (#3628)
  • [core] Fix loading node_helper of modules: avoid black screen, display errors and continue loading with next module (#3578)
  • [weather] Change default value for weatherEndpoint of provider openweathermap to "/onecall" (#3574)
  • [tests] Fix electron tests with mock dates, the mock on server side was missing (#3597)
  • [tests] Fix testcases with hard coded Date.now (#3597)
  • [core] Fix missing basePath where location.host is used (#3613)
  • [compliments] croner library changed filenames used in latest version (#3624)
  • [linter] Fix ESLint ignore pattern which caused that default modules not to be linted (#3632)
  • [core] Fix module path in case of sub/sub folder is used and use path.resolve for resolve moduleFolder and defaultModuleFolder in app.js (#3653)
  • [calendar] Update to resolve issues #3098 #3144 #3351 #3422 #3443 #3467 #3537 related to timezone changes
  • [calendar] Fix #3267 (styles array), also fixes event with both exdate AND recurrence(and testcase)
  • [calendar] Fix showEndsOnlyWithDuration not working, #3598, applies ONLY to full day events
  • [calendar] Fix showEnd for Full Day events (#3602)
  • [tests] Suppress "module is not defined" in e2e tests (#3647)
  • [calendar] Fix #3267 (styles array, really this time!)
  • [core] Fix #3662 js/positions.js created incorrectly
View originalPermalink
How v2.30.0 went
v2.29.0

Summer is over

Added 8
  • compliments module now supports cron type date/time format entries with minutes, hours, days, months, and day of week
  • core checks config at every start of MagicMirror
  • core adds spelling check via npm run test:spelling
  • core renamed config.paths.modules to config.foreignModulesDir and added MM_CUSTOMCSS_FILE and MM_MODULES_DIR environment variables to override configuration
  • core removes elements from index.html when loading script or stylesheet files fails
  • core adds MODULE_DOM_UPDATED notification each time the DOM is re-rendered via updateDom
  • tests added minimal required node version to tests (v20.9.0)
  • tests added node-libgpiod library to electron-rebuild tests
Changed 7
  • weather module updated apiVersion default from 2.5 to 3.0
  • core updated dependencies including stylistic-eslint
  • core pinned node-ical version to 0.18.0 with security exception
  • core updated SocketIO catch all to new API
  • core now allows custom modules positions by scanning index.html for defined regions instead of using hardcoded positions
  • core updated minimal required node version to v20.9.0 and excluded v21
  • linter switched to ESLint v9 with flat config and replaced eslint-plugin-unicorn with @eslint/js
Fixed 5
  • weather module fixed issue with UK Met Office provider following API path and header changes
  • core added check for node_helper loading for multiple instances of the same module
  • weather module now respects unit config on broadcasted notifications
  • calendar fixed sliceMultiDayEvents getting wrong count and displaying incorrect entries for Europe/Berlin timezone
  • calendar fixed sliceMultiDayEvents showing previous day without config enabled
Removed 4
  • core removed installer only files
  • core removed raspberry object from systeminformation
  • linter removed eslint-plugin-import due to ESLint v9 incompatibility
  • tests removed onoff library from electron-rebuild tests

From MagicMirror

[2.29.0] - 2024-10-01

Thanks to: @bugsounet, @dkallen78, @jargordon, @khassel, @KristjanESPERANTO, @MarcLandis, @rejas, @ryan-d-williams, @sdetweil, @skpanagiotis.

⚠️ This release needs nodejs version v20 or v22, minimum version is v20.9.0

Added
  • [compliments] Added support for cron type date/time format entries mm hh DD MM dow (minutes/hours/days/months and day of week) see https://crontab.cronhub.io for construction (#3481)
  • [core] Check config at every start of MagicMirror² (#3450)
  • [core] Add spelling check (cspell): npm run test:spelling and handle spelling issues (#3544)
  • [core] removed config.paths.vendor (could not work because vendor is hardcoded in index.html), renamed config.paths.modules to config.foreignModulesDir, added variable MM_CUSTOMCSS_FILE which - if set - overrides config.customCss, added variable MM_MODULES_DIR which - if set - overrides config.foreignModulesDir, added test for MM_MODULES_DIR (#3530)
  • [core] elements are now removed from index.html when loading script or stylesheet files fails
  • [core] Added MODULE_DOM_UPDATED notification each time the DOM is re-rendered via updateDom (#3534)
  • [tests] added minimal needed node version to tests (currently v20.9.0) to avoid releases with wrong node version info
  • [tests] Added node-libgpiod library to electron-rebuild tests (#3563)
Removed
  • [core] removed installer only files (#3492)
  • [core] removed raspberry object from systeminformation (#3505)
  • [linter] removed eslint-plugin-import, because it doesn't support ESLint v9. We will reenter it later when it does.
  • [tests] removed onoff library from electron-rebuild tests (#3563)
Updated
  • [weather] Updated apiVersion default from 2.5 to 3.0 (#3424)
  • [core] Updated dependencies including stylistic-eslint
  • [core] nail down node-ical version to 0.18.0 with exception allow-ghsas: GHSA-8hc4-vh64-cxmj in dep-review.yaml (which should removed after next node-ical update)
  • [core] Updated SocketIO catch all to new API
  • [core] Allow custom modules positions by scanning index.html for the defined regions, instead of hard coded (PR #3518 fixes issue #3504)
  • [core] Detail optimizations in config_check.js
  • [core] Updated minimal needed node version in package.json (currently v20.9.0) (#3559) and except for v21 (no security updates) (#3561)
  • [linter] Switch to ESLint v9 and flat config and replace eslint-plugin-unicorn by @eslint/js
  • [core] fix discovering module positions twice after #3450
Fixed
  • Fixed checks badge in README.md
  • [weather] Fixed issue with the UK Met Office provider following a change in their API paths and header info.
  • [core] add check for node_helper loading for multiple instances of same module (#3502)
  • [weather] Fixed issue for respecting unit config on broadcasted notifications
  • [tests] Fixes calendar test by moving it from e2e to electron with fixed date (#3532)
  • [calendar] fixed sliceMultiDayEvents getting wrong count and displaying incorrect entries, Europe/Berlin (#3542)
  • [tests] ignore js/positions.js when linting (this file is created at runtime)
  • [calendar] fixed sliceMultiDayEvents showing previous day without config enabled
View originalPermalink
How v2.29.0 went
v2.28.0

Weather Fixes in Summer Heat

Added 3
  • Added config option showEndsOnlyWithDuration for default calendar
  • Added specialDayUnique config option for compliments module, defaults to false
  • Use precipitationLast3Hours if precipitationLastHour is null in weather provider weathergov
Changed 5
  • Update dependencies including electron to v31
  • Require node >= v20
  • Update config.js.sample to use openmeteo as weather provider which needs no API key
  • Use latest version of node for automated tests
  • Avoid using pm2 when running updatenotification in docker container
Fixed 6
  • Fixed crash possibility if module name is not defined and position is misspelled
  • Fixed precipitationProbability in forecast for weather provider openmeteo
  • Fixed type=daily for weather provider openmeteo having no data when running after 23:00
  • Fixed type=daily for weather provider openmeteo showing nightly icons in forecast when current time is nightly
  • Fixed forecast and hourly weather for weather provider openmeteo to use real temperatures instead of apparent temperatures
  • Fixed e2e tests running in docker container which needs address 0.0.0.0
Removed 1
  • Removed node v18 support

From MagicMirror

[2.28.0] - 2024-07-01

Thanks to: @btoconnor, @bugsounet, @JasonStieber, @khassel, @kleinmantara and @WallysWellies.

⚠️ This release needs nodejs version >= v20.9.0

Added
  • [calendar] Added config option "showEndsOnlyWithDuration" for default calendar
  • [compliments] Added specialDayUnique config option, defaults to false (#3465)
  • [weather] Provider weathergov: Use precipitationLast3Hours if precipitationLastHour is null (#3124)
Removed
  • [tests] delete node v18 support (#3462)
Updated
  • [core] Update dependencies including electron to v31
  • [core] use node >= v20 (#3462)
  • [core] Update config.js.sample to use openmeteo as weather provider which needs no api key
  • [tests] Use latest@version of node for automated-tests.yaml (#3483)
  • [updatenotification] Avoid using pm2 when running in docker container
Fixed
  • [core] Fixed crash possibility if module: <name> is not defined and on postion: <positon> mistake (#3445)
  • [weather] Fixed precipitationProbability in forecast for provider openmeteo (#3446)
  • [weather] Fixed type=daily for provider openmeteo having no data when running after 23:00 (#3449)
  • [weather] Fixed type=daily for provider openmeteo showing nightly icons in forecast when current time is "nightly" (#3458)
  • [weather] Fixed forecast and hourly weather for provider openmeteo to use real temperatures, not apparent temperatures (#3466)
  • [tests] Fixed e2e tests running in docker container which needs address: "0.0.0.0" (#3479)
View originalPermalink
How v2.28.0 went
View all

Discussion

If you publish MagicMirror, you can claim this product by proving you administer its repository.