Angular Kanban Board Component | ng-hub-ui-board

Angular Kanban board component with drag and drop, custom card templates, column workflows and CSS variables for business dashboards.

Last updated Sep 6, 2026

Overview

Why teams search for this library

This Angular board component helps you ship Kanban-style workflows with drag and drop, flexible templates and scalable interaction patterns for real business tooling.

Install

npm install ng-hub-ui-board

Jump to

Ideal for

  • task boards
  • pipeline tracking
  • CRM workflows
  • operations dashboards

About board

ng-hub-ui-board is designed for Angular products that need more than a static list: task tracking, CRM pipelines, support workflows or internal operations dashboards. It keeps card rendering flexible while preserving a consistent board interaction model.

Feature guides

Basic Usage

Fundamental board features

Examples:
Basic Board Example

Basic Board Example

To Do
Research

Analyze requirements

Design

Create UI mockups

In Progress
Development

Implement core features

Done
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.

Interactions

User interaction capabilities

Examples:
Card Drag & Drop

Card Drag & Drop

To Do
Research

Analyze requirements

Design

Create UI mockups

In Progress
Development

Implement core features

Done
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.

Last Event: None

Column Reordering

Column Reordering

To Do
Research

Analyze requirements

Design

Create UI mockups

In Progress
Development

Implement core features

Done
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.

Last Reorder: None

Card Click Event

Card Click Event

To Do
Research

Analyze requirements

Design

Create UI mockups

In Progress
Development

Implement core features

Done
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.

Last Clicked: None

Board Events

Board Events

To Do
Research

Analyze requirements

Design

Create UI mockups

In Progress
Development

Implement core features

Done
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.

Event Log

No events yet. Interact with the board!
Keyboard & Screen Reader

Keyboard & Screen Reader

Tab to a card, then press Space or Enter to grab it, the arrow keys to move it within or across columns, Space / Enter to drop it and Esc to cancel. A visually hidden aria-live="polite" region announces every grab, move, drop and rejection, and boardLabel gives the board its accessible name.

To Do
Research

Analyze requirements

Design

Create UI mockups

In Progress
Development

Implement core features

Done
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.

Moves committed from the keyboard (same payload as a pointer drop):

  • No move yet.

Advanced Features

Scrolling and advanced behavior

Examples:
Infinite Scroll

Infinite Scroll

To Do
Research

Analyze requirements

Design

Create UI mockups

Scroll Item 1

Scroll to see more

Scroll Item 2

Scroll to see more

Scroll Item 3

Scroll to see more

Scroll Item 4

Scroll to see more

Scroll Item 5

Scroll to see more

Scroll Item 6

Scroll to see more

Scroll Item 7

Scroll to see more

Scroll Item 8

Scroll to see more

Scroll Item 9

Scroll to see more

Scroll Item 10

Scroll to see more

Scroll Item 11

Scroll to see more

Scroll Item 12

Scroll to see more

Scroll Item 13

Scroll to see more

Scroll Item 14

Scroll to see more

Scroll Item 15

Scroll to see more

Scroll Item 16

Scroll to see more

Scroll Item 17

Scroll to see more

Scroll Item 18

Scroll to see more

Scroll Item 19

Scroll to see more

Scroll Item 20

Scroll to see more

In Progress
Development

Implement core features

Done
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.

Last Scroll End: None

Templates

Customizing appearance

Examples:
Custom Card Template

Custom Card Template

To Do
Research
Analyze requirements
ID: 1
Design
Create UI mockups
ID: 2
In Progress
Development
Implement core features
ID: 3
Done
Planning
Initial meeting
ID: 4
Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.
Custom Header Template

Custom Header Template

To Do2
Research

Analyze requirements

Design

Create UI mockups

In Progress1
Development

Implement core features

Done1
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.
Custom Footer Template

Custom Footer Template

To Do
Research

Analyze requirements

Design

Create UI mockups

In Progress
Development

Implement core features

Done
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.
Custom Card Placeholder

Custom Card Placeholder

To Do
Research

Analyze requirements

Design

Create UI mockups

In Progress
Development

Implement core features

Done
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.
Last action: Drag a card to see the custom placeholder
Custom Column Placeholder

Custom Column Placeholder

To Do
Research

Analyze requirements

Design

Create UI mockups

In Progress
Development

Implement core features

Done
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.
Last action: Drag a column to see the custom placeholder
Custom Drag Preview

Custom Drag Preview

To Do
Research

Analyze requirements

Design

Create UI mockups

In Progress
Development

Implement core features

Done
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.
Last action: Drag a card or column to see the custom preview

Configuration

Board configuration options

Examples:
Disable Sorting

Disable Sorting

To Do
Research

Analyze requirements

Design

Create UI mockups

In Progress
Development

Implement core features

Done
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.
Drag Behavior Modes

Drag Behavior Modes

Try dragging cards or columns with different behaviors to see how the original element appears during drag.
To Do
Research

Analyze requirements

Design

Create UI mockups

In Progress
Development

Implement core features

Done
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.
Current Behavior: collapse
  • Collapse: The element completely disappears and its space is removed from the layout
  • Best for: Clean interface where you only want to see the placeholder at the destination

Styling

Customizing appearance via CSS variables

Examples:
CSS Customization

CSS Customization

To Do
Research

Analyze requirements

Design

Create UI mockups

In Progress
Development

Implement core features

Done
Planning

Initial meeting

Press Space or Enter to grab the card, use the arrow keys to move it, Space or Enter to drop it, Escape to cancel the move.

Key features

Recent changes

Version 22.5.2 - 9/6/26, 12:00 AM

fixed: The columns are now the items of the board list. role="list" sat on the host, but its children were two role-less wrappers, the hidden keyboard hint and the live region, so the required-owned-elements chain broke and a screen reader read the board as a list with no items. The list now lives on the columns track, each column container is its listitem, and the column group semantics (role="group", its aria-label and its stable id) moved onto the column itself, which leaves the hint and the announcer outside the list. The host keeps its aria-label and becomes a region, so boardLabel still names the board and a screen-reader user can reach it without the consumer adding a heading of their own.

fixed: BoardModule now exports CardDragPreviewDirective and ColumnDragPreviewDirective. Both are public API and both are documented in the README with no caveat, but neither was in the module, so a consumer who took the documented Module Import (Legacy) route got an <ng-template cardDragPreview> that matched no directive. Nothing failed out loud: the template was simply ignored and the default preview rendered, which is the worst way for an option to not work.

fixed: The documentation now describes the component that ships. Both READMEs promised things the code does not do and hid things it does: a CC BY 4.0 licence that the 22.5.0 relicense had already replaced with MIT, a @use of a stylesheet removed in 21.1.0, a card template bound to let-card="card" when the context key is item (so the snippet rendered an empty card), board typed as Signal<Board> when the input takes a plain Board, a primary default on a variant that has none, EventEmitter where the outputs are output(), a BoardColumn block missing the very predicate the keyboard section relies on, and a virtual scrolling feature that is only end-of-column detection. Each one is a reader copying a line that fails to compile or silently renders nothing.

fixed: FUNCTIONALITIES.md no longer lists a configurable scroll-detection padding. It is a private constant, not an input, so the row promised an API that has never existed.

Version 22.5.1 - 9/1/26, 12:00 AM

changed: The package homepage now points at this library's own documentation page instead of the site root, so the link a registry shows beside the package lands on the reference the reader was already looking for. Metadata only.

Version 22.5.0 - 8/17/26, 12:00 AM

changed: Relicensed from CC-BY-4.0 to MIT. CC licences are not meant for software: no patent grant, no source-distribution terms and an attribution requirement with no defined meaning for code that ends up inside a bundle. MIT grants strictly more, so nobody who took an earlier version loses anything.

Version 22.4.1 - 8/8/26, 12:00 AM

fixed: Documentation links now point at the canonical localized URLs. The README linked to https://hubui.dev/<path> with no locale prefix and no trailing slash, and both forms are 301-redirected, so every reader arriving from npm or GitHub landed on a redirect instead of the canonical page.

Version 22.4.0 - 7/28/26, 12:00 AM

added: ARIA list semantics: the board host is role="list" named by the new boardLabel input, each column is a labelled role="group", each column body a role="list" and each card a role="listitem".

added: Keyboard card reorder: Space/Enter grabs a focused card, ArrowUp/ArrowDown move it within its column and ArrowLeft/ArrowRight to the adjacent column (honouring the same predicate/cardSortingDisabled rules as dragging), Space/Enter drops emitting the same onCardMoved payload as a pointer drop, and Escape cancels restoring the original position.

added: Visually hidden aria-live="polite" announcer for grab, move, drop, cancel and rejected targets (messages are English-only for now), plus a hidden usage hint linked from each focusable card.

added: New optional boardLabel input: accessible name of the board list container (default 'Board').

Version 22.3.0 - 7/7/26, 12:00 AM

changed: BREAKING (packaging): the theme SCSS now ships at ng-hub-ui-board/styles (was dist/board/src/lib/styles), so @use 'ng-hub-ui-board/styles' resolves — update any @use that reached into src/lib/styles.

changed: variant now accepts any colour: besides the built-in semantic accents, a registered custom accent or a literal colour (#hex, rgb(), oklch(), CSS named colour) is resolved through the shared resolveHubAccent helper from ng-hub-ui-utils.

changed: Internal: @HostBinding/@HostListener decorators replaced by the host metadata object (Angular style guide); no public API or behaviour change.

Version 22.2.1 - 7/2/26, 12:00 AM

fixed: Docs: css-variables-reference.md default values resynchronized with the actual code declarations, now guarded by the repo-level tokens-parity check.

Version 22.2.0 - 6/26/26, 12:00 AM

changed: Accent system migrated to the open-set local accent slot pattern: variant re-bases a single --hub-board-accent slot and the emphasis/subtle/on family is derived locally with color-mix, growing the built-in variants from 5 to the nine canonical accents and letting any custom ds accent recolour the drag/drop placeholder at runtime.

added: New tokens --hub-board-accent-on (grayscale contrast flip driven by the accent lightness) and --hub-board-accent-emphasis.

fixed: Accent color-mix derivation for --hub-board-accent-subtle migrated from srgb to oklch for perceptually uniform tints; the subtle tint is now derived at 12% (was 8%).

Frequently asked questions

How do I build a Kanban board with drag and drop in Angular?

Install ng-hub-ui-board and bind a Board object describing its columns and cards. Dragging cards between columns and reordering columns works without extra wiring; the drag events return the moved BoardCard along with its source and target BoardColumn, so you persist the change in your own store or API.

Can I customise how each Kanban card looks?

Yes. ng-hub-ui-board renders cards through templates you provide, so a card can contain any markup — avatars, tags, progress, actions. BoardColumnHeaderDirective and BoardColumnFooterDirective do the same for the top and bottom of each column, leaving the drag-and-drop behaviour untouched.

How do I know which column a card was moved to?

The board emits a BoardDragDropEvent on every drop. It carries the dragged item, the column it came from and the column it landed in, plus the new index. That is the payload you send to your backend; the board does not persist anything by itself.

Does the Angular Kanban board work on touch devices?

Yes. Dragging is built on the Angular CDK drag-and-drop primitives, which handle mouse, touch and pen input, so the board behaves the same on tablets and phones as on desktop.