SM

Smashing

Sinatra-based dashboard framework for custom widgets

Dashboards & Startpages ★ 3.3k stars Medium setup MIT

Smashing is a dashboard framework, the maintained successor to Dashing, for building beautiful custom dashboards. It uses widgets driven by Ruby jobs to display metrics and data on a wallboard.

Key features

  • Custom widget framework
  • Ruby-driven data jobs
  • Drag-and-drop layout
  • Real-time updates

Pros & cons

Strengths

  • Highly customizable
  • Good for office wallboards

Trade-offs

  • Requires coding widgets
  • Ruby dependency

Smashing replaces

Last reviewed Sep 13, 2026 · 805 words

Smashing is not a dashboard you install, it is a dashboard you write. It is the community-maintained fork of Shopify's Dashing, a Ruby framework where every tile on the screen is a widget you code in CoffeeScript or JavaScript and every number on it arrives from a Ruby job you schedule. If that sentence made you smile, Smashing is the best wallboard tool there is. If it made you tired, Grafana or Homepage will give you 90 percent of the result with no code, and I would steer most people there.

What a Smashing install actually contains

Run gem install smashing, then smashing new office-board and smashing start, and you have a server on port 3030 serving a demo board with a few sample tiles. Inside the project folder there are 4 directories that matter. dashboards/ holds one ERB file per board, which is the grid layout: each <li> declares a widget type, a data-id, and its width and height in grid cells. widgets/ holds one folder per widget type with 3 files, an HTML template, a CoffeeScript class, and a SCSS stylesheet. jobs/ holds Ruby files that fetch data. assets/ is for fonts and images. That is the whole framework. There is no plugin store, no settings screen, and no login page.

A job pushes, a widget listens

The mental model is one line. Jobs run on a scheduler and call send_event; widgets subscribe to an event id and re-render when data arrives over Server-Sent Events. A job that polls your Uptime Kuma or Prometheus endpoint looks like this:

require 'net/http'
require 'json'

SCHEDULER.every '30s', first_in: 0 do
  body = Net::HTTP.get(URI('http://prometheus:9090/api/v1/query?query=up'))
  up = JSON.parse(body)['data']['result'].count { |r| r['value'][1] == '1' }
  send_event('hosts_up', current: up)
end

Any widget with data-id="hosts_up" updates within a second of that event. You can also push from outside with an HTTP POST to /widgets/hosts_up carrying the auth_token from config.ru, which is how CI servers and shell scripts feed a board without writing Ruby. The drag-and-drop layout the project advertises is real, but it only rearranges tiles in the browser; persisting the new order means copying the layout back into the ERB file.

Where it sits in a stack: the TV on the wall

Smashing has one job it does better than anything in the dashboards category: a full-screen, always-on wallboard in an office or a workshop, showing 6 to 12 big numbers that change in real time, with a design the team actually likes. Sales counters, build status, support queue length, temperature in the server room, whatever a Ruby job can fetch. It is not a homelab launcher (that is Homepage or Glance), and it is not an observability tool (that is Grafana, which has alerting and query builders Smashing will never have). Treat it as a presentation layer that sits after your monitoring stack, not instead of it.

Running it: Docker, Ruby, and 256 MB

There is no official image, so most people build a 15-line Dockerfile from ruby:3.2 that installs the gem and copies the project in, or use one of the community images on Docker Hub. Either way the container is small and idles around 100 to 150 MB. The Ruby dependency is the one operational cost: gems with native extensions occasionally break on Ruby upgrades, and a board that has run untouched for 2 years will need an afternoon when you finally rebuild it. Pin your Ruby version in the Dockerfile and commit the Gemfile.lock. Put it behind a reverse proxy with basic auth if the board shows anything sensitive, because the framework itself has no authentication on the read side.

The honest comparison

Smashing has about 3,300 stars, moves slowly, and has a maintainer base that fits on one hand. Its continued existence is because nothing else offers the same freedom of layout and design at the same low effort for someone who already writes Ruby. Grafana's 2026 canvas and stat panels have closed most of the visual gap, run on data you already collect, and need no code. If you have not already decided that you enjoy writing widgets, the bigger project is the safer pick and the one that will still be maintained in 5 years.

What I'd do

For an office TV where the team cares how it looks and someone on staff writes Ruby: Smashing in a pinned Docker image, jobs that pull from Prometheus and your ticket system, layout committed to git, behind Caddy. For everything else, including every homelab I have set up, Grafana for metrics and Homepage for links, and no Ruby anywhere.

Similar dashboards & startpages apps