Readwise in 9.6

I suppose I could take a few hours, or days, and cobble together all the functions needed to access Readwise and insert data into a Tinderbox file, but it would be very helpful for me – and I think others who asked for this feature – if @eastgate or someone could just post a sample Tinderbox file that has all the code needed to make the calls to Readwise and add the data to notes.

IOW, I’m asking someone to please write and donate to the Tinderbox community a kind of “plugin” for Readwise. Sans the API key, of course, which I’ll furnish myself.

Of course, absent all that, the alternative that doesn’t need 9.6 is to just watch the folder in my Obsidian vault that automatically syncs with Readwise thanks to the “Readwise Official” plugin that the Readwise owner provided for Obsidian a few years ago.

Yes — it’s coming. In the next day or two, I hope.


is it there yet @eastgate , @PaulWalters ?

Almost. It works for some backstage people. Specific highlights in Readwise crash for other backstage people. This feels like a 2-3 day problem, but not worse.


Is there any progress on this front?

There is! And I was just about to release the interim result for broader testing, when I had to pull back one of the latest changes :(. So, a few days more testing things backstage.

(The problem arises from note titles with reasonable names that could, unfortunately, be mistaken for Tinderbox expressions.).

I might get this wrapped today. Soon!

OK: here’s a preliminary version of the Readwise importer. It requires Tinderbox 9.6.1, which you can find at Tinderbox: Downloads.

Tinderbox Readwise 6.tbx (404.8 KB)


Thanks so much, Mark. This works very well!

1 Like

Let me know how it goes. Some observations:

  1. The notes for each book are easy to explode if you want to have a separate note for each highlight, rather than each book.

  2. There are LOTS of opportunities for refinement — better feedback during downloads, better problem-solving for things like “you forgot to paste your Readwise access code” or “Readwise doesn’t think that code is valid”.

  3. I think there’s lots of opportunity for doing interesting studies of one’s reading…

1 Like

Readwise buckets input as “Books” (e.g., input via Kindle), “Supplemental Books” (“popular highlights” made by others), “Articles” (e.g., captures via Readwise Reader), and Tweets. For each of these items in these buckets, we can have highlights, and highlights can have notes and tags assigned. It appears the current Readwise Tinderbox importer doesn’t distinguish books from articles, or the other types. And, the importer doesn’t capture comments (or perhaps it does but doesn’t indicate something is a comment).

The Readwise import to Obsidian, and recently added interface with Tana, does distinguish these elements in the Readwise database, so perhaps there is API tweaking that could add that level of detail to the Tinderbox import.

Yes, this ought to be fairly easy to add. There’s no magic here — it’s all in the Library functions.

Here’s the API page: Readwise API | Readwise

I don’t quite see how we distinguish comments…

1 Like

It is most likely the item the API calls " |note|string|Annotation note attached to the specific highlight."

maybe a switch from $KeyAttributes to $DisplayedAttributes in your functions would be a good thing. Same with String.json().
I found var:string nextPage=what.json.jsonValue(“nextPageCursor”); is jsonValue() identical to json[keyStr]?

You are using the default containers like $MyDictionary or $MyBoolean a lot. Wouldn’t it be a more readable approach to create new custom attributes?! And why are you using $MyDictionary[key] instead of declaring new custom attributes (and I love dictionaries - just wonder why you use them here)?

Sorry - no useful comments - I just walked through your code to get some ideas how to… :wink:

I think this was added in b629 but I missed it (I’ll add it into aTbRef)…

Additional Stream Processing Notes

Text: {
“person”: { “firstName”: “Thomas”, “lastName”: “Roe” },
“coordinates”: [-90,41]
MyString: “person.lastName”

$Text.json['person']['lastName'] ➛ Roe
$Text.json.jsonValue(person.lastName) ➛ Roe
$Text.json.jsonValue($MyString) ➛ Roe (in b629)

1 Like

New page JSON.jsonValue(pathStr), but just a placeholder for now.

Seems the different is .jsonValue() can use a JSN object path, whereas `.json[“key”] can only use a key name. Anyeay, function is as in the post above until the new note is fully written.

1 Like

Interesting…csv export in Readwise brings over highlight_color(s) which show up nicely in Tinderbox,hightlight_date, highlight_location, MyTags and MyNotes. In addition, it seems at first glance that my article highlights (from Readwise Highlighter a companion for Chrome allowing me to highlight articles within the browser and import into my Readwise collection…very nice) these highlights are in in the color black allowing further differentiation. I also tag my articles as articles to differentiate. HTH


Readwise seems to have created multiple, often confusingly different, methods to get data out of a Readwise database. Part of it, IMO, is that Readwise Reader/Highlighter and the Readwise main web app are still on separate tracks from a UI/UX perspective. It’s a small team, so maybe sooner or later they will merge the UI, the user experience, and ultimately the API and export methods.

1 Like

Completely agree, not as integrated as I would expect. I have been using Readwise for years. My usual workflow is to import everything into my DEVON. I usually use .md as import into DEVON and csv into Tinderbox which is nice because it retains the color of my highlights (yellow and red primarily). I have not messed with the API because it is so simple.

Back to the highlighter, when I get lazy and just want to read from the browser instead of importing into DEVON, I am noticing, the highlighter will also capture highlighted images within the web page or article, then, if exported as .md it shows up in DEVON. Pretty sweet. Anyway, just a new workflow I am trying on recently.

Hope you are doing well. All the best,

1 Like