From time to time, there are people asking about the offline capability of Notion.
And actually, I also have had the desire for a "fully offline" version of Notion for a long time, so I think the topic worth more discussions.
Technically, it's possible, but it requires a lot of work, and maybe, not from Notion, since the "fully offline" concept might violate Notion's interest as a SaaS (Software-as-a-Service) company.
For what technical work need to be done to have a "fully offline" version of Notion, I have a rough idea:
Notion is a Web application, which means there're front-end code running in the browser and back-end code running in the server, and the front-end code communicates with the back-end code through HTTP API to exchange data.
To make a "fully offline" Notion possible, we need to have both the front-end code and the back-end code on our own computers.
The front-end code is easy to get. We could just download it because it runs in the browser. Although it's "uglified" (not as human-readable as the original source code), we can still execute it locally and get a working UI.
The hard part is the back-end. Because we don't have access to Notion's server, we cannot get its code. Instead, we would have to implement our own. How? I've mentioned the HTTP API, which can be reverse-engineered by inspecting the HTTP requests with a browser's developer tools. Then, we can developed our own back-end server that has the same API as Notion's, to make it able to communicate with the downloaded front-end code.
Finally, we would patch the downloaded front-end code by replacing all www.notion.so
occurrences with the address that our back-end server planned to run at (e.g. localhost:1234
). Then, launch our own Notion-compatible back-end server locally, open the browser, enter the address of the server, and enjoy the "fully offline" version of Notion!
However, it may not be worth to do what I said above for several reasons:
- Notion is frequently updated with new features, and if our offline version would like to follow, it would take endless effort.
- My above idea focus on making offline content editing work, but it does not consider syncing, collaboration, authentication, encryption, etc. If the addtional features were also needed, the back-end would be as complicated as re-implementing a Notion service.
- The work required to implement the Notion-compatible back-end server and keep following the updates may be comparable to develop a whole new, potentially better, and truely offline-first information orgnization system from scratch.
In my conclusion, I think Notion is currently still a fast-evolving software where there're so many improvements to be done, so I tend to be patient and look forward to the updates instead of putting all my effort into implementing a Notion-compatible back-end server just for offline usage.
But indeed, I'm a little concerned about privacy issue, data ownership issue, performance issue, and malleability limitation of Notion due to their technological choices and business model. Therefore, I do and will keep trying to reverse-engineer Notion's technology stack, looking for clues to decipher the underlying concepts and figure out the mindset behind the design, in order to foresee if Notion's future decisions would continue to be in my favor.