Changelog
v0.6.9 (2026-08-06)
Fixed bugs:
- MCP
invoke/get\_invocationleak a secret via OUTPUT content — a callback that derives (or echoes) an output from aPasswordInputreturns it verbatim over/mcp; the sidecar redacts this, the MCP path doesn't (output-axis sibling of #151) #194 - MCP
set\_formsilently ignores unknown spec keys — sodefault(the very keydescribe\_appemits for an input's initial value) is dropped:{ok:true, count:1}but the field renders empty.describe\_app's own vocabulary doesn't round-trip throughset\_form#193 - MCP contract drops the options of an
Annotated\[str, \[...\]\]dropdown:describe\_appreportsoptions: nullandset\_input/invokeaccept an out-of-list value the UI's Select can't emit — breaks "the contract is enforced" + human↔agent parity (works forLiteral/Enum/str=\[...\]) #192 - MCP
depends\_oncascade updates the child dropdown's options but never clears its stale value:describe\_appself-contradicts (current\_value∉options),set\_inputrejects that value whileinvokeruns it — breaks human↔agent parity and the "contract is enforced" invariant #191 - MCP
set\_formsilently accepts duplicate field names —describe\_appthen advertises two inputs with the same id, but the callback only ever receives one (ambiguous contract) #190 - MCP invoke can't drive a callback param whose name starts with
input\_(e.g. the Quickstart's owninput\_text):describe\_appadvertises idinput\_textbutinvokestrips theinput\_prefix and calls the callback withtext=→TypeError.set\_inputstill returnsok:true, so the failure is silent until invoke #189 Sliderused as a type hint silently ignores the scalar default (runs with the built-invalue=10, not the declared value);describe\_appself-contradicts (default≠current\_value) and reportstype:"string"for numeric component-hint inputs #188- MCP invoke()/set_inputs skip input coercion: Enum arrives as str, date as ISO string (regresses #181/#182 on the agent path; breaks human↔agent parity) #186
Merged pull requests:
- chore(release): 0.6.9 #197
- fix: MCP contract batch — secret output leak, agent-path coercion, +6 (#186–#194) #196
v0.6.8 (2026-07-27)
Fixed bugs:
- datetime.date inputs pass a raw ISO
strto the callback whenever the value is set —.isoformat\(\)/.weekday\(\)/.yearcrash (UI date-pick and MCPinvokealike); only the untouched default gets a realdate#182 - enum.Enum inputs pass the raw value string to the callback, not the Enum member — .value/.name crash,
is/==silently mismatch (UI Run and MCP invoke alike) #181 - 0.6.7 never published to PyPI —
pip install fast-dashstill ships 0.6.6 with all six bugs 0.6.7 was cut to fix #179
Closed issues:
- update_live apps render only for the first browser session per worker process —
\_initial\_render\_doneis instance state, so every later page load returns no_update (blank dashboard) #183 - Make the input component sidebar draggable #80
Merged pull requests:
- chore(release): 0.6.8 #185
- fix: honour Enum/date input hints, render update_live apps for every visitor (#181, #182, #183) #184
- feat: drag to resize the input sidebar (#80) #180
v0.6.7 (2026-07-25)
Fixed bugs:
- "10 minutes to Fast Dash" documents
c: list = \[1, 2, 3\]as "a default value of\[1, 2, 3\]", but the app runs the callback withc=None— collection defaults (list/dict/range) aren't honored, crashing a standalone-working callback on a no-touch Run #176 - MCP
initializestill serves Dash's "stateless: does NOT update the user's browser" instructions to every agent — contradicting Fast Dash's flagship live-drive feature (unfixed aside from closed #137, still ships in 0.6.5) #173 - describe_app() output entries drop the
labelkey for DynamicDash — the documented{id, tag, type, label}shape holds for FastDash but not DynamicDash #172 - A second
mcp\_server=Trueapp in one process silently hijacks the first app's/mcp— the documented "one MCP app per process" limit does not fail loudly #171 backend="fastapi"starts the server completely silently — no "running on <url>" line, so the user has no URL/port and no confirmation it booted #170- DynamicDash parent_control ValueError contains
→(U+2192) — crashes on a cp1252 console, violating the ASCII-only-error-strings rule #169
Merged pull requests:
- chore(release): 0.6.7 #178
- fix: six dogfood findings — MCP contract, ASGI startup, ASCII errors, docs (#169-#173, #176) #177
v0.6.6 (2026-07-23)
Fixed bugs:
- describe_app/invoke summarize a matplotlib Figure output as {"type":"Figure","repr":...} — collides with the Plotly {"type":"Figure","n_traces",...} shape (_summarize_for_history has no matplotlib branch) #167
- MCP drive tools leak a raw Python
TypeError(exposingenable\_mcp.\<locals\>...) when a required arg is omitted, instead of the structured{"ok": false, "error": ...}contract #165 - Agent invoke()/set_inputs output never renders in the live browser until the first human Run (
.fd-not-runis cleared only bysubmit\_inputs.n\_clicks) #164 - describe_app() reports a
dict-default input astype: "object", but the MultiSelect it becomes only accepts (and produces) an array #162
Merged pull requests:
- chore(release): 0.6.6 #175
- fix: render output for no-input callbacks (update_live apps never gate) #174
- fix(mcp): summarize matplotlib outputs as images, not a colliding Figure (#167) #168
- fix(mcp): agent output visibility, structured tool errors, MultiSelect type (#164, #165, #162) #166
v0.6.5 (2026-07-16)
Fixed bugs:
- describe_app() reports outputs: [] for every DynamicDash app — the #152 output contract skips DynamicDash (reads
outputs\_with\_ids, but DynamicDash stores\_outputs\_with\_ids) #160 - describe_app() still reports tag "Text" for a str-with-list-default dropdown (Select) — #147 fix missed the sibling branch; int/float/bool/Literal/date also report hint-name tags not in list_component_types() #158
Merged pull requests:
v0.6.4 (2026-07-15)
Implemented enhancements:
- Feature: give agents an OUTPUT contract —
describe\_app\(\)reports only inputs, so a headless agent can't discover an app's outputs without side-effectingly callinginvoke\(\)#152
Fixed bugs:
Tuple\[int, str\]/tuple\[int, str\]return hints silently yield ONE output and drop extra return values (only bare-\> \(int, str\)works) #156- All FastDash / @fastdash instances share ONE mutable-default run_kwargs dict — constructing a second app silently rewrites the first's port (and any run_kwargs), so app.run() binds the wrong port #153
- PasswordInput values leak over the no-auth MCP (describe_app / set_input / get_invocation) — the chat surface redacts secrets, the MCP surface does not #151
- MCP value validation is type-blind: a string value slips past a Slider's min/max (bypassing the #120 guard) and scalar int/number/bool inputs accept any type — values the UI can't emit reach the callback #150
- MCP no-auth exposure warning guards the defunct
mcp\_host(a no-op) and is silent on the real bind knobrun\_kwargs\["host"\]=0.0.0.0— false positive + false negative #149 - describe_app() reports tag: "Text" for a ColorInput and a Textarea — a headless agent can't discover a color picker / textarea from the contract (all str widgets collapse to one tag) #147
- DynamicDash agent-built forms (set_form) skip ALL MCP input validation — unknown ids, out-of-options, and out-of-range slider values are silently accepted (static apps reject them) #144
Merged pull requests:
- fix: finish the agent contract's widget discoverability (0.6.4) #161
v0.6.3 (2026-07-13)
Fixed bugs:
- Root CHANGELOG.md is stale at 0.4.1 — missing 0.5.0/0.5.1/0.5.2 (drifted from docs/history.md) #140
Merged pull requests:
- fix: make the agent contract trustworthy (0.6.3) #157
- docs: changelog + docs currency pass through 0.6.2 #155
v0.6.2 (2026-07-12)
Merged pull requests:
- feat(chat): collapsible input accordion for chat sidebars (0.6.2) #154
v0.6.1 (2026-07-07)
Implemented enhancements:
- RFC: one chat= argument — unified agent API, app toolkit (read / drive / layout / content / exec), placement inference, HITL exec #145
Merged pull requests:
- feat: typed agent events by default — langstage extractors + chat renderers (0.6.1) #148
v0.6.0 (2026-07-07)
Merged pull requests:
- feat!: 0.6.0 — one chat= argument, agent app toolkit (layout/content/exec), HITL, sandbox (RFC #145) #146
v0.5.5 (2026-07-05)
Merged pull requests:
- fix(chat): correct sidebar-chat navbar width so output and collapse align (0.5.5) #143
v0.5.4 (2026-07-05)
Merged pull requests:
- feat(chat): chat_agent_position="sidebar" — chat inside the inputs sidebar (0.5.4) #142
v0.5.3 (2026-07-05)
Merged pull requests:
- feat(chat): mode-aware, customizable empty-transcript placeholder (0.5.3) #141
v0.5.2 (2026-07-05)
Fixed bugs:
- Docs: the flagship MCP "drive it" examples don't run as written —
invoke\({...}\)andset\_form\(\[...\]\)omit theinputs=/specs=wrapper the tools require #137 - describe_app() reports default: null for datetime.date / datetime.datetime inputs despite a real default — contract contradicts current_value and the UI #134
- describe_app() reports every Optional[T] input as type:"string" while the UI renders the real typed widget (Optional[int]→NumberInput) — agent↔human parity break #132
- describe_app()
typefield means two different things: JSON type for FastDash, component name for DynamicDash (contract inconsistency) #131
Merged pull requests:
- fix(chat): sidecar run_app renders outputs, not just inputs (0.5.2) #139
v0.5.1 (2026-07-04)
Implemented enhancements:
- RFC: native chat mode — frame-grammar contract, composer UI, managed history (shinychat-class, no lock-in) #133
Merged pull requests:
- fix(mcp): describe_app contract consistency + date defaults (0.5.1) #138
v0.5.0 (2026-07-04)
Fixed bugs:
- describe_app() mis-reports Enum input defaults: plain enum.Enum → default: null; IntEnum default/options are ints but current_value is a string #126
Merged pull requests:
- Fast Dash 0.5.0 — chat mode, agent sidecar, and a UI refresh #136
v0.4.1 (2026-07-01)
Merged pull requests:
- Release 0.4.1 — Enum contract fix (#126) #130
- fix: report Enum input defaults consistently in describe_app (#126) #129
v0.4.0 (2026-06-30)
Fixed bugs:
- describe_app() omits a Slider's min/max/step for static FastDash apps (DynamicDash surfaces them), so an agent can't discover or stay within a slider's range #120
- dict/list-annotated inputs degrade to a Text box under
from \_\_future\_\_ import annotations#119
Merged pull requests:
- Release 0.4.0 — UI/UX modernization + go.Figure render fix #128
- UI/UX modernization + go.Figure render fix (0.4.0) #127
v0.3.5 (2026-06-29)
Fixed bugs:
- describe_app() leaks a raw
depends\_onobject repr as the input default, and never surfaces the dependent dropdown's options #116
Merged pull requests:
- Release 0.3.5 — Slider bounds (#120) + future-annotations inference (#119) #125
- fix: resolve string annotations so PEP 563 doesn't degrade inference (#119) #124
- fix: expose static Slider min/max/step in describe_app + range validation (#120) #123
v0.3.4 (2026-06-28)
Merged pull requests:
- Release 0.3.4 — depends_on/dict contract fix (#116) #118
- fix: clean depends_on/dict contract in describe_app + option validation (#116) #117
- docs: note describe_app reflects an agent-built DynamicDash form (0.3.2) #115
v0.3.3 (2026-06-27)
Fixed bugs:
- MCP: single-select dropdown (
strwith list default) seeds its value as the whole options list —describe\_appself-contradicts (typestring, value a list) andinvoke\(\)passes a list to astrparam (≠ the browser, which is null) #110
Merged pull requests:
- Release 0.3.3 - dropdown seeding fix (#110) #114
- Release prep 0.3.3 (#110 dropdown seeding fix) #113
- Fix #110: dropdown default seeds options as value (MCP mirror) #112
v0.3.2 (2026-06-26)
Fixed bugs:
- describe_app() doesn't reflect a DynamicDash form built by set_form — the agent-generated form is drivable but undiscoverable #106
Merged pull requests:
- Release 0.3.2 - describe_app DynamicDash form (#106) #109
- Release prep 0.3.2 (#106 describe_app DynamicDash form) #108
- Fix #106: describe_app reflects DynamicDash set_form contract #107
v0.3.1 (2026-06-25)
Fixed bugs:
- MCP: agent-facing tool schemas are generic untyped objects — type hints do NOT build the agent schemas, contradicting the docs #102
- MCP: an agent can't read back the inputs it set —
dash://components/get\_dash\_componentnever reflectset\_input, contradicting the docs' "current values" #100 backend="fastapi"never starts a server when launched the documented way (@fastdash/FastDash.run\(\)as a script) #99
Merged pull requests:
- Release 0.3.1 - dogfood fixes (FastAPI backend, describe_app) #105
- Release prep 0.3.1 (dogfood fixes) #104
- Fix dogfood issues #99, #100, #102 (FastAPI backend, MCP read-back, contract) #103
- Promote docs-runner fix to release #98
- ci: fix retired ubuntu-20.04 runner in docs workflow #97
- Promote CNAME-persist CI fix to release #96
- ci: persist docs.fastdash.app CNAME on every docs deploy #95
- Promote 0.3.0 docs (AI agents/MCP + CNAME) to release #94
- docs: AI agents (MCP) guide + docs.fastdash.app CNAME #93
v0.3.0 (2026-06-21)
Merged pull requests:
- Release 0.3.0 - Dash-native MCP app surface #92
- Ship the Dash-native MCP updates as 0.3.0 #91
- Adopt Dash 4.3 native MCP + opt-in FastAPI backend (0.4.0) #90
- Release 0.3.0 - MCP app surface #89
- MCP app surface, DX simplifications, and 0.3.0 prep #88
v0.2.16 (2026-04-20)
Merged pull requests:
- 🚀 Release 0.2.16 #84
- v0.2.16 (in progress): port non-MCP, non-steps work from feature/mcp-support #83
v0.2.15 (2026-04-19)
Merged pull requests:
- Release 0.2.15 #82
v0.2.14 (2025-09-23)
Merged pull requests:
- Fix FastDash input handling: adjust state management for streaming mode #79
v0.2.13 (2025-07-02)
Merged pull requests:
v0.2.12 (2025-06-29)
Merged pull requests:
v0.2.11 (2025-06-27)
Implemented enhancements:
- Support Langchain streaming with the chat component #64
- Option to add a custom loader or disable completely #63
- Add an option to turn off branding #62
Closed issues:
- simple example failed in Thonny IDE #58
Merged pull requests:
- 🚀 Release 0.2.11 #74
- Prepare for release v2.2.11 #72
- Add CLI project creation functionality and register script entry point #71
- Refactor component selection in _get_component_from_input and enhance… #70
- Option to disable branding #69
- Fix/update dependencies #68
- Remove duplicate IDs of inputs and outputs #67
- Streaming with socketio #66
v0.2.10 (2025-02-17)
Merged pull requests:
* This Changelog was automatically generated by github_changelog_generator