A database where every row is a page.
Point a database at a notebook, a tag or a formula, and its pages become rows: sort, filter, group, and see them as a table, a board or a calendar. The values live in each page’s own properties, so everything stays plain Markdown.

Rows are pages
A database is a small block in any page that says where its rows come from: a notebook (with its sub-notebooks), a tag, or a formula over properties. Each row is a page; its values are that page’s front matter properties, which Obsidian and other Markdown tools read too. Edit a cell and the page changes; edit the page and the table follows.
```vellum-db
name: Reading list
source:
notebook: Books
properties:
- { key: author, type: text }
- { key: status, type: select, options: [To read, Reading, Done] }
- { key: pages, type: number }
views:
- { name: Table, type: table }
- { name: Board, type: board, group: status }
```Many views of the same pages
Views: Table, Board, Calendar, Gallery, List. Each sorts, filters and groups on its own. Property types: Text, Number, Select, Multi-select, Date, Checkbox, Link, Relation, Rollup, Formula.
Formulas work out values from other properties (no code runs: a small, safe formula language); relations link rows to pages in another database, and rollups count, sum or list across them. A short block shows any database, live, inside another page.
Code, the assistant and spreadsheets
- Code cells read a database by name,
use("Reading list"), as a table. - The on-device assistant can answer from a database and propose changes, which you approve on a card first.
- Import a CSV file as pages of a new database; save any view as CSV.
In the app
- Databases from pages Turn a notebook into a table you can sort and filter.
- Boards and calendars See the same pages as a board, calendar or gallery.
- Formulas Work out values from other properties, like pages per day.
- Show it anywhere Put a live table or board inside any page.
- Spreadsheets in and out Bring in a CSV as pages; save any view as CSV.