Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here


A lightweight macOS/OS X window and app manager scriptable with JavaScript

Subscribe to updates I use phoenix

Statistics on phoenix

Number of watchers on Github 1282
Number of open issues 29
Average time to close an issue 17 days
Main language Objective-C
Average time to merge a PR 21 days
Open pull requests 4+
Closed pull requests 8+
Last commit about 2 years ago
Repo Created over 5 years ago
Repo Last Updated almost 2 years ago
Size 14.8 MB
Organization / Authorkasper
Latest Release2.6
Page Updated
Do you use phoenix? Leave a review!
View open issues (29)
View phoenix activity
View on github
Fresh, new opensource launches πŸš€πŸš€πŸš€
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating phoenix for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)


Build Status


A lightweight macOS window and app manager scriptable with JavaScript. You can also easily use languages which compile to JavaScript such as CoffeeScript. Phoenix aims for efficiency and a very small footprint. If you like the idea of scripting your own window or app management toolkit with JavaScript, Phoenix is probably going to give you the things you want. With Phoenix you can bind keyboard shortcuts and system events, and use these to interact with macOS.

  • Current version: 2.6 (Changelog)
  • Requires: macOS 10.10 or higher

Note: the default master-branch will always be stable.

Key Features

  • highly customisable, write your own configuration
  • bind keyboard shortcuts and system events to your callback functions
  • control and interact with your screens, spaces, mouse, apps and windows
  • log messages, deliver notifications or display content as modals
  • run external commands


To install, extract the downloaded archive and just drag-and-drop Phoenix to your Applications-folder. When you run Phoenix for the first time, you will be asked to allow it to control your UI. macOS will ask you to open Security & Privacy in System Preferences. Once open, go to the Accessibility-section and click the checkbox next to Phoenix to enable control. An admin account is required to accomplish this.

Alternatively, if you have Homebrew Cask installed, you can simply run brew cask install phoenix.


To uninstall Phoenix, delete the app from your Applications-folder. The configuration file created by Phoenix itself is located in your home folder. Delete ~/.phoenix.js and any related configurations if desired. For developers, you may also need to delete ~/.phoenix.debug.js.

If you have used the storage, also delete the file ~/Library/Application Support/Phoenix/storage.json. Again for developers, you may also need to delete ~/Library/Application Support/Phoenix/storage.debug.json.


Phoenix lives on your status bar (or as a background daemon) and can be scripted in JavaScript (or languages which compile to JavaScript such as CoffeeScript).

Screenshot of Phoenix

See the JavaScript API to get started with your script. Your script should reside in ~/.phoenix.js the file will be created when you launch Phoenix for the first time. Alternatively if you prefer you may also have your script in ~/Library/Application Support/Phoenix/phoenix.js or ~/.config/phoenix/phoenix.js. For ideas, see what other people have built in their configurations in the Wiki. Feel free to add your own configuration to the Wiki to show other people the nice things you can do. Previous configurations (<= 1.5) are not compatible with 2.0, see Changelog for what changes are needed.


You will need some basic knowledge about installing the required languages and tools. If you need help, do not hesitate to ask! To get started, you will need:

  1. Git
  2. Xcode 9 or higher
  3. Xcode command line tools

First clone the repository from a terminal:

git clone
cd phoenix

To develop Phoenix, open Phoenix.xcworkspace in Xcode. Install Xcode from the App Store, if you do not already have it installed. You will also need Xcode command line tools you will be prompted for this. Everything else should work as is you can develop, debug, test, build and run Phoenix straight from Xcode.

To install Phoenix from the source, you will need to build the workspace from a terminal:

xcodebuild -workspace Phoenix.xcworkspace \
           -scheme Phoenix \
           -configuration Release \
           SYMROOT="$PWD/build/" \
           clean build

Once complete, you will find a newly built Phoenix app in build/Release/. After this, you can follow the normal install guide.

Phoenix manages dependencies with CocoaPods. Note that you do not need CocoaPods for basic development. However, if you want to install new pods or update existing ones, you will also need:

  1. Ruby (2.4.3 or higher), it is recommended that you manage Ruby versions with for instance rbenv
  2. Bundler
  3. CocoaPods

Install Bundler, if you do not already have it installed. To install CocoaPods and its dependencies, use Bundler inside the phoenix-directory to install the required Ruby gems according to the Gemfile. Once complete, you can install the pods listed in the Podfile with CocoaPods.

gem install bundler
bundle install
pod install

In addition to the Objective-C core, Phoenix also uses a JavaScript-based (5.1) library to implement additional features to the API. The minified library is included in the repository in Phoenix/phoenix-min.js so that everything works as is. However, if you want to develop features for this library, you will also need:

  1. Node.js (9.3.0 or higher)
  2. Grunt

Install Grunts command line interface globally, if you do not already have it installed. Then, install the development packages listed in package.json.

npm install -g grunt-cli
npm install

To build phoenix-min.js from the source, run the command grunt in the root directory. Grunt will then build the source from library/src/ and install the new library to Phoenix/phoenix-min.js. For convenience, this is also handled automatically by Xcode when you build Phoenix.


Feel free to contribute to this project by creating issues, pull requests and editing the Wiki. See the guidelines.


If you have any questions, feedback or just want to say hi, you can open an issue, email or tweet.


Phoenix is currently developed by Kasper Hirvikoski (@kasper) and Jason Milkins (@jasonm23) with the generous help of contributions made by many individuals. It was originally authored by Steven Degutis (@sdegutis) as a fork of Zephyros also an app of his. As it stands now, it has been rewritten from the ground up by Kasper Hirvikoski. Steven is continuing his work on macOS window management in Mjolnir.


Released under the MIT License. See license.

phoenix open issues Ask a question     (View All Issues)
  • over 3 years Suggestion: Window.mouseFocused()
  • over 3 years Window#focus() brings all app windows to front
  • over 3 years Suggestion: Window#focus() without bringing to front
  • over 3 years Look into adding Touch Bar support
  • over 3 years Phoenix fires no Window events for GitX
  • over 3 years Pheonix does not bring windows to front always
  • over 3 years An API for phoenix ?
  • over 3 years Unable to create Modal from Task callback
  • over 3 years Unable to focus other windows for same App
  • over 3 years Do not require a callback for a managed task
  • over 3 years Setting openAtLogin from the configuration fails when no previous entry is found in Preferences
  • over 3 years Phoenix does not terminate after accessibility prompt
  • over 3 years App#windows() does not include windows that are not in the current space.
  • over 3 years With β€œDisplays have separate Spaces” disabled, Space#screen() does not return the screen(s) for the space
  • almost 4 years CommonJS behavior for `require`
  • almost 4 years Consider replacing underscore with lodash
  • about 4 years Continuous prompt to Enable Accessibility
  • about 4 years REPL/CLI/Interactive Console
  • over 4 years Include basic grid support as a JavaScript library
phoenix open pull requests (View All Pulls)
  • Execute PHHandler js functions using the parent JSContext
  • Add support for ISO section key
  • Fix #167, #169
  • Update
phoenix questions on Stackoverflow (View All Questions)
  • Postgres - Phoenix/Elixir install errors
  • Elixir phoenix error when starting server
  • error during installing phoenix framework
  • Dynamically defining top level routes in Phoenix routes.ex
  • In a Phoenix app, where do the prepare_changes calls belong?
  • apache phoenix Join query performance
  • org.apache.hadoop.hbase.TableNotFoundException: SYSTEM.CATALOG exception with phoenix 4.5.2
  • Phoenix Error while trying to create table
  • Apache Phoenix DAO Testing
  • Apache Phoenix Current Time
  • parsing of where clause in phoenix
  • Can I use phoenix to achieve the feature like SQL's duplicate key?
  • Phoenix frameworks and validating embeds
  • Trying to use axios to make API call in a React/Phoenix App (using Brunch)
  • Phoenix Framework - How to populate a map field through a form_for?
  • How to add plug in router in phoenix elixir
  • How to make Javascript code run in Phoenix?
  • How to send emails with Phoenix framework
  • How to write a custom model in elixir / phoenix without being object-oriented?
  • Deploying phoenix framework on heroku with webpack
  • How to create a Phoenix Table / View over an Existing Hbase table
  • creating a Phoenix index in Hortonworks sandbox doesnt work
  • Does Phoenix Code_Reloader Only Reload Elixir Code?
  • Apache Phoenix - Insert multiple rows with one upsert statement
  • Render many to many relationship JSON in Phoenix Framework
  • Phoenix Framework with code reloading enabled, is pretty slow on Windows
  • Using Phoenix with Cloudera Hbase (installed from repo)
  • Not finding my HBase table columns in my Phoenix table
  • APACHE PHOENIX : Identify each column name and its data in region server coprocessor
  • Apache Phoenix does not show future records
phoenix list of languages used
phoenix latest release notes
2.6 Phoenix 2.6

Hello, do you remember me? This release includes a couple of bug fixes and improvements. Sorry for the wait!

What is New?

  • support for closing windows

See the full Changelog.

SHA-256: a4635be6cfa92e0ee5db3e8b46edd6886e65f9c3b116b03f8892140c6286b72c phoenix-2.6.tar.gz

2.5 Phoenix 2.5

This release includes a couple of new useful features. If you did not already know, macOS Sierra (10.12) has full support for the ECMAScript 6 standard and you can now use it with Phoenix! Read a quick overview of the new features added to the language.

What is New?

  • Edit configuration status menu item for conveniently accessing your configuration
  • support for getting the topmost window at a specified point
  • support for mouse drag events
  • upgraded Lodash

See the full Changelog.

SHA-256: da5a3c580e028e70ed3fd3cf325f4a1ae40366d6cf2b25e6a151c65b525ec828 phoenix-2.5.tar.gz

2.4 Phoenix 2.4

This release contains some general fixes and improvements. Happy Holidays!

What is New?

  • Breaking: Underscore.js is replaced with Lodash (4.17.3)
  • a few additions and improvements to the API
  • several bug fixes to some annoying issues

See the full Changelog.

SHA-256: 837c6c182ee40d274e09d70fe9dbca60533135dead1a450cf58900e979c64f4b phoenix-2.4.tar.gz

Other projects in Objective-C