Bedrock - An Obsidian vault renderer

โ† My projects and experiences ยท Since Nov 2022 ยท 2 minutes

During my PhD, I started using Obsidian for note taking. Notes in Obsidian are simply stored locally as markdown files. The flavor of Markdown is extended compared to say GitHub flavored Markdown. During this time, I started working on a tool to publish the content of my Obsidian vault on the web so that it is accessible at any time. This requires parsing the markdown syntax specific to Obsidian and making render to HTML. With the tailwind prose plugin, it was relatively straightforward to get started and get a nice rendering of notes.

A note about the Network Simplex algorithm rendered using Bedrock.
A note about the Network Simplex algorithm rendered using Bedrock.

One important feature, was the beautiful rendering of math equations which was quite straightforward to setup using MathJax.

This then prompted me to improve the supported feature set and add the famous graph view and things like backlinks to improve navigation. Other features include search, tags and more.

The famous Obsidian graph view added to notes.
The famous Obsidian graph view added to notes.

Finally, Obsidian added support for Bases. Which are allows one to filter notes and display them in a table or card view. This feature is certainly the more complex since it required adding a fully fledged interpreter in the codebase for this formula programming model which enables custom properties.

The work-in-progress base view for a Base that lists books I have recently read.
The work-in-progress base view for a Base that lists books I have recently read.

The support for Base is quite minimal but the goal is to improve it further to support more Bases in the wild. Another interesting feature to support would be Canvas. But I do not use them personally in my vault, so I have little motivation to implement this feature yet.

You can give Bedrock a try. The code is open-source at github.com/Pangoraw/Bedrock.

For the tech stack, Bedrock is written in Typescript and runs using the Deno runtime. Leveraging packages such as tailwindcss and React for rendering.