Learn OpenStack · core/dashboard

Dashboard — Horizon and Skyline

OpenStack ships two web dashboards: Horizon (the original, Django-based dashboard, in service since 2012) and Skyline (a newer alternative with a Vue.js 3 frontend and a FastAPI backend, introduced in 2021). Both provide a graphical interface to OpenStack APIs, but they differ substantially in architecture, maturity, and service coverage.

When to Read This Skill

  • Deploying a web UI for an OpenStack cloud
  • Choosing between Horizon and Skyline for a new deployment
  • Configuring multi-domain support, SSO, or custom branding
  • Adding custom panels or extending the dashboard
  • Troubleshooting session management or API proxy issues
  • Understanding Django plugin architecture or Vue.js SPA patterns

Horizon vs Skyline Comparison

Feature Horizon Skyline
Maturity Very mature (since 2012) Newer (since 2021)
Framework Django + Python (server-side rendering) Vue.js 3 (SPA) + FastAPI (async Python backend)
Plugin ecosystem Large — many third-party panels (Trove, Manila, Designate, Watcher, etc.) Growing — fewer third-party integrations
Performance Heavier (synchronous server-side rendering) Lighter (SPA with async API calls, faster perceived load)
Service coverage Complete — panels for every major OpenStack service Core services (Nova, Neutron, Cinder, Glance, Keystone, Swift)
Customization Extensive — panels, themes, custom tables/forms/workflows Moderate — custom logos, color themes
API versions Supports legacy and current API versions Current API versions only
Multi-domain support Full (configurable per deployment) Basic
SSO / WebSSO Full Keystone federation + WebSSO Via Keystone token; no direct WebSSO UI
Packaging Python package, runs with Apache/mod_wsgi Container-native (Docker/Podman), also systemd
Upstream status Official OpenStack project Official OpenStack project

Sub-Files

File What It Covers
horizon/README.md Horizon overview, dependencies, quick reference
horizon/operations.md local_settings.py configuration, multi-domain, SSO, branding, deployment
horizon/internals.md Django architecture, Dashboard/Panel hierarchy, plugin system, custom panel development
skyline/README.md Skyline overview, dependencies, quick reference
skyline/operations.md skyline.yaml configuration, container/systemd deployment, Nginx reverse proxy, TLS, branding
skyline/internals.md Vue.js 3 frontend, FastAPI backend, API proxy pattern, extension mechanism, development setup

Choosing a Dashboard

Choose Horizon when: - You need panels for less-common OpenStack services (Trove, Manila, Designate, Watcher, Ironic) - You need a large existing plugin ecosystem or third-party vendor panels - You need full multi-domain and WebSSO support - You are upgrading an existing Horizon deployment - Your team has Django/Python expertise for customization

Choose Skyline when: - You are building a new deployment and want a modern, fast UI - Your service scope is limited to core services - You prefer container-native deployment - You want a lighter-weight dashboard with a better perceived end-user experience - Your team has frontend (Vue.js) expertise

Both dashboards can coexist on the same cloud — point them at the same Keystone endpoint.

Releases Covered

This skill covers OpenStack 2025.1 (Epoxy), 2025.2, and 2026.1.

  • Horizon release notes: https://docs.openstack.org/releasenotes/horizon/
  • Skyline API server: https://opendev.org/openstack/skyline-apiserver
  • Skyline Console: https://opendev.org/openstack/skyline-console