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.
No setup needed. Let our cloud agents run this skill for you.
Select Provider
Select Model
Claude Sonnet 4.5
$0.20/task
Best for coding tasks
Environment setup included
Obsidian Bases Skill
Workflow
Create the file: Create a .base file in the vault with valid YAML content
Define scope: Add filters to select which notes appear (by tag, folder, property, or date)
Add formulas (optional): Define computed properties in the formulas section
Configure views: Add one or more views (table, cards, list, or map) with order specifying which properties to display
Validate: Verify the file is valid YAML with no syntax errors. Check that all referenced properties and formulas exist. Common issues: unquoted strings containing special YAML characters, mismatched quotes in formula expressions, referencing formula.X without defining X in formulas
Test in Obsidian: Open the .base file in Obsidian to confirm the view renders correctly. If it shows a YAML error, check quoting rules below
Schema
Base files use the .base extension and contain valid YAML.
# Global filters apply to ALL views in the basefilters: # Can be a single filter string # OR a recursive filter object with and/or/not and: [] or: [] not: []# Define formula properties that can be used across all viewsformulas: formula_name: 'expression'
Filter Syntax
Filters narrow down results. They can be applied globally or per-view.
Filter Structure
# Single filterfilters: 'status == "done"'# AND - all conditions must be truefilters: and: - 'status == "done"' - 'priority > 3'# OR - any condition can be truefilters: or: - 'file.hasTag("book")' - 'file.hasTag("article")'# NOT - exclude matching itemsfilters
Filter Operators
Operator
Description
==
equals
!=
not equal
>
greater than
<
less than
>=
greater than or equal
<=
less than or equal
&&
Properties
Three Types of Properties
Note properties - From frontmatter: note.author or just author
File properties - File metadata: file.name, file.mtime, etc.
Formula properties - Computed values: formula.my_formula
File Properties Reference
Property
Type
Description
file.name
String
File name
file.basename
String
File name without extension
file.path
String
Full path to file
file.folder
String
Parent folder path
file.ext
String
The this Keyword
In main content area: refers to the base file itself
When embedded: refers to the embedding file
In sidebar: refers to the active file in main content
Formula Syntax
Formulas compute values from properties. Defined in the formulas section.
formulas: # Simple arithmetic total: "price * quantity" # Conditional logic status_icon: 'if(done, "✅", "⏳")' # String formatting formatted_price: 'if(price, price.toFixed(2) + " dollars")' # Date formatting created: 'file.ctime.format("YYYY-MM-DD")' # Calculate days since created (use .days for Duration) days_old: '(now() - file.ctime).days' # Calculate days until due date
Key Functions
Most commonly used functions. For the complete reference of all types (Date, String, Number, List, File, Link, Object, RegExp), see FUNCTIONS_REFERENCE.md.
Function
Signature
Description
date()
date(string): date
Parse string to date (YYYY-MM-DD HH:mm:ss)
now()
now(): date
Current date and time
today()
today(): date
Current date (time = 00:00:00)
if()
Duration Type
When subtracting two dates, the result is a Duration type (not a number).
IMPORTANT: Duration does NOT support .round(), .floor(), .ceil() directly. Access a numeric field first (like .days), then apply number functions.
# CORRECT: Calculate days between dates"(date(due_date) - today()).days" # Returns number of days"(now() - file.ctime).days" # Days since created"(date(due_date) - today()).days.round(0)" # Rounded days# WRONG - will cause error:# "((date(due) - today()) / 86400000).round(0)" # Duration doesn't support division then round
Date Arithmetic
# Duration units: y/year/years, M/month/months, d/day/days,# w/week/weeks, h/hour/hours, m/minute/minutes, s/second/seconds"now() + \"1 day\"" # Tomorrow"today() + \"7d\"" # A week from today"now() - file.ctime" # Returns Duration"(now() - file.ctime).days" # Get days as number
View Types
Table View
views: - type: table name: "My Table" order: - file.name - status - due_date summaries: price: Sum count: Average