Release Notes#
Notable changes to bootstack, newest first. The project follows Semantic Versioning from 0.1.0 onward; the full file lives at CHANGELOG.md.
0.1.1 — packaging fix#
Fixed#
Declared
pygmentsas a runtime dependency.CodeEditorrequires Pygments for syntax highlighting, but it was not listed in the project dependencies, so a cleanpip install bootstackwould raiseModuleNotFoundError: No module named 'pygments'when constructing aCodeEditor(including on the bundled demo’s editing page). Pygments is now installed automatically with bootstack.
0.1.0 — first stable release#
The first stable release of bootstack. The public compose API — everything
you import as bootstack as bs plus the curated submodules (bootstack.data,
bootstack.style, bootstack.events, bootstack.dialogs, …) — is now frozen
under Semantic Versioning. Breaking changes to it will not land before 1.0 except
as documented, versioned migrations.
Highlights#
Applications and windows —
App,Window, and two navigation shells:AppShell(single sidebar) andWorkbench(two-tier rail + workspaces), plus a borderlessSplashintro screen. Undecorated windows auto-inject a draggable titlebar and border.A full widget catalog — layout (
Row/Column/Grid/Card/ScrollView/SplitView/Accordion), inputs (TextField/NumberField/DateField/TextArea/CodeEditor/Slider/…), selection (Checkbox/Switch/Select/Calendar/…), data display (DataTable/Tree/ListView/Label/Badge/Gauge/…), media (Picture/Gallery/Carousel/Avatar/Chart), navigation (Tabs/PageStack), and overlays (Tooltip/toast/Notification/Snackbar).Reactive state —
Signalfor two-way widget binding; a typed event system (on_change()/on_click()/… returning cancelableSubscriptions or composableStreams); reactiveForm.valid/Form.errors.Theming — light/dark themes,
set_theme/toggle_theme,ThemeToggle, system-appearance following, and a publicbootstack.styleAPI.Data —
bootstack.datasource protocol (memory/SQLite/file-backed) with a filtering DSL (col/any_of/all_of), a non-scalar data bag carried acrossTree/DataTable/ListView, and large-file streaming.Dialogs — verbs (
alert/confirm/ask_*) at the top level plus dialog classes inbootstack.dialogs(Dialog/FormDialog/…).Tooling — a
bootstackCLI (start/run/add/doctor/appicon/…) and application packaging.
Provisional (excluded from the freeze)#
bootstack.dev— the hot-reload workflow (reloadable,is_dev_mode, and thebootstack devcommand) is experimental. Its surface is carved out of the 0.1.0 freeze and may change before a later release.
Migrating from the 0.1.0aN alpha series#
Pre-1.0 alphas were never a stable contract; this summarizes the notable breaks for anyone who tracked an alpha. (If you are installing bootstack for the first time, you can ignore this section.)
Renamed#
Layout:
HStack→Row,VStack→Column,Separator→Divider; addedSpacer. The layout vocabulary moved to screen-axis terms —fill/expand/anchor/stickyare replaced byhorizontal/vertical/growwith edge-name values (left/center/right/stretch). The legacy kwargs now raise.Table→DataTable(and decoupled from any specific data source).Toolbar→CommandBarfor the app-level bar (app.commandbar);app.menu→app.menubar; the standalonebs.MenuBarwas removed in favor ofapp.menubar.Signal.subscribe()now returns a cancelable handle (was a string token).Selection: per-widget
get_selected()/selected_rows/selected_nodeswere unified into a single polymorphic.selectionaccessor acrossListView/DataTable/Tree.Navigation: the single
AppShellwas split intoAppShell(single sidebar) andWorkbench(two-tier workspaces); nav providers becamepage_nav()/list_nav()/tree_nav()/custom_nav()(the oldpanel()is nowcustom_nav()).
Removed / moved#
AppSettingsandsettings=were removed. All former settings are now flatApp(...)/AppShell(...)keyword arguments (theme,locale,remember_window_state, …), with symmetricapp.*properties. Passingsettings=raisesTypeError.Top-level namespace curated to the compose surface only. Types you reference to configure behavior moved to submodules — e.g.
Theme/get_theme_color(bootstack.style),col/SqliteDataSource(bootstack.data),ValidationRule(bootstack.validation),Event/Subscription(bootstack.events),AccentToken(bootstack.types). Dialog classes (Dialog/FormDialog/…) moved tobootstack.dialogs; the dialog verbs (alert/confirm/ask_*) stay top-level.Toastwas split intotoast()(function),Notification,Snackbar, andsnackbar().MessageCatalog,IntlFormatter,get_current_app, andImagewere demoted to internal (import widgets/icons via the publicbootstack.imagesAPI).Scaleand theVariantTokentype were removed.
Changed (behavior)#
TimeFieldnow starts empty (it previously defaulted to the current time, which silently defeatedrequired=True).Field validation runs against the field’s typed value; rules are type-aware (a new
rangerule for number/date/time bounds), andfield.valid/field.errorare reactiveSignals.Toolbar.add_widget/StatusBar.add_widgetare now class-based (add_widget(WidgetClass, **kwargs)).