Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here


Runs the CarPlay UI directly on top of SpringBoard on an iOS device, no need for a car!

Subscribe to updates I use Ignition

Statistics on Ignition

Number of watchers on Github 208
Number of open issues 23
Average time to close an issue 4 days
Main language Logos
Average time to merge a PR about 9 hours
Open pull requests 1+
Closed pull requests 1+
Last commit about 5 years ago
Repo Created over 5 years ago
Repo Last Updated about 2 years ago
Size 8.62 MB
Organization / Authorb3ll
Page Updated
Do you use Ignition? Leave a review!
View open issues (23)
View Ignition activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating Ignition for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)


Negates the need for a CarPlay supported car, and runs the CarPlay UI directly on top of SpringBoard on an iOS device.

Works great for iPads mounted on the dash!

Note: This is primarily meant for an iPad, and iPhones aren't really supported (however you can use it with an iPhone 6 Plus if you really want to).

Also, I'll be sure to do a formal write-up on how it all works once all of this is finished and useable.

Vroom vroom.



To be honest a lot of this nonsense could be completely avoided if a secondary fake FBSDisplay could be created and then used. That way SBApplications could create / own proper carScenes and there'd be a lot less things that were broken...

Most of the CarPlay checking logic involves checking for both multiple UIScreens, the UIScreen interfaceIdiom, and FBSDisplay -> FBScene lookups. However, creating a fake FBSDisplay requires creating a fake CADisplay which isn't a lot of fun :P

Basically here's how it works (I think... some parts are probably wrong or off):

FrontBoard associates one FBSDisplay as the main display and has a bunch of FBScenes which are each SBApplication's mainScene. Once there's a second FBSDisplay available it can then generate a carScene for each SBApplication who's deemed capable. These carScenes would then be presented onto any externally connected screens (secondary FBSDisplay).

Originally, I had tried high-jacking a FBSDisplay whenever it was created and just duplicating that screen into a secondary FBSDisplay object with the same CADisplay object... and then shoving that FBSDisplay object into it's own lookup table to make it appear as if multiple screens were available. However. this causes UIScreen to freak out as it deems both those screens as the same. Also loads of the OS did not like this :P

What I'm doing is just making all UIScreens appear as CarPlay screens as well as forcing all applications to render in landscape (as CarPlay on external screens is forced to portrait). In addition this means that each SBApplication's carScene is the mainScene, which doesn't guarantee success.

Creating a local AirPlay server and then hacking touches to work on a view (who's contents are a secondary screen projected locally, using the device to AirPlay + mirroring) could be a neat solution to this, but I haven't tried it yet. That would grant us a legitimate second FBSDisplay to play with.

How do I compile?

I used Theos for this. You'll need to install them and setup the appropriate environment variables etc as well as configuring. Info on that here.

ARM64 support is enabled by default and if you need help setting that up check here.

I'm using my own fork of theos, which is in-turn forked from @rpetrich's fork.

If you edit the Makefile you can specify your iOS device's ip and such to build and run using make package install. Otherwise you can simply make package to generate a .deb file and install that by any means.


Totally free! If you'd like to support my continuation of this project (and others!), feel free to donate! It'd be much appreciated :D


Pretty much the BSD license, just don't repackage it and call it your own please!

Also if you do make some changes, feel free to make a pull request and help make things more awesome!

Contact Info?

Feel free to follow me on twitter: @b3ll!
Though I don't really like to handle support requests there...

Special Thanks

Travis Beckham for the vectorized car image!

Ignition open issues Ask a question     (View All Issues)
  • over 4 years Really hoping to see support for this on iOS 9
  • over 4 years dead repo?
  • almost 5 years PreferenceBundle links cause crash
  • almost 5 years iOS 8.3 Support
  • over 5 years Installable on iPad2, but won't work.
  • over 5 years Enable turn by turn on wifi iPads
  • over 5 years Phone app "show contacts", and other issues
  • over 5 years Hide default iOS notification dropdowns in CarPlay mode
  • over 5 years CarPlay doesn't keep screen on if app is active (Maps navigation) - AutoLock kicks in.
  • over 5 years Maps don't display on iPad Mini 1st gen
  • over 5 years Spotify crashes after a few seconds
  • over 5 years Strange cropping issue on iPad3
  • over 5 years Ignore Display Dimming on Launch
  • over 5 years Support Custom Icon Layouts
  • over 5 years [iPhone] Direct All Audio to Loudspeaker / Headphones
  • over 5 years Fix Contacts App Crashing
  • over 5 years iPhone 6 UI improvements
  • over 5 years Toggle Certain iOS Apps To Be Displayed In CarPlay Mode
  • over 5 years Support Rotation
  • over 5 years Make this a prettier hack
  • over 5 years No Phone app
  • over 5 years Keyboard super small
Ignition open pull requests (View All Pulls)
  • (Another) Flipswitch Support.
Ignition questions on Stackoverflow (View All Questions)
  • How to Add Value in Indicator in Linear Scale Component on SCADA Ignition
  • Creating a form and printing with ignition
  • How computer driven ignition timing on gas engines work?
  • Android Persistent caching: using ModelCache from ignition
  • OBD2 How can I check that ignition is turned off
  • Hide Table row which contain status as moving,ignition on
  • How to use Ignition HTTP classes to make Get request?
  • ignition-location compile error
  • Android - Ignition library - unbound class path variable error
  • Android Ignition RemoteImageView not functioning properly
  • Android Ignition POM Error
  • Ignition Location does not receive location updates
  • Ignition RemoteImageView gives "Failed creating disk cache directory" warning
  • Need some ignition for learning Embedded Systems
Ignition list of languages used
Other projects in Logos