1. Introduction

Notion and Obsidian are very popular note apps nowadays. Notion and Obsidian cater to different needs and preferences. The notion is ideal for users looking for an all-in-one workspace that combines note-taking, project management, and collaboration. It excels in team environments and provides extensive customization options through its block-based system. Obsidian, on the other hand, is tailored for individual users who want a robust tool for personal knowledge management, with a strong emphasis on local storage, privacy, and advanced linking between notes. Its rich plugin ecosystem and markdown-based interface offer deep customization, making it a favourite among power users and those who prefer a more hands-on approach to organizing information.

1.1 Differences between Notion and Obsidian

Feature/AspectNotionObsidian
PlatformWeb, Desktop, Mobile AppDesktop, Mobile App
Data StorageCloud-basedLocal storage
InterfaceBlock-based editorMarkdown editor
CustomizationHigh (templates, blocks, databases)High (plugins, themes, custom CSS)
Offline AccessLimitedFull offline functionality
CollaborationReal-time collaboration; shared workspacesNo real-time collaboration
Learning CurveModerateModerate to high (due to customization)
PricingFree tier available; Paid plans for more featuresFree; Paid tier for additional features
Best ForTeams, project management, personal organizationIndividual note-taking, personal knowledge management

1.2 Reasons for migrating from Notion to Obsidian

I've used Notion as my primary note-taking platform and have been a Notion Plus member for several years. I also use notion as my blog website. However, for some reason, I decided to migrate to Obsidian.

1.2.1 Diagramming and Charting

I have a high demand for drawing diagrams directly through code, such as Gantt charts, sequence diagrams, mind maps etc. I found that mermaid.js which is integrated into Notion does not meet my needs, especially for mind maps. Therefore, I had to use markmap.js to develop a specific web page to display the diagram and then embed it into my Notion page via an HTML link.

I prefer PlantUML because it is more powerful. Unfortunately, Notion does not support it.

1.2.2 Data Security

Data is the most valuable asset for me. While it is unlikely that Notion will lose my data or suddenly stop its service, I cannot take the risk of losing my data. I put all of my data on it, notes, photos, videos, files etc. Therefore, rather than rely on a company, I prefer to take control of my data by myself by synchronizing and backing it up on multiple cloud storage providers.

1.2.3 AI

AI is essential for note-taking, it helps me improve my sentences, quickly generate outlines or drafts, and makes me more productive. While Notion AI is powerful, it costs $10 per month. I prefer to integrate multiple popular AI models into Obsidian, both free and paid, and I can even train my own data by running an LLM locally via Obsidian.

1.2.4 Customization

Obsidian has a rich plugin ecosystem and support for custom CSS and themes. I can seek a plugin for my specific needs, or even develop my own plugin if there isn't one that meets my needs. In contrast, Notion users must wait for the team to add new features and functionality, They may not even consider your special needs.

1.2.5 Accessibility

For some reason, users in China cannot stably visit my Notion blog website, so I need to build my blog website in another way.

2. Solution Overview

To achieve an experience comparable to Notion, I need to address certain limitations of Obsidian.

  1. Using iCloud to synchronize files between multiple devices.
  2. Using cloud storage to preserve large binary files.
  3. Using GitHub to control note history.

Furthermore, To publish notes, photos and files to other platforms, I created a Publisher service that listens to GitHub push events and then handles the changes. When a note was modified and if it met a condition (for example, a file in a certain folder was changed), the publisher service would trigger a build workflow for my website, which was built using Next.js. The service would then fetch the new data from GitHub and rebuild the website. In addition, it can generate content for a third platform and publish content via APIs provided, such as WeChat Public Account APIs, and Instagram APIs.

3. Requirements

  1. Obsidian (both mobile APP and Desktop)
  2. Basic web development knowledge
  3. iCloud Drive
  4. 2 Cloud storage providers
  5. A GitHub private repository

4. Cross-Device Synchronization

  1. Create the note vault on the mobile app It will create the vault folder inside the Obsidian folder on the iCloud Drive. Don't create the vault on the desktop.
  2. On the desktop app, open the note folder in the iCloud Drive as the vault

5. Binary File Storage

It's not a good idea to store binary files on iCloud. On the one hand, synchronizing these files to iCloud would take a lot of time. On the other hand, you need to pay for extra storage for iCloud, it is just free for 5GB. Therefore, it's better to choose another Cloud Storage provider. At least 2 providers, one for primary storage, and the other one for backup. Data is invaluable!

I selected 2 providers:

  1. Cloudflare R2 is my primary storage, which offers a generous 10GB of free storage forever.
  2. Tencent COS is my backup storage, which offers both cheap and stable storage. Moreover, it also provides a free automatic timing backup service.

6. Migration

  1. Export all Notion notes as Markdown & CSV into the vault, and get well-organized.
  2. Re-upload binary files (photos, videos, files) to cloud storage. There are a lot of plugins for uploading files to cloud storage providers, such as obsidian-image-upload-toolkit, so find a suitable one. I developed a plugin for Cloudflare R2 Storage, obsidian-r2.

7. Version Control

  1. Create a new Private repository on GitHub
  2. Install the Git plugin to synchronize the notes

8. Publish Notes to Third Platforms

GitHub triggers a Webhook when a change is pushed to a certain repository. We can develop a service to listen to and handle the event, but this requires some web development knowledge.

All the posts on my website are from Obsidian Notes. My website is built using React.js. When the server receives a push event from GitHub Webhook, I trigger GitHub Workflow to rebuild my website and fetch my notes from that GitHub repository before rebuilding. Of course, I don't want to publish all my notes to the public, so I set some rules. For example, I only publish the notes that I mark as publish in the markdown note metadata.

Here is the service code: obsidian-worker

9. Installed Community Plugins

  1. BART: Easily install a beta plugin for testing. It allows us to install plugins developed by ourselves.
  2. Calendar: Calendar view of daily notes.
  3. Copilot: A ChatGPT copilot on Obsidian It's a pretty powerful plugin that we can integrate OpenAI, Gemini and other LMMs for free or not free. I've integrated OpenAI and Gemini so far. I also set some useful custom prompts which make me more efficient.
  4. Custom Frames: Turn web pages into panes using iframe. We can fix some frequently used web pages, such as Google Calendar.
  5. Dataview: write queries and show the data list or table that we need.
  6. Git: backup vault with Git
  7. Image Toolkit: A useful image viewing toolkit
  8. Leaflet: interactive maps inside note I use this powerful plugin to show my trails. For example, cycling tracks, hiking tracks, locations and so on. It supports GPX and GEOJSON files.
  9. Periodic Notes: Create/Manage daily, weekly, and yearly notes. Best partner with Calendar plugin.
  10. PlantUML: render PlantUML diagrams.

10. iOS Widget for Obsidian Notes

I created an iOS widget using Scriptable to display my daily to-do list, which is extracted from the daily notes on Obsidian. See the Code

11. What's Next

With a significant amount of my data recorded in Obsidian, I plan to train my data using local LLMs. I believe that AI will eventually understand me better than I understand myself.