README file from
Github
Card Table - Dated Tasks
A task-first dated card table. Inspired by the Kanban table way of working, but dates, assignees, pins, comments and repeats all stay as plain text inside the note. Cards can go onto a Canvas and link out to your other notes, and finished sections move to a linked Archive note that opens in its own Archive mode.
[!IMPORTANT] Reminder: This plugin is still under active development and will change frequently over the next few months. Please back up your data/environment before using it. Bug reports and feedback are highly appreciated!
Notice: This project is entirely built by AI agents using Claude. The project developer has limited experience with programming languages.
Cards are written with the same [key:: value] fields as the Tasks and Dataview plugins, so their queries see your cards' dates and repeats too.
- Time filters. Year, month, week, day, overdue and repeat are always on screen, and the four date tiles follow one date. No date pickers, no pop-up dialogs — ◀ ▶ reach any day in a few taps.
- Instant search. Type a title or some content under New card and the table filters as you type.
- Sections. A section is a colour and a status — name the red one Waiting and every card in it is waiting.
- Working together. Every card takes signed, timestamped comments, and every write is atomic, so two syncing devices never overwrite each other.
- Still plain text. Dates, assignees, pins, comments and repeats live in the note. Turn the plugin off and you still have a task list anyone can read.
If Card Table saves you time, you can buy me a coffee on Ko-fi.
[!WARNING] Old notes keep working. Every older syntax is still read; a card switches to the current one only when it is changed (or all at once: Settings → Note format → Convert everything, which backs up first). Update every device to the same version — Card Table 1.6.0 and older cannot read the current syntax. See The text format. Something wrong? Open a GitHub issue.
Installation
- Settings → Community plugins → turn on community plugins.
- Browse, search for Card Table - Dated Tasks, install and enable it.
Not listed yet? Download main.js, manifest.json and styles.css from the
latest release into <your vault>/.obsidian/plugins/card-table/,
then reload Obsidian and enable Card Table - Dated Tasks.
Getting started
- Open a note and run Open with Card Table from the command palette, the ribbon icon or the tab's
⋯menu. The note remembers the mode you last used and opens that way next time. For a note that has never been opened as a board, the ribbon icon asks first: open this note as a Card Table, or create a new one. - A brand new note gets five sections (
## 1…## 5). Sections are shown as colours. - Type a title and some content under New card and press
Shift + Enter. The card lands on the day, week or month the filter bar is showing. - Tap the circle to mark it done, the date to move it, ✎ to edit, 💬 to comment.
Contents
Features
Time filters
- Linked tiles — year, month, week and day follow one date; step any of them and the others follow.
- Always says where you are — today's date sits in its own row at the top (click to jump back), and the filter header shows the period you are actually looking at, with the count.
- Overdue and repeat — one tap each, next to the date tiles.
- Calendar — pick a day or a range when the tiles are not enough. Weeks can start on Monday, Sunday, today or the 1st.
Search
- Type to filter — the New card title and content boxes filter the table as you type.
- One section at a time — the section menu can show only that section, pinned cards included; a capsule in the header says which one, with an × to clear it.
- Frequent titles — reuse a title in one tap; a used title brings back its last section.
Cards
- Edit in place — Obsidian's Live Preview editor right in the card, saved as you type; to-dos inside a card can be ticked.
- Pinned and repeating — a pinned table on top,
[repeat:: every 2 weeks]. - Photos and videos — card ⋯ → Add photos (opens the camera or photo library on a phone); or attach them with the 📎 left of Send when adding a card; a swipeable Instagram-style strip under the topic, tap to enlarge; up to 10 per card.
- Merge and export — combine several cards into one, or export the current view to PNG or PDF.
Archive
- Archive zone — archive a whole section from the New card
⋯: it leaves the list but stays in the note as## Archive/Name. Archiving and restoring are both previewed first; nothing changes until you save. - Archive note — move an archived section out to a linked
<board> Archivenote to keep the board short; move it back any time and it returns to the archive zone. - In an Archive note you can search, filter by section, tick, comment and send a section to a Canvas; you cannot add cards or edit content.
- Links follow — links in other notes and Canvases to the moved cards or section are updated in the same step.
Canvas and card links
- Send to Canvas — one card, the list, or an archive section. Each card is its own frame, four to a row; an archive section comes wrapped in a group named after it. Cards already on the Canvas are skipped.
- Copy card ID — paste it into a Canvas or another note and the whole card shows there; a click goes back to the board. Pasted into another card it becomes a plain link (no preview), so cards can point at each other without nesting.
- Card ID —
^ct-abc123is added to the end of a card only when you copy its ID or send it to a Canvas, so links can find it. A card without one works exactly the same.
Sections
- Colour and status in one — name the red section Waiting and every card in it is waiting.
- Managed in place — rename, recolour, add or delete sections from the New card
⋯.
Working together
- Comments — signed and timestamped, kept with the card they are about.
- Assignees or solo — assign cards to people, or switch assignees off.
- Safe with sync — every write is atomic, so two devices never overwrite each other.
Phones and layout
- One layout everywhere — the same cards on desktop and phone; desktop is just wider.
- Narrow or wide on desktop; light and dark follow your Obsidian theme.
Plain text
- Tasks- and Dataview-friendly fields —
[due:: …],[start:: …],[repeat:: …]; older notes keep working. - English and 繁體中文.
Keyboard
Formatting keys are your own: editing a card uses whatever you have bound in Settings → Hotkeys, exactly like any other note — the card editor is Obsidian's editor, with Live Preview, undo and [[ suggestions.
| Obsidian command | Inserts |
|---|---|
| Toggle bold | **text** |
| Toggle italic | *text* |
| Toggle highlight | ==text== |
| Toggle code | `text` |
| Toggle strikethrough | ~~text~~ |
| Add internal link | [[text]] |
| Insert Markdown link | [text]() |
Submitting works the same in the new card, the card editor and comments:
| Key | Default | With "Enter to submit" |
|---|---|---|
Enter |
New line | Submit |
Shift + Enter |
Submit | New line |
Ctrl + Enter / ⌘ + Enter |
Submit | Submit |
Esc |
Close the editor | Close the editor |
Settings
Grouped the same way as in the plugin; What's new at the top lists what every version added.
| Group | What you can set |
|---|---|
| General | Language, who uses this device, solo mode |
| Accessibility | Board size (80–120%; 80% is the size before 1.7.6, default 100%; the table keeps its width; desktop and phone separately) |
| Time filters | Range on open, how weeks are counted |
| Cards | How done cards look, last edited time, comments and where they go |
| Adding and editing | Submit key (see Keyboard), cursor and card position when editing, unpin when done |
| Jump after an action | Whether each action scrolls to the card |
| Note format | Folder for files the plugin creates (photos, Archive notes, new Canvases, backups, exported images; one <board name> attachments per board, next to the board by default, follows renames) |
| Experimental | Convert every old card to the current format (lists what it will change and backs up first), compress photos (No compression / High / Medium, only large photos), archive old photos (pick a day; older photos move to photo-archive/; to save Sync space, exclude it in Sync settings yourself), clean up photos no card uses (lists them first) |
The text format
That is the whole storage format — everything the table shows comes from lines like these:
## 1
- [ ] [pin:: on] #Orders [start:: 2026-09-11] [due:: 2026-09-14] @Alex
Two boxes each, needs to arrive before Friday
- [ ] Call the supplier
[cm:: 2026-09-11 14:20|Alex] Quote came back, 8% up on last time
[ed:: 2026-09-11 14:20]
- [x] #Field [due:: 2026-09-08] [repeat:: every 2 weeks]
Check the greening suspect tree again
[done:: 2026-08-25]
[ed:: 2026-09-08 08:30]
The first line is the card: pin, title, dates, repeat, assignee. A photo line, if any, comes right under it. Below that come the content (written exactly as you type it — no automatic bullets), repeat records, comments, and last of all the edit time. The lines the plugin writes itself have no bullet either.
Every syntax
| Meaning | Written as | Older syntax, still read | Where |
|---|---|---|---|
| One card, not done / done | - [ ] / - [x] |
— | Start of the first line |
| Pinned | [pin:: on] |
📌 |
First line, before the title |
| Title(s) | #Title — up to 3; a space becomes - (#UX-review). Titles are tags, so Obsidian's tag search, Tasks and Dataview find them too |
[Title] |
First line |
| One day | [due:: 2026-09-11] |
@{2026-09-11} |
First line |
| A range | [start:: 2026-09-11] [due:: 2026-09-14] |
@{2026-09-11 ~ 2026-09-14} |
First line |
| Repeat | [repeat:: every 2 weeks] (every 3 days, every month…) |
🔁 every 2 weeks, 🔁 每2週 |
First line, after the dates |
| Assignee | @Alex — any @name; a new name joins the people list |
#Alex (a name on the people list) |
First line |
| Photos / videos | ![[ct-20260926-2010-1.jpg]] ![[ct-20260926-2011-1.mov]] — a line holding only ![[image or video]] embeds, file names only; files live in the plugin folder's photo/year-month/. Not part of the card's identity, so adding or removing photos never loses the card |
A ![[image]] you pasted in the same spot counts too |
Right under the first line |
| Content | As you type it; bullets only if you type them (- , * , 1. ) |
Content after the title on the first line; . bullets |
Second line on |
| To-do inside a card | - [ ] something (-[ ] and [] are tidied to this) |
— | Content line |
| Repeat record | [done:: 2026-08-25] (repeating cards only) |
— | After the content |
| Comment | [cm:: 2026-09-11 14:20|Alex] text |
.💬{2026-09-11 14:20|Alex} text |
After the content |
| Last edited (written by the plugin) | [ed:: 2026-09-11 14:20] |
✎{2026-09-11 14:20} on the first line |
Always the card's last line |
| Card ID (only after Copy card ID or Send to Canvas) | ^ct-abc123 |
— | After [ed:: …], or on its own line before the first sub-item |
| Archived section | ## Archive/Name |
## Archive (cards archived one by one) |
Heading in the board |
| Section in the Archive note | ## Name, then [archived:: 2026-09-23] |
— | Heading in <board> Archive |
| Board ↔ Archive note | Board: card-table-archive: "[[Board Archive]]". Archive: card-table: archive, card-table-source: "[[Board]]", card-table-archived |
— | Properties (YAML) |
| Long-term | — | #long-term (a plain tag, no special meaning) |
— |
- Lines the plugin writes (
[done::],[cm::],[ed::]) have no-; times always use a four-digit year and minutes. - Other fields on the first line (for example
[completion:: …]or[priority:: …]written by Tasks) are kept as they are. - A card without a title keeps its first content line on the first line, so Kanban can still read it.
What about my old notes?
They keep working and change only when touched. A card switches to the new syntax only when you edit it, tick it or change its date; nothing else in the note is touched.
One-click conversion. Settings → Note format → Convert everything to the new format converts every note you have opened as a Card Table in one go.
Each note's original text is first saved in the plugin's folder (by default next to the board: <board name> attachments/name backup-20260916-1420.md). Edit times are kept, lines outside cards are left alone, and running it a second time changes nothing.
Card Table 1.6.0 and older cannot read the new syntax, so update every device that opens these notes. If something looks wrong after converting, or you have any question, please open a GitHub issue.
Card Table, Tasks and Kanban
Tasks and Dataview. Card Table writes due, start and repeat the way the Tasks plugin reads them in its Dataview format, and every [key:: value] field is visible to Dataview queries. Repeats are handled by Card Table itself (mark this time done), so let Card Table tick repeating cards.
Kanban. Card Table was inspired by the table view of the Kanban plugin — the same markdown lists, read as rows instead of lanes. It grew from there into a board built around dates and comments.
| Kanban | Card Table | |
|---|---|---|
| Built around | Stages — which lane is this card in? | Time — what is due today, this week, this month? |
| Dates | @{date} |
[due:: …] / [start:: …] (Tasks and Dataview read them) — the two plugins don't read each other's dates |
| Main view | The whole board, lanes side by side | One list filtered to a day, week or month |
| Comments | — | Signed, timestamped comments on each card |
| Archive | An archive list in the same note | Archived sections move to a linked … Archive note and can be moved back; links follow |
Can I use both? Yes. Card Table only takes over notes you open with it (it remembers each note), and it never switches a Kanban board over on its own; it also unloads cleanly when Kanban intercepts the same Obsidian method.
Both read ## headings and - [ ] cards, so a Card Table note opens in Kanban too, but Kanban only understands its own @{date} dates — Card Table's [due:: …] fields show as plain text there.
Design rules
- Every write is one atomic read-modify-write inside
Vault.process, so a concurrent write (sync, another tab, the previous action) is never overwritten with a stale copy. - The view never writes its own copy back. All changes go through one writer.
- A card is identified by its title and first content line. When two cards match, its position in its section is tried first (checked against the line and the content), then content, the whole line and the edit stamp. If nothing tells them apart, the plugin refuses to write rather than guess.
- Writes touch the smallest number of lines possible. Ticking a checkbox changes that line and the edit time, not the file.
Support
- Bugs and ideas: GitHub issues
- Support development: Ko-fi
Licence
MIT