Gabriel Kleiman70 downloadsConverts Markdown tables into notes and Obsidian Bases.
Turn a Markdown table into organized notes and track them in a Base. Instead of creating each note by hand, plan your items in a table and let the plugin prepare the files for you.
Suppose you are preparing a course semester. List readings, assignments, exams, and other activities in a table inside the course note:
| name | content | type | date | date_type | done | done_type | tags |
|---|---|---|---|---|---|---|---|
| Reading - week 1 | Read the introductory chapter and note questions. | Reading | 2026-03-09 | date | false | checkbox | study |
| Essay | Prepare an essay on the selected text. | Assignment | 2026-04-02 | date | null | bool | study, writing |
| Midterm | Review notes from the first few weeks. | Exam | 2026-05-12 | date | false | check box | study |
When you convert the table, each row becomes a note. The type, date,
done, and tags columns are saved as properties, while content becomes
the note body. The done_type column declares the type of the done
property; checkbox, bool, and check box are accepted for checkboxes.
You can open an activity to add notes without losing the overview of the
semester.
By default, the files are organized like this:
My semester.md <- the table is replaced by a Base embed
My semester_base.base <- defines the table and filters notes by tag
base_notes/
|-- Reading - week 1.md
|-- Essay.md
`-- Midterm.md
The .base file is created at the vault root; notes are saved in base_notes/
by default. The Base shows the notes generated for that plan. If you convert
another table in the same note, the plugin reuses the Base and applies the
same tag to the new notes.
In the editor, right-click a table cell and select Convert to base+notes. Or open the command palette and run Convert the table in the current file to a base. The command palette converts only when it finds exactly one Markdown table in the file. If there is more than one, it tells you that this mode supports one table at a time.
The table must have a column for the note name and another named content.
The default name column is name.
| Column | Purpose |
|---|---|
name |
Name of the generated note. You can change the column name in settings. |
content |
Text used as the note body. |
| Other columns | Properties in the note's frontmatter. |
tags |
Comma-separated tags; the Base tag is added automatically. |
<property>_type |
Declares the type of the matching property. This helper column is not itself a property. |
Supported types: text, list, number, bool, checkbox, date,
date & time (or datetime), and tags. Use true, false, or null for
boolean values. A property must use the same type in every row. Lists can be
comma-separated or written as JSON; dates must use ISO format, such as
2026-03-09.
Use {{date:FORMAT}} in Output folder and in the name column to insert
the current date and time. For example, {{date:YYYY}}/{{date:MM}} creates
year/month folders, while Activity {{date:YYYY-MM-DD}} adds the date to the
note name. Formats follow Moment.js syntax.
In the plugin settings, you can choose:
base_notes; leave it empty to
save notes at the vault root. To create the folder relative to the current
note, use {{currentFolder}}, for example {{currentFolder}}/base_notes.name.content column provides the note body.The plugin does not overwrite existing notes. If a name is already in use, it
adds a suffix such as _2. If the note's .base file already exists, it is
reused.
npm ci in the project folder.npm run build.main.js and manifest.json to:
<Vault>/.obsidian/plugins/table-to-base/.Translations are bundled into main.js during the build; you do not need to
copy files from src/.
Requirements: Node.js 18 or later and npm.
npm ci
npm run dev
npm run dev rebuilds the plugin as you edit files. To validate changes:
npm test
npm run build
npm run lint
Source code is in src/. The build generates main.js in the project root;
this generated file should not be committed.