iPad application

Edit: The application is now available in App Store


I started a project for a Zotero iPad application. I named the project 'ZotPad' for now.

The Xcode 4.2 project is available at https://github.com/mronkko/ZotPad

A screenshot of the app in action is available here

I am looking for developers to join the project. If you are interested, please join the discussion at zotero-dev list. The source code is available under an open source license and I plan to release this as a free app in the App Store when it is ready. However, if someone who joins the project would prefer it to be a paid app, that would be ok for me as well.

At this point I plan to focus ZotPad on reading and annotating PDFs. It will sync with Zotero server and download files from there and upload modified files, but other than that it is read only. Item viewing will be done either with built-in quicklook viewer or external software such as iAnnotate or GoodReader.

The software will be available for testing when it is ready. When this will be depends on the amount of people joining the project.
  • It seems that Google Groups does not accept my post for some reason, so here are some additional details on this project.

    I plan this to be a PDF reading and annotation tool, which will sync with the Zotero server. All libraries will be read only (no adding or editing of items, collections, etc) except for modifying already existing PDFs. I do not plan to support tags at all and saved searches are not planned for the 1.0 version. The source code is available under an open source license and I plan to release this as a free app in the App Store when it is ready. However, if someone who joins the project would prefer it to be a paid app, that would be ok for me as well. 

    The following features have been implemented:
    -The App comes with a very small built-in demo database. This can be replaced with a real Zotero database using iTunes file transfer.
    -Browsing library and collections tree (shown on the left in the image)
    -Showing items and thumbnails of PDFs for the selected collection

    What has not been implemented:
    -Sync with Zotero server
    -Search and Sort
    -Clicking an item to view the PDF 
    -Better formatting of items in the list (a CSL parser for Objective C would be great)

    Also the code needs to be optimized a lot further than what is currently is.
  • I'm not sure what issues you're having with Google Groups, but you should resolve those or wait for those to be resolved. zotero-dev is the place for this discussion for now.
  • Great job! I'm glad to see this happening, and I'd love to help out in any way I can, short of actually developing, since I don't have a Mac or iOS device to work on. And when I buy my next Mac, I'll start coding for this too.

    Hopefully some others can help out in the meantime, and good luck bringing out the first release. You may also want to keep an iPhone interface on the roadmap, since this would be quite useful for the many iPhone users as well.
  • I would not like to use Zotero with an iPhone, but if there is a need for this, it would not be difficult to make the ZotPad iPhone compatible.
  • Judging from the responses I've seen to Zandy, I'm pretty sure there are people who find it pretty useful, especially for smaller what-was-that-paper? moments. Less so for reading PDFs, obviously, but just having the references is something like Qnotero for your pocket.
  • Ah, that makes sense. iPhone version should not be too difficult to make after the iPad version is ready, so I will probably do that as well.
  • Very exciting. I do hope ZotPad will support offline work too. One of the prime use cases I imagine will be putting papers in a collection and reading and annotating stuff from that collection on long travels or other offline moments. The expectation would then be that the annotated PDFs could be synced back to the Zotero server.
  • Syncing back to the server is a little messy for now, since the API doesn't allow attachment writing. Mikko and I have discussed this, and we'll try to somehow tie into desktop Zotero installations for attachment uploading / updating in the meantime.
  • The current development version supports offline use for reading. There is still a couple of days worth of work left, but it is possible that we can submit ZotPad to app store before the end of the year.

    The first release will not support annotating because Zotero does not yet support uploading files from third-party applications. The features are roughly the same as in Zandy.

    The long term plan is to allow two different workflows for annotating
    1) "Send" documents from ZotPad to iAnnotate or any other software that is capable of receiving PDF files and then "sending" these back to ZotPad
    2) Annotating directly within ZotPad

    If ZotPad is in offline mode, the annotations will be stored and synced to the server the next time network connection is available. But all this depends on Zotero implementing file uploads from third party apps.
  • Just wanted to say that I'm very excited about zotpad. I checked ot the zotero-dev discussion and see that development is proceeding rapidly. Thar's great news. Thanks for working on this.
  • Just a short update. I will work on this some between christmas and new year, and hope to submit the app for review once Apple app store staff come back from their christmas break.

    The app now has most of the "difficult" parts implemented now, but needs a few optimizations here and there. What needs to be implemented still is downloading attachments files from the server, but this is straightforward.

    I have now another developer, who has joined (or at least planning to join) the project. He is one of my coworkers at Aalto University. We plan to release this as a paid app that is priced at the same leve as Zandy for Android, which is 3€/4$

    In the future we might release a premium version with built-in annotation capabilities using the commercial iAnnotate library (http://www.ajidev.com/iannotate/developers.html) Since we need to pay a license fee, what ever cost that will incur for us will be added to the price of the app for the premium version.

    If someone is interested in working with us, we are happy to share what ever revenue this might generate. Also, if you have an apple developer license, you can check out the code at any time at github and install it on your iPad.

    The first version most likely will not support iPhone so that we can get it out as soon as we are satisfied how it works on the iPad and can concentrate on the iPhone version after that.
  • FWIW, I think it's sensible to develop for iPad first. A Zotero app for smartphone is likely to have quite different use cases (who does annotation and PDF reading on a smartphone?).

    One of the most widely used PDF readers and annotators on iPad is Goodreader, which has excellent i/o support across iPad apps. Making ZotPad interface with that might obviate the need to include the commercial iAnnotate library and might be a way to quickly get wide adoption from existing Goodreader users.
  • How iOS works is that Applications can register as being able to receive documents of certain type sent from other applications.

    ZotPad will send PDF documents to any application that can receive PDF files. (It would be more difficult to try to restrict this to a particular application than include all.) So GoodReader will be supported.

    The iAnnotate library is a future idea, which I think that some users find useful because it reduces the number of steps needed when doing annotations.
  • Right. Getting the PDFs back from Goodreader might be more involved, judging from the way I se this happening for, e.g., PDFs sent from Safari to Goodreader (essentially it's a one-way street to Goodreader). Does iOS provide for the possibility of bidirectional sending somehow, so that annotations in Goodreader (or whatever other PDF app one uses) will end up back in ZotPad (and ultimately synced to the server?). If not, then I can see why including iAnnotate functionality within ZotPad is important.
  • The first version will be a one-way street because Zotero does not support file uploads from third party clients. Once this is added, I it will be a two-way system.

    How this will work is that ZotPad will register itself as a receiver for PDF files (and later maybe other files) and you can send files from GoodReader to ZotPad the same way that you send them from ZotPad to GoodReader. Then ZotPad will use the filename to detect which item the file belongs to, and will replace the existing file in cache and upload the new version to Zotero server.

    But this depends on when Zotero implements third party uploads, which should be soon. Also there are some plans to make ZotPad and Zandy to sync with Zotero on a local computer without using Zotero servers.
  • I have posted some description and screenshots of the applications here:


    (I was a bit constrained with time, so sorry for the typos.)

    The release of ZotPad now depends on the following things:
    -Fixing one small performance issue
    -Fixing a bug about device orientation
    -Finalizing cache preferences
    -Possibly waiting for a new version of Zotero server API (see here)
    -Setting up a support site

    And of course the Apple's app approval process.
  • edited January 2, 2012
    Just read the Zotero dev discussion and the ZotPad description. Exciting.

    In the dev thread it is pointed out that downloading the whole library or downloading on demand are not the only options. But no good example is given of a possible middle ground solution. Here is one. Call it the podcast model.

    Allow the user to designate one or more collections (possibly with subcollections) as the "ZotPad Reading" collection. Call this subscribing to collections. Automatically download everything contained in the subscriptions to the device. Don't have me download the whole library to my device if I don't need to.

    This would fit the use case of (offline) travelling very well. Items to read would be like podcasts to listen, auto-updating based on collection subscriptions. Indeed, taking the podcast metaphor further, it would be great if ZotPad would remember (1) my position in a file and (2) my reading history.

    In the dev thread Dan worries about the amount of API calls needed to replicate a whole library offline. But from the perspective of the user, too, there are good reasons to allow users to download only a selection. My library is over 20Gb and I think many libraries may be like that. I don't need to have all my 6000+ items on my iPad. If I travel for a few days I know roughly what I want to read. The podcast model (readcast? zotcast?) allows me to download selected collections to my device — ten to a couple hundred items maybe — and helps me to get my reading done. Users would love it.
  • More detailed configuration options for what is cached and what is not will probably be implemented in future versions. In the first version, the cache works with the following rules:

    -Nothing is cached if the user uses the mode "Online, without cache"
    -All items that are shown on the screen as a part of an item list are cached
    -All attachments that are shown in reader mode are cached
    -Preemptive cache will additionally cache items and attachments as described in the cache rules here http://sblsrv.org.aalto.fi/zotpad/

    -If cache becomes full, the oldest attachment that has never been viewed is deleted
    -If there are no attachments that have not been viewed, the item with the most time since last viewed are deleted
  • I am excited about ZotPad, and can't wait to hear updates. In the meantime, I am trying out the solutions described so far in this thread...
  • The new version of Zotero API that I referred to in an earlier post is now available. If everything goes smoothly with implementing that, I will submit the app to the appstore approval process at the end of the week.
  • Just a quick update: Changing the software to use the new API functionality was a bit more work than I thought, but it is now done. I will have time to look at the code next time toward the end of the week and hopefully submit it to app store review as well.
  • edited January 10, 2012
    @mronkko, thanks for the elaboration on the caching rules. This sounds a lot like how the Dropbox app works on iPad (with caching done based on which folders you browse and which files you look up). The disadvantages are the same: what happens exactly is not visible to the user, so it becomes impossible to have a single simple method to make sure that some folder is downloaded for sure.

    I often find myself wanting to make one folder and just one folder available offline; the Dropbox app, and your syncing rules, do not seem to allow for that. (Unless one predownloads the entire library which is huge in my case.) Not to press the point, but it does seem to me that a podcast-type implementation, i.e. a subscription to certain collections, would be a transparent, useful and very popular option.
  • I am not going to implement any other cache preferences at this point because the software is close to release, and this would cause a delay. There will be more detailed cache options in later releases based on user feedback. Something that you suggest will most likely be implemented at some point.
  • Sure! I understand that you don't want to delay release now. As they say, release early, release often.
  • Whow great job mronkko! If I may chip in my two cents here, I'm afraid my own needs are a bit more modest. I primarily use Zotero to keep my bibliography, and not for cataloging pdfs, and it would be great to be able to see my bibliography, edit entries and add new entries on my iPad. For instance, I include notes on the entries in the summary and it would be useful to access those notes wherever I am. As I understand the description of your app, this will not at all be possible right? I would only be able to see my library, not edit nor add, correct? Is this because it will be difficult to implement this technically, or is this just because you had a different focus with this app (and maybe we can expect it to come in the next app-update)?

    Anyway, again, great job, it looks delicious and I am sure many people will want to use this. Would love to hear your comments on my questions.
  • There are no technical reasons why editing and adding items and notes would not be possible, and this is planned functionality. However, this will be not included in the first version. The reason is that if I implement all possible features in the first version, it would take a very long time to release that.

    The initial focus is on PDF reading, because this is what I will be using ZotPad myself.
  • What are the plans for webdav support for the attachments in ZotPad? I managed to compile and install the current version of the source code and when I got no pdfs displayed I realized it's probably because all my attachments are stored on webdav. :)

    I searched the code and noticed a TODO relating to webdav. What's the plan? I might be interested in helping out but I am new to objective c and ios development so it might be slow work. :)
  • In the current version there are still some bugs in the attachment downloading code introduces when I changed the cache prioritization rules for attachment downloading.

    Since you have the version compiled and running, you can be of help. The main reason that I have not implemented support for webdav is that I do not have access to a webdav server. If you can do a couple of test runs for me with your setup and email the logs, that would be helpful. Please email me at zotpad@gmail.com, and I will explain the details.
  • I appreciate you working on this, I'm currently a MA student and am really glad to know someone is working on this as it will be very useful and helpful... thanks for all your work
  • Your app looks great. I have no idea about the programming involved so this might be a mute question but how difficult would it be to port ZotPad to the Playbook? Thanks,
This discussion has been closed.