Release Notes

  • 0.9.55 - 17 Jul 2017

    Core

    • None

    Extensions

    • Fixed: hs.spotify play/pause states should now be reported correctly
    • Fixed: hs.http no longer assumes that HTTP responses can be encoded as UTF8 (e.g. if they are binary responses)
    • Fixed: hs.eventtap.event properties now agree with the documentation about the name of “other” mouse buttons
    • Added: hs.image:encodeAsURLString()
    • Added: hs.webview.toolbar:selectSearchField()
    • Added: Drag&drop support in hs.canvas
    • Added: hs.console can now fully theme the Hammerspoon Console
    • Added: hs.host.idleTime, hs.host.thermalState
    • Added: hs.pathwatcher callback now receives event information
    • Added: hs.spoons
    • Added: hs.open() for quickly opening files (URL support to come later)
    • Added: hs.plist
    • Changed: Some improvements to hs.webview
    • Changed: hs.image exporting functions can now control pixel size
    • Changed: hs.layout.apply() should make windows jump around less
    • Changed: hs.chooser now ignores the special meanings of Option-Enter and Ctrl-Enter, allowing them to be used for alternate selection operations
  • 0.9.54 - 26 Apr 2017

    Core

    • None

    Extensions

    • Fixed: Fixed a regression in hs.keycodes which prevented binding hotkeys to the § key on ISO keyboards
    • Added: hs.hotkey.bindSpec()
  • 0.9.53 - 24 Apr 2017

    Core

    • Addeed support for pure-Lua plugins, or Spoons, see http://www.hammerspoon.org/Spoons/
    • The bundled Lua is now 5.3.4
    • Exceptions generated inside Hammerspoon as part of Lua callbacks are no longer fatal and will print a traceback to the Console window
    • Crash report uploading behaviour can now be controlled via hs.uploadCrashData()
    • Hammerspoon now exposes a minimal AppleScript API for executing Lua code from AppleScript
    • The console window will now save/restore its window location

    Extensions

    • Fixed: Guarded against a potential crash in hs.application:getMenuStructure()
    • Fixed: hs.application.find() no longer fails if applications have no :name() value
    • Fixed: hs.checkForUpdates() can now optionally check for Hammerspoon updates without presenting any UI if an update is found
    • Fixed: Removed a small memory leak in hs.menubar when removing menu items
    • Fixed: hs.host.cpuUsage now properly samples CPU ticks
    • Fixed: hs.chooser will now scroll to values selected via hs.chooser:selectedRow()
    • Fixed: hs.timer objects can now work more successfully with sub-second precision
    • Fixed: hs.application:path() now correctly distinguishes between multiple installed copies of the same application
    • Changed: hs.keycodes.map now includes modifier keycodes, JIS keycodes, and will fallback to ANSI US keyboard values
    • Changed: hs.canvas elements with an alphanumeric id attribute can now be accessed directly from the canvas object, using that id.
    • Changed: hs.menubar callbacks registered with :setClickCallback() now receive a reference to the menubar item when called
    • Changed: hs.itunes.previous() now mirrors the behaviour of the equivalent keyboard key, rather than unconditionally skipping back a track
    • Changed: hs.layout items can now specify callback functions for unit/frame/full-frame values
    • Changed: hs.pasteboard:writeDataForUTI()/:writeArchiverDataForUTI()/writePListForUTI() can now be used to write data to the pasteboard for multiple UTIs
    • Changed: hs.color objects can now be created from HTML hex colour strings
    • Changed: hs.noises now uses its own processing queue, which should make Hammerspoon more responsive when this module is being used
    • Changed: hs.httpserver, hs.doc.hsdocs and hs.httpserver.hsminweb can now be configured to listen on a specific network interface
    • Changed: hs.keycode.map.kVK_ANSI_Quote now contains the correct value
    • Changed: hs.ipc.cliUninstall() will now unconditionally remove the CLI tools it finds on disk
    • Added: hs.sqlite3
    • Added: hs.audiodevice:inputMuted(), hs.audiodevice:outputMuted(), hs.audiodevice:setInputMuted(), hs.audiodevice:setOutputMuted()]
    • Added: hs.itunes, hs.spotify and hs.deezer now have .getDuration()
    • Added: hs.updateAvailable()
    • Added: hs.chooser lists can now be scrolled with Ctrl-P/N/V
    • Added: hs.vox (equivalent to hs.itunes/hs.spotify/hs.deezer for the Vox music player)
    • Added: hs.chooser:showCallback(), hs.chooser:select(), hs.chooser:cancel()
    • Added: hs.pasteboard.readAllData(), hs.pasteboard.writeAllData()
    • Added: hs.accessibilityStateCallback
    • Added: hs.webview:windowCallback()
    • Added: hs.images.systemImageNames now includes new system images from macOS 10.12 (when running on 10.12 or higher)
    • Added: hs.application.infoForBundleID() and hs.application.infoForBundlePath()
    • Added: hs.host.locale
    • Added: hs.textDroppedToDockIconCallback() and hs.fileDroppedToDockIconCallback() for receiving text/files via drag and drop onto the Hammerspoon dock icon (also available via the macOS Services menu)
    • Added: hs.eventtap.event:getFlags() values now support :contains() and :containExactly() to assist checking which flags are set
  • 0.9.52 - 29 Dec 2016

    Core

    • Non-interactive output lines in the Console Window now have timestamps

    Extensions

    • Fixed: Fixed an infinite loop regression in hs.chooser
    • Changed: hs.chooser now defaults to the light/dark theme setting of macOS
  • 0.9.51 - 25 Dec 2016

    Core

    • Objective C exceptions that happen inside Lua callbacks should no longer cause Hammerspoon to exit.
    • Fixed a potential crash in the About window (seriously)
    • The rebuild.sh script documented in CONTRIBUTING.md, for doing self-signed local builds of Hammerspoon, is now included in the scripts/ directory

    Extensions

    • Fixed: Fixed a potential crash in hs.application.getMenuStructure()
    • Fixed: Fixed a potential crash in hs.styledtext
    • Fixed: Fixed a potential crash in hs.keycodes
    • Fixed: Fixed a potential crash in hs.webview
    • Fixed: hs.drawing should be more resistant against crashing when given impossible sizeRect arguments
    • Fixed: hs.chooser should be more resistant against crashing when receiving unusual events
    • Fixed: hs.chooser should no longer crash when no rows are displayed, but a selection event occurs
    • Fixed: hs.chooser should no longer leak Lua function references
    • Fixed: hs.application.getMenuStructure() now correctly reports the enabled state of menu items
    • Fixed: Fixed a crash in hs.audiodevice watchers that only occurred with certain third party audio hardware
    • Changed: hs.eventtap functions now have a configurable delay between sending events
    • Changed: hs.chooser now looks better when a choice has no subText
    • Changed: hs.chooser:selectedRow() can now be use to manually select a row
    • Changed: hs.chooser now logs Lua callback exceptions to the Hammerspoon Console
    • Changed: hs.chooser right click callbacks now receive an argument containing the row that was clicked on
    • Changed: hs.chooser will now update its search results if you use the API to change the search query or choices)
    • Changed: hs.wifi has been modernised to newer macOS APIs and now allows watchers to know when many more wireless properties change (e.g. roaming between BSSIDs, link quality changes, etc.
    • Added: hs.spotlight
    • Added: hs.network.ping
    • Added: hs.deezer
    • Added: hs.watchable
    • Added: hs.canvas
    • Added: hs.caffeinate.sessionProperties()
    • Added: hs.alert style can now specify the corner radius
    • Added: hs.webview windows can now have shadows
    • Added: hs.chooser:selectedRowContents()
    • Added: hs.screen.accessibilitySettings()
  • 0.9.50 - 17 Nov 2016

    Core

    • None

    Extensions

    • Fixed: Several hs.timer regressions introduced in 0.9.47 have been fixed
  • 0.9.49 - 15 Nov 2016

    Core

    • None

    Extensions

    • Fixed: Various crashes have either been fixed or guarded against
    • Fixed: hs.screen now correctly cleans up after itself when reloading the config
    • Fixed: hs.pasteboard is now less likely to lose track of an item when the system pasteboard changes
    • Fixed: hs.eventtap.event:setProperty() now accepts 64bit values
    • Fixed: Dark and Light themes in hs.chooser now use more sensible colours/translucency
    • Fixed: hs.screen:gammaGet() now fetches gamma information from the correct display
    • Changed: hs.menubar icons now support colour
    • Changed: hs.eventtap.checkKeyboardModifiers() now also includes unicode modifier characters (e.g. ⌘)
    • Changed: hs.eventtap.keyStroke() and .keyStrokes() now wait 200ms between the keydown and keyup events, to improve reliability
    • Changed: hs.application:findMenuItem() and hs.application:selectMenuItem() can now match menu items via regular expressions
    • Changed: hs.menubar menus can now specify (simple) keyboard shortcuts)
    • Changed: hs.alert appearance is now fully configurable
    • Changed: hs.pasteboard now provides raw data access
    • Changed: hs.audiodevice:setMuted() now returns True on success
    • Changed: hs.timer objects will no longer repeat if the interval is 0 seconds, to prevent users DoSing themselves
    • Changed: hs.location.sunrise() and hs.location.sunset() can now accept a locationTable
    • Added: hs.keycodes.currentSourceID()
    • Added: hs.fs.pathToAbsolute()
    • Added: hs.caffeinate.declareUserActivity()
    • Added: hs.chooser:isVisible(), hs.chooser:rightClickCallback(), hs.chooser:selectedRow()
    • Added: hs.network.configuration:locations(), hs.network.configuration:setLocation()
    • Added: hs.sharing
    • Added: hs.location.geocoder
    • Added: hs.vox
  • 0.9.48 - 27 Sep 2016

    Core

    • None

    Extensions

    • Fixed: Small doc bugs in hs.printf and hs.notify.register
    • Fixed: Console window input field now auto-sizes correctly in macOS Sierra
    • Fixed: hs.uielement regressed in 0.9.47. It is now fixed.
    • Fixed: hs.hotkey.bind() regressed in 0.9.47. It is now fixed.
    • Added: hs.screen:desktopImageURL()
    • Added: hs.keycodes.currentMethod()
  • 0.9.47 - 29 Aug 2016

    Core

    • Changed: Lua has been upgraded to 5.3.3

    Extensions

    • Fixed: Various crashes have either been fixed or guarded against
    • Changed: hs.webview now has adjustable opacity and can present a toolbar
    • Changed: hs.timer has been rewritten to use a more modern API, which should make it more reliable
    • Changed: Various fixes/improvements to hs.hint vimperator mode
    • Changed: images can now be used as tiled patterns for hs.drawing.color
    • Changed: hs.alert has been rewritten to use hs.drawing and now has an option to leave the alert visible indefinitely
    • Changed: hs.hotkey callbacks can now be tables with __call metamethods (this will be extended to other callback sites in a future release)
    • Changed: hs.eventtap events now report NSEventTypePressure data, if available
    • Added: hs.distributednotifications
    • Added: hs.eventtap.event.newSystemKeyEvent()
    • Added: hs.httpserver and hs.http now support WebSockets
    • Added: hs.hsdocs for internal documentation browsing
    • Added: hs.image.imageFromURL()
    • Added: hs.mouse.trackingSpeed()
    • Added: hs.noises
    • Added: hs.hints.titleMaxSize and hs.hints.titleRegexSub
    • Added: hs.grid.getCell()
    • Added: hs.timer:fire()
    • Added: hs.network.interfaces(), hs.network.interfaceDetails(), hs.network.primaryInterfaces(), hs.network.addresses(), hs.network.interfaceName(),
  • 0.9.46 - 15 Apr 2016

    Core

    • Added: basic tab completion to the Console window input field
    • Fixed: some inconsistent behaviours with the Console window input field and multi-line strings
    • Fixed: potential crash relating to launch-at-login
    • Fixed: Lua environment is now gracefully shut down when quitting Hammerspoon from its menubar item
    • Fixed: The ‘Open Config’ menu item will now default to TextEdit if no default editor for Lua files, exists

    Extensions

    • Fixed: hs.image:saveToFile() should be more reliable now
    • Fixed: crash in hs.task
    • Fixed: hs.http handles modified responses correctly now
    • Fixed: hs.location sunrise/sunset calculations are more correct
    • Fixed: hs.javascript should handle parse errors more gracefully
    • Fixed: hs.grid should now move windows more reliably
    • Fixed: hs.audiodevice volume setting
    • Fixed: various bugs in hs.expose
    • Changed: hs.drawing and hs.webview objects can now smoothly fade in/out when they are shown/hidden
    • Changed: hs.sound methods now return the hs.sound object. hs.sound.setCallback renamed to hs.sound.callback
    • Changed: hs.menubar now supports hs.styledtext for menubar items and various other additions
    • Changed: hs.grid can now move windows without resizing them, by selecting a new top-left point and hitting Enter
    • Changed: hs.grid can now be navigated with cursor keys
    • Changed: hs.grid can now use a custom per-screen frame
    • Changed: hs command line tool now has a timeout argument
    • Changed: hs.alert.closeAll() now has an optional duration parameter
    • Changed: hs.fs functions now expand ‘~’ correctly
    • Changed: hs.notify notifications can now include images
    • Changed: hs.redshift colour ramp can now be customised
    • Changed: hs.application:getMenuItems() now includes keyboard shortcut information
    • Added: hs.socket (for tcp/udp/unix sockets, with TLS support)
    • Added: hs.window.hilight
    • Added: hs.window.switcher
    • Added: hs.network.configuration
    • Added: hs.network.host
    • Added: hs.network.reachability
    • Added: hs.osascript
    • Added: hs.image:size(), hs.image:setSize()
    • Added: various hs.pasteboard functions for interacting with different content types on the clipboard
    • Added: more system images to hs.image, hs.image.iconForFile(), hs.image.iconForFileType(), hs.image.imageFromMediaFile()
    • Added: hs.file.fileUTI(),
    • Added: hs.tabs tabs are now clickable
    • Added: hs.audiodevice:inputVolume(), hs.audiodevice:outputVolume(), hs.audiodevice:setInputVolume(), hs.audiodevice:setOutputVolume()
    • Added: hs.wifi.associate()
    • Added: hs.window.filter.defaultCurrentSpace(), hs.window.filter.focusNorth/South/East/West, hs.window.filter.windowsChanged.
    • Added: hs.screen:localToAbsolute(), hs.screen:absoluteToLocal()
    • Added: hs.window:centerOnScreen()
    • Added: hs.application.pathForBundleID(), hs.application:path()
  • 0.9.45 - 21 Jan 2016

    Core

    • None

    Extensions

    • Fixed: crash in hs.pasteboard.setImageContents() if it is passed a non-image object
    • Fixed: crash in hs.chooser if it tries to select an impossible row number
    • Fixed: crash in hs.audiodevice.watcher when a watcher object has been deallocated with system events still queued
    • Fixed: crash in hs.screen on display change events (i.e. adding/removing monitors)
    • Fixed: issue with hs.chooser not becoming visible when its :show() method is called, due to Hammerspoon not being the active application
    • Fixed: crash in hs.hotkey related to double-free of carbon hotkeys
    • Fixed: hs.application:name() should work again (although you should ideally use :title() instead)
  • 0.9.44 - 15 Jan 2016

    Core

    • The bundled version of Lua is now 5.3.2
    • The Hammerspoon community Code of Conduct has been updated to Contributors Covenant 1.3.0
    • Added: hs.printf()

    Extensions

    • Fixed: hs.menubar no longer causes WindowServer to log an error when menu items are removed
    • Fixed: hs.drawing should no longer crash on invalid UTF-8 inputs
    • Fixed: various minor issues in hs.grid
    • Fixed: hs.window.filter is now more reliable when “unusual” helper applications are running
    • Fixed: hs.host no longer crashes when iterating volumes while a volume is being removed from the system
    • Fixed: hs.urlevent now handles HTML files being opened by the system, and now works correctly if an http(s) URL, or HTML file, is opened while Hammerspoon is not running
    • Changed: hs.eventtap.event events are now more efficient and reliable
    • Changed: hs.webview now hands unknown URL schemes to the OS
    • Changed: hs.wifi can now perform background scans and return more information about WiFi adapters
    • Added: hs.redshift
    • Added: hs.speech and hs.speech.listener for Text-To-Speech and Speech Recognition, respectively
    • Added: hs.fs.volume
    • Added: hs.chooser
    • Added: hs.task now supports long-running tasks, with callbacks for capturing stdout/stderr
    • Added: hs.task now supports writing data to the stdin of tasks
    • Added: hs.task:workingDirectory(), hs.task:setCallback()
    • Added: hs.console for interacting with the Hammerspoon Console window
    • Added: hs.drawing.arc() for drawing partial circles
    • Added: hs.window.filter.windowAllowed, hs.window.filter.windowRejected, hs.window.filter.hasWindow and hs.window.filter.hasNoWindows events
    • Added: hs.timer.doAt(), hs.timer.delayed() and hs.timer.localTime()
    • Added: hs.setLogLevel()
    • Added: hs.logger now keeps a small history buffer
    • Added: .getVolume(), .setVolume(), .volumeUp(), .volumeDown(), .getPosition(), .setPosition(), .ff() and .rw() to hs.itunes and hs.spotify
    • Added: hs.caffeinate.watcher now supports events for screensaver activity and Fast User Switching activity
    • Removed: hs.crash.isMainThread() as we now perform this check automatically in almost all internal functions
  • 0.9.43 - 17 Nov 2015

    Core

    • Improved the icon for non-retina screens
    • LuaSkin API documentation is now published at http://www.hammerspoon.org/docs/LuaSkin/
    • Force OS X to not try and place Hammerspoon in AppNap
    • Updated Crashlytics.framework to 3.4.0

    Extensions

    • Fixed: hs.expose is now correctly included in the application
    • Fixed: hs.screen.find() by screen ID now works correctly
    • Fixed: hs.drawing:setImageFromPath() and hs.drawing:setImageFromASCII() now work correctly
    • Changed: The desktop is now excluded from hs.window.allWindows()
    • Changed: The play() functions in hs.spotify and hs.itunes no longer toggle between play and pause
    • Changed: hs.layout now defaults to using the main screen if it encounters a problem finding a screen
    • Changed: hs.application.nameForBundleID() now returns the full application name, not the name of its executable
    • Added: hs.window.desktop()
    • Added: hs.audiodevice can now inspect device datasources and watch for configuration changes and device addition/removal
    • Added: hs.audiodevice.watcher for observing changes on specific audio devices (e.g. headphone insertion/removal)
    • Added: hs.audiodevice.findDeviceByName(), hs.audiodevice.findOutputDeviceByUID(), hs.audiodevice.findInputDeviceByUID(), hs.audiodevice:jackConnected()
    • Added: hs.spotify.playpause(), hs.spotify.getPlayerState(), hs.spotify.isRunning(), hs.spotify.isPlaying()
    • Added: hs.itunes.playpause(), hs.itunes.getPlayerState(), hs.itunes.isRunning(), hs.itunes.isPlaying()
    • Added: hs.application:isRunning()
    • Added: hs.screen:getBrightness(), hs.screen:setBrightness() (separate from hs.brightness because they are able to work on Apple external displays)
    • Added: hs.menubar:frame()
    • Added: hs.styledtext (highly configurable text styling for hs.drawing)
    • Added: hs.javascript (analogous to hs.applescript)
    • Added: hs.pasteboard.getImageContents(), hs.pasteboard.setImageContents()
    • Added: hs.task (asynchronous execution of external binaries)
    • Added: hs.host.volumeInformation()
    • Added: hs.keycodes.layouts(), hs.keycodes.currentLayout(), hs.keycodes.setLayout()
    • Added: hs.drawing:frame()
  • 0.9.42 - 08 Oct 2015

    Core

    • Tweaked the icon to have richer colours and better alignment
    • Intrepid users can now use defaults(1) to change the directory Hammerspoon will load its config file from

    Extensions

    • Fixed: hs.drawing:setFillGradient() now works again
    • Fixed: hs.http should be more robust against crashing on bad function arguments
    • Fixed: hs.drawing should be more robust against crashing when unknown fonts are requested
    • Changed: hs.hints can now optionally include non-standard windows in its hints display
    • Changed: hs.application.open() can now optionally block Hammerspoon until a window appears for the application
    • Changed: hs.expose improvements
    • Added: hs.logger.getLogLevel()
    • Added: hs.window.setFrameCorrectness(), hs.window.setFrameWithWorkarounds()
    • Added: hs.drawing.color[] now contains a few more pre-defined colours. Please send in Pull Requests adding lots more!
  • 0.9.41 - 30 Sep 2015

    Core

    • None

    Extensions

    • Fixed: Fix a garbage collection bug in hs.milight
    • Fixed: hs.drawing should now be usable on 10.8
    • Changed: hs.hotkey events can now optionally show an message on screen (to make it easier to see what you did)
    • Changed: hs.hotkey now defines and enforces behaviour when multiple hotkeys with the same modifiers/key are configured
    • Changed: hs.hotkey keycodes no longer need to be prefixed by #
    • Changed: hs.host no longer pre-caches host address data. This makes the call slower, but means the data is never stale
    • Changed: hs.layout can now accept hs.application objects as well as application names
    • Changed: hs.grid improvements
    • Changed: hs.window.filter improvements
    • Changed: hs.drawing objects now try not to raise other Hammerspoon Windows when they are clicked
    • Added: hs.hotkey.showHotkeys(), hs.hotkey.getHotkeys(), hs.hotkey.alertDuration
    • Added: hs.window:setFrameInScreenBounds(), hs.window:raise(), hs.window:sendToBack()
    • Added: hs.screen:toUnitRect()
    • Added: hs.window.tiling (currently deemed experimental)
    • Added: hs.window.layout (currently deemed experimental)
    • Added: hs.webview
  • 0.9.40 - 09 Sep 2015

    Core

    • None

    Extensions

    • Fixed: hs.screen object methods were broken in 0.9.39, and are now fixed
    • Fixed: hs.alert now correctly handles multiple monitors
    • Fixed: hs.window.ensureIsInScreenBounds() now interacts properly with window animations
    • Fixed: hs.milight was broken in 0.9.39, and is now fixed
    • Fixed: hs.httpserver now works correctly with SSL, on OS X 10.11
    • Changed: hs.window.allWindows() should now be significantly faster
    • Changed: hs.layout.apply() now matches window titles as Lua patterns
    • Added: hs.timer:setNextTrigger()
    • Added: hs.window.find() and hs.application.find(), which effectively deprecate hs.appfinder
    • Added: hs.window.get(), hs.window.move()
    • Added: hs.application.open(), hs.application.get(), hs.application:getWindow(), hs.application:findWindow()
    • Added: hs.urlevent can now register Hammerspoon as the default handler for http/https URLs, and adds API for managing that
    • Added: hs.drawing:setLevel(), hs.drawing.windowLevels
    • Added: hs.geometry:floor(), hs.geometry.string, hs.geometry.table and various other improvements to hs.geometry
    • Added: hs.window.filter.copy()
  • 0.9.39 - 01 Sep 2015

    Core

    • The build system for extensions has changed from our custom Makefile/script setup, to Xcode. This should not produce any noticeable changes for users, but if it does, please file issues at GitHub!
    • Almost all extensions are now making extensive use of our LuaSkin framework for registering their functions with Lua, and calling Lua callbacks. This should also not produce any noticeable changes for users, but if it does, please file issues at GitHub!
    • Many of the userdata objects created by extensions, now have __tostring methods, which makes inspecting them in the Hammerspoon Console, easier.

    Extensions

    • Fixed: hs.base64.encode() no longer truncates its output
    • Fixed: hs.ipc no longer leaks CFMessagePortRefs
    • Fixed: hs.spaces.watcher no longer leaks window lists
    • Fixed: hs.menubar crash with nil menu item names
    • Fixed: Console window output should now be more UTF8-safe
    • Changed: hs.windowfilter has seen numerous improvements and has been renamed to hs.window.filter
    • Changed: Various hs.fnutils iterators have slightly changed their behaviours
    • Changed: hs.grid will now use hs.window.frontmostWindow() instead of hs.window.focusedWindow(), which should be more intuitive for users
    • Changed: hs.timer timers will now stop firing if the Lua callback generates an error (although this behaviour can be overridden)
    • Changed: hs.notify has been partially rewritten and should be more reliable
    • Changed: Object methods in hs.caffeinate and hs.eventtap.event now return their object (i.e. to enable method chaining)
    • Changed: hs.geometry is now significantly more powerful
    • Changed: hs.grid.show() can now be used to iterate through multiple windows
    • Added: hs.screen.primaryScreen(), hs.screen.screenPositions(), hs.screen:position()
    • Added: hs.drawing.setTextStyle(), hs.drawing.getTextDrawingSize()
    • Added: hs.timer:nextTrigger()
    • Added: hs.audiodevice can now operate on input devices as well as output devices.
    • Added: hs.expose
    • Added: hs.screen.find() and hs.screen:fromUnitRect()
  • 0.9.38 - 05 Aug 2015

    Core

    • This release is happening quickly after 0.9.37 to correct an issue with Crashlytics symbols, apologies for the churn!

    Extensions

    • Fixed: potential crash in hs.drawing.setBehaviour()
    • Changed: hs.mouse.get/set (deprecated) now warn when they are used.
    • Added: hs.host.interfaceStyle(), hs.host.uuid(), hs.host.globallyUniqueString()
    • Added: hs.fs.temporaryDirectory()
    • Added: various helper functions in hs.timer
  • 0.9.37 - 04 Aug 2015

    Core

    • The About window now shows acknowledgements for third party libraries, including their licenses
    • API documentation formatting is now much tidier
    • Hammerspoon preferences can now (mostly) be interacted with from Lua

    Extensions

    • Fixed: Various hs.windowfilter bugs have been fixed
    • Fixed: hs.menu submenus can how have items enabled or disabled
    • Changed: hs.image/hs.application/hs.window objects can now be print()ed in the Console, to get more information about them
    • Changed: hs.grid overlay hints now work up to 10x10 (previously 5x5)
    • Changed: hs.windowfilter:notify() now has an optional parameter to cause callbacks to be called immediately
    • Changed: hs.image objects can now be directly compared for equality
    • Changed: hs.drawing objects can now respond to mouseDown events and middle/right mouse button events
    • Changed: hs.image.imageFromASCII() now has an optional parameter to define metadata about the drawing styles to be used
    • Added: hs.menubar:title() and hs.menubar:icon()
    • Added: hs.httpserver
    • Added: hs.screen.findByID()
    • Added: hs.logger.defaultLogLevel is now explicitly defined and configurable
  • 0.9.36 - 30 Jul 2015

    Core

    • None

    Extensions

    • Fixed: hs.window:snapshot() works more reliably for hidden/minimized windows
    • Changed: Various improvements to hs.doc and help()
    • Changed: hs.utf8 is mostly backed onto the UTF8 library in Lua 5.3
    • Added: hs.windowfilter (NOTE: This is considered experimental at this stage, please test it!)
    • Added: hs.appfinder.windowFromWindowTitlePattern()
    • Added: hs.grid.toggleShow()
    • Added: hs.battery.psuSerial()
    • Added: hs.pasteboard.contentTypes() and hs.pasteboard.pasteboardTypes()
    • Added: hs.host.operatingSystemVersion() and hs.host.operatingSystemVersionString()
    • Added: hs.utf8.registeredLabels()
    • Added: hs.menubar menus can now be presented as popup menus anywhere on the screen
    • Added: hs.eventtap.scrollWheel() and hs.eventtap.event.newScrollWheelEvent()
    • Added: hs.window.snapshotForID()
  • 0.9.35 - 20 Jul 2015

    This is a brown-bag release because of a regression in creating ASCII images that snuck into 0.9.34. Apologies!

    Core

    • None

    Extensions

    • Fixed: ASCII image creation regression in 0.9.34
    • Added: hs.grid.hide()
  • 0.9.34 - 20 Jul 2015

    Core

    • API documentation now has a nice CSS theme (thanks @jasonm23)

    Extensions

    • Changed: hs.screen:toEast()/toWest()/toNorth()/toSouth() are now stricter about which screen they should choose (with an optional parameter to be non-strict)
    • Changed: hs.alert windows now render at the highest possible window level (i.e. on top of all other windows)
    • Changed: hs.spaces.watcher:start()/stop() are now chainable
    • Changed: More hs.window methods are now chainable
    • Changed: hs.eventtap.checkKeyboardModifiers() now also returns the state of capslock, and optionally can return the raw modifier status
    • Changed: hs.grid is now much more capable and can operate on per-screen grids
    • Fixed: hs.pasteboard.setContents() now works correctly
    • Fixed: an hs.uielement crash
    • Fixed: an hs.hints crash on applications with no proper bundle
    • Fixed: an hs.image crash
    • Fixed: hs.urlevent callback errors are now propagated correctly
    • Added: hs.timer.secondsSinceEpoch() for getting high resolution time
    • Added: hs.host.cpuUsage[“overall”]
    • Added: hs.screen.findByName()
    • Added: hs.eventtap now handles more events (mainly simply gestures)
    • Added: hs.image for creating image objects for other modules (hs.drawing, hs.menubar)
    • Added: hs.hash for performing SHA1/256/512 and MD5 hashes
    • Added: hs.screen:snapshot() for getting an hs.image object of the screen
    • Added: hs.grid.show() for quickly resizing windows with a visual overlay
    • Added: hs.drawing can now configure behaviours on its objects, affecting their behaviour with Spaces/MissionControl/Expose
  • 0.9.33 - 01 Jul 2015

    This is primarily a brown-bag release to fix a crashing bug that 0.9.32 introduced into hs.hints. Apologies for the regression.

    Core

    • None

    Extensions

    • Fixed: hs.host crash in garbage collection
    • Added: HTML entity decoding helpers to hs.http
    • Added: vmStat and cpuUsage to hs.host
    • Added: Information about system settings for keyboard repeat and mouse doubleclick
  • 0.9.32 - 30 Jun 2015

    WARNING WARNING WARNING

    This release of Hammerspoon may break your existing config.

    In particular, please pay attention to the following items:

    • Lua has been updated to 5.3.1, so some core Lua library functions may behave slightly differently, or no longer exist. See the Lua website for the specific changes
    • Many hs.window API methods have changed their return type. They no longer report success/failure, but instead return the window object (allowing the calls to be chained)
    • hs.utf8_53 has been renamed to hs.utf8 and its API changed now that we no longer need to provide backports of Lua 5.3.x UTF8 functions

    If you run into any problems, please reach out to us on GitHub or IRC!

    Core

    • Lua has been updated to 5.3.1
    • We now detect the use of older Mjolnir modules, and display a message suggesting the user update their config, iff they have had a crash
    • The text input field in the Console window will now grow/shrink vertically (use Option-Enter to add a line without submitting the Lua code, and Option-Arrows to navigate)
    • Lua header files are now included in the Hammerspoon.app bundle, if you need them to build extensions

    Extensions

    • Fixed: Fixed a crash bug in hs.application
    • Fixed: Fixed a crash bug in hs.http
    • Fixed: hs.eventtap is now more robust when Accessibility access is denied
    • Fixed: hs.ipc is now more robust on disk volumes with spaces in their names
    • Fixed: hs.hints objects are now correctly destroyed if init.lua is reloaded while the hints are displayed
    • Fixed: Various assertion bugs
    • Changed: Many methods in hs.window have changed their return type. They now return the window object being operated on, allowing the calls to be chained
    • Changed: hs.window animations now happen asynchronously
    • Changed: hs.utf8_53 has been renamed to hs.utf8. It was providing Lua 5.3 unicode functionality backports, and now houses generally useful unicode functions
    • Changed: hs.drawing objects can now be configured to be clickable and have a click callback function
    • Changed: hs.drawing.bringToFront() can now optionally bring drawing objects in front of the dock/menubar
    • Changed: hs.menubar objects can now have their title/icon removed
    • Changed: hs.fs.attributes() now includes file creation date (“birthtime”)
    • Added: hs.screen:shotAsPNG() and hs.screen:shotAsJPG() for taking screenshots
    • Added: hs.drawing:setFrame(), hs.drawing:setTopLeft(), hs.drawing:setSize() for moving/resizing hs.drawing objects
    • Added: hs.drawing.fontNames() and hs.drawing.fontNamesWithTraits() for inspecting system fonts
    • Added: hs.drawing.appImage() for easily rendering application icons
    • Added: hs.spaces.watcher for detecting space changes
    • Added: hs.eventtap.checkKeyboardModifiers() and hs.eventtap.checkMouseButtons() for inspecting the current state of user input
    • Added: hs.execute() for running shell commands
    • Added: hs.fnutils.every(), hs.fnutils.some(), hs.fnutils.sortByKeys(), hs.fnutils.sortByKeyValues() and hs.fsutils.split()
    • Added: hs.processInfo() for inspecting the current Hammerspoon instance
    • Added: hs.logger for easy logging to the Console window
  • 0.9.31 - 24 May 2015

    Core

    • None

    Extensions

    • Changed: hs.event.keyStroke() converts the character to lower-case. If you need upper-case, pass “shift” in the modifiers table
    • Added: hs.application.launchOrFocusByBundleID() to launch apps by their unique bundle identifier
    • Added: hs.brightness.ambient() to read lux values from the ambient light sensor in MacBooks
    • Added: hs.drawing.image() and hs.menubar:setIcon() now accept a special form of ASCII diagrams, which will be converted into an image
  • 0.9.30 - 13 May 2015

    Core

    • Crashlytics has been updated to the new Fabric framework, which Crashlytics is now part of. This should not affect users in any way
    • Fix various deficient extension credits, for extensions inherited from Hydra/Mjolnir

    Extensions

    • Fixed: hs.eventtap.event.keyStrokes() is now more efficient
    • Fixed: hs.drawing.newText() no longer crashes if its optional parameters are not passed
    • Fixed: Various extensions are now more careful with string parameters, which could previously cause crashes
    • Fixed: hs.grid no longer emits errors for unusual windows that have no value for :screen()
    • Fixed: hs.drawing methods can no longer cause crashes by being called against the wrong type of drawing object
    • Fixed: hs.menubar dynamic menus no longer cause Hammerspoon to crash if the menu generator callback returns the wrong datatype
    • Fixed: hs.uielement is now more robust in the face of errors when creating an object
    • Fixed: hs.eventtap.event no longer leaks one CGEventSourceRef per event
    • Fixed: hs.drawing no longer renders objects in the wrong place on non-primary displays
    • Changed: hs.event.keyStroke() no longer supports sending multiple keystrokes (see hs.event.keyStrokes() for that)
    • Changed: hs.hints.windowHints() now supports a callback function
    • Added: hs.http for making simple and complex HTTP requests
    • Added: hs.usb.watcher for reacting to USB device insertions/removals
    • Added: hs.drawing:setTextFont() for changing the font of a drawing object
    • Added: hs.host for inspecting network address/name information
  • 0.9.29 - 15 Apr 2015

    Core

    • None

    Extensions

    • Fixed: hs.hints now works with more unusual windows, such as Steam
    • Fixed: hs.menubar menu entry disabling now works as documented
    • Fixed: hs.screen gamma related functions now have the correct names in API docs
    • Fixed: hs.eventtap.event.newMouseEvent()’s 4th parameter is now optional, as documented
    • Changed: hs.hints.windowHints() now accepts an optional threshold for showing window titles, to help avoid cluttering the screen
    • Changed: hs.grid resizing functions now work in more cases, e.g. resizing even if a window is at the screen edge already, but has space to grow in the other direction
    • Changed: hs.hotkey.modal hotkeys can now supply a callback for repeat events
    • Added: hs.caffeinate.watcher for reacting to system power events (display sleep/wake, system sleep/wake)
  • 0.9.28 - 02 Apr 2015

    Core

    • Fixed: Lua exceptions raised by code in the Hammerspoon Console should no longer cause the whole app to abort()

    Extensions

    • Fixed: Prospective fixes for crash bugs in hs.application.watcher, hs.eventtap.event and hs.application
    • Fixed: hs.drawing objects are now correctly garbage collected across configuration reloads
    • Changed: hs.itunes and hs.spotify return nil on errors in their getFoo() functions, instead of a table of Applescript error information
    • Added: hs.screen.setShadows()
    • Added: hs.screen.getGamma(), hs.screen.setGamma() and hs.screen.restoreGamma() for inspecting/manipulating the white and black points of monitor gamma curves
    • Removed: hs.screen.setTint(), which was impossibly unfriendly to use, almost entirely undocumented, and is superceded by the preceeding fooGamma() function/methods
  • 0.9.27 - 21 Mar 2015

    Note

    • The hs.spotify extension is reported to not be working with the latest Spotify client, due to changes in their AppleScript support. This will be addressed in a future Hammerspoon release (possibly by removing hs.spotify, if it is no longer workable)

    Core

    • Changed: Lua callbacks from C/ObjC extensions should now be unable to corrupt the Lua function registry if they are overfreed (which is a known bug in hs.notify)

    Extensions

    • Changed: hs.itunes and hs.spotify no longer display an hs.alert for each operation.
    • Changed: hs.window.windowsTo{East,West,North,South} now attempt to take window z-order into account when ordering windows by proximity
    • Added: hs.urlevent for reacting to hammerspoon:// URLs being opened by other apps (i.e. this is another way to do IPC with Hammerspoon)
  • 0.9.26 - 14 Mar 2015

    Note

    • There are two API changes in this release, both in hs.eventtap. See the Extensions section below for more information

    Core

    • Added: Preferences window now includes an option to disable sending crash reports, and a link to our privacy policy for crash reports. We would humbly request that you not disable the crash reports, as they are super helpful to us in improving Hammerspoon.
    • Added: Crash reports now include the location of C libraries loaded by Hammerspoon (we are trying to track down some crashes that make no sense and may be coming from stale on-disk libraries)

    Extensions

    • Fixed: hs.notify should no longer cause crashes
    • Changed: hs.eventtap.newKeyEvent() modifier table has changed. Values are now inspected, rather than keys.
    • Changed: hs.eventtap.keyStrokes() has been replaced with a different implementation that no longer accepts a modifiers table. The old implementation (which was always more suited to sending single key strokes) is still available, as hs.eventtap.keyStroke()
    • Changed: hs.pasteboard functions can now work with named pasteboards (useful for integrating with other automation tools)
    • Added: hs.drawing objects can now be filled with linear gradients
    • Added: hs.drawing.rectangle() objects can now be rounded rects
    • Added: hs.drawing.image() for rendering simple pictures on-screen (including animated GIFs)
    • Added: hs.usb for enumerating currently attached USB devices (in a future release, this will also be able to watch device insertions/removals)
  • 0.9.25 - 07 Mar 2015

    Core

    Extensions

    • Fixed: hs.eventtap.event.newKeyEvent() now actually works!
    • Added: hs.screen:rotate()
    • Added: hs.timer.usleep() for times when you are feeling crazy and want to block all of Hammerspoon for a few microseconds
    • Added: hs.hotkey now offers an optional repeat callback for when hotkeys are being held down
    • Changed: hs.hints.windowHints() now has an optional parameter to accept a table of windows to limit hints to (e.g. windows from the current application)
    • Changed: hs.eventtap.event mouse events now explicitly mask off keyboard modifiers, or can optionally specify particular modifiers
    • Changed: hs.drawing methods now return the object they are operating on, so you can chain the calls
    • Changed: hs.hotkey.new() now accepts raw keycodes
  • 0.9.24 - 28 Feb 2015

    Core

    Extensions

    • Fixed: hs.drawing stroke/fill API calls should now perform more like they claim to
    • Added: hs.drawing now supports rectangles
    • Added: hs.crash.dumpCLIBS() and hs.crash.crashLog() to allow Lua code to leave logging breadcrumbs in Crashalytics reports
    • Added: hs.window:zoomButtonRect() to make it possible to easily find an area of titlebar to synthesise mouse events onto
  • 0.9.23 - 25 Feb 2015

    Core

    Extensions

    • Fixed: hs.layout now selects a default screen more carefully
    • Changed: hs.menubar callbacks can now inspect which keyboard modifiers are being held, so they can take different actions
    • Changed: hs.layout.apply() can now accept a function to decide which screen to place a window on
    • Added: hs.messages (for sending iMessage/SMS via the Messages.app)
    • Added: hs.drawing (for drawing very simple things on screen - circles, lines, text)
    • Added: hs.screen:currentMode(), hs.screen:availableModes(), hs.screen:setMode() (for inspecting/configuring monitor resolutions)
  • 0.9.22 - 17 Feb 2015

    Core

    Extensions

    • Fixed: Prevent a crash in hs.hotkey
    • Fixed: hs.hints will no longer flow window hint icons off the bottom of the screen
    • Fixed: Many extensions now have correctly formatted documentation. This is still a work in progress.
    • Changed: hs.uielemet now uses a more relaxed method of determining if an object is a window. This should help with unusual apps like Emacs.
    • Added: Added getCurrentArtist(), getCurrentAlbum() and getCurrentTrack() to hs.itunes and hs.spotify
    • Added: hs.window.focusWindowNorth/South/East/West() can now limit their search to windows from the same application
  • 0.9.21 - 04 Feb 2015

    Core

    Extensions

    • Fixed: hs.mouse.setAbsolutePosition() is now defined correctly
  • 0.9.20 - 02 Feb 2015

    Core

    Extensions

    • Changed: hs.mouse now understands multiple displays more usefully. Please update your usage of hs.mouse.set() / hs.mouse.get() to hs.mouse.getAbsolutePosition() and hs.mouse.setAbsolutePosition()
    • Added: hs.caffeinate.lockScreen(), hs.caffeinate.startScreensaver(), hs.caffeinate.rebootSystem() and hs.caffeinate.shutdownSystem()
    • Added: hs.mouse.getRelativePosition(), hs.mouse.setRelativePosition and hs.mouse.getCurrentScreen()
    • Added: hs.geometry.isPointInRect
    • Added: hs.alert.closeAll
    • Added: hs.application.focusedWindow() and hs.application:isFrontmost()
  • 0.9.19 - 23 Jan 2015

    This is primarily a bugfix release. Please report issues on GitHub if any of these cause regressions!

    Core

    Extensions

    • Changed: hs.layout now defaults to placing windows on the first screen, if nothing is specified
    • Fixed: hs.keycodes’s inputSourceChanged callbacks should no longer cause Hammerspoon to crash
    • Fixed: hs.hotkey callbacks should no longer cause Hammerspoon to crash
    • Fixed: hs.caffeinate is slightly more robust
    • Fixed: memory leaks in hs.ipc, hs.screen and hs.uielement
  • 0.9.18 - 18 Jan 2015

    Core

    • Changed: API documentation format has been dramatically improved
    • Added: hs.toggleConsole() to toggle visibility of the Hammerspoon Console window

    Extensions

    • Changed: hs.hints.windowHints() no longer forces you to type a second character for windows that are uniquely matched by the first hint character
    • Changed: All hs.window methods which change the size/position of a window, now have an optional argument to override the value of hs.window.animationDuration
    • Added: Various helper methods in hs.window to move a window by one screen in any direction
    • Changed: hs.layout.apple() can now accept hs.screen objects instead of screen names, for users with multiple identical monitors
  • 0.9.17 - 16 Jan 2015

    Core

    Extensions

    • Fixed: Guard against a crashing bug in hs.uielement:newWatcher()
    • Changed: hs.notify now supports many more features of Notification Center. NOTE: The old API still exists, but is now deprecated. Please port to the new hs.notify API.
    • Changed: hs.hints.windowHints() now shows hints for more application windows
    • Changed: hs.hotkey now supports the § key found on some international Mac keyboards
    • Changed: hs.location can now calculate sunrise/sunset times
  • 0.9.16 - 09 Jan 2015

    Important note

    We have noticed that some users are experiencing crashes with Hammerspoon. This should never happen! If you are seeing any crashes, please either reach out to us on github, or in IRC, or email cmsj@tenshu.net. We really want to figure out why these crashes are happening, and get them fixed!

    Core

    Extensions

    • Fixed: hs.hotkey should be less likely to crash in confusing edge cases
    • Changed: Added hs.window.toggleZoom(), which mirrors the behaviour of the OS X window zoom button (pre Yosemite)
    • Changed: Added hs.crash.isMainThread() to aid debugging odd callback related crashes
    • Changed: hs.alert() is now callable, to reduce repetition
  • 0.9.15 - 05 Jan 2015

    Core

    • Fixed: Various nasty thread-related crasher bugs have been squashed
    • Fixed: help() function was using an incorrect call from hs.doc
    • Fixed: developer sample extensions are now correctly formatted

    Extensions

    • Changed: Added hs.application.frontmostApplication
    • Fixed: hs.hints.windowHints() is now more efficient and smarter about edge cases (e.g. no windows being open)
    • Changed: Font name and size are now configurable for hs.hints.windowHints()
  • 0.9.14 - 30 Dec 2014

    Core

    • Added: Crashlytics crash handling framework. This is active, but not currently very useful, as extension libraries are not symbolicated.

    Extensions

    • Changed: hs.application.applicationForPid changed to hs.application.applicationForPID
    • Changed: hs.hints now offers an optional “vimperator” style. Window hints now use two letters, the first of which is taken from the name of the application.
    • Added: hs.uielement low level extension for working with UI elements. This is unlikely to be directly useful to many users, but offers powerful primitives for higher level abstractions
  • 0.9.13 - 22 Dec 2014

    Core

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

    Extensions

    • 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

    WARNING WARNING WARNING

    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!

    Core

    • 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.

    Extensions

    • 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
  • 0.9.11 - 14 Nov 2014

    Core

    • Bug fixes
    • Documentation improvements

    Extensions

    • Changed: hs.window animation duration is now a variable in the extension. Set hs.window.animation_duration to 0 to disable all animations.
    • Changed: hs.hotkey.bind and hs.eventtap.event.newkeyboardevent() now accept unicode characters for ⌘, ⌥, ⌃ and ⇧
    • Changed: hs.eventtap.event.newmouseevent() no longer has a third parameter, as that data can always be derived from the first
    • Changed: hs.eventtap now has convenience wrappers for emitting mouse clicks and keystrokes
    • Changed: hs.location now supports callbacks on location changes
    • Changed: hs.location and hs.wifi should now work on pre-10.10 systems
    • Added: hs.layout
    • Added: hs.milight
  • 0.9.10 - 06 Nov 2014

    Core

    • None

    Extensions

    • Changed: Added hs.application:findmenuitem() and hs.application:selectmenuitem()
    • Changed: Clean up hs.ipc.cli install API
    • Added: hs.sound
    • Added: hs.eventtap
  • 0.9.8 - 31 Oct 2014

    Core

    • Changed: hotkey is more robust when given bad data
    • Changed: application startup to be more robust against errors
    • Added: friendly notification if there is no init.lua, with a link to Getting Started Guide

    Extensions

    • Changed: Added hs.audio.findoutputbyname()
    • Changed: hs.window.setsize() now animates the window by default (but can be made not to)
    • Added: hs.wifi
  • 0.9.7 - 29 Oct 2014

    Core

    • None

    Extensions

    • Added: Location
    • Added: Inspect
    • Added: Spotify
    • Added: Dockicon
    • Added: Pasteboard
    • Added: Timer
    • Added: Battery
    • Added: Pathwatcher
    • Changed: Screen can now change the primary display
  • 0.9.6 - 28 Oct 2014

    Core

    • Changed: Lua environment is now cleanly torn down when quitting Hammerspoon
    • Changed: Extensions are now automatically loaded if they are directly referenced as “hs.foo”

    Extensions

    • Added: Screen Watcher
    • Added: UTF8
    • Added: Base64
    • Added: Modal Hotkeys
    • Added: Grid
    • Added: Filesystem
  • 0.9.5 - 24 Oct 2014

    Core

    • Changed: Error messages for broken configurations
    • Changed: Clearer docs, more obvious attributions
    • Changed: Reduced build target to 10.8. Please report issues!
    • Added: help() method for REPL users

    Extensions

    • Changed: Add window.toggle_fullescreen()
    • Changed: Add caffeinate.system_sleep()
    • Added: Doc
    • Added: JSON
    • Added: IPC
    • Added: Settings
  • 0.9.4 - 17 Oct 2014

    Release 0.9.4

    Core

    • Fixed: #45: Extension import paths now always added correctly

    Extensions

    • Added: Applescript
    • Added: iTunes
    • Changed: Remove unnecessary alert from mjomatic

Latest Releases