Vitalii Tytskyi77 downloadsRender CSV and TSV code blocks as interactive tables with sticky headers, per-column filters, sorting, layout toggles, link detection, and CSV validation.
CSV Modern Codeblock renders csv and tsv fenced code blocks as interactive tables inside Obsidian.
Now (since v1.1.0) with EDIT support.
https://github.com/user-attachments/assets/cc8ba527-c131-4b5d-8d14-76721c56240d
This plugin was rewritten from scratch for modern table UX, stricter CSV handling, and better behavior with data-heavy notes. It was inspired by the original CSV Codeblock idea, but it is not a fork.
Repository: https://github.com/vitovt/obsidian-csv-modern-codeblock
Original project that inspired the concept: https://github.com/elrindir/obsidian-csv-codeblock
Markdown tables are tedious when the data is large, frequently edited, copied from spreadsheets, or full of long text. CSV and TSV are much easier to write, paste, diff, and maintain in source form. This plugin keeps that convenient source format while rendering it as a much more usable table in preview.
csv and tsv code blocks as tables directly in notescsv blockshttp, https, and mailto values and renders them as linksEdit mode and writes them back to the source fenced code block in one saveCompared with the earlier plugin idea, this rewrite adds:
SortingFilteringCompactZebraHigh tableEdit mode```csv
Name,Role,City
Alice,Researcher,Berlin
Bob,Editor,Paris
```
TSV works the same way:
```tsv
Name Role City
Alice Researcher Berlin
Bob Editor Paris
```
Each rendered table includes a toolbar above it:
Sorting enables sorting by clicking header cellsFiltering shows a filter input under each header columnCompact switches to fit-to-width modeZebra toggles alternating row stripingHigh table doubles the vertical scroll heightEdit mode enables single-click cell editingThese controls change only the rendered view. They do not modify your source data.
Edit mode is the exception: when it is enabled, clicking a table cell opens an inline editor. Leaving the editor or pressing Ctrl+Enter / Cmd+Enter applies that cell to the rendered table without writing the Markdown file yet. Press Escape to cancel the active cell edit. When there are buffered changes, the Edit mode button shows *. Press Edit mode again to write all buffered changes back to the fenced code block in one save. Sorting and filtering can stay enabled; edited rows are mapped back to their original CSV row before saving.
You can set per-table defaults directly on the opening fence line:
```csv title:"Folktales" sort:true filter:true compact:true zebra:true high-table:true edit:true
Nr.;Titel;Quelle
1;Der Froschkönig;https://projekt-gutenberg.org/
```
Supported options:
title:"..."header:true|falsesticky:true|falsesort:true|falsefilter:true|falsecompact:true|falsezebra:true|falsehigh-table:true|falseedit:true|falselinks:true|falsedelimiter:auto|comma|semicolon|tabmax-height:<css-size>Examples:
delimiter:semicolonmax-height:32remcompact:truefilter:trueThe source code lives in src/main.ts. The root main.js file is generated and is intentionally not tracked in Git.
npm ci
npm run lint
npm run build
npm run build generates the release main.js artifact from the TypeScript source.
For Obsidian community submission, create releases from GitHub Actions so release assets get GitHub artifact attestations.
manifest.json, versions.json, and package.json.1.1.1.The .github/workflows/release.yml workflow builds main.js, attests main.js, manifest.json, and styles.css, then uploads those files to the GitHub release.
CSV Modern Codeblock was inspired by the original CSV Codeblock plugin:
https://github.com/elrindir/obsidian-csv-codeblock
This project is a separate rewrite with a new codebase, different implementation, added validation, performance-focused parsing changes, and expanded table functionality.
MIT