Zim presents itself as a “desktop personal wiki”, that is a system to write down and organize texts inside your computer. Its main use cases include Daily Journal (Figure A), GTD time management and Creative Writing, but my own main reason to present Zim is that it can handle more than text.

Figure A

Inserting pictures from your hard disk, or screenshots made with scrot, only takes a few clicks, even if you want to resize those images or make them links to some other document. What you see in Figure B, however, may be just the most ordinary capability of Zim. If you’re a musician, for example, you may insert scores into a page in Lilypond format! Mathematicians, physicists or others who need complex tables or equations may do the same with LaTeX.

Figure B

Besides (and this is the part I like the most!) Zim can “free” its users from the need of an independent Calculator program. Two of its core plugins (more on this below), called Arithmetic and “Inline Calculator”, recalculate automatically the formulas you had inserted into the current page. If you often do simple calculations while working, studying or taking notes, Zim will save you a lot of time!
The Arithmetic plugin, shown in Figure C, is all you need for numeric or simple literal formulas. Change any of the numbers before the equal sign, or any of the variable assignments, press F5, and all the results will be updated.

Figure C

This is great, even if it does not work exactly as described on the website (at least for Zim 0.59 on Fedora 17/x86_64). Single, purely numeric formulas right after other text (“Fuel” in the screenshot) work, but multiple formulas, or variable assignments on the same line don’t. Zim recalculated the area only when (unlike the example on the website) I put the three height/width/area assignments each on a different line, all by itself.

The Inline Calculator (accessible from Tools->Evaluate Math) does more or less the same job, but adding support for the functions defined in the math and cmath Python modules (cos, exp, log10, sqrt…), and then some.

The other thing that Zim does quite well is organization and interconnection of information. Grouping pages hierarchically, by topic, date or any other criteria you may need, is as simple as dragging and dropping them in the left side pane. There is also a built-in search function. As it happens in Web wikis, if you follow the CamelFormat convention for page names, Zim automatically transforms those names in links while typing. Besides, Zim handles both direct and reverse hyperlinks: each “page” automatically shows which other pages link to it. In addition to the page tree in the side pane, the Zim “Link Map” plugin provides a clickable map of the links among the current page (shown in green in Figure D), and all the others in the current Notebook or name space.

Figure D

Installation, configuration, and automation of Zim

Zim should run on any platform that supports Python and the Gtk libraries. You don’t even really need to install it. Zim will run happily even if you just type ./zim.py in the folder you get after downloading the compressed archive from the website. In any case, you should first run ./test.py at the prompt, to be sure that Zim will find in your computer all it needs to work.

The package includes many “core” plugins, that you must activate going to Edit | Preferences | Plugins. They do all sorts of things, from version control with Git or other systems to scientific plots with Gnuplot, or event logging with Zeitgeist. Some of them, however, will work only if certain third-party tools are already installed. The “Link Map”, for example, requires Graphviz. You may also create Zim Custom Tools: these are simply shell scripts, declared in a way that lets Zim run them on the current page, Notebook or selected text, when you select the corresponding menu entry.

Of course, text editing

Even if it did not have all these “more-than-text” capabilities, Zim would a great little text editor. Zim does not have multiple tabs, but the buttons for the pages already visited in the current session offer almost the same service. The –fullscreen mode, with or without toolbars, will reduce distraction as much as possible. There is a word count pop-up window as functional as the one in LibreOffice/OpenOffice, and plugins to sort lines in alphabetical order or check spelling.

Links to local files are created just dragging and dropping them in the current page. Usage as a To-Do manager is facilitated by support for checkboxes. You can format your text with mouse and keyboard, or write raw Wiki markup (which will be reformatted as soon as you press CTRL-R), but pages are always saved in plain Wiki format:

  [marco@polaris zim-0.59]$ more ~/Notebooks/Notes/Journal/2013/03/11.txt
  Content-Type: text/x-zim-wiki
  Wiki-Format: zim 0.4
  Creation-Date: 2013-02-22T18:58:40+01:00
  ====== Tuesday 11 Mar 2013 ======
  write blog post for [[http://www.techrepublic.com|TechRepublic]]

What can I do with my ZIM pages and notebooks?

Zim can export single pages or whole notebooks, complete with index, to HTML (including S5 presentations!), LaTeX, Markdown or RST. In the first case (Figure E), you can preview your pages with the Zim embedded Web Server. The links in full notebooks export to HTML, however, will work only if you explicitly set their Document Root in the Zim Notebook Properties window (also shown in Figure E).

Figure E

Printing is not directly supported: File | Print to Browser only opens the HTML version of the current page in your browser and you must use the latter to finish the job. Considering how much ZIM can do, it’s not a big deal, is it now?