From fast-dash
Turns Python functions into interactive Plotly Dash web apps via @fastdash decorator, inferring UI from type hints. Use for prototyping dashboards, forms, wizards, or adding UI to functions.
How this skill is triggered — by the user, by Claude, or both
Slash command
/fast-dash:fast-dashThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Fast Dash turns a Python function into a Plotly Dash web app. The `@fastdash` decorator reads the function's signature, maps each parameter's type hint to a UI component, maps the return type to an output component, and serves the result. No frontend, no callbacks, no boilerplate.
Fast Dash turns a Python function into a Plotly Dash web app. The @fastdash decorator reads the function's signature, maps each parameter's type hint to a UI component, maps the return type to an output component, and serves the result. No frontend, no callbacks, no boilerplate.
Use this skill when the user:
Do not use this for: production apps with complex routing, custom auth, or non-Python frontends — Fast Dash is opinionated for the single-file-Python-function use case.
pip install fast-dash
from fast_dash import fastdash
@fastdash
def greet(name: str = "world") -> str:
return f"Hello, {name}!"
# Serving on http://127.0.0.1:8080
That is the whole app. Open the URL, type a name, click Run.
int → number input, bool → checkbox, str with a list default → dropdown, etc. See references/components.md for the full table.@fastdash. For more control (tabbed multi-function apps, multi-step pipelines), use the FastDash(...) class directly.mode="inline".| Pattern | Syntax | When |
|---|---|---|
| Single function | @fastdash | One tool, one form |
| Multiple outputs | -> (Graph, Graph) + mosaic="AB" | Dashboard with several plots |
| Cascading inputs | state=depends_on("country", resolver) | Dependent dropdowns |
| Multiple tools, one app | FastDash([fn_a, fn_b], tab_titles=[...]) | Tabbed "apps" under one URL |
| Multi-step wizard | FastDash(steps=[fn_a, fn_b, fn_c]) + from_step(prev_fn) | Pipeline UX, one panel at a time |
| Streaming outputs | update("output_x", chunk) inside the fn + stream=True | LLM / token-by-token / progress |
| Notebook rendering | @fastdash(mode="inline") | Jupyter |
| Wrap a custom component | Fastify(dcc.Slider(...), "value") | Any Dash component |
Full examples for each: references/patterns.md.
| Hint | Component |
|---|---|
str | Textarea |
int, float | Number input |
bool | Checkbox |
Literal["a", "b"] | Dropdown |
Annotated[int, range(0, 100)] | Slider |
list | Multi-select |
datetime.date | Date picker |
pd.DataFrame (return) | Table |
plotly.graph_objects.Figure (return) | Plotly chart |
PIL.Image.Image | Image upload / display |
Full table with every supported hint: references/components.md.
Pass these directly as inputs= or outputs= when you want to override inference:
from fast_dash import (
# Inputs
Text, TextArea, PasswordInput,
NumberInput, Slider,
Switch, MultiSelect,
DateInput, DateRange, ColorInput,
Upload, UploadImage,
# Outputs
Graph, Image, Table, Markdown, Chat, Download,
)
For streaming and building custom UIs, also available:
from fast_dash import (
Fastify, # wrap any Dash component as a Fast Dash component
depends_on, # cascading input default
from_step, # multi-step pipeline data threading
update, notify, # push partial results / toasts during streaming
dcc, dbc, dmc, html, # re-exported: dash.dcc, dash_bootstrap_components, dash_mantine_components, dash.html
)
@fastdash starts the server on import. Put it in a if __name__ == "__main__": guard if the file is imported elsewhere, or skip the decorator and use FastDash(...).run().theme= does not restyle Mantine chrome (v0.2.x). Only dark/light flips for known dark themes (CYBORG, DARKLY, SLATE, ...).inputs=Text) not an instance. Mutation surprises.return line of the source. REPL / exec contexts fall back to OUTPUT_1, OUTPUT_2. Pass output_labels=[...] to override.Full list with reproducers: references/gotchas.md.
@fastdash on the function, done.@fastdash(mosaic="AB\nAC"), return a tuple of components.FastDash([fn_a, fn_b], tab_titles=[...]).run().FastDash(steps=[fn_a, fn_b, ...]).run() with from_step(prev_fn) defaults.depends_on("parent_name", resolver) as a default value.update(component_id, data) inside the function + stream=True on the app.mode="inline".FastDash(...) class, skip .run().Run the app and verify it loads. If you can't open a browser:
8080) is freemode="inline" was setIf the user has dash[testing] installed, a headless smoke test is worthwhile. Otherwise, ask the user to verify the UI themselves.
npx claudepluginhub dkedar7/fast_dash --plugin fast-dashBuilds Gradio web UIs and demos in Python. Covers Interface, Blocks, ChatInterface, components, event listeners, layouts, and chatbots.
Builds or edits Gradio apps, layouts, components, and chat interfaces in Python. Helpful for creating ML demos and UI prototypes.
Build Gradio web UIs and demos in Python. Use when creating or editing Gradio apps, components, event listeners, layouts, or chatbots.