Skip to content

Quick Start

This guide walks you through creating a vault with a schema and your first note.

A vault is any directory with a .bwrb/schema.json file:

Terminal window
mkdir my-vault
cd my-vault
mkdir -p .bwrb

Create .bwrb/schema.json. Here’s a minimal schema with two types:

{
"types": {
"idea": {
"output_dir": "Ideas",
"frontmatter": {
"type": { "value": "idea" },
"created": { "value": "$NOW" },
"status": {
"prompt": "select",
"options": ["raw", "developing", "mature"],
"default": "raw"
}
}
},
"task": {
"output_dir": "Tasks",
"frontmatter": {
"type": { "value": "task" },
"created": { "value": "$NOW" },
"status": {
"prompt": "select",
"options": ["todo", "in-progress", "done"],
"default": "todo"
},
"priority": {
"prompt": "select",
"options": ["low", "medium", "high"],
"default": "medium"
}
}
}
}
}

This schema defines:

  • idea type — stored in Ideas/, with a status field
  • task type — stored in Tasks/, with status and priority fields
  • Static fieldstype and created are set automatically
  • Prompted fieldsstatus and priority are chosen interactively
Terminal window
bwrb new idea

Bowerbird prompts you for:

  1. Title — becomes the filename (e.g., “My Great Idea” → Ideas/My Great Idea.md)
  2. Status — select from the defined options

The result is a properly-structured markdown file:

---
type: idea
created: 2025-01-07 14:30
status: raw
---
Terminal window
# List all ideas
bwrb list idea
# List with specific fields as a table
bwrb list idea --fields=status
# List tasks filtered by status
bwrb list task --where "status = 'todo'"
Terminal window
# Open in Obsidian (default)
bwrb open "My Great Idea"
# Open in your $EDITOR
bwrb open "My Great Idea" --app editor
# Just print the path
bwrb open "My Great Idea" --app print

If you need to change frontmatter values:

Terminal window
bwrb edit Ideas/My\ Great\ Idea.md

Bowerbird shows the current values and lets you update them.

If you manually edit a file and accidentally break the schema:

Terminal window
# Check for violations
bwrb audit
# Fix violations interactively
bwrb audit --fix

Bowerbird reports issues like:

  • Missing required fields
  • Invalid field values (not in the allowed options)
  • Unknown fields (not defined in schema)

Static fields have a value and are set automatically:

{
"type": { "value": "idea" },
"created": { "value": "$NOW" }
}

Special values:

  • $NOW — Current datetime (YYYY-MM-DD HH:mm)
  • $TODAY — Current date (YYYY-MM-DD)

Prompted fields use interactive input:

{
"status": {
"prompt": "select",
"options": ["raw", "developing", "mature"],
"default": "raw"
}
}
Prompt TypeDescriptionExample
selectChoose from optionsStatus, priority
textFree text inputDescription
numberNumeric inputWord count
booleanYes/noCompleted
dateDate inputDeadline
relationLink to another noteParent task

Types can have subtypes for nested categorization:

{
"types": {
"objective": {
"subtypes": {
"task": { "output_dir": "Objectives/Tasks", ... },
"milestone": { "output_dir": "Objectives/Milestones", ... }
}
}
}
}

Access subtypes with slash notation:

Terminal window
bwrb new objective/task
bwrb list objective # Lists all objectives (tasks + milestones)
bwrb list objective/task # Lists only tasks

Bowerbird finds your vault in this order:

  1. --vault=<path> flag
  2. BWRB_VAULT environment variable
  3. Current working directory

Set a default vault in your shell profile:

Terminal window
export BWRB_VAULT=~/notes
CommandDescription
bwrb new <type>Create a new note
bwrb list <type>List notes of a type
bwrb edit <path>Edit note frontmatter
bwrb open [query]Open a note
bwrb search [query]Find notes, generate wikilinks
bwrb auditCheck schema compliance
bwrb schema listView schema types