0.9.13 - 22 Dec 2014


  • Added: Community Code of Conduct, taken from http://contributor-covenant.org/


  • Added: hs.menubar for creating and managing arbitrary menubar icons (and associated dropdown menus)
  • Added: hs.hints for switching window focus with transient application hotkeys, displayed in pretty onscreen icons
  • Changed: hs.window:toggleFullscreen() is now hs.window:toggleFullScreen() to be more consistent. Sorry for the API change!
  • Changed: hs.window now supports :moveToScreen() and :ensureIsInScreenBounds()
  • Changed: Added hs.application.watcher to allow callbacks for various application lifecycle events
  • Changed: hs.hotkey.modal can now accept nil parameters to allow a modal state to exist without a top-level hotkey, and be controlled entirely programatically

0.9.12 - 20 Nov 2014


This release of Hammerspoon will break your existing ~/.hammerspoon/init.lua file. All of the extensions are now using camelCase for their APIs, instead of the previous underscore separated names.

Please review the API documentation at http://www.hammerspoon.org/docs/ and update your init.lua. You will find that no APIs have changed their behaviour, and porting your configuration file is usually just a case of changing some_function_name() to someFunctionName().

This will be the first and only dramatic overhaul of the API before 1.0 is released. We are using the Semantic Versioning guidelines, so post-1.0 there will be no API-breaking changes without the major version number changing.

We thought long and hard about this change and felt that a few minutes of disruption to the small number of users at this stage, would be worth it to have cleaner APIs for all users in the future. We’re sorry that this causes some extra work for you, but we hope you too will prefer the new style!


  • Changed: Extensions can now be loaded from ~/.hammerspoon/ as well as the previous locations. All require() paths are now printed to the console at startup.


  • Changed: All extensions are now using camelCase for their APIs, which will break all existing user configs (sorry!)
  • Changed: hs.ipc no longer explodes if another instance of Hammerspoon is running. It will still fail to initialise, but it won’t bring down the whole app.
  • Changed: hs.milight now has two constants that specify the minimum and maximum brightness levels