Kanban Board

Columns, drag-and-drop cards, labels and due dates, across as many boards as you like. Saved in this browser, with JSON export to move it elsewhere.

🌐 Español

🔒 Private by design: everything runs locally in your browser and never uploaded to any server.

Cards, columns and boards, and what each one holds

The structure is the familiar one. A board owns an ordered list of columns; each column owns an ordered list of cards; a card carries a title, an optional description, any number of labels and an optional due date. Nothing points at anything else. A card’s position is simply which column’s list it currently sits in and at what index, which is the reason a move can never leave a card in two places or in none.

Every board starts with To Do, In Progress and Done, purely as a conventional starting point. Rename them, reorder them with the arrows in each column header, delete the ones you do not want, add your own. A column header also shows how many cards it currently holds, which is usually the first sign that one stage has quietly become a dumping ground.

Setting up a board and filling the first column

  1. Type a name into the New board name field and click + New board. Leave the name blank and the board is created as Untitled board, which you can fix in the name field at the top at any time.
  2. Type a card title into a column’s + Add a card box and press Enter, or click Add beside it. The card appears at the bottom of that column.
  3. Click any card to open it in place. You get Card title, a Description (optional) area, a Labels, comma separated field and a date picker, then Save to keep the changes or Cancel to drop them.
  4. Drag a card up or down within its column to reorder it, or across into another column to move it.
  5. Add a stage with the New column name field and + Add column at the right-hand end of the board.
  6. Click Export this board (JSON) whenever you want a copy on disk. The file is named after the board, with spaces turned into hyphens and punctuation stripped out.

The drop indicator tells you where the card will land

Drag-and-drop is the browser’s own, with no library involved. Hold a card over another card and a thin bar appears above that card: that is where it will land, directly before it, except when you drag a card further down inside its own column, where lifting it out of the list first settles it just after that card instead. Let go over the empty space below the last card and it is appended to the end of that column instead. There is no midpoint guessing and no animation to wait for.

Behind the indicator, the move is done as a removal followed by an insertion at a clamped index. A drop index that comes back out of range, negative or past the end, or not a number at all, still puts the card somewhere valid rather than throwing, and a same-column reorder computes the target position after the card has already been lifted out, so there is no phantom slot to fall into.

Due dates measured against your own calendar day

A due date is stored as a plain year-month-day string, exactly what the date picker produces, and compared as a string against today’s date read from your device’s local clock. That comparison is exact rather than approximate, because dates in that format sort alphabetically in the same order they sort chronologically, so no time zone arithmetic enters the picture at all.

Each dated card shows one of three states next to the date: overdue when the day has passed, due today when it is today, or upcoming when it is still ahead. There is no time-of-day component, no recurrence and no reminders. A browser tab cannot notify you about a deadline while you are not looking at it, so the tool does not pretend otherwise. If what you actually want is a daily streak rather than a deadline, the Habit Tracker is built for that shape of problem.

The JSON file is the only backup there is

Local storage is per-browser and per-device. A board created here is invisible in another browser on the same machine, and clearing site data removes it for good. Export is therefore not a nice extra, it is the whole backup story, and it is worth doing before anything drastic.

Two buttons write files. One exports the board you are looking at, the other exports every board you have. Both produce the same shape, an indented JSON array, so a single-board file and a whole-collection file import identically. Import adds what it finds to whatever is already there, skips a board whose identifier it already knows, and quietly drops an individual card that has lost its identifier rather than rejecting the entire file for it. That is also how you move a board to a second computer: export, carry the file across, import.

Where a single-user board stops being enough

There is no account, no sync and no shared state, because there is no server behind this page at all. That buys you a board in about three seconds with nothing to sign up for, and it costs you everything that needs a backend. Two people cannot edit one board. Send someone your export and they get an independent copy; edits on either side never rejoin. There are no comments, no attachments, no activity history and no notifications.

For a personal backlog, a house move, a dissertation plan or a small side project, that trade is usually a good one. It sits comfortably beside the other single-user planners here: notes in the Online Notepad, revision decks in the Flashcard Maker, and self-testing in the Quiz Maker. The rest of the generators and planners follow the same rule, everything on your device and nothing behind a login.

See it in action

Screenshot of the Kanban Board tool with an empty board list offering to create the first board, with import and export of all boards as JSON alongside
Kanban Board mid-process: an empty board list offering to create the first board, with import and export of all boards as JSON alongside.
Screenshot of the Kanban Board result screen showing a new board created with three columns, each showing its card count and controls to move it left or right, delete it or add a card, plus buttons to add another column and to export the board as JSON
The finished result: a new board created with three columns, each showing its card count and controls to move it left or right, delete it or add a card, plus buttons to add another column and to export the board as JSON. The download link is a local blob URL — the file never leaves your device.

Frequently asked questions

Where do my boards actually live between visits?

In this browser's local storage, under two keys, one holding every board and one remembering which board you had open. Saving happens on every change rather than on a save button, so closing the tab loses nothing. If storage is unavailable, which happens in some private-browsing modes, the board still works for the session and simply stops persisting; nothing warns you about that, so export first if you are unsure.

Deleting a card did not ask me to confirm. Is that a mistake?

It is the current behaviour, and worth knowing. Removing a board or a column raises a confirmation dialog first, because both cascade to everything inside them. The delete button in a card's own editing panel fires straight away, with no dialog and no undo. The card is gone from that column's list immediately and the only route back is a JSON export you made earlier.

Why does my board list keep reshuffling itself?

The switcher shows boards most-recently-edited first, and almost anything counts as an edit, including each keystroke while you rename a board. The board you are working on therefore tends to sit at the top of the list. Your selection never changes underneath you, only the order of the entries.

What happens to my existing boards when I import a file?

They stay exactly as they are. Imported boards are appended alongside them, never merged into them and never replacing them. A board whose identifier already exists locally is skipped rather than added twice, so re-importing the same export is harmless. A file that is not valid JSON, or one that contains nothing recognisable as a board, is refused with a message that says which of the two went wrong.

Can I drag cards on a phone or tablet?

Probably not, and it is the one real gap in this tool. Card movement is wired to the browser's native drag-and-drop events, with no touch or pointer fallback in the code, and support for those events on touch screens ranges from partial to absent. On a small screen, treat it as a viewer and an editor, and do the rearranging on a machine with a mouse or trackpad.

Do labels behave like a fixed set of tags?

No, they are free text. The field takes a comma-separated list, trims each entry, drops empty ones and removes exact repeats within that card, then shows each as its own chip. Matching is case-sensitive, so a card can carry both an uppercase and a lowercase spelling of the same word without either being merged, and there is no palette of preset colours to choose from.

Related tools