name: obsidian-bases description: Create and edit Obsidian Bases (.base files) with views, filters, formulas, and summaries. Use when working with .base files, creating database-like views of notes, or when the user mentions Bases, table views, card views, filters, or formulas in Obsidian.
Obsidian Bases Skill
Workflow
- Create or open the target
.basefile and keep it valid YAML. - Define scope with the smallest useful
filters. - Prefer existing file metadata and note properties before inventing new schema.
- Add formulas only when the requested view cannot be expressed with raw properties.
- Add one or more views with a clear
orderand optional grouping or summaries. - Validate YAML syntax, formula references, and quoted strings before finishing.
Property Discipline
Prefer Obsidian-native file properties and existing note properties before introducing new frontmatter fields.
- Use
file.name,file.basename,file.folder,file.path,file.ext,file.ctime,file.mtime,file.tags,file.links,file.backlinks,file.embeds, andfile.propertieswhen they satisfy the request. - Prefer
file.hasTag(...),file.inFolder(...), andfile.hasLink(...)for scope filters instead of adding duplicate custom metadata. - Do not add custom properties such as
status,priority,due,category,type,author,pages, orcoverunless the user asks for them, the vault already uses them, or the requested view cannot be built from native metadata. - When custom note properties are needed, keep them minimal and make the Base consume the existing schema rather than inventing extra fields.
Minimal Schema
Base files use the .base extension and contain valid YAML.
filters:
and: []
formulas:
age_days: '(now() - file.ctime).days'
properties:
formula.age_days:
displayName: "Age (days)"
views:
- type: table
name: "All Notes"
order:
- file.name
- formula.age_days
Filters
Use string expressions for simple cases and nested and / or / not objects when the logic needs structure.
filters:
and:
- 'file.ext == "md"'
- file.hasTag("project")
filters:
or:
- file.hasTag("book")
- and:
- file.inFolder("Reading")
- 'status != "done"'
Prefer global filters for the overall dataset and per-view filters only when one view needs a narrower slice.
Formulas
Formulas are shared computed properties. Keep them null-safe and easy to read.
formulas:
days_until_due: 'if(due_date, (date(due_date) - today()).days, "")'
day_of_week: 'date(file.basename).format("dddd")'
Common rules:
- Date subtraction returns a Duration, so access
.days,.hours, or another numeric field before rounding. - Guard optional properties with
if()instead of assuming every note has the field. - Every
formula.Xused inproperties,order, orsummariesmust exist informulas.
Views
Supported view types are table, cards, list, and map.
- Use
tablefor sortable indexes and status views. - Use
cardsfor gallery-style browsing with cover or summary fields. - Use
listfor compact navigation. - Use
maponly when the vault already has latitude and longitude style properties and the Maps plugin is relevant.
Example:
views:
- type: table
name: "Active Tasks"
filters:
and:
- 'status != "done"'
order:
- file.name
- status
- due_date
groupBy:
property: status
direction: ASC
summaries:
due_date: Latest
Common Pitfalls
- Quote strings that contain YAML-special characters such as
:,#,[,],{,}, or,. - Wrap formulas containing double quotes in single quotes.
- Do not reference
formula.XunlessXis defined informulas. - Reuse existing note properties when possible instead of creating a new tracking schema for every view.