Daily Python Projects

Daily Python Projects

Build an simple Obsidian-Style Notes Viewer with Graph Visualization

Level: Real World

Ardit Sulce's avatar
Ardit Sulce
Jan 09, 2026
∙ Paid

Your task for today is to create a desktop notes application that reads local markdown files, supports wiki-style linking with [[brackets]], and visualizes connections between notes in an interactive graph — bringing the power of Obsidian’s knowledge graph to your own Python app. Lets to it!

Project Task

Create an Obsidian-style notes viewer that:

  • Uses tkinter to create a desktop GUI application

  • Loads and displays all markdown files from a selected folder

  • Shows notes list in a sidebar and content in a text editor

  • Supports wiki-style links using [[note name]] syntax

  • Extracts links from notes using regular expressions

  • Allows editing and saving notes directly in the app

  • Generates a graph view showing connections between notes

  • Uses NetworkX to build the connection graph

  • Visualizes the graph with matplotlib showing nodes and edges

This project gives you hands-on practice with GUI development, regex patterns, graph theory, data visualization, and building knowledge management tools — essential skills for creating complex desktop applications.

Expected Output

The program automatically lists all .md files on the left sidebar. Clicking a file on the sidebar displays the content of that file and the user can edit the content:

Just like in Obsidian, if the user uses [[note_name]] syntax to link to another note, a link is created between those two notes and all the links are visualized in the graph view:

Join the Python & AI Builders Skool Community

Got questions to ask the author about this project? Join our Python & AI Builders community for weekly Python & AI videos and discussions:

https://skool.com/automateit

Skeleton and Solution

Below you will find both a downloadable skeleton.py file to help you code the project with comment guides and the downloadable solution.py file containing the correct solution.

Get the code skeleton here:

Keep reading with a 7-day free trial

Subscribe to Daily Python Projects to keep reading this post and get 7 days of free access to the full post archives.

Already a paid subscriber? Sign in
© 2026 Ardit Sulce · Privacy ∙ Terms ∙ Collection notice
Start your SubstackGet the app
Substack is the home for great culture