Zim – The Best Note Taking and Idea collecting software
Table of Contents
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
- Offline - Preferable think client, always available
- Sync - Synchronize across all my machines
- Version - Keeps versions, with comments
- File based - Simple file structure
- Attachments - Allows simple attachments, like images etc
- 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.
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 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.
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 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.
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.
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.
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.
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.