An Emacs Beeminder client

Hi all,

I’ve been using Beeminder for more than a year now. Since the default web client kind of sucks (as most web clients for anything do), I used to use the Android client almost exclusively. Living in Emacs, I didn’t like it that I had to do some things regularly outside The Editor.

So I wrote a Beeminder client for Emacs.

It is currently a bit primitive, though (apart from submitting datapoints, of course) it has two features which I missed a lot in the official clients: sorting goals (currently there are two sorting criteria: losing date (the default) and the midnight setting) and filters (currently there are two and a half filters. First, you can “kill” individual goals (so that they are hidden until next refresh). The two real filters are: days to lose (so that you only see goals which are close to derailment by given number of days or less) and amount of work done today (so you can exclude goals for which anything was logged today, or goals for which at least x% of the daily rate was logged today).

OTOH, there is basically no error-checking (yet), no road dial (yet?), no displaying or changing previous datapoints (yet), no Org-mode integration (yet), etc., so for some things you have to use the official one. Still, most day-to-day operations are covered (at least for me), and I’m using it more than 50% percent of the time (let’s eat my own dog food!)

It is not public yet (but will be soon), and I’d love to get some preliminary feedback. So, here are my questions.

  1. Are there any Emacs & Beeminder users out there who would like to use this client? (You might want to switch to Emacs for superior text-editing experience, too, and then test my client.)

  2. Are there any sorting criteria people could find useful?

  3. Are there any filters people could find useful?

  4. Are there any other features people could find useful?

I can’t work on this project full-time, and I can’t promise anything, but I’ll definitely will consider your input.

Also, expect an official announcement, with a link to the code, within a few days.

Last but not least: I beemind my time on the web (including fora), so I might not respond within 3 days or so. But I will try to respond to all posts here eventually.



Excited to see the official announcement!

For those interested I also thought I’d mention this post about a simple extension for Emacs and org-mode that gives some Beeminder integration:

As a diehard emacs user, I would almost certainly use this. The more integration with orgmode the better! I’ve already tried Phil’s beeminder.el and it’s very promising although I think I still need to hack on it a bit more in order for it to be useful to me. I tried a while ago but got distracted with other stuff.

1 Like

Hi there,

I had a bit of a hiatus - sorry for that! - but I decided to announce the client today! I wrote a README and pushed the code to GitHub: . I also wrote a post on my blog: .

As I wrote, I now submit most of my datapoints using this client, to the point that even the Android one (which is much better than the web one) feels clumsy to me.

Currently, there is no Org-mode integration, but I’m going to add some soon.

Please try it out and send me bug reports/feature requests!

Good luck beeminding with Emacs!


Hi there,

Org-mode integration is now working (or so I hope!)!

You can mark a headline so that when you change its todo status to “DONE” (or equivalent), a datapoint of 1 (or any other fixed value) is sent to Beeminder (with optional confirmation, in the form of asking for the comment instead of using a default one).

You can also mark a headline so that each time you clock it out, a datapoint equal to the time clocked (by default in minutes, other units may be used) is sent to Beeminder (with optional confirmation as above).

Both these may be enabled for trees, so that marking as DONE or clocking out on any subitem of the given item has the same effect.

Also, I’m planning to do a screencast showing how cool beeminding from Emacs is. Personally, I got to the point that I avoid beeminding from either the website or the Android client, since they are sooo uncomfortable.

As for the code itself, the next step is displaying details about a goal (including a few recent datapoints), and the possibility of editing/deleting datapoints.

Stay tuned


ooh i would love to see a screencast!!


For my part, don’t think I’d echo ‘uncomfortable’, but I do use the bmndr command line tool an awful lot.

1 Like

Well, the website is not very user-friendly, the Android client is way better, but my Emacs client is still better than that. Not because it’s mine, but because it fits and leverages the Emacs infrastructure. For instance, one word: autocompletion. It works (sort-of) in the Android client, too, but feels slower than in Emacs. And the killer feature of my client: filtering. I have almost 30 goals, and usually don’t want to see them all at once.



and here’s yet another update on my client:–_a_follow-up. In short, the main new features are:
(1) all http requests are now asynchronous,
(2) displaying goal details, including a few recent datapoints, and editing datapoints,
(3) “everyday goals” list: these will be displayed even if I filter goals with a large buffer,
(4) bulk submissions of Org-mode clocking items (and clock submissions are now idempotent).

And yes, I remember about the screencast - I’ll try to make it after Easter.


Hey, how was your Easter? :wink: +1 for that screencast!

I started to use Emacs+org-mode again and don’t need a lot of imagination to see how this integration would be awesome. It’s almost inevitable to start thinking about when using org-mode. Just habit-tracking and the capture system alone are such a good fit for Beeminder, as are the clocking commands… Luckily I’ve avoided getting started on any of this for now!

ETA: Tried it out. Nice work! I had to beat the code into submission a bit to make it work on my machine. See my fork over on Github…

1 Like

Wow oops, I was so confused for so long, but it seems that M-x package-install beeminder gets a different beeminder.el package by Sodaware. Hopefully nobody else has made that mistake…