Master declarative, no-code data dashboards with Lumen YAML specifications. Use this skill when building standard data exploration dashboards, connecting multiple data sources (files, databases, APIs), creating interactive filters and cross-filtering, designing responsive layouts with indicators and charts, or enabling rapid dashboard prototyping without writing code.
Builds interactive data dashboards using declarative YAML specifications for sources, pipelines, and views.
npx claudepluginhub uw-ssec/rse-pluginsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Lumen is a declarative framework for creating data dashboards through YAML specifications. Build interactive data exploration dashboards without writing code.
| Feature | Lumen Dashboards | Panel | Lumen AI |
|---|---|---|---|
| Approach | Declarative YAML | Imperative Python | Conversational |
| Code Required | No | Yes | No |
| Use Case | Fixed dashboards | Custom apps | Ad-hoc exploration |
Use Lumen when: Building standard dashboards, working with non-programmers, rapid prototyping.
Use Panel when: Need fine-grained control, custom logic, novel interactions.
pip install lumen
File: dashboard.yaml
sources:
data:
type: file
tables:
penguins: https://datasets.holoviz.org/penguins/v1/penguins.csv
pipelines:
main:
source: data
table: penguins
filters:
- type: widget
field: species
layouts:
- title: Penguin Explorer
views:
- type: hvplot
pipeline: main
kind: scatter
x: bill_length_mm
y: bill_depth_mm
by: species
Launch:
lumen serve dashboard.yaml --show
Data sources provide tables for your dashboard.
Supported sources: File (CSV, Parquet, Excel, JSON), Database (PostgreSQL, DuckDB, SQLite), REST API, Intake catalogs.
sources:
mydata:
type: file
tables:
sales: ./data/sales.csv
Pipelines define data flows: Source → Filters → Transforms → Views
pipelines:
sales_pipeline:
source: mydata
table: sales
filters:
- type: widget
field: region
transforms:
- type: aggregate
by: ['category']
aggregate:
total_sales: {revenue: sum}
Add interactive controls:
filters:
- type: widget
field: category # Dropdown select
- type: widget
field: region
multiple: true # Multi-select
- type: widget
field: date
widget: date_range_slider # Date range
Process data in pipelines:
transforms:
- type: columns
columns: ['date', 'region', 'revenue']
- type: query
query: "revenue > 1000"
- type: aggregate
by: ['region']
aggregate:
total: {revenue: sum}
See: Data Transforms Reference
Visualize data with various chart types:
views:
- type: hvplot
pipeline: main
kind: line
x: date
y: revenue
by: category
- type: indicator
pipeline: main
field: total_revenue
format: '${value:,.0f}'
- type: table
pipeline: main
page_size: 20
See: Views Reference
Arrange views on the page:
layouts:
- title: Overview
layout: [[0, 1, 2], [3], [4, 5]] # Grid positions
views:
- type: indicator
# View configs...
See: Layouts Reference
pipelines:
kpis:
source: metrics
table: data
transforms:
- type: aggregate
aggregate:
total_revenue: {revenue: sum}
total_orders: {orders: sum}
layouts:
- title: KPIs
layout: [[0, 1, 2]]
views:
- type: indicator
pipeline: kpis
field: total_revenue
format: '${value:,.0f}'
- type: indicator
pipeline: kpis
field: total_orders
format: '{value:,.0f}'
pipelines:
explorer:
source: mydata
table: sales
filters:
- type: widget
field: region
- type: widget
field: category
multiple: true
views:
- type: hvplot
kind: scatter
x: price
y: quantity
- type: table
page_size: 20
layouts:
- title: Analysis
views:
- type: hvplot
pipeline: main
kind: bar
x: category
y: revenue
selection_group: category_filter
- type: hvplot
pipeline: main
kind: scatter
x: price
y: quantity
selection_group: category_filter
transforms:
- type: sql
query: |
SELECT region, category,
SUM(revenue) as total_revenue,
COUNT(*) as order_count
FROM table
WHERE date >= '2024-01-01'
GROUP BY region, category
ORDER BY total_revenue DESC
See: Examples for complete dashboard examples.
While Lumen is designed for YAML, you can also use Python:
from lumen.sources import FileSource
from lumen.pipeline import Pipeline
from lumen.views import hvPlotView
from lumen.dashboard import Dashboard
source = FileSource(tables={'sales': './data/sales.csv'})
pipeline = Pipeline(source=source, table='sales')
view = hvPlotView(pipeline=pipeline, kind='scatter', x='price', y='quantity')
dashboard = Dashboard(pipelines={'main': pipeline}, layouts=[view])
dashboard.servable()
See: Python API Reference
config:
title: My Dashboard
theme: dark # or 'default', 'material'
sizing_mode: stretch_width
logo: ./logo.png
config:
theme: material
theme_json:
palette:
primary: '#00aa41'
lumen serve dashboard.yaml \
--oauth-provider=generic \
--oauth-key=${OAUTH_KEY} \
--oauth-secret=${OAUTH_SECRET}
lumen serve dashboard.yaml --autoreload --show
panel serve dashboard.yaml \
--port 80 \
--num-procs 4 \
--allow-websocket-origin=analytics.company.com
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY dashboard.yaml data/ ./
CMD ["lumen", "serve", "dashboard.yaml", "--port", "5006", "--address", "0.0.0.0"]
See: Deployment Guide
# Use descriptive names
sources:
sales_database:
type: postgres
tables: [orders, customers]
inventory_files:
type: file
tables:
stock: ./inventory.csv
pipelines:
base_sales:
source: data
table: sales
filters:
- type: widget
field: region
summary_sales:
pipeline: base_sales # Extends base_sales
transforms:
- type: aggregate
by: ['category']
# Limit data size for large tables
sources:
bigdata:
type: postgres
tables:
events: "SELECT * FROM events WHERE date >= '2024-01-01' LIMIT 100000"
# Provide clear labels
filters:
- type: widget
field: region
label: "Sales Region"
views:
- type: indicator
field: revenue
title: "Total Revenue"
format: '${value:,.0f}'
# Check YAML syntax
python -c "import yaml; yaml.safe_load(open('dashboard.yaml'))"
# Run with debug logging
lumen serve dashboard.yaml --log-level=debug
Lumen enables rapid dashboard development through declarative YAML specifications.
Strengths: No Python code required, fast development cycle, reproducible specifications, built-in interactivity.
Ideal for: Fixed dashboard layouts, standard data patterns, non-programmer dashboard creators, rapid prototyping.
Consider alternatives when:
Search, retrieve, and install Agent Skills from the prompts.chat registry using MCP tools. Use when the user asks to find skills, browse skill catalogs, install a skill for Claude, or extend Claude's capabilities with reusable AI agent components.
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use for discovering, retrieving, and improving prompts.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.