Skip to content

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 24 Jun 22:06

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 windowsApp, Window, and two navigation shells:
    AppShell (single sidebar) and Workbench (two-tier rail + workspaces), plus
    a borderless Splash intro 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 stateSignal for two-way widget binding; a typed event system
    (on_change()/on_click()/… returning cancelable Subscriptions or composable
    Streams); reactive Form.valid/Form.errors.
  • Theming — light/dark themes, set_theme/toggle_theme, ThemeToggle,
    system-appearance following, and a public bootstack.style API.
  • Databootstack.data source protocol (memory/SQLite/file-backed) with a
    filtering DSL (col/any_of/all_of), a non-scalar data bag carried across
    Tree/DataTable/ListView, and large-file streaming.
  • Dialogs — verbs (alert/confirm/ask_*) at the top level plus dialog
    classes in bootstack.dialogs (Dialog/FormDialog/…).
  • Tooling — a bootstack CLI (start/run/add/doctor/appicon/…) and
    application packaging.

Provisional (excluded from the freeze)

  • bootstack.dev — the hot-reload workflow (reloadable, is_dev_mode, and
    the bootstack dev command) 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: HStackRow, VStackColumn, SeparatorDivider; added
    Spacer. The layout vocabulary moved to screen-axis terms — fill/expand/
    anchor/sticky are replaced by horizontal/vertical/grow with edge-name
    values (left/center/right/stretch). The legacy kwargs now raise.
  • TableDataTable (and decoupled from any specific data source).
  • ToolbarCommandBar for the app-level bar (app.commandbar); app.menu
    app.menubar; the standalone bs.MenuBar was removed in favor of app.menubar.
  • Signal.subscribe() now returns a cancelable handle (was a string token).
  • Selection: per-widget get_selected() / selected_rows / selected_nodes were
    unified into a single polymorphic .selection accessor across
    ListView/DataTable/Tree.
  • Navigation: the single AppShell was split into AppShell (single sidebar) and
    Workbench (two-tier workspaces); nav providers became page_nav() / list_nav()
    / tree_nav() / custom_nav() (the old panel() is now custom_nav()).

Removed / moved

  • AppSettings and settings= were removed. All former settings are now flat
    App(...) / AppShell(...) keyword arguments (theme, locale,
    remember_window_state, …), with symmetric app.* properties. Passing
    settings= raises TypeError.
  • 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 to bootstack.dialogs; the dialog verbs
    (alert/confirm/ask_*) stay top-level.
  • Toast was split into toast() (function), Notification, Snackbar, and
    snackbar().
  • MessageCatalog, IntlFormatter, get_current_app, and Image were demoted to
    internal (import widgets/icons via the public bootstack.images API).
  • Scale and the VariantToken type were removed.

Changed (behavior)

  • TimeField now starts empty (it previously defaulted to the current time,
    which silently defeated required=True).
  • Field validation runs against the field's typed value; rules are type-aware
    (a new range rule for number/date/time bounds), and field.valid / field.error
    are reactive Signals.
  • Toolbar.add_widget / StatusBar.add_widget are now class-based
    (add_widget(WidgetClass, **kwargs)).

What's Changed

Full Changelog: v0.1.0a16...v0.1.0