Overview
FlowKanban is a high-level WinUI/Uno container component for building interactive Kanban boards. It manages columns, tasks, swimlanes, and provides a modern industrial interface with a horizontally scrollable main board area and a vertical utility sidebar for board-level actions.
Namespace: Flowery.Uno.Kanban.ControlsAssembly:
Flowery.Uno.Kanban.dll
Key Features
- Column & Task Management: Add, remove, and reorder columns and tasks dynamically
- Swimlanes: Matrix-style grouping with lane-aware drag & drop
- WIP Limits: Per-column and per-lane limits with visual warnings
- Multi-Board Management: Navigate between multiple boards via Home screen
- Undo/Redo: Command history for reversible operations
- Multi-Select: Bulk operations (move, archive, delete, priority)
- Blocked State: Mark tasks as blocked to prevent forward movement
- JSON Persistence: Atomic save strategy with schema migration
- Done Aging: Auto-archive tasks that remain in Done column beyond threshold
- Search & Filter: Real-time task filtering across board
Basic Usage
Minimal Setup
Programmatic Binding
With Manager
Core Properties
Board Data
Root data model containing columns, tasks, lanes, and board metadata. Setting this property replaces the entire board.
Persistence backend for boards. Default is
FlowKanbanBoardStore using JSON storage. Swap to implement custom persistence (database, cloud).Last board ID loaded or saved via persistence. Used for automatic board restoration on initialization.
Behavior Configuration
Require confirmation dialog before deleting columns. Stored in user settings.
Require confirmation dialog before deleting tasks. Stored in user settings.
Automatically save board to persistent storage after any edit (debounced 800ms). Stored in user settings.
Expand all sections in task editor dialog by default. Stored in user settings.
Controls where inline “Add Card” control appears in columns:
Bottom, Top, or Both. Stored in user settings.Undo/Redo
Enables command history for undo/redo operations. When enabled, supports up to 50 undoable commands. Stored in user settings.
Undo/redo stack manager. Provides
CanUndo, CanRedo, NextUndoDescription, and NextRedoDescription properties.Layout & Sizing
Current size tier for board controls. Affects card font size, spacing, and column width. Values:
ExtraSmall, Small, Medium, Large, ExtraLarge.Width in pixels for each column. Constrained between
MinColumnWidth (100) and MaxColumnWidth (380).Controls visibility of the status bar at the bottom of the board. Persisted in user settings.
Swimlanes
True when
Board.GroupBy is set to Lane and lanes exist. Triggers matrix-style swimlane grid layout.True when swimlanes are disabled or no lanes exist. Triggers standard columnar layout.
Lane row view models used by the swimlane grid template. Auto-populated when swimlanes are enabled.
Selection
True when one or more tasks are selected. Used to enable bulk operation commands.
Count of currently selected tasks.
Target column for bulk move operations. Bind to ComboBox for bulk move UI.
Search & Filter
Search text used to filter task cards. Matches against task title, description, and tags.
Commands
Column Operations
Appends a new column to the board. Shows input dialog for column title.
Parameter:
Removes the specified column. Shows confirmation dialog if
FlowKanbanColumnDataRemoves the specified column. Shows confirmation dialog if
ConfirmColumnRemovals is true.Parameter:
Opens the column editor dialog for the specified column.
FlowKanbanColumnDataOpens the column editor dialog for the specified column.
Parameter:
Toggles the collapsed/expanded state of a column.
FlowKanbanColumnDataToggles the collapsed/expanded state of a column.
Task Operations
Parameter:
Adds a new task to the specified column. Opens task editor dialog.
FlowKanbanColumnDataAdds a new task to the specified column. Opens task editor dialog.
Creates a new card in the active column using inline add control.
Parameter:
Removes the specific task. Shows confirmation dialog if
FlowTaskRemoves the specific task. Shows confirmation dialog if
ConfirmCardRemovals is true.Parameter:
Opens the task editor dialog for the specified task.
FlowTaskOpens the task editor dialog for the specified task.
Undo/Redo
Undoes the last operation. Enabled when
EnableUndoRedo is true and CommandHistory.CanUndo is true.Redoes the last undone operation. Enabled when
EnableUndoRedo is true and CommandHistory.CanRedo is true.Bulk Operations
Parameter:
Moves all selected tasks to the specified column. Raises
FlowKanbanColumnData?Moves all selected tasks to the specified column. Raises
CardMoving and CardMoved events.Parameter:
Sets priority for all selected tasks. Values:
string? (priority value)Sets priority for all selected tasks. Values:
Low, Normal, High, Critical.Parameter:
Sets tags for all selected tasks.
string? (comma-separated tags)Sets tags for all selected tasks.
Parameter:
Sets due date for all selected tasks. Null clears the due date.
DateTimeOffset?Sets due date for all selected tasks. Null clears the due date.
Archives all selected tasks. Shows confirmation dialog before executing.
Permanently deletes all selected tasks. Shows confirmation dialog before executing.
Deselects all tasks.
Persistence
Serializes the current board to app state storage using the board ID as key.
Deserializes the most recently saved board from app state storage.
Exports board to JSON file using file picker (Windows only).
Imports board from JSON file using file picker (Windows only).
Board Management
Opens the board properties dialog (title, description, lanes).
Opens inline rename dialog for the board title.
Navigates to the Home screen for multi-board management.
Parameter:
Opens the specified board from the Home screen.
FlowBoardMetadataOpens the specified board from the Home screen.
Creates a new blank board from the Home screen.
Creates a demo board with sample data for testing.
View Controls
Opens the Kanban settings dialog.
Increases board size tier (enlarges cards).
Decreases board size tier (shrinks cards).
Toggles the status bar visibility.
Shows or hides the archive column for the current board.
Opens the keyboard shortcuts help dialog.
Opens the board metrics/statistics dialog.
Opens the user management panel (when enabled).
Events
Raised when the board size tier changes (via zoom).
Raised when the column width changes.
Raised when the Kanban switches between compact and standard layouts.
Raised when a drag operation ends (completed or cancelled). Columns should clean up drop indicators.
Raised before a card is moved. Handlers can cancel the move by setting
Cancel = true on the event args.CardMovingEventArgs Properties:Task: FlowTask- The task being movedSourceColumn: FlowKanbanColumnData- Origin columnTargetColumn: FlowKanbanColumnData- Destination columnTargetIndex: int- Index in target columnTargetLaneId: string?- Lane ID after moveTargetWipCount: int- WIP count after moveTargetWipLimit: int?- WIP limit for targetWouldExceedWip: bool- True if move exceeds WIPCancel: bool- Set to true to prevent moveCancelReason: string?- Message to display if cancelled
Raised after a card has been moved to a new location.CardMovedEventArgs Properties:
Task: FlowTask- The moved taskSourceColumn: FlowKanbanColumnData- Origin columnTargetColumn: FlowKanbanColumnData- Destination column
Raised when a card’s properties are edited via the task editor dialog.
Raised when a column’s properties are edited.
Raised when board-level properties are edited (title, description, lanes).
Raised when lane grouping or lane definitions change (enables/disables swimlanes).
Raised when the search filter changes (text or task match state).
Board Data Model
FlowKanbanData
The root data model representing the entire board.Unique board identifier. Auto-generated GUID if not set.
Board title displayed in header and Home screen.
Optional board description.
All columns in the board. Add/remove columns to modify board structure.
Swimlane definitions. When non-empty and
GroupBy is Lane, enables swimlane layout.View-only grouping mode:
None (standard columns) or Lane (swimlane matrix).ID of the designated archive column. Tasks moved here are flagged as archived.
When true, hides the archive column from view.
ID of the designated Done column. Tasks moved here receive
CompletedAt timestamp.When true, automatically archives Done tasks older than
AutoArchiveDoneDays.Number of days a task can remain in Done before auto-archiving (when enabled).
Board creation timestamp.
User who created the board.
Persistence
Storage Architecture
FlowKanban usesStateStorageProvider for JSON persistence:
- User settings:
kanban.user.settings.<userId>(confirmation prompts, auto-save, undo/redo, status bar) - Board files:
kanban.board.<boardId>(one entry per board) - Global admin:
kanban.admin.global(bootstrap admin ID)
IBoardStore Interface
Swappable persistence backend. Default implementation isFlowKanbanBoardStore.
Safe Persistence API
Saves the current board to storage. Returns false if an exception occurs.
Loads the last saved board (by
LastBoardId). Returns false if not found or error occurs.Loads a specific board by ID. Returns false if not found or error occurs.
Saves current user settings to storage. Returns false if an exception occurs.
Loads user settings from storage. Returns false if an exception occurs.
Renames a stored board without loading it. Returns false if not found or error occurs.
Deletes a stored board by ID. Returns false if not found or error occurs.
Duplicates a stored board. Returns false if source not found or error occurs.
Exports a board to JSON string without loading it. Returns false if not found or error occurs.
Atomic Save Strategy
Boards are saved using a temp-file rename strategy for power-loss safety:- Serialize to
<key>.tmp - Rename to
<key> - Delete temp file
Schema Migration
Boards are automatically upgraded viaFlowKanbanMigration on load. Legacy formats are converted to the latest schema transparently.
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Ctrl + B | Add column |
Ctrl + D | Delete last column |
Ctrl + T | Rename active column |
Ctrl + N | Create card in active column |
Ctrl + + | Zoom in |
Ctrl + - | Zoom out |
Ctrl + Z | Undo (when enabled) |
Ctrl + Y | Redo (when enabled) |
Ctrl + Alt + Left/Right | Switch active column |
Undo/Redo Behavior
Recorded Operations
- Move card
- Add card
- Delete card
- Edit title/description/palette
- Block/unblock
- Archive/unarchive (including bulk flows)
NOT Recorded
- Priority/tags/due date edits
- Column operations
- Board settings
- Zoom
- Selection
- Search/sort changes
Rules
- History size: 50 commands (configurable via
FlowKanbanCommandHistory.MaxHistorySize) - Redo invalidation: Executing a new command clears the redo stack
- Toggle behavior: When
EnableUndoRedois false, commands execute immediately without history
Swimlanes (Advanced)
Enabling Swimlanes
Lane Properties
Unique lane identifier (auto-generated GUID).
Lane display name shown in row header.
Optional color for lane row header.
Lane-Aware Drag & Drop
When dropping a task into a lane cell:- Task’s
LaneIdis updated to match the target lane - WIP limits can be set per-lane (overrides column-level limit)
- Unassigned tasks (legacy
LaneId = nullor"0") appear in “Unassigned” lane
Lane WIP Limits
Best Practices
When to Use FlowKanban
✅ Use FlowKanban when you need:- A complete Kanban board UI with minimal setup
- Multi-board management with Home screen
- Built-in persistence and undo/redo
- Swimlane support
- User settings and preferences
- Programmatic board manipulation without UI
- Custom UI with Kanban logic
- Server-side board processing
- Headless testing
Performance Considerations
- Large boards: Consider enabling archive column and auto-archive for Done tasks
- Swimlanes: Performance degrades with >20 lanes or >500 tasks per lane
- Search: Debounced 300ms to avoid re-filtering on every keystroke
- Auto-save: Debounced 800ms to batch rapid edits
Accessibility
- All buttons expose
AutomationProperties.Namefor screen readers - Cards expose
AutomationProperties.AutomationIdvia task ID - Tab navigation works across header, board, and sidebar
- Arrow-key navigation planned for future release
Related Components
- FlowKanbanManager - Programmatic API
- FlowKanbanHome - Multi-board home screen
FlowKanbanColumn- Individual column controlFlowTaskCard- Individual task card controlFlowTaskEditorDialog- Task editing modalFlowBoardEditorDialog- Board properties modalFlowKanbanSettingsDialog- Settings modal

