Obsidian Note-Taking with ODIN: Intern's Perspective
In an age overflowing with information, note-taking has emerged as an indispensable skill for personal and professional growth. Whether you're a student striving for academic excellence, a professional aiming to boost productivity, or simply someone looking to better organize your thoughts and ideas, note-taking can be a game-changer. And in an age where the sheer volume of data can be overwhelming, the power of structured note-taking becomes even more evident.
As technology continues to advance, so does the potential for enhancing our note-taking capabilities. These thoughts pushed me and my team toward the realm of the most exciting developments in modern tech — the integration of Large Language Models (LLMs) into the process of taking notes.
Motives and the backstory
Inspired by a fascinating article about personal knowledge graphs, the team at Memgraph began the most important process in every project management — a discussion/brainstorming. We spent long days researching, reading various articles and papers, thinking about how we could apply GPT-4 to the note-taking process in a way that would have a meaningful positive impact on user's productivity. In the process, many ideas were voiced out, including dynamic analysis of code and repositories, which found its implementation in the RUNE project. And although it was difficult for us to settle on one thing due to the rich ideas of brainstorming sessions, at one point, we came across Obsidian - a technology that opened our eyes to how to combine our three passions - LangChain, graph databases, and note-taking, in one project.
Given that my colleague already had a wealth of experience using Obsidian, we decided to unite forces - I always enjoyed creating rich user interfaces while my colleague, Patrik, dealt with the part of the project that my UI needed to render. This is how our work on ODIN began, but what is Obsidian, how did a god from Norse mythology get in here, and why is TypeScript great? Let's find out.
Obsidian: The foundation of knowledge management
Obsidian is more than just a note-taking app; it serves as the cornerstone of modern knowledge management systems. At its core, Obsidian is a powerful and completely free open-source note-taking system designed to help individuals craft, organize, and connect their ideas. What sets Obsidian apart from traditional note-taking apps is its emphasis on creating a network of interconnected notes, fostering a web of knowledge that can be easily navigated and expanded, which was the main inspiration for the integration with the Memgraph database due to its philosophy and performance.
This unique approach transforms your notes into a dynamic and evolving knowledge graph, allowing you to see the relationships between ideas and uncover new insights with every interaction with Obsidian. Some people call this a revolution in the organization of their knowledge, and it is difficult to disagree with this. There are many articles on this topic, but I was especially fascinated by the Future of Note-taking and Personal Knowledge Management, which provides an analysis of not only note-taking apps but also applications for project management in the context of modern information overdose.
Renowned for its adaptability and user-centric design, Obsidian stands out for its open ecosystem, which places a strong emphasis on community-driven plugins. These core plugins, crafted by dedicated developers and users alike, serve as the backbone of Obsidian's remarkable flexibility. They empower users to tailor their note-taking experience, adding specialized features, improving workflows, and enhancing overall productivity.
Powering ODIN's intelligence with Memgraph
Obsidian is great, but still, why ODIN? It's all quite simple — we liked the project naming style that has existed in Memgraph for a long time — for example, MAGE, also known as Memgraph Advanced Graph Extension, seemed to us a damn original name, sharp as volcanic glass — and so, ODIN was born, from now onwards known as Obsidian Driven Information Network, an Obsidian plugin for knowledge management. This name became the starting point of our project, representing the goal that we were trying to comprehend and the idea that we were trying to realize.
In our R&D process, while working on ODIN, we figured out that data storage is the core of the app's architecture, without which neither the backend nor the frontend would make any sense. Even though we thought a lot about traditional databases such as PostgreSQL, the Obsidian knowledge graph was the main inspiration to try Memgraph, a graph database that excels in modeling complex relationships and connections, making it the ideal choice for creating and navigating intricate information networks.
Even I, an ordinary student with a passion for developing user interfaces, was able to play around with both Memgraph and the query language called Cypher. I highly recommend trying the visualization that Memgraph Lab provides, even if you are far from both database graphs and software development in general.
By seamlessly integrating with LangChain, ODIN leverages Memgraph's speed and efficiency to transform standard notes into interconnected knowledge graphs empowered by the flexibility of embedding search. This enables you not only to traverse your notes effortlessly but also to extract valuable insights through interactions with LLMs through LangChain implemented in the backend using Python and FastAPI, which deserves its amazing and very detailed article. With Memgraph as our data storage solution, ODIN redefines the way we store and harness knowledge, offering a platform for building an intelligent and dynamic personal knowledge management system just from your notes. Isn’t it wonderful?
The nitty-gritty of the project
Creating an Obsidian plugin like ODIN involves a complex process akin to developing a React application using a client-server architecture. The magic unfolds when we connect it to the Obsidian TypeScript API - and boy, was I glad that the Obsidian team loves TypeScript! At the time of writing, the source documentation was lacking function and class definitions, a small hurdle that is gracefully overcome by TypeScript's robust, secure, and intuitive classes defined in the API, enhancing the development experience with IntelliSense that provides code completion based on those definitions.
What's notable is the ease of creating plugins in real time; npm scripts allow you to instantly detect code changes, and the Obsidian Hot Reload plugin speeds up development several times. In addition, Obsidian provides developer tools like popular browsers, simplifying the debugging process by accessing the console and directly inspecting elements on the screen. This flexibility in the Obsidian API allows developers to bring their creativity to life, unlocking the full potential of Obsidian to create unique note-taking experiences and more. Honestly, it feels just like making a web application in a modern and robust environment. I'll miss this when I get back to regular web development.
ODIN introduces a multitude of functionalities to improve your knowledge management experience. At its core, ODIN provides a chat-like prompt bar for answering questions about the data stored in your knowledge graph as if you were just chatting with your knowledge collection.
With ODIN's advanced graph visualization capabilities provided by Cytoscape, you gain a whole new view of your Obsidian vault, effortlessly navigating through the complex web of your notes. This extends to individual files view, where you can delve deep into specific topics from your markdown notes. Furthermore, ODIN expands the Obsidian native drop-down menu by adding new advanced functions. Link prediction, as its name suggests, generates connections to other markdown files in your entire vault, enriching your note's content with thematically relevant references. Moreover, you can extract thought-provoking questions from your markdown file, fostering deeper contemplation.
Lastly, the node suggestion capability enhances your note-taking by highlighting thematically connected nodes, forging meaningful connections between highlighted text and related knowledge nodes, all while promoting a more comprehensive understanding of your stored information.
On the other hand, clicking the node from the file view will highlight related sentences directly in your opened note. ODIN's functionalities represent a significant leap forward in LLM utilization in knowledge organization, unlocking the full potential of your Obsidian notes.
Community and collaboration in the Obsidian ecosystem
The Obsidian ecosystem is a dynamic universe that revolves around the Obsidian note-taking application. At the heart of every Obsidian app lies the vault, which serves as the repository for all your notes and knowledge. This central element is surrounded by various plugins and themes that allow users to customize and extend the functionality and appearance of Obsidian. The Obsidian community contributes significantly to this ecosystem by creating and sharing plugins and themes, and this collaborative effort enriches the user experience. Every line of code written for this community feels like a whole new journey through this open-source universe.
Additionally, the Obsidian Sync service ensures seamless data synchronization across devices, making it a perfect choice for cross-platform dynamic note-taking, while the Obsidian Publish feature allows users to share their personal wiki, notes, and knowledge with the world.
All these interconnected elements form the diverse and expanding Obsidian ecosystem are fostering a holistic approach to note-taking and knowledge management in the world of community-driven technologies.
The Obsidian community (including you, reading this article!) is the lifeblood of the platform's evolution and continued success. At the forefront of this community-driven ecosystem are the invaluable community plugins. These user-generated extensions enhance Obsidian's functionality, addressing specific user needs and preferences. Becoming a part of this thriving community is not only about reaping the benefits of these plugins but also contributing to its growth. By actively participating in discussions, providing feedback, or even crafting your own plugins, you can play a pivotal role in shaping the future of Obsidian, enriching the collective knowledge management experience, and ensuring that this vibrant community continues to flourish.
Efficient data organization is paramount these days. Memgraph, integrated into ODIN, redefines how we structure and navigate information, transforming disparate data points into a cohesive knowledge graph. By prioritizing structured data, Memgraph enhances Obsidian's potential.
The history of the creation of this project was long (and sometimes painful to remember), but if you were to ask me if I would do it again, I would nod without any hesitation. Creating plugin-type interfaces is a breath of fresh air in frontend development, which still fits perfectly not only into open-source contribution but also into professional experience along with career growth. Although this project could be done better in many ways, it will remain a reliable indicator that modern technologies can and should be used in conjunction with one another. You, too, can become a part of this story — open an issue in our GitHub repository, and we will be happy to make ODIN better together!
I hope that I was able to ignite your interest in trying Obsidian or even making a more tangible contribution to this incredible open-source community.