I have been a Goodreads user for many, many years. It has provided me the means to track my reading activity alongside a list of books I want to read. The past few years I’ve been an avid Kindle reader, topping 20,000 pages read each year. Goodreads integration with the Kindle has made it very easy to mark a book started and finished.
Last year’s purchase of a Synology 920+ NAS as a replacement backup device led to me hosting some of my own content1. Then, with Twitter’s meltdown I’ve been exploring the Fediverse. So, at the weekend I took a look at Bookwyrm which is a non-corporate version of Goodreads. Didn’t like it and it felt really awkward to me. Somehow I ended up viewing a video by Curtis McHale where he covered off using Obsidian and the Obsidian Book Search plugin. I’m a big Obsidian user so I took the time to explore. This is what I ended up with.
I don’t use all the features of Goodreads. Those I use are:
Because I’ve started mixing audiobooks with ebooks, page counts are problematic in Goodreads. A 12 chapter audiobook is listed as 12 pages.
The good news. I’ve been able to replicate all except the friends feature in Obsidian, and more.
I’m going to assume you have at least passing familiarity with Obsidian and installing plugins. If not, this is a good chance for you to develop your knowledge a little further.
Obsidian is a text editor that uses Markdown files in the back-end and makes it super easy to link between files. Obsidian’s flexibility can be extended using plug-ins.
Shopping list (follow the links, all free):
Get Obsidian installed and then install the plugins.
You will use this plugin to gather book metadata such as title, author, isbn, number of pages, publisher etc. This is the most laborious part of adding book information to any system (it’s what Goodreads excels at). Anything that eases that is worth its weight in gold.
Instructions refer to version 0.5.9. Software changes over time, and there may be changes in your version.
New file location should be obvious. It’s the folder where you want your book notes stored. I use the Auto Note Mover plugin to then file notes into their rightful homes automatically.
New file name uses any of the metadata the plugin returns to name your file. The default is Title - Author but I’ve changed this to just Title. When I link to a book from another note, it reads better with the book name alone.
Template file is the name of the file where the magic happens. It defines the metadata I want Book Search to return, plus any additional metadata to make up my book’s note. The plugin’s web page has a sample template you can copy and paste into your own template file.
I started with the suggested template file and then made some of my own changes.
```
---
tag: source/book
title: "{{title}}"
author: [{{author}}]
publisher: {{publisher}}
duration:
pages: {{totalPage}}
minutes:
isbn: {{isbn10}} {{isbn13}}
cover: {{coverUrl}}
status: unread
created: {{DATE:YYYY-MM-DD HH:mm:ss}}
updated: {{DATE:YYYY-MM-DD HH:mm:ss}}
series:
name:
sequence:
history:
reads:
started:
finished:
format:
---

```dataview
TABLE WITHOUT ID
status as Status,
history.started as Started,
history.finished as Finished,
series.name as Series,
series.sequence as "#"
from #source/book
where title = this.title
```
The differences are:
At the bottom I have a Dataview that queries the current page to display information when not in Obsidian’s edit mode.
Here is the page for Edgedancer by Brandon Sanderson.
```
---
tag: source/book
title: "Edgedancer"
author: [Brandon Sanderson]
publisher: Hachette UK
publish: 2018-10-18
duration:
pages: 183
minutes: 383
isbn: 1473226597 9781473226593
cover: http://books.google.com/books/content?id=caVnDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api
status: read
created: 2023-04-09 21:05:56
updated: 2023-04-09 21:05:56
series:
name: "The Stormlight Archive"
sequence: 2.5
history:
reads: 1
started: 2022-05-04
finished: 2022-05-06
format: [ebook, audiobook]
---

```dataview
TABLE WITHOUT ID
status as Status,
history.started as Started,
history.finished as Finished,
series.name as Series,
series.sequence as "#"
from #source/book
where title = this.title
```
The only fields I need to fill in are book.duration, series.x, history.x and format. In a few cases I replaced the cover links with an alternative cover I found elsewhere 2.
The Dataview section looks like this:
This book I’ve read only once. For any books I’ve read multiple times, I write the date as
[2021-03-04, 2022-05-04]
. Later Dataview queries pull out the maximum date from the history.started or history.finished fields.
Every book has one or more authors so there will be a page for each.
There is a Templater file called author that makes for quick creation of these pages.
---
tags: person/author
---
```dataview
TABLE WITHOUT ID
file.link as Title,
series.name as Series,
publish as Published
FROM #source/book
where contains(author, this.file.name)
sort publish
```
Here’s what a linked series page looks like. I fill in the author’s name, and grab the Goodreads book series link.
And the code to generate it is stored in a Templater file called book-series.
```
---
tags: atlas/series/books state/active
goodreads:
---
A series of books by consisting of:
```dataview
TABLE WITHOUT ID
series.sequence as "Seq.",
file.link as "Title",
max(history.finished) as "Last Read",
status as Status,
history.reads as "Times Read"
FROM #source/book
WHERE series.name = this.file.link and !contains(file.path, "Templates")
SORT series.sequence
```
```dataview
TABLE WITHOUT ID
"" as Cover,
file.link as Title,
link(author) as Author,
series.name as Series,
join(list(history.finished)) as "Finished",
status as Status
FROM #source/book
WHERE !contains(file.path, "Templates")
SORT status DESC, file.ctime ASC
```
```dataview
TABLE WITHOUT ID
file.link as "Series",
goodreads as "Goodreads"
from #atlas/series/books and #state/active
where !contains(file.path, "Templates")
sort file.link
```
There is one feature I’m missing from Goodreads. The ability to create a list of books to read. Super easy, just create a list and as I purchase books, click through to create the page, then immediately use the Book Search plugin to pull in the details.
The Divine Comedy
I and Thou