Bookings[email protected] San Antonio · Texas
Obsidian guide · Reading

A reading list in Obsidian.

One note per book, a few properties and one Base: what you’re reading now, what’s next, and what you’ve finished this year. No plugins.

Updated October 2026 · Tested in Obsidian 1.14 · No plugins

What you’ll build

A book tracker that you own, in plain text files:

  • One note per book, with your notes and quotes under the properties.
  • A Books base with three lists: reading now, up next, and finished this year with total pages and your average rating.
  • A shelf board grouped as Reading, Up next and Finished, in that order.
  • Author pages that list their books by themselves.

You need Obsidian 1.9 or later with the Bases core plugin on. Everything below was tested in Obsidian 1.14 with no community plugins.

Step 1: One note per book

Make a folder called Books and one note per book, named after its title:

Books/The Dispossessed.md
---
type: book
author: "[[Ursula K. Le Guin]]"
status: Reading
added: 2026-09-28
started: 2026-10-01
finished:
rating:
pages: 248
---
## Why I picked it up

## Notes and quotes
  • status is one of To read, Reading, Finished or Abandoned.
  • Dates use the 2026-10-01 format, so they sort and count.
  • rating is a number from 1 to 5, filled in when you finish.
  • author is a link, which makes the author pages in step 4 work.

Save a copy with empty values as Templates/Book.md for new books.

Step 2: The Books base

Make a file called Books.base and paste this in:

Books.base
filters:
  and:
    - type == "book"
    - '!file.inFolder("Templates")'
formulas:
  days_in: if(status == "Reading", if(started, (today() - date(started)).days.round(0), ""), "")
  shelf: if(status == "Reading", "1 Reading", if(status == "To read", "2 Up next", if(status == "Finished", "3 Finished", "4 Set aside")))
properties:
  file.name:
    displayName: Book
  formula.days_in:
    displayName: Days reading
views:
  - type: table
    name: Reading now
    filters:
      and:
        - status == "Reading"
    order:
      - file.name
      - author
      - started
      - formula.days_in
      - pages
  - type: table
    name: Up next
    filters:
      and:
        - status == "To read"
    order:
      - file.name
      - author
      - added
      - pages
    sort:
      - property: added
        direction: ASC
  - type: table
    name: Finished this year
    filters:
      and:
        - status == "Finished"
        - if(finished, date(finished).year == today().year, false)
    order:
      - file.name
      - author
      - finished
      - rating
      - pages
    sort:
      - property: finished
        direction: DESC
    summaries:
      rating: Average
      pages: Sum
  • Reading now shows how many days you’ve been on each book, from the days_in formula.
  • Up next lists the oldest additions first, so the list doesn’t only grow.
  • Finished this year uses .year to keep this year’s books. Sum totals the pages and Average averages your ratings.

Step 3: A shelf board, in your order

Add a board under views: in the same file:

Books.base (add under views:)
  - type: cards
    name: Shelf
    groupBy:
      property: formula.shelf
      direction: ASC
    order:
      - file.name
      - author
      - rating

Groups sort alphabetically, so “Finished” would come before “Reading”. The shelf formula from step 2 puts a number in front of each group (1 Reading, 2 Up next…), and the board groups by that instead.

Step 4: Author pages that list their books

Add one more view:

Books.base (add under views:)
  - type: table
    name: By this author
    filters:
      and:
        - file.hasLink(this.file)
    order:
      - file.name
      - status
      - finished
      - rating

Then make a note for the author, such as Authors/Ursula K. Le Guin.md, and put this line in it: ![[Books.base#By this author]]. file.hasLink(this.file) means “books that link to the page I’m on”, so every author page lists its own books with the same line.

Step 5: Your reading on the Home page

Embed the two lists you check most:

Home.md
## Reading now
![[Books.base#Reading now]]

## Up next
![[Books.base#Up next]]

When you finish a book, set status: Finished, the finished date and a rating, and it moves to Finished this year by itself.

Mistakes that cost us time

  • Typing the author as plain text. It works in the tables, but the author pages need a link: "[[Ursula K. Le Guin]]", with the quotes.
  • A finished book with no finished date. It won’t count toward this year. Add the date, even a rough one.
  • The template showing up on your shelf. The !file.inFolder("Templates") filter fixes it.
  • Ratings as stars. Store a number from 1 to 5. Numbers can be averaged; ★★★★ can’t.
More guides

Keep going.

Clients and follow-ups

How to Build a Simple CRM in Obsidian (No Plugins)

Track clients, follow-ups and invoices with one note per client and a single Base. Copy-paste code, no plugins.

Read the guide
Bases recipes

Obsidian Bases Examples: 10 Copy-Paste Recipes

Ten tested recipes: due this week, days since, late invoices with totals, weighted pipeline, renewals, per-note embeds and the gotchas.

Read the guide
Small office IT

Small Office IT Documentation in Obsidian: What to Record

What a small office should write down about its IT, what never to store, and a simple setup in Obsidian.

Read the guide
Building with AI

A Spec Template for AI Coding Tools (Claude Code, Cursor)

A one-page spec template for Claude Code, Cursor and other AI coding tools, a plan-first prompt, and where Obsidian fits.

Read the guide
Students

Obsidian for Students: Track Assignments, Exams and Grades

Assignments with due dates, an overdue list and exam countdowns, plus class pages that list their own work. Copy-paste code, no plugins.

Read the guide
Daily planning

A Calm Daily Planner in Obsidian: Tasks by Energy and Time

A brain-dump inbox, tasks sorted by energy and minutes, up to three focus tasks, and bills two weeks ahead, on one Today page.

Read the guide
Game masters

Obsidian for Game Masters: Run a Tabletop RPG Campaign

Session prep in 30 minutes, secrets and clues until they’re revealed, NPCs listed on their places, and faction clocks. Any system.

Read the guide
Real estate agents

Real Estate CRM in Obsidian: Follow-ups and Contract Deadlines

Follow-ups due, past clients to check on, and every contract deadline in the next seven days, in a private vault. No plugins.

Read the guide
Habits

A Habit Tracker in Obsidian with Bases (No Plugins)

Habit checkboxes in your daily note, and one Base that counts each habit over 7 and 30 days. No streaks to break, no plugins.

Read the guide
Meetings

Meeting Notes in Obsidian: Agenda, Decisions and Action Items

A meeting template with agenda, decisions and next steps, a list of follow-ups still to send, and every open action item on one page.

Read the guide
Projects

A Project Tracker in Obsidian: Board, Deadlines and Health

One note per project, a health column that flags overdue and due-soon work, a board in your column order, and client pages that list their projects.

Read the guide