PengSheets — Markdown Spreadsheet Editor
Transform your Markdown tables into a powerful spreadsheet experience.
Highlights •
Quick Start •
Why PengSheets •
Settings •
Roadmap •
Contributing
With Formula Columns, you can reference values from other tables by key, just like VLOOKUP. Computed results are written directly to Markdown, so they're readable in any editor.
PengSheets transforms your Markdown tables into a rich, interactive spreadsheet view. Powered by md-spreadsheet-parser, it runs a robust Python parser directly in your editor via WebAssembly, offering superior parsing accuracy and seamless multi-sheet support.
Read in Japanese: 日本語版はこちら( README )
✨ Highlights
| Feature |
Description |
| 🎯 Excel-like Editing |
Navigate and edit Markdown tables with familiar spreadsheet controls |
| 📑 Multi-Sheet Workbooks |
Organize data across multiple sheets using Markdown headers |
| 🔢 Formula Columns |
Auto-calculated columns with formulas and VLOOKUP-style cross-table references |
| ⚡ Real-time Sync |
Changes in the spreadsheet instantly reflect in your Markdown source |
| 🐍 Python-Powered Parsing |
Robust WebAssembly-based Python parser for reliable table handling |
| 🌍 Multilingual UI |
English and Japanese interface support |
| 🎨 Native VS Code Look |
Seamlessly integrates with your VS Code theme |
| 🛠️ Python & Node.js Ready |
Instantly load your workbooks in Python and Node.js scripts |
🚀 Quick Start
Install the extension from the VS Code Marketplace
Open any Markdown file (.md)
Launch the spreadsheet editor:
Click the table icon in the editor title bar (fastest!)

Or right-click a .md file in the Explorer and select Open with PengSheets
Or open Command Palette (Cmd+Shift+P / Ctrl+Shift+P) and run: Markdown: Open with PengSheets
Edit your tables with the spreadsheet interface — changes sync automatically!
Tip: Create a new workbook with Markdown: Create New Spreadsheet File command.
🤔 Why PengSheets?
|
PengSheets |
Other Markdown Table Editors |
| Multi-Sheet Support |
✅ Full workbook organization |
❌ Single table only |
| Parsing Engine |
Python (WebAssembly) — battle-tested |
JavaScript — limited edge case handling |
| Real-time Sync |
✅ Bidirectional |
⚠️ Often one-way |
| Metadata Support |
✅ Table descriptions, sheet organization |
❌ None |
| Keyboard Shortcuts |
✅ Excel-like navigation |
⚠️ Limited |
⚙️ Settings
PengSheets offers extensive customization to match your documentation style:
| Setting |
Description |
Default |
pengSheets.parsing.rootMarker |
Marker indicating the start of the data section |
null (Auto-detect) |
pengSheets.parsing.sheetHeaderLevel |
Header level for sheet names (e.g., 2 for ##) |
null (Auto-detect) |
pengSheets.parsing.tableHeaderLevel |
Header level for table names (e.g., 3 for ###) |
null (Auto-detect) |
pengSheets.parsing.captureDescription |
Capture text between header and table as description |
true |
pengSheets.parsing.columnSeparator |
Column separator character |
\| |
pengSheets.parsing.headerSeparatorChar |
Header separator character |
- |
pengSheets.parsing.requireOuterPipes |
Require outer pipes in generated tables |
true |
pengSheets.parsing.stripWhitespace |
Strip whitespace from cell values |
true |
pengSheets.language |
UI language (auto, en, ja) |
auto |
pengSheets.validation.dateFormat |
Date format for validation cells |
YYYY-MM-DD |
🐍 Use with Python
Files created with PengSheets can be easily read in your Python scripts using md-spreadsheet-parser. The Lookup API lets you access specific sheets and tables by name:
from md_spreadsheet_parser import parse_workbook_from_file
# Load your PengSheets workbook
workbook = parse_workbook_from_file("data.md")
# Access sheet and table by name
sheet = workbook.get_sheet("Sales Data")
table = sheet.get_table("Q1 Results")
# Use your data
print(table.headers) # ['Year', 'Revenue']
print(table.rows) # [['2024', '1000'], ['2025', '1500']]
Install the parser:
pip install md-spreadsheet-parser
📚 See the Cookbook for more recipes (Pandas, Excel, type-safe validation, and more).
📦 Use with Node.js
The md-spreadsheet-parser is also available as an NPM package, allowing you to parse and manipulate Markdown spreadsheets in Node.js environments with the same reliability as the Python core.
import { parseWorkbookFromFile } from 'md-spreadsheet-parser';
// Load your PengSheets workbook
const workbook = parseWorkbookFromFile("data.md");
// Access sheet and table by name
const sheet = workbook.getSheet("Sales Data");
const table = sheet.getTable("Q1 Results");
// Use your data
console.log(table.headers); // ['Year', 'Revenue']
console.log(table.rows); // [['2024', '1000'], ['2025', '1500']]
Install the package:
npm install md-spreadsheet-parser
🗺️ Roadmap
We're actively developing PengSheets! Planned features include:
- Performance Improvements: Optimization for handling large tables smoothly
- Advanced Document Editing: Image insertion, list completion, and richer Markdown support for document tabs
- Search & Replace: Functionality to find and replace text within the grid
- Visual Enhancements: Conditional formatting for data visualization
🤝 Contributing
We welcome your feedback and ideas! If you encounter a bug or have a feature request:
- Check existing Issues to avoid duplicates
- Open a new Issue with a clear description
- Include steps to reproduce (for bugs) or use cases (for features)
📄 License
This project is licensed under the MIT License.
Made with ❤️ by the PengSheets team