NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #4713 most downloaded on pub.dev
Widget system for composable TUI components, built on top of the artisanal terminal toolkit.
Last release 24 days ago
14 Sep 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 7 of 7 stable releases
Nothing withdrawn
no release was ever pulled
7 months old
7 releases · first in 2026
One column per month.
Require Dart SDK 3.13.0 or newer.
BoxConstraints.enforce to compose child size requests withinWidgetTester viaenableRenderer: true, exposing raw ANSI output through rendererOutput.altScreen: true for full-viewport capture instead of inline rendering.enableNativeFrameCapture and latestNativeFrame for structuredartisanal_capture uses this throughWidgetCaptureMode.renderedFrame; drawable payloads are not represented.TreeView.model surface for Artisanal'sTreeModel, including focus-aware keyboard navigation, pointerTreeView(nodes: ...) API remains compatible.ResizableSplitView, a reusable horizontal or vertical split with aResizableSplitView, allowing panes such as integrated terminals to retainStack now reuses clean child layout and paint output during subtree-onlyWidgetApp.dispose() teardown for mounted element trees.WidgetTester and runWidgetApp now explicitly release widget state andProgram model contractLayoutBuilder now builds from incoming parent layout constraints rather thanMediaQuery viewport dimensions. Use MediaQuery directly for viewport-basedStack now rejects unsupported Overflow.visible instead of silently clipping.Overlay for content outside a component's bounds.Container, SizedBox, and flex extents now respect parent minimumAlign/Center host to loosen the viewport's minimums.ConstrainedBox maximum bounds now limit a child's natural size rather thanshowChrome to TextEditor and CodeEditor so workbenches thatshowDiagnosticBanner so unchromed editors retain reusable diagnosticview().StackFit.passthrough constraint forwarding.WidgetTester program before remounting and resetThemeScope when opening dialogs throughNavigatorState.showDialog, and keep the default modal barrier transparentAdded example/text_style , a runnable catalog covering immutable updates, Style composition, span inheritance and resets, selectable text, decorations
example/text_style, a runnable catalog covering immutable updates,Style composition, span inheritance and resets, selectable text,artisanal; theRenderMetricsInjector custom entries to Artisanal's universalWidgetApp's separate built-in metrics overlay and F12 handler.ProgramDiagnosticsOptions.app.dart and the complete widgets.dart public surfacerunWidgetApp, serveWidgetApp, Transport, and widget-orientedapp.dart entrypoint.Listenable, ValueListenable,ChangeNotifier, ValueNotifier, VoidCallback) to package:listenlisten: ^1.0.1). src/widgets/animation/listenable.dart is now apackage:listen/listen.dart directly. Public API viapackage:artisanal_widgets/widgets.dart keeps the same names.ChangeNotifier semantics with package:listen/Flutter: hasListenersnotifyListeners are @protected (notifyListeners remains@visibleForTesting). Subclasses calling them internally are unaffected;Listenable.onError, and dispose()package:listen (asserts in debug).Unsupported operation: Infinity or NaN toInt)RenderSingleChildViewportscrollbar example bounds its Scrollbar with an explicitscroll example does.Bad state: Cannot fire new event) inRenderMetricsInjector: publishes made from inside dispatch (e.g. theReloadFileWatcher.watch waits for native watcher installation beforeTextStyle decoration colors through text rendering copies.TextStyle presentation across soft-wrapped continuation linesText wrap content before resizing Style bordersSee the README for details.
See the README for details.
textStyle overlays to Text, TextSpan,
SelectableText, and SelectableRichText, with nested inheritance and
explicit attribute disabling while retaining the complete Style API.MonthlyCalendar with selected, today, adjacent-month, and marker
styling.Shadow presets and CellFilter for applying UV buffer effects to a
widget subtree.DataTableCell content with column spans, alignment, and
per-cell styles through DataTable.cells.example/widget_features demonstrating fixed viewports, shadows,
calendars, table spans, filters, and canvas shapes together.example/uv_effects demonstrating single and composed UV effects on
ordinary widget subtrees through CellFilter.example/inline_build_monitor, a responsive bottom-pinned build
dashboard with staged progress, streaming logs, native scrollback, and
interactive pause, rebuild, and failure controls.artisanal 0.5.x
and the new UV rendering surface.feat(args): Laravel-style helpers, Symfony namespace discovery, error…
feat(args): Laravel-style helpers, Symfony namespace discovery, error…
git_diff.dart with streamlined imports and cleaner
comment-anchor rendering.artisanal_widgets v0.2.0
artisanal_widgets v0.2.0
package:artisanal_widgets/widgets.dart entrypoint for the high-level widget framework surface.package:artisanal_widgets/charting.dart and package:artisanal_widgets/selection.dart entrypoints for the supported charting and text-selection surfaces.ImageAutoMode.sessionCapabilities so Image(renderMode: auto) can follow terminal version and device-attribute reports from the active session instead of only using the local process environment.example/tooltip_trace demo with TuiTrace instrumentation and built-in replay/trace conversion flags so tooltip hover behavior can be recorded, converted, and replayed during debugging.SelectionArea.SelectableRichText, so one shared rich-text selection can mix palettes within a single widget.FadeModalBarrier so content-backed barriers dim the child in place instead of painting an opaque black layer over the full view, while keeping the standalone overlay fallback for empty-child route barriers.Tint blending so FadeTint and content-backed FadeModalBarrier widgets fade proportionally toward the target color instead of snapping between no effect and a full tint.AnimatedTint to use the shared blendColor() helper so animated widget tinting follows the same color interpolation path as the rest of the style system.Drawer backdrops so open drawers dim the background content in place instead of blacking out the full terminal view.Modal and Drawer honor backdropColor through the shared tint path instead of ignoring the configured color while dimming the background.artisanal_widgets remains the primary widget dependency, while the package:artisanal/... widget entrypoints are documented as optional umbrella convenience re-exports.Image(renderMode: auto) to ImageAutoMode.sessionCapabilities instead of forcing the portable fallback, so remote terminals can upgrade image rendering from live session capability reports.package:artisanal_widgets/artisanal_widgets.dart as the broader experimental compatibility surface while stabilizing the primary widget/app/layout/input/navigation APIs.package:artisanal_widgets/widgets.dart import path.package:artisanal_widgets/widgets.dart entrypoint instead of the broad compatibility surface.Tooltip float from an Overlay ancestor instead of reflowing surrounding layout, and updated the gallery example to host its overlay demos through a root overlay so hover tooltips behave like anchored popups.Tooltip fall back to the latest hover pointer position when anchor geometry is not ready yet, avoiding delayed tooltip popups in live sessions.Tooltip request an immediate repaint on hover enter and exit so overlay tooltips appear and disappear without waiting for a later event.Tooltip hit-test transparent so it no longer blocks later mouse hover and click interaction underneath.GestureDetector hover handling so commands returned from onEnter and onExit are dispatched through the widget pipeline, allowing overlay-backed hover widgets like Tooltip to repaint immediately in live sessions.Stack hit-testing so positioned children use their painted offsets during hit testing, which restores immediate hover interaction for anchored overlays like Tooltip.package:artisanal/app.dart and package:artisanal/widgets.dart.package:artisanal/app.dart, package:artisanal/editors.dart, and package:artisanal/widgets.dart.package:artisanal/widgets.dart and package:artisanal/testing.dart entrypoints.package:artisanal/widgets.dart, package:artisanal/testing.dart, and package:artisanal/app.dart entrypoints.package:artisanal/testing.dart and package:artisanal/widgets.dart entrypoints.package:artisanal/app.dart, package:artisanal/widgets.dart, and package:artisanal/testing.dart entrypoints.package:artisanal/widgets.dart and package:artisanal/testing.dart entrypoints.package:artisanal/widgets.dart and package:artisanal/testing.dart entrypoints.package:artisanal/widgets.dart and package:artisanal/testing.dart entrypoints.package:artisanal/widgets.dart and package:artisanal/testing.dart entrypoints.package:artisanal/widgets.dart and package:artisanal/testing.dart entrypoints.package:artisanal/widgets.dart and package:artisanal/testing.dart entrypoints.package:artisanal/widgets.dart and package:artisanal/testing.dart entrypoints.package:artisanal/widgets.dart and package:artisanal/testing.dart entrypoints, and to accept stabilized truecolor card-surface rendering.package:artisanal/widgets.dart and package:artisanal/testing.dart entrypoints.MouseMode.allMotion and the widget runners that already default to it.Tooltip lifecycle trace events for hover transitions, overlay insert/remove, and overlay visible/hidden timing so tooltip traces can measure when the popup is actually requested and rendered.Tooltip show timing when the tooltip target contains its own MouseRegion.Tooltip from invalidating its overlay entry during every build while hovered, which eliminates repaint churn that could delay later mouse motion and hide updates.Tooltip.didUpdateWidget() from resyncing the floating overlay on unrelated parent rebuilds, so hovered tooltips no longer trigger periodic overlay rebuilds from app-shell updates.Added a transport-independent VirtualTerminal screen model with incremental ANSI/CSI parsing, cursor movement, erasure, scrolling, resizing, SGR styli
VirtualTerminal screen model withTerminalInputEncoder for translating Artisanal key events intopackage:artisanal_pty/artisanal_pty.dart entrypoint forpackage:artisanal_pty/widgets.dart entrypoint with TerminalViewpty2-backed PseudoTerminalView for artisanal_widgetspty2.PseudoTerminalView.quitOnExit.PseudoTerminalView switchespackage:image, with explicit TrueType font faces and fidelity diagnostics.gallery command with an HTML index, render manifest,captureWidget supports WidgetCaptureMode.renderedFrame, andcaptureProgramFrame requires a recorded nativeFrame instead of treatingartisanal_widgets.artisanal.- Documentation + assets
Your coding agent can read these notes before it upgrades. Set up the MCP server →