Zim – The Best Note Taking and Idea collecting software


For a long time I was using simple text files to keep my notes and ideas. It was nice and easy but I always wanted some features that were provided by software like OneNote or Evernote. In the last few years I have tried couple of them. While evaluating any new note taking app, I would test them against most basic must have requirements. Once they satisfy those, I would test for the new requirements that I was looking for. Below I have listed my must have requirements

  1. Offline - Preferable think client, always available
  2. Sync - Synchronize across all my machines
  3. Version - Keeps versions, with comments
  4. File based - Simple file structure
  5. Attachments - Allows simple attachments, like images etc
  6. Simple to use

In 2012 after quite a bit of testing, I moved all my existing notes to Zim Wiki. Since then I have been using it for all my work and non-work related information gathering. Its been three years and now i think its time to recommend this awesome tool to friends. There are more features that I can cover in this blog but I will write about the ones that I really care about and that makes Zim wiki must have for me.

zimi_wiki_std

Installation & being offline

Zim Wiki is a free and open source software available for Linux/Win/Mac. On Ubuntu, you can just do apt-get or you can find it in the Software Centre. Since its installed locally as a software it's always available. By default all the content are stored on your local storage and hence always available. All the contents are stored as regular text files and hence you can edit them even outside Zim, using a normal text editor.

Version Control, Sync, Text Files

Zim has a built-in support for Git/Hg/Bzr version control system as part of plugin. Once you enable them in Edit -> Preferences. Zim keeps the version of text changed.
zim_wiki_enable_version_control
Zim can do it periodically but I prefer doing it manually by adding my own comments. You can ctrl+shift+s to save a version. Also you can browse the saved versions.
zim_wki_browse_versions

Of course you can use standard GIT commands to browse through the history. If you are a developer, this comes naturally and goes well with development process. Zim supports Notebook concepts. So you can have multiple Notebooks, one for each subject or kind. Each Notebook is physically separate structure and will be on a separate GIT project. Hence when you plan to share your notes with the world, its easy.

I also use GIT to synchronize the notes between machines. If you have a private Notebook, it's just easy to pull the repository over the Lan, if not you will have to use private repositories on providers like Github or Bitbucket. But that gives access to your Notebooks on the go as well. But I don't prefer to use it for private Notebooks.

For public Notebooks, where you would like to share the notes with the world and want contributions from the community. GitHub or Bitbucket public repositories are great. For example for last few weeks, I have been writing Zen Guide to Indian Language App Development. Contributors can edit these notes online on Github or can download and work on it offline. Just like code.

You can also use DropBox as Share/sync system. But I prefer GIT.

Wiki, Distraction Free Editing

You can use GUI and key board shortcuts for formatting the documents inside the Zim. But if you really want to edit the source text files, you can use their DokuWiki like syntax. It takes about 10 minutes to learn the syntax and is super productive. Zim Wiki also has distraction free writing mode. Use keys F11 to toggle between distraction free and normal mode. It is super useful if you are writing a long essay.
zim_wiki_distraction_free

GTD

Zim has built-in support for GTD using Tasks Plugin. You need to enable plugin and can set a few preferences. I used the keyword TODO to recognized items as tasks in the plugin options. There are many other preferences that you can configure to make it more productive.
tasks
It's easy to define tasks in Zim. You can define the tasks using checkbox by just typing []. It appears like a bullet list of items. You can do it on any pages. The task list menu option lists all of them in a single dialog box. As you can see, you can use ! to signify the priority. @ symbol for tagging and [d:] for dates. Tasks are one of the best features in Zim. Specially because they can be part of any page. And extracted at the runtime to form a task list.
task_pref

Export, Local Sharing and Web Publishing

It's possible to export the contents of the Zim wiki into various other formats. You can export a single page, or a page with its children or whole Notebook. Highlight the page on the left Index browser and File -> Export. From there onwards UI will lead you to the output. HTML, MHTML, Latex, Markdown, Rst are supported as export formats. For HTML and MHTML various templates are presented. You can choose one or you can create/edit your own template.

My outputs are generally HTML. I use a modified responsive template contributed by a community member. Once I export I just copy them to s3 or webserver for serving to the world. Most of the tutorials that I have written recently are done this way. You can check my Data Journalism Workshop notes or Map Class notes to see how they look.

You can also export the Notes using command line, by running for example

$ zim --export --output=./html \
  --format=html --template=./foo.html ~/Notes

This will help you in automating the publishing.

If you don't want to publish but want to serve the contents locally for a shorter amount of time. Say want to share the notes amongst the classmates or at a workshop. You can use built-in webserver. Tools -> Start a webserver. Zim will start serving the particular notebook on the chosen port from your computer.

zim_server

Attachments

There are two ways attaching files to a Zim note. One by linking and other by attaching. Link will just create a link to a file on the drive. It opens up the file when you click on the link. But links wont be valid say when you export the notes or backup the notes.

attach_image

Attachments are physical attachments. Zim makes a copy of the file, keeps that copy in its own folder and then creates a link to it. In this way attachments go along with the Notes. This is really useful when you want to files to be tightly bound to the notes. Also useful when you export notes to the webserver etc.

I am going to stop here. This is already a huge post. Also I believe we have covered the most important features. There are many more like flowcharts, R Plots, GNUPlot etc. But those additional ones can be explored by the users as they adopt.

Zim has become my one program to go to as soon as I unlock my laptop. I find it really useful. I hope it helps to you as well.

10 Responses

  1. Sanjay Nayak says:

    Great share Thej. Hope I can use this regularly.

  2. Sergey Pavlov says:

    You could also take a look at ThetaPad (http://thetapad.com)! It is cross platform, simple and user friendly.

  3. Andreina Garban says:

    Hello Thej. You have no idea how useful this has been. I have been an Evernote user for some years now. I mainly loved the web clipper and it was way much nicer years ago. Also, being a Linux user for almost 5 years now, I began using Evernote less and less. Although NixNote2 was really working well. As Evernote is getting more and more “clumsy” I was looking for something to collect notes in a simple way and ZIM excels in so many ways. Of course, it doesn’t have all the “fancy” stuff Evernote claims to have. But guess what? It has exactly what’s needed. Without distractions, without making things slower, it works fast and I am happier now. I set it up my folder so I can have it available for sync and it’s working like a breeze! My GTD system is all in there, and also my Digital Bullet Journal! What else could I ask for? GREAT POST and thank you for sharing!

  4. Alberto M. Hernández says:

    Hi Thejesh,

    It was great to read this, because in my opinion, Zim is not given the credit it deserves. I have been using zim for around three years, and it is now my main knowledge base for work related issues. It is also great as diary/logging tool.

    I used to run Zim on windows, and used google drive to sync notes… which was a mess, really. For some reason, it creates random empty folders which were copies of the legitimate folders within the notebook. Now that I’m more familiar with git, I’m using it to keep my notes safe and versioned, and I must say it’s a delight.

  5. Krishnamoorthy C says:

    Thanks Thejesh. Your article is pretty useful, and i agree that Zim is a great personal wiki. It can almost replace my Evernote or Google Keep usage . I have been using zim for a couple of months, and i think it is not given the credit it deservers. Very simpl, yet powerful. I have yet to try advanced features, but i think versioning and backing up files on git would be a great thing to try for me.

  1. March 21, 2015

    […] Zim – The Best Free Note Taking and Idea collecting software that I use everyday thejeshgn.com/2015/03/21/zim… […]

  2. February 8, 2018

    […] use Zim wiki on my desktop. Even though I sync it using GIT across my machines. It’s not convenient to use […]

  3. October 19, 2020

    […] Zim – The Best Note Taking and Idea collecting software […]