Announcing Project MindMirror

So MindMirror is the Project I’ve been working towards for the last couple of months.
Steven already mentioned it in the report from the kdepim meeting in osnabrück, I named it notetaker back then as I couldn’t decide for a name, but here’s finally my first blog post about it.


I was always unhappy with the available solutions for taskmanagement and notetaking. I tried various online tools (which just don’t cut it if you’re sitting in a train…) like evernote, toodledo, doit and some others. After figuring out that online tools are definitely not for me, I decided looking for desktop apps.

Chandler and KJots were the ones I liked the most, KJots being super simple and fast for notes, Chandler has bit more to offer (including todos) but is not really fast, and doesn’t integrate with any webservice.

So I figured out already two years ago that I will have to create my own app, to help my ridcolously bad memory and my habit of being as unorganized as possible.
What I really wanted was an application which does not differentiate between notes and todos, as the frequently evolve from one to another (at least in my world). I wanted a place where I can store my thoughts, todos, events without having to think where it belongs.
Basically just a place where I can dump everything, and retrieve it later on as needed.

Further I wanted it to integrate well with existing solutions, such as KOrganizer, GMail, Evernote, etc.

With akonadi and nepomuk slowly evolving I was finally given the tools to start this task.
So I started last year the project MindMirror.

While the inital development started at a quick pace, I soon faced difficulties in the akonadi and nepomuk internals which occupied me for quite some time.
I spent a lot of time hacking on QProxyModels (the ETM, my own section model, …), also a conceptually proper Nepomuk integration was not easy and is still work in progress. Further I got sidetracked by the trashhandling implementation in akonadi (not yet in master), after attending the kdepim meeting, but more on that in another post.

Now that the needed fixes and additions slowly make their way into master, I feel that I can start spreading the word about this new tool.


MindMirror is supposed to be an interface to store everything you have to remember in form of Notes, Todos and Events. It is designed to be an additional Interface to the calendarview of KOrganizer and not to replace anything.
I try to keep the UI minimalistic, far from the full blown Interface of the KOrganizer Incidence editor. This means also ignoring some features, at least for now (I’ll probably add the option to open the fullblown editor).

Idea is, that a minimum effort is needed to enter something. You can simply create a new item (note/todo/event) and start typing right away, without another click needed. The focus will automatically move to the right fields to minimize user interaction. The UI is reduced to the minimum: title, text, an (optional) due date and a status are all that is usually needed IMHO. The status is the simplified version of the 10 priority levels a task can have in korganizer (States being Later/Now/Done). This gives some simple priority management, which is actually useful.


So the idea is, that you don’t have to organize the information when you enter it but rather later on (i.e. end of the day), if organisation is needed at all. This avoids breaking your workflow. To further improve this i.e. a krunner can be written so you don’t even need to open MindMirror.

For simple, short term notes, fulltext search and a list of the latest created notes should be enough to find your item again (I hope at least).

If you’re working on a long term project thought, it can be useful to organize your items in a treelike structure, which is typically solved using folders and alike.

MindMirror is not much different, you can organize your items into “Topics” (which can have subtopics and so on). The main difference to a folderstructure is, that you can add an item to several topics at the same time (the UI-parts are still missing currently), which should allow for a little more flexibilty.

Also the organisation of items is done through nepomuk, meaning that the “Topics” are actually pimo:topics and the whole structure is stored in nepomuk. Of course it is also possible to tag you items in MindMirror, so I hope this allows to fill Nepomuk with some more useful information.

With the means of nepomuk it is also possible to attach/link arbitrary documents, emails, to your notes/todos, which gets us one step closer to have everything at hand to fulfil a task.

When you’re done editing an item, don’t even bother saving, everything is already saved as you finish typing.



The Userinterface consists of a single view, with the left pane for control/sorting, the listview in the middle for display of the items, and the editor on the right. I’m not a big fan of interfaces consiting of many tabs and different windows, so I try too keep everything together.

The “Views” which you can see on the topleft control mainly the organisation of the items in the listview:

  • Work Layout:
    This layout is for crossing of items on your todo, list. Only uncompleted todos are shown and your notes are there to support what you’re doing.
  • Organize:
    The organize layout shows all items sorted by date. It’s there to organize your items.
  • Upcoming:
    A list of upcoming events/todos

In the custom view you can control the sections and the shown items manually.

The listview in the middle groups the items in sections, currently we have there ItemType (Todo/Event/Note), Status (Done, Later, Now), and Date. If I manage that items can appear in multiple sections we will have some more possibilities like:

  • by subtopics of the current topic
  • by tags

While the listview already supports showing the todos in their hierarchy, this part is still very buggy and needs quite a bit of work first.

The editor is a normal KRichTextWidget, which allows you to enter RichText. Below you can see some toolviews, most interesting is probably the “Context” view which allows you to relate notes/todos/files/etc. to this item.
Instead of using a tabbed interface or windows when opening notes from there, the breadcrumbs on top are used to navigate back.

I don’t plan to add much more to the UI, as this should be all which is needed. There probably will be a couple of changes, and the UI could use some designer’s love (It’s a bit too grey atm.), but from a feature point of view thats more or less it.
I’ll probably add a fullscreen-mode to the editor and a search view for some more searching options though.

Current State

While it is not yet releaseable and I plan the first release earliest with KDE 4.8 (because of the required dependencies), I already use it in my daily notetaking and todo management (i.e. I drafted this blogpost in MindMirror), and I’m quite happy with the result.

There is still some work to be done until it’s fully stable though.

Integration / Collaboration with other applications

Using akonadi for datastorage, namely the akonotes resource for notes and the ical resource for calendar items, you can have the same items in KOrganizer, KJots and MindMirror (and of course every other application which uses akonadi).
This is of course key for event and todo management, as MindMirror does not have it’s own calendarview: KOrganizer is the calendarview.

I do think akonadi is the way to go for data which should be synchronisable to cellphones, webservices, etc.
Nepomuk is also good candidate, but it makes perfectly sense to separate the synchronisation part in akonadi
(maybe as a long term future nepomuk could completely encapsulate akonadi, but thats another story).
Anyways thats why I do not plan to intergrate with applications not using akonadi (in short term).
Since the nepomuk feeders feed the data from akonadi to nepomuk, most of the data is also available trough nepomuk (which might be a way to work with other apps using nepomuk only).

Of course I looked at many other programs like basket, semnotes, kjots, korganizer, zanshin, etc. to see if a couple of modifications would bring my to my target, but I don’t think so. Neither interface wise nor functionality wise any of those programs suits my needs, although all of them have some very nice ideas.

Future Plans

Apart from the obvious plans like having an awsome ui and being super userfriendly, there are also some plans for akonadi in general:

  • Inline pictures in notes
  • Synchronisation plugin for evernote (akonotes resource)
  • krunner (I read there is already something cooking in the zanshin project)
  • Search View with an additional list of item (files, emails, etc.) related to the search (aka. “Contextview”)

I’m sure I won’t run out of work =)


While the codebase is generally in an ok state, it needs some cleanup and documentation.
There are still some classes with names that don’t really make much sense anymore, but that will be fixed.

Also for building some kdelibs code is needed (trashhandling and some etm fixes), which is partially only available in my private repos. Anyways, if anyone really feels like building, contact me, but be prepared =)

The code is currently here.

Also, contributions are, as always, more than welcome =)


Author: cmollekopf

Christian Mollekopf is an open source software enthusiast with a special interest in personal organization tools. He started to contribute actively to KDE in 2008 and currently works for Kolab Systems leading the development for the next generation desktop client.

33 thoughts on “Announcing Project MindMirror”

  1. I’d be curious to know what made you ditch Zanshin has a potential target for contributions. It’s still in its infancy from my POV, so feature wise it’s not yet where we want to bring it. In particular the cross-ref between TODOs and notes is definitely something we’re targetting, it’s just not there yet by lack of staff, also there’ll be more flexibility in the different views, etc.

    1. Well, there are a couple of reasons.
      First off, I think that I found the project rather late in the evaluation process, maybe even after I started =/ Also It looked like you’re more targeting todos than notes, where I want a solution working for all pim data. Further you took another approach in the UI, which is cool, but not what I’m looking for. Also I want to use nepomuk to be able to integrate even more data into the system, not sure what you guys are up to on that front.

      Last but not least, it took some for me to figure out how MindMirror should work and look exactly, and I’m still experimenting, and that is just easier if I have full control. I just went the way of lest resistance =)

      After all we’re just building different UI’s on the same data, that is the awesomeness of akonadi, so we can at least work together for things like the krunner.

      Looking forward to see how zanshin evolves =)

      1. Yeah, it’s more TODO oriented ATM, but notes are on the scope as well, and at some point we’ll have to link to nepomuk as well… you’ve got to start somewhere though and we wanted to focus on TODOs first.

        Agreed they’ll both operate on the same data in the end, my worry is more that we seem to end up in a situation where we spread our user and developer bases thin.

        1. Well, yes, of course you are right. Collaboration is good, and it’s better to have one kickass tool than 10 crappy ones.
          But on the other hand, we’re mainly just building UI’s (I try to move as much of the logic to akonadi/nepomuk), and if we have different visions how the UI should look like
          (and zanshin is IMO quite different from MindMirror), we don’t really have a choice, do we?

          If we want to collaborate codebase wise, I’d be very happy to do that. I.e. the editor component is fully selfcontained, and I have an AbstractPimItem class
          to handle notes and kcal incidences in a uniform way (just two examples), so if you think we could move our codebases a bit closer together, then lets discuss that.

          But just as you wouldn’t ditch zanshin to start working on mindmirror, I wouldn’t ditch my application for yours, I reckon we both have our pride in our projects =)

          So if you’d like to discuss a bit, you can usually find me in the nepomuk/akonadi/kontact channels on irc (cmollekopf), or just drop me an email.
          I’d be very interested to hearing a bit more from you what zanshin has to offer, and what your concepts/aims are.

          1. Awesome! Noted, we’re pretty much down the road to produce the 0.2 version ATM so we’ll avoid disruptions for the time being. But for the 0.3 and 0.4 timeframe I’ll likely get back to you and see what we could share indeed.

  2. What do the dates mean? The TODO submission date or “accomplish” date?

    Since my TODO’s tend to not have any particular day, week, month, or even year associated with them ;-p

    This seems like it could come in handy to serve as a drop box for my current text file of hundreds of lines of stuff to do….

    1. For todos the date shown in the list is either the due-date, if set, but since the due-date is optional the lastmodified date is used otherwise (as for notes).
      So it is really designed to work with todos which usually don’t have a due-date (I hate it when I have to fill in a due-date for no apparent reason=)

      So, yeah, I hope that this will be the tool for you.

  3. Cool. Though

    -- Configuring done
    CMake Error at /usr/share/apps/cmake/modules/KDE4Macros.cmake:984 (add_executable):
      Cannot find source file:
      Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
      .hxx .in .txx
    Call Stack (most recent call first):
      src/CMakeLists.txt:36 (kde4_add_executable)
    -- Build files have been written to: /home/estan/Nedladdat/notetaker/build

    Did you forget to commit that file?

    1. Thats just a couple of models which I host in a separate repository. They are also on gitorious, but you would need some etm patches as well which are not yet in kdepimlibs.
      If you really want to build, send me an email and I’ll give you instructions.

  4. Great! I’ve been wanting something like this for a while now, too. The fact that it will integrate well with KDE’s PIM suite is awesome. Be encouraged, and thanks for the work that you’ve done already.

      1. It’s in Calligra Suite beta, so you should be able to find a package. Though it’s interesting that you haven’t looked at it yet 😮

        1. Well, I looked at it on the web, and it’s quite far from what I’m looking for. It’s as cyrille said, more a whiteboard than pim-application.
          Cool though =)

  5. Wow! This looks great. I can’t check it out right now, but this seems really promising. I am also not very happy with most note and to-do applications and what you describe might work very well. 🙂

  6. For TODOs I’ve been using To-do lists from KDE PIM. For notes I use Basket (have you tried it?).
    Could you tell me what’s the point to use your app? Don’t take it personally, I am just curious.

    1. Yeah, I tried basket as well. First it has the usual problem that you have to organize yourself what you write down.
      Basket even makes this more problematic by letting you organize your notes and todos in all kinds of (awsome) ways.
      That might fit some people, but usually my notes consist of a single sentence, and I really want to avoid spending any time having to think about where that note belongs and how to organize that information.
      I don’t look for the right basket where to put it, I just write it into mindmirror, knowing that I can retrieve it there later when I need it.

      Also because it AFIAK doesn’t use akonadi but nepomuk only, the whole synchronization part is lost.

      I’ve also been a KOrganizer Todolist user for some time, but the UI is really not for me. As long as it’s only one-liners it ok, but otherwise rather cumbersome to use.
      Also the priorities and the Categories are just too complicated to manage. Further I frequently mix notes and todos, and I really think they belong in the same application.

      1. My notes are quite organised but I must tell it takes time. One line notes I would add to a miscellaneous basket, I think.

        When it comes to To-do lists I must agree that sometimes when I add a note to an item I have to write in the title: ‘more details in description’ or kinda to not forget about it. (there is no clue)

        But what To-do from PIM allows me is to sync lists with my mobile. Are you going to make this happen?

    1. Glad you like it =)

      Regarding you Todo idea:
      As I understood you just want to be able to create a todo from any item (file/email/etc), so you can easily process it later on in a todomanagement app.
      That is indeed a nice idea and something I will consider for future development. It’s not specific onyl to MindMirror though, but to kde in general and all its todo apps (which is good).

      1. Yup, that’s exactly how I imagined it. Create a ultra-simple TODO item from anything really and if additional info is needed later on edit it.

        No, it’s not specific to MindMirror, but from what I see, it follows a similar relaxed and mouldable work flow and I feel the two ideas would perfectly complement each other.

        But as you said, I imagine this as a general feature in KDE and so the user would be free to chose whichever editor/application to manage his TODO items (but it looks like your solution will be on the top of my list).

        That being said, what do you use on the back-end side? Does MindMirror store all TODOs (and notes) in iCal, so KOrganizer and technically even the smallest CLI would be able to use this data?

        If it isn’t yet, could you make your listview tweakable? So it just stores the end by date and let the user decide the time categories they need for their workflow.

        Additionally it would be great to be able to associate groups of TODOs and notes (together with their settings) with Activities (KDE/Plasma). E.g. when in my “Work” Activity, I would only see notes that were tagged with “FSFE” or “Work”, but these would not show when I’m in my “Gaming” Activity (and vice versa!). Also my gaming notes would probably use a completely different layout and time categories (see paragraph above) then my work notes.

        1. Yeah, activity integration is on the long term todo list.
          The backend is akonaid (the new backend for all pim applications), using the kcal and akonotes resources.

          So you can have your todos also in korganizer (for the calendarview) as well as zanshin or whatever app you’re using. You can even use them in parallel.
          For notes currently only kjots is using the same backend.

          Of course you can also use the gcal resource, so you todos are synced to google.

          1. Awesome! 😀

            I’m not (much of) a coder, so I hope that “my TODO idea” will be implemented by someone who really knows how to do it 😛

            (regarding gcal, I’ll rather wait for ownCloud to support Akonadi and have web access and sync over that)

  7. “Basket even makes this more problematic by letting you organize your notes and todos in all kinds of (awsome) ways.
    That might fit some people, but usually my notes consist of a single sentence, and I really want to avoid spending any time having to think about where that note belongs and how to organize that information.”


    That’s *exactly* how my workflow is. My wall of sticky notes (no, wall is littered with them) can attest to this 😉

  8. This looks really great, thanks and hope you keep it up! 🙂

    I’d love to see this integrate some of the work from basket notepads, and become a full on replacement for Microsoft OneNote integrated with KDE technologies… With the work on the ‘Active’ projects in the KDE community at the moment the thought of a unified application to manage synchronised todo’s/notes/events across my PC/Laptop/Tablet/Smartphone does indeed sound very exciting! Cheers

  9. Thanks for your work, it looks very interesting !

    As it was said in the comments, for this type of software it’s all about the workflow. For example I was thinking of the same idea as the “unified TODO” (brainstrom idea given in a comment) for my own workflow. So if your software could allow as much configuration as possible, it would be the perfect one as anybody could dapt it to his own workflow. I think each of us who looked at this type of software has thought that none of them was adapted to his own workflow 😉


    I’ve been looking for something like this for the past year and a half, ever since I left Windows (and OneNote).

    From what I’ve read here it’s looking GREAT and I can’t wait for it to be finished (and by that I mean be in some sort of ‘unstable’ repository I can easily get my hands on ;-). It looks like it’ll be even better than OneNote because through nepomuk I can have links in my notes to any KDE App, instead of just Outlook.

    Right now my life is a little hectic, but if my Uni work settles down within the next few months, I’ll be glad to help you in this project 🙂

  11. As well as being an important provider of essential amino acids, coconuts are also a rich source of minerals
    such as magnesium, phosphorus, potassium, manganese, vitamin B,
    vitamin C and calcium. It has the potential to positively affect the quality
    of your hair, skin and body. Commonly used cooking oil can easily go rancid or
    get hydrogenated especially at high temperatures, which can be harmful to our body.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: