Introduction

A smart mirror transforms an ordinary reflective surface into an interactive information hub — displaying weather, calendar events, news headlines, commute times, and more while you get ready in the morning. The concept took off with the release of MagicMirror² in 2014, and since then, an entire ecosystem of modules, forks, and alternative platforms has grown around the idea of self-hosted ambient displays.

Whether you are building a bathroom mirror, a kitchen information panel, or a wall-mounted family dashboard, you need a platform that runs reliably, supports custom modules, and integrates with your existing smart home stack. This guide compares the leading self-hosted smart mirror and digital display platforms, with practical deployment instructions for each.

Platform Comparison

FeatureMagicMirror²Smart Mirror (evancohen)Homepage Dashboard
GitHub Stars23,569+2,814+18,000+
Primary LanguageJavaScript (Node.js)JavaScript (Electron)JavaScript (Next.js)
Module SystemExtensive (1000+ community modules)Limited built-in widgetsYAML-based service widgets
Voice ControlVia third-party modulesBuilt-in voice recognitionNot supported
Hardware TargetRaspberry Pi, any LinuxRaspberry Pi, desktopAny Docker host
Mirror-SpecificYes (2-way mirror optimized)YesNo (general dashboard)
Smart Home IntegrationMMM-* modules (Home Assistant, etc.)Direct integrationsService widgets via API
Docker SupportCommunity images availableNo official imageNative Docker support
LicenseMITMITGPL-3.0
Last UpdatedJune 2026July 2024Active 2026

MagicMirror²: The Gold Standard

MagicMirror², created by Michael Teeuw, is the dominant self-hosted smart mirror platform with over 23,500 GitHub stars and an active community of module developers. It runs as a Node.js Electron application that renders a customizable dashboard optimized for mirror displays — black background, white text, and layouts designed for glanceability.

Key Features

  • Modular architecture: Over 1,000 community-contributed modules covering weather, calendars, news, transit, cryptocurrency prices, smart home controls, and more
  • CSS-customizable layout: Position modules in regions (top_left, top_right, bottom_center, etc.) with full CSS control
  • REST API: Built-in API endpoint for remote control and integration with other services
  • Raspberry Pi optimized: Lightweight enough to run on a Pi Zero 2 W
  • Community: Active forum with 50,000+ members, extensive documentation

Docker Compose Deployment

While MagicMirror² does not ship an official Docker image, the community maintains reliable containers. Here is a production-ready Docker Compose configuration:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
version: "3.8"
services:
  magicmirror:
    image: bastilimbach/docker-magicmirror:latest
    container_name: magicmirror
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - ./config:/opt/magic_mirror/config
      - ./modules:/opt/magic_mirror/modules
      - ./css:/opt/magic_mirror/css
    environment:
      - TZ=America/New_York

Manual Installation on Raspberry Pi

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Install Node.js
curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

# Clone and install MagicMirror²
git clone https://github.com/MichMich/MagicMirror ~/MagicMirror
cd ~/MagicMirror
npm install --omit=dev

# Copy default config and customize
cp config/config.js.sample config/config.js
npm start

Essential Modules

A well-configured smart mirror typically includes these modules:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
modules: [
  { module: "clock", position: "top_left" },
  { module: "calendar", position: "top_right",
    config: { calendars: [{ symbol: "calendar", url: "https://..." }] } },
  { module: "weather", position: "top_right",
    config: { location: "New York", appid: "YOUR_API_KEY" } },
  { module: "newsfeed", position: "bottom_bar",
    config: { feeds: [{ title: "HN", url: "https://..." }] } },
  { module: "MMM-HomeAssistant", position: "bottom_left" }
]

Smart Mirror (evancohen): Voice-First Alternative

The Smart Mirror project by Evan Cohen takes a different approach — it is built as a standalone Electron application with built-in voice recognition, motion detection, and IoT integration. While less actively maintained (last update July 2024), it remains a solid choice for users who want voice control baked in rather than added via modules.

Strengths

  • Voice control out of the box: Uses the Web Speech API for hands-free interaction
  • Motion detection: Wakes the display when someone approaches
  • All-in-one: Fewer dependencies than MagicMirror² + multiple modules
  • Companion Android app: Remote control from your phone

Limitations

  • Smaller module ecosystem: Only a handful of built-in widgets
  • Less actively maintained: No commits since mid-2024
  • Electron overhead: Heavier resource usage than a browser-based solution

Homepage Dashboard: General-Purpose Alternative

For users who want an information dashboard without the mirror form factor, Homepage (gethomepage.dev) provides a modern, YAML-configurable dashboard for service status, bookmarks, and widgets. While not mirror-optimized, it excels as a family information hub on a wall-mounted tablet or monitor.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# docker-compose.yml for Homepage
version: "3.8"
services:
  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    container_name: homepage
    restart: unless-stopped
    ports:
      - "3000:3000"
    volumes:
      - ./config:/app/config
      - /var/run/docker.sock:/var/run/docker.sock:ro

Hardware Considerations

Building a smart mirror requires three components: a two-way mirror (or acrylic), a display panel, and a computing device.

ComponentBudget OptionRecommendedPremium
DisplayOld monitor ($30)24" 1080p panel ($100)32" 4K ($300+)
ComputerRaspberry Pi 3B+ ($35)Raspberry Pi 4 4GB ($55)Intel NUC ($200+)
MirrorAcrylic two-way ($50)Glass two-way ($120)Custom-cut glass ($200+)
FrameDIY wood ($20)Custom frame ($80)Professional framing ($150+)

Why Self-Host Your Smart Display?

Commercial smart mirrors and digital displays like the $400+ models from major retailers lock you into proprietary platforms with limited customization. You cannot add your own data sources, change the layout beyond preset options, or integrate with self-hosted services like Home Assistant.

A self-hosted smart mirror gives you complete control over what information appears and how it is displayed. You can pull data from your self-hosted calendar server, display metrics from your home lab monitoring stack, or show your family’s shared to-do list — all without sending your data to a third-party cloud service.

Privacy is another key advantage. Commercial smart displays often require cloud accounts and collect usage data. A self-hosted MagicMirror² runs entirely on your local network, with no telemetry, no accounts, and no data leaving your home. For more on home automation privacy, see our smart home hub comparison.

The open-source module ecosystem means your mirror grows with your needs. Start with weather and calendar, then add transit times, smart home controls, and family photo slideshows — all from community-maintained modules. If you are already running other self-hosted services, check our homepage dashboard guide for complementary display options. For IoT device integration, our smart home bridges comparison covers connecting sensors and actuators to your dashboard.

FAQ

Can MagicMirror² run without a physical mirror?

Yes. MagicMirror² works perfectly as a regular web dashboard on any monitor, tablet, or TV. Simply run it in a browser or kiosk mode without the mirror glass. Many users deploy it as a kitchen display, office information panel, or wall-mounted family calendar.

What is the minimum hardware to run MagicMirror²?

A Raspberry Pi 3B+ with 1GB RAM can run a basic MagicMirror² setup with 5-10 modules. For more complex configurations with 15+ modules, video feeds, or heavy animations, a Raspberry Pi 4 with 2-4GB RAM is recommended. The Electron app consumes approximately 200-400MB of memory depending on active modules.

How do I make my smart mirror touch-enabled?

Add an infrared touch frame overlay to your display (available from $60-150 depending on size). MagicMirror² supports touch input through the browser, and several community modules (MMM-TouchNavigation, MMM-Buttons) enable touch-based interaction. The IR frame connects via USB and works out of the box with Raspberry Pi.

Does MagicMirror² work offline?

Yes, MagicMirror² functions fully offline for modules that do not require internet access (clock, local calendar via CalDAV, system stats). Modules fetching external data (weather, news, transit) will show stale data or error states when offline. You can cache weather and news data locally with appropriate module configuration.

How do I add custom data sources that do not have existing modules?

You can write custom modules in JavaScript using MagicMirror’s module API, or use the MMM-HTML module to embed any web content, or use MMM-JSON to display data from any REST API. A simple custom module requires approximately 50 lines of JavaScript and a node_helper.js file for backend processing.

Can I use MagicMirror² as a digital signage display?

Yes, MagicMirror² can function as digital signage by configuring rotation between different views, using modules like MMM-Carousel to cycle through slides, or combining multiple profiles. However, for pure digital signage use cases, dedicated tools like Xibo or Screenly offer more advanced scheduling and content management features. See our digital signage guide.


💰 想测试你的市场判断力?我用 Polymarket 做预测市场交易——这是全球最大的预测市场平台,从大选结果到技术监管时间线,什么都可以押注。和赌博不同,这是真正的信息市场:你懂的信息越多,胜率越高。我靠预测技术相关事件的走向已经赚了不少。用我的邀请链接注册:Polymarket.com