Repository navigation
Widget Catalog
The running list of every wapyt widget. Update this page whenever a widget is added, renamed or retired, and move a Roadmap entry up into the first table when it ships.
Everything is importable from the package root (from wapyt import Tree, ...).
"Mount" is the Layout helper that places it in an existing cell; widgets
without one are constructed with container= or have no DOM of their own.
| Widget | Module | Mount | What it is | Page |
|---|---|---|---|---|
Layout / MainWindow
|
layout |
add_layout |
Flexbox rows/columns of cells with optional drag-to-resize splitters; MainWindow is the app entrypoint base |
Layout and MainWindow |
Tree |
tree |
add_tree |
Nested, filterable nodes with per-kind right-click menus, checkboxes, drag-and-drop and full keyboard support | Tree |
DataTable |
datatable |
add_datatable |
Sortable, filterable, selectable rows; inline cell editing; resizable, reorderable and frozen columns; CSV export; drop upload | DataTable |
Form |
form |
add_form |
Declarative fields with client-side validation and error slots: text, select, combo, checkbox, toggle, radio and checkbox groups, date/time, colour, and range (one or two thumbs, with ticks); toggle groups, file and avatar fields, buttons anywhere, fieldsets, spacers and static values, labels on top or on the left, Python validators (sync or async) | Form |
ModalWindow |
modal |
— (ModalWindow(cfg)) |
Dialog shell; mount widgets into modal.body; show / hide / close events |
ModalWindow |
Window |
window |
— (Window(cfg)) |
Floating window: move, resize, maximise, stack; non-modal by default, optional footer | Window |
Chart |
chart |
add_chart |
Chart.js charts (line, area, bar, pie, doughnut, scatter, bubble, radar) that fill and follow their container, for resizable dashboards | Chart |
Scheduler |
scheduler |
add_scheduler |
Day / week / month / agenda calendar: drag to create, move and resize appointments, keyboard throughout, iCal export, print view | Scheduler |
MediaPlayer |
mediaplayer |
add_mediaplayer |
Video in place, an audio bar that docks to the window's foot, or a compact inline player; a queue with shuffle (each item once) and repeat; HLS (bundled hls.js), WebVTT subtitles, items resolved when reached, exclusive groups, keyboard and OS media keys, the app's own buttons in the bar | MediaPlayer |
TabWidget |
tabwidget |
add_tabwidget |
Tabs with badges, closable tabs, keep-alive panels | TabWidget |
Sidebar |
sidebar |
add_sidebar |
Collapsible navigation rail: icons, badges, nested groups (a flyout when collapsed), headings, separators, a bottom spacer | Sidebar |
Chat |
chat |
add_chat |
Streaming AI chat: multi-chat history, model picker, artifacts, voice capture | Chat |
Terminal |
terminal |
add_terminal |
xterm.js terminal wired to a WebSocket shell relay | Terminal |
CardPanel |
cardpanel |
add_cardpanel |
Searchable, template-driven card grid | CardPanel |
ResourceBoard |
resourceboard |
add_resourceboard |
Master/detail list with a templated detail pane | ResourceBoard |
filetransfer |
filetransfer |
— (functions) | Native save/open/folder pickers and streaming uploads/downloads | File Transfer |
message |
message |
— (functions) | Toasts, plus awaitable alert / confirm / prompt dialogs | Message |
Toolbar |
toolbar |
add_toolbar |
Buttons, toggles, groups, dropdown and split buttons, text, separators and spacers; drops to icons when narrow | Toolbar |
ContextMenu |
contextmenu |
— (attach / show_at) |
Right-click menus with icons, shortcuts, danger/disabled items, checkable and radio items, and submenus | ContextMenu |
MenuBar |
menubar |
add_menubar |
File / Edit / View menu bar whose titles open ContextMenu dropdowns | MenuBar |
Kanban |
kanban |
add_kanban |
Listbox columns with counts, WIP limits, add-card buttons, collapsible and reorderable columns, a board-wide filter | Kanban |
Listbox |
listbox |
add_listbox |
Rich items (fields or an escaped template) hosting live widgets; actions, selection, filter; drag-and-drop within and between lists | Listbox |
ProgressBar / progress_html
|
progressbar |
add_progressbar |
Determinate or indeterminate bars with states; also static markup | ProgressBar |
Pagination |
pagination |
add_pagination |
First/prev/next/last, page box or numbered buttons, page sizes, summary; unknown totals | Pagination |
Popup |
popup |
— (show / toggle at an anchor) |
Anchored popover for pickers, help and small forms | Popup |
tooltip / tooltip_attr
|
popup |
— (functions) | Styled tooltips; every widget's title text uses them |
Popup and tooltips |
26 widgets. Config classes: LayoutConfig, CellConfig, TreeConfig,
TreeItem, TreeAction, DataTableConfig, ColumnConfig, TableAction,
FormConfig, FieldConfig, SelectOption, FormButton, FormFieldset,
FormSpacer, ModalConfig, WindowConfig, ChartConfig, ChartDataset, SchedulerConfig, ScheduleItem, MediaPlayerConfig, MediaItem, MediaTextTrack, MediaAction, TabWidgetConfig,
TabConfig, ToolbarConfig, ToolbarButton, ToolbarText,
ToolbarSeparator, ToolbarSpacer, ContextMenuConfig, MenuItem, MenuBarConfig, ListboxConfig, ListAction, KanbanConfig, KanbanColumn, ProgressBarConfig, PaginationConfig, PopupConfig, SidebarConfig, SidebarItem, SidebarHeading, SidebarSeparator, SidebarSpacer, ChatConfig, ChatAgentConfig,
ChatMessageConfig, TerminalConfig, TerminalTheme, CardPanelConfig,
CardPanelCardConfig, ResourceBoardConfig, ResourceItem.
Proposed in the Roadmap, roughly in priority order. Names are working titles until they ship.
| Widget | Replaces today | dhxpyt counterpart |
|---|---|---|
| Scheduler resource timeline | — | (DHTMLX Scheduler's timeline; dhxpyt has none) |
See Comparison with dhxpyt for the full mapping.
Record widget additions here, newest first.
-
2026-10-11: wapyt 0.2.0 released: the first final release from this repository, and what a plain
pip install wapytnow installs (#74). Parity items and the Scheduler's resource timeline follow in later versions. -
2026-10-11: wapyt 0.2.0.dev2 published to PyPI as a pre-release: the first release with the
MediaPlayer(#73). -
2026-10-10:
MediaPlayerworks with any media source:MediaItem(headers=…)on every HLS request,live=True(the live edge), a Quality menu withon_levels/set_quality,refresh()for an expiring URL, errorcodes with the HTTPstatus; a refused playlist is reported at once instead of hanging. New guide: MediaPlayer: connecting your media server, with a runnable demo (#72). -
2026-10-10:
MediaPlayerbuttons of the app's own in the bar (MediaAction,on_action,set_action), and shuffle deals every item once before any repeats — turned on mid-queue, after items are added, and across passes with repeat all (#71). -
2026-10-09:
MediaPlayeradded: video in place, an audio bar that docks to the window's foot, a compact player; a queue, items resolved when reached, HLS on a vendored hls.js 1.7.3, WebVTT subtitles, exclusive groups, keyboard and OS media keys (#70). -
2026-10-08: wapyt 0.2.0.dev1 published to PyPI as a pre-release, the first release from this repository (#68). Since: the iCal export no longer prints a
SyntaxWarningon import, and CI fails on source warnings (#69). -
2026-10-08:
Scheduleradded: day, week, work week, month and agenda views; drag (or keyboard) to create, move and resize; act-then-revert; iCal export and a print view (#67). -
2026-10-08:
Chartadded, on a vendored Chart.js 4.5.1: fills and follows its container (tested in gridstack dashboards), a validated light / dark palette keyed by series, one value axis, a data table for screen readers, liveappend(#65). -
2026-10-08:
Windowadded: a movable, resizable, stackable window, non-modal by default, with maximise, a footer and keyboard moving (#64). -
2026-10-08:
Treecheckboxes (cascading or independent), drag-and-drop (pointer and Alt+arrows, act-then-reverton_move/move) and keyboard / screen-reader support, which it had none of (#63). -
2026-10-08: Form toggle groups (
type="toggle_group", one choice ormultiple, icons on segments) (#62). -
2026-10-08: Form file and avatar fields;
get_files/adopt_fileshand files tofiletransfer(#61). -
2026-10-08: Form async validators (
async def; submit waits); blur validation can no longer swallow a click (#60). -
2026-10-08: Form
max_length, fieldicons andSelectOption(disabled=True)(#59). -
2026-10-08: Form
disable()/enable()/hide()/show()for the whole form (#58). -
2026-10-08: Form
set_properties/get_properties(#57). -
2026-10-08: Form
on_focus/on_blur(per field),set_focus,get_focusedandvalidate_fieldfor validate-on-blur; removing a combo chip no longer blurs the field (#56). -
2026-10-08: Form validators:
FieldConfig(validate=fn)runs a Python function in the browser,set_validatorchanges it, andsuccess_messageshows once a field passes (#55). -
2026-10-08: Form fieldsets (
FormFieldset, nestable, hide / disable as a unit), spacers (FormSpacer) and static fields (type="static"). Validation now skips hidden and disabled fields (#54). -
2026-10-08: Form buttons (
FormButtonamong the fields or in the action row,on_click, submit buttons that validate first,set_button_loading) and labels on the left (label_position,label_width,hidden_label); the action row wraps (#53). -
2026-10-08: CI can commit a regenerated asset manifest to a pull request whose manifest went stale, once a
MANIFEST_BOT_TOKENsecret is set; until then a stale manifest fails with the command to run (#51; see Development). -
2026-10-08:
Toolbardropdown and split buttons:ToolbarButton(items=[MenuItem...], split=),on_select,on_open,set_menu_items,set_checked, andset_disabled/set_hiddenfor menu items (#50). -
2026-10-08: Form two-thumb range (
FieldConfig(type="range", range=True)reads[low, high]) and tick marks (ticks,major_ticks,tick_labels) for every range field; the range readout no longer resizes the track (#49). -
2026-10-07:
FormConfig(submit_text=None)/cancel_text=Nonenow hide the button (the default "Save" used to come back), and a Form or DataTable mounted withcontainer=tabs.get_cell(id)no longer shows through an inactive tab (#48). -
2026-10-07: Version 0.2.0.dev0, working toward 0.2.0. CI on every pull request, and a tag-driven release workflow that publishes to PyPI (#47; see Development).
-
2026-10-07:
Kanbanadded, built from Listbox columns: counts and WIP limits (optionally strict), add-card buttons, collapsible and reorderable columns, a board-wide filter and selection (#46). -
2026-10-07:
Listboxadded: rich items with an escaped template,item_bodyfor live widgets,ListActions, selection, a filter, and pointer and keyboard drag-and-drop within and between lists (#45). -
2026-10-07:
MenuBaradded.ContextMenugains persistentset_disabled/set_hidden/set_checkedand checkable and radio-group items (#44). -
2026-10-07:
Form.clear()andreset(); an unset range now starts at the midpoint of its own min/max instead of its max (#43). -
2026-10-07:
DataTablerow and cell classes (row_class_by, columncss,cell_class_by) and hidden columns (hidden,hide_column,show_column) (#42). -
2026-10-07:
ModalWindowon_show/on_hide/on_closewith the close reason; only the topmost modal answers Escape (#41). -
2026-10-06:
Sidebargroups (SidebarItem(items=...), nested, a flyout on the collapsed rail),SidebarHeading,SidebarSeparator,SidebarSpacer, keyboard navigation,on_toggleand expand-state persistence; its styles moved onto the--wapyt-*tokens (#40). -
2026-10-06:
DataTableCSV export:to_csvandexport_csv, with a formula-injection guard on by default (#39). -
2026-10-06:
DataTablefrozen columns:DataTableConfig(frozen_columns=N)andset_frozen_columns(#38). -
2026-10-06:
DataTableinline cell editing:ColumnConfig(editable, editor, options, required),on_edit,set_cell,set_cell_error,edit_cell,cancel_edit. Row selection no longer redraws the table, so a double-click can no longer land on a row that moved (#37). -
2026-10-06:
Popupand styled tooltips (tooltip,tooltip_attr,set_tooltips_enabled). Toolbar, DataTable, Tree and Sidebartitletext now shows as a styled tooltip, also on keyboard focus; DataTable cells and tree labels only show one when cut off (#36). -
2026-10-06: Resizable layout cells:
CellConfig(resizable=True, max_size=...),Layout.on_resize,set_size,get_size. Cells are nowborder-box, so sized cells are 2px smaller than before (#35). -
2026-10-06:
Paginationadded, withpage_sliceandLayout.add_pagination(#34). -
2026-10-06: Form
combofield: searchable select withmultiplechips andallow_custom(#32, onmainvia #33). -
2026-10-06: Form field types
date,time,datetime-local,color,range,radio,toggle,checkbox_group;min/maxvalidated; date objects accepted; unknown types raise (#31). -
2026-10-06:
filetransfer.uploadsends the right CSRF token when an app uses its own pytincture cookie names (cookie_namespace); uploads used to 403 (#30). -
2026-10-06: Every widget returns
Noneinstead of Pyodide'sJsNullin event payloads and getters; Layout events arrive as dicts (#29). -
2026-10-06:
ProgressBarandprogress_htmladded (#28). -
2026-10-06: Tree, DataTable and Terminal right-click menus now use
ContextMenu(keyboard, focus, ARIA); their APIs are unchanged (#27). -
2026-10-06: Toolbar and ContextMenu separators use new
--wapyt-dividertokens; they were invisible in dark mode (#26). -
2026-10-06:
ContextMenuadded (#25). -
2026-10-06:
Toolbaradded (#24). -
2026-10-06:
message.prompt(..., password=True)masks the input (#23). -
2026-10-06:
messageadded: toasts and alert / confirm / prompt dialogs (#22). -
2026-10-06:
CardPaneldefaults are generic (empty title and description, "Search…", "Add"). Layouts and modals take their font from--wapyt-font-family.Chat.on_sendis documented as{id, text, message}. -
2026-09-30:
TreeAction(requires=[...]), matchingdata["flags"]. -
2026-09-29:
ColumnConfig(icon_by=...)per-cell icons inDataTable. -
2026-09-25:
TreeAction(kinds=[...]);DataTableresizable and reorderable columns;ModalConfig(dispose_on_close=True).
wapyt is MIT-licensed · Repository · pyTincture · Issues
Getting started
Widgets
- Layout and MainWindow
- Tree
- DataTable
- Form
- ModalWindow
- Window
- TabWidget
- Toolbar
- Sidebar
- Chat
- Terminal
- CardPanel
- ResourceBoard
- File Transfer
- Message
- ContextMenu
- MenuBar
- Listbox
- Kanban
- ProgressBar
- Pagination
- Popup and tooltips
- Chart
- Scheduler
- MediaPlayer
Guides
Planning
Contributing