#14574·nocodb

Bug: Kanban view - reordering cards within a stack is never persisted

Author: kaliatechCreated Sep 12, 2026Updated Sep 12, 2026

Please confirm that the bug report does not already exist

  • I confirm there is no existing issue for this bug.

Steps to reproduce

  1. Create a table (e.g. tasks) with a single-select field (e.g. status) and a few rows.
  2. Create a Kanban view stacked by the single-select field. Leave the view unsorted.
  3. Drag a card to a different position within the same stack. The UI accepts the drag and shows the new order.
  4. Switch to the grid view (or reload the page), then return to the Kanban view.
  5. The cards are back in their previous order. The reorder from step 3 was lost.

Watching the backend confirms nothing is persisted: no row update request is issued on a within-stack drop, and the table's internal order column (nc_order) never changes. Reordering rows in the grid view does update nc_order, and the Kanban view then reflects it. So ordering only flows grid → kanban, never kanban → anywhere.

Desired Behavior

Order should be persisted when dragging cards within a stack. The docs state):

"You can move records within a stack by dragging and dropping the card to the desired position within the stack"

I am new to nocodb, so I don't know if this is a regression.

Project Details

NocoDB used as docker : true NocoDB version : 2026.08.2 (nocodb/nocodb:2026.08.2) Database used in NC_DB URL : pg (via NC_DB_JSON_FILE) Project was created by clicking : New Project Database on which spreadsheet is created : pg OS on which NocoDB is running : Linux (Docker, docker compose) Node.js version if running as node : v24.14.0 Database version : PostgreSQL 18 (postgis/postgis:18-3.6)

(Code references below are from the develop branch at #588d513)

Attachments

Technical

The card list's @change handler chain (onMoveAndPersistExpand → onMove) only handles vuedraggable's added and removed events. A within-stack reorder emits moved, which falls through both branches, so nothing is saved:

By contrast, stack reordering (onMoveStack, same file, L696–L720) does handle event.moved and persists it via updateKanbanMeta. The omission is specific to cards.

Additionally, even the cross-stack path persists only the grouping field, never a position - updateOrSaveRow calls updateRowProperty(row, groupingField.value):

The cards visually rearrange only because vuedraggable mutates the local array; the next data fetch re-sorts by the view's sorts or default nc_order.