Firefox add-on for your hackerspace door status

I wrote my first firefox add-on with the source on github, yeah :-)

If you are a member of a hackerspace and are sick of visiting your hackerspace wiki or blog page to see the space status, this add-on is made for you. The following spaces are supported until now:

  • ACKspace
  • Bitlair
  • Fabelier
  • Frack
  • HeatSync Labs
  • Hickerspace
  • Kwartzlab MakerSpace
  • Makers Local 256
  • Milwaukee Makerspace
  • MidsouthMakers
  • Noisebridge
  • Pumping Station: One
  • RaumZeitLabor
  • RevSpace
  • Shackspace
  • syn2cat
  • tetalab
  • TkkrLab
  • TOG
  • Void Warranties

It’s displaying the status of the chosen hackerspace with a green or a red dot in the add-on bar. There’s yet missing an icon to be displayed on the Extensions page (and later also in the menu) in firefox. If you know a good one, let me know or contribute and design one.

Install the add-on

Download, extract it and double-click on the xpi file. If firefox doesn’t launch, start it manually and open it from the firefox menu.

If you are installing the add-on please drop a comment here so that I’m able to notify you if an update is available because the current version has no update check included and the much improved version is already on its way. I guess you don’t want to use the initial version forever. Please scroll down and read Outlook to the new version.

Works with firefox 5-10, 11.0b4 and 12.0a2
Not compatible with versions prior 5. If you have firefox 3.6 or 4 you have no luck.

The add-on will be published on after some people tested it and gave me feedback.

Restart firefox

Click on the dot

Activate the add-on bar with the shortcut ctrl+/ or from your menu View > Toolbars > Add-on Bar and click on the dot in the bottom right corner.

Choose your hackerspace and the refresh interval

Report bugs

If the add-on seems to not work correctly, it’s not the add-on, it’s your hackerspace. A couple of spaces deliver incorrect json or don’t implement the specs correctly, amongst others these are:

  • Fabelier (specs error: member open is missing but is mandatory in rel0.11)
  • Kwartzlab MakerSpace (syntax error: (1) invalid comma, expecting } ___ (2) Expecting string, not })
  • syn2cat (specs error: member open is of type string instead of boolean) fixed

Please use OpenSpaceLint to find syntax errors to check your JSON against the specification. Check if you use the correct datatype. "open": "true" is not the same as "open": true. The first returns a string but the latter one a boolean.

If you did check intensively your json and if you are really sure that it’s correct, well then it might be the add-on. Please report bugs as a comment here or as an issue on github.

Outlook to the new version

The new version will load the space directory from the web so an unneeded add-on update is not required to support new spaces in the future that implement the space API. If you’ll be missing your space the new version allows you to add it within the add-on which will use OpenSpaceLint to validate your hackerspace’s space API JSON and finally to insert it in the directory if it hasn’t failed.


  1. You did great! This is at least my forth way to see / check if the space is open, so for nearly every time and place, I’ll have now something to check upon. ;)

    Thanks a lot slopjong for contributing so much. :)


  2. slopjong

    You’re welcome. After figuring out the api, writing simple add-ons isn’t that difficult. I always thought it would be sooo much complex. Though there can be still done improvements. I’d like to be able to observe more than one hackerspace’s status so a toolbar will be added sooner than later.

    Any other wishes are welcome, just post them here or on github.

  3. This is another great way to check the status of your hackerspace. I have the add-on working in Iceweasel 8.0. Thank you for this neat piece of software!

    If you release a new version, do not hesitate to inform me about it. It’s much appreciated.


  4. Short addition:

    Why do you hardcode spaces in your add-on? I understand that some spaces don’t implement the API correctly, but these special cases could be hardcoded until they fix it. I think that the majority of spaces do this in a way it’s specification compatible. So they should be accessed via Spaces that implement the SpaceAPI in the future would be integrated automatically.


    Edit from slopjong: The new directory is

  5. Another addition:

    You sould probably set the default refresh interval to something between 60 to 180 seconds. I see no need to get the status in real time, one or two minutes later should be no problem. This way the web servers of all participating spaces work a little more relaxed ;)

  6. slopjong

    I started to support Shackspace, RaumZeitLabor and syn2cat and wasn’t aware of the spaceapi. After I saw that other spaces used the same json format than syn2cat I figured the api out but I continued to code it that way.

    I already thought of using the space status repository but on the other side if that repository is down for whatever reason, the add-on is broken. But for this I already found a solution. I’ll write a proxy e.g. where I cache that repository and also unify the spaces which don’t implement the spaceapi.

    Concerning the refresh interval, you’re absolutely right. While I’m developing I need a quite low interval for debugging purpose. I just forgot to fix it when I put the add-on online. Thanks for pointing that out.

    The code is not that perfect in general but improvements are done over time. As soon as I figure out how to access objects from other included javascript files in a XUL element I’m also able to avoid the hard-coded listbox. I’m yet not too familiar with the XUL api that’s why the prefs window to choose the hackerspace but as soon as I am it will look more neat.

  7. gmc

    Another (better) way of dealing with ‘what if the space status directory is down’ issue is to cache it in the browser itself. Ie, provide a default dump of the spacestatus directory as it was when you release the extension, then refresh at intervals from within the extension. If the directory is down, you keep using the cached version. If not, you replace the cached version with the newly retrieved one.

    Setting up a proxy doesn’t solve anything, what if the proxy itself is down? :)

    As for the specification: i would suggest implementing ‘be concise in what you send, liberal in what you receive’. Ie, check if you got a boolean or the string ‘true’, and cast to whatever you use internally.

    For the rest: great work! And yes, writing extensions is ridicilously simple if you are used to javascript/dom stuff.

  8. slopjong

    What if the proxy is down? Well, then I shoot who killed it! :D

    Internally I’m already doing the type check but I advice the people to correctly implement the specification.

    Your cache solution is the best. Thanks, I need to figure out yet how to deal with the browser’s cache later, tomorrow or Tuesday. For the rest I’m not a good javascript developer and maybe I won’t ever become one. Any code improvements or advices are always welcome.

  9. slopjong

    OpenSpaceLint is now available, a tool to check a space status JSON against the specification. It’s still containing some specs errors but they will be fixed as soon as possible.

  10. slopjong

    I’ve refactored the code and did major code improvements. Before I put version 0.2 on my blog I also want to improve the visuals. Stay tuned.

  11. What about that default refresh rate of 2 secs? Don’t you think that could put a bit of a strain on the servers once several people use the add-on? Wouldn’t 30 or even 60 seconds be a more sensible default?

  12. slopjong

    The implementation of the new version has already finished and is right before being published. The new version will fetch the json every 90 seconds by default.

    First I’m improving and debugging OpenSpaceLint which takes me some few days.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>