beorg 3.33.0

I’m excited to announce a bigger than usual beorg update. Firstly, I’d like to thank everyone who gets in touch with suggestions for improvements to beorg. A number of the improvements in this latest release wouldn’t have happened without your emails. As a user of beorg myself, I’ve been enjoying the performance improvements 🚀 and new features during testing over the past couple of weeks. I’m looking forward to getting these into your hands so you too can feel the benefits!

beorg is now nearly 8 years old 🥳. The first version was released in August 2017. I developed beorg because I wanted to use Org mode in Emacs, and the lack of a task-oriented mobile app was a blocker. Since then, I’ve been pleased to see a number of other apps released that use the Org mode file format - and the great things about Org mode and plain text are that there’s nothing to stop you from using multiple apps on your iOS device, all with the same files. With the coming and going of online services, it is important to own your data 🏠. beorg, and other apps based on plain text, allow you to do just that. Rather than your data being locked away in cloud databases, you are in control of where it lives and can have a choice over which apps you want to use it with.

Thank you to everyone who supports beorg. You can do this in a number of ways:

  • ✍️ Mention beorg on social media or in your blog.
  • 🪙 Become a beorg Premium subscriber, purchase extensions or an in-app tip.
  • 📮 Send me bug reports and feature suggestions.

Continue reading to find out more about what’s new in beorg 3.33.0.

Performance improvements

If you use beorg with lots of files, switching between the agenda, tasks, and files tabs could be slow 🦥. In the latest release, I’ve done some work to speed this up. You should now find beorg much snappier 🐊. Part of the reason for the slowness was that beorg was constantly listing all of the files and retrieving some basic information, such as the last modified date, from the file system. On my iPhone 15 Pro, with about 1,000 files, this was taking nearly a second each time. This information is now cached, which has made a noticeable difference in using beorg.

Removing all your data

For people who travel frequently 🛩️, it is becoming an unfortunate fact that you may feel the need to wipe some data from apps on your devices. Some users have taken to deleting beorg from their device and then reinstalling it once they have passed through customs. beorg now comes with a Remove All Files and Reset Sync button at the bottom of the Settings tab. This will deauthorize your sync and remove all files (including version backups). Once used, you may need to kill beorg just to make sure nothing is still visible on the Agenda and Tasks tabs.

Dynamic Type

Dynamic Type is the system by which iOS can vary the font sizes used in apps based on an accessibility preference 👓. If you need or prefer larger font sizes, then you’ve probably been disappointed that beorg hasn’t supported Dynamic Type. With beorg 3.33.0, Dynamic Type is now (finally!) implemented 🚛. Alongside this support for variable font sizes, many of the icons in beorg have been updated to use Apple’s SF Symbols so that they too change in size when needed.

Controlling what you see on the Agenda and Tasks tabs

For more advanced users of beorg, I’m introducing some new ways to control what you see on the Agenda and Tasks tabs.

There are some new Scheme variables to configure whether reminders and calendar entries are visible. These are:

  • agenda-include-reminders
  • agenda-include-calendar
  • tasks-include-reminders
  • tasks-include-calendar

I’ve found that I want to see reminders and calendar entries on my agenda, but I do not want to see them on the Tasks tab. In my init.org file I’ve added:

(set! tasks-include-reminders #f)
(set! tasks-include-calendar #f)

You can also set these using the beorg customize interface.

Another request from users has been to limit which folders are considered when building the agenda and list of tasks. To make this as flexible as possible, there are two new Scheme methods:

  • agenda-file?
  • tasks-file?

I personally like to see dated tasks in my org-roam folder appear in the agenda. However, I don’t really care to see them on my tasks list. I’ve therefore added the following to my init.org:

(define (tasks-file? file)
  (not (string-prefix? file "org-roam/")))

This simple method just checks that a file path doesn’t begin with org-roam/. You can, of course, make this as complicated as you like 😎.

Images (and other files)

This new feature is still a work in progress 🛠️, and I hope to continue with this over the coming months. beorg now has limited support for displaying images that are referenced in your org files.

Here is an example of beorg displaying an image using a file: scheme

* Example of file: scheme

[[file:files/example.jpg]]

In the outliner, if you tap the link, beorg will attempt to download the file car.jpg from your configured sync service. It will look for this file relative to the folder you have configured in beorg. If the file is found, it will be downloaded and then displayed. This will work for any file that the iOS Quick Look framework supports (for example, images, PDFs, audio, and video files). The next time you tap the link, the file will be shown without needing to download it.

If you are looking at rendered notes in the item editor, then the images will be shown inline.

In addition to supporting the file: scheme beorg will also support attachments. Here is an example of what you’d see in the Org file:

* A test attachment
:PROPERTIES:
:ID: 480175a0-c19b-47aa-add0-751dfc46b8f5
:END:

[[attachment:car.jpg]]

When beorg sees an attachment, it will look for an ID property, starting with the current headline and working its way up the hierarchy. The following Scheme code will then be used to determine a path to that file:

(defvar org-attach-directory
  ".attach"
  "The folder relative to the root of your org files where attachments are stored")
(define (org-attach-id-to-path id)
  (if (> (string-length id) 2)
      (let ((folder-first (substring id 0 2))
            (folder-second (substring id 2 (string-length id))))
        (string-append org-attach-directory "/" folder-first "/" folder-second))
      #f))

This should mimic how Org mode attachments work, to allow you to view attachments you’ve added in Emacs.

All of this is very much a work-in-progress. There are the following limitations to note:

  • Currently only iCloud, Dropbox and WebDAV are supported for downloading files/attachments.
  • There is no way to upload a new file/attachment in beorg.
  • Once a file for a particular path has been downloaded any updates to the file on the remote won’t be noticed (this is something that will be resolved in the next beorg update.)
  • Only file scheme images will be displayed inline in the notes editor.
  • There are probably other issues I’ve not yet noticed.

Other improvements

Two other small improvements/fixes in beorg:

  • Editing dates for reminders was broken. This should now be fixed.
  • You can now customize beog to open web links in your system browser rather than an internal browser. See the Scheme variable beorg-use-external-browser (or the customize UI).

Thank you for reading, and I hope you enjoy this beorg update. As always, please get in touch if you see any bugs in beorg, or have a suggestion for future improvements.