Faviconographer

Tab Favicons in Safari for Mac

Note: Starting with Safari 12 on macOS Mojave, Safari supports Favicon drawing out of the box, so Faviconographer will be no longer necessary for tab Favicons. For bookmark Favicons, Mojave would still require significant changes that I don't have the resources for right now, so for the time being Faviconographer will not run on macOS Mojave.

To enable Favicons in Safari 12, go to Preferences > Tabs, and check “Show website icons in tabs”.

Speaking of new features — if you are looking for something like iOS 12's new Screen Time feature for your Mac, make sure to check out Timing.

Faviconographer is a little utility that displays Favicons for the tabs you have opened in the current Safari window, just like almost every other browser does it.
This helps you navigate between them more quickly.

How it works

Faviconographer asks Safari.app for a list of all visible tabs (and their positions) in the current window, and for the URLs of those tabs.
It then uses that information to fetch the corresponding icons from Safari's Favicon cache (WebpageIcons.db), and draws them above the Safari window.

It's a "hack" — the cleanest solution would be Apple implementing Favicons in Safari — but it works surprisingly well.

Note: Faviconographer does not "hack" your system. It does not inject code into other apps or manipulate system files. In fact, it doesn't even require Administrator access!

Limitations & Known Issues

  • Faviconographer will only display icons for the currently active Safari window, and only while Safari is the frontmost app.
  • There is a minimal delay when switching Safari windows.
  • When e.g. dragging tabs on the tab bar or moving/resizing the window, there is some delay before the Favicons update. In the meantime, they just float in the wrong place.
  • When invoking the hotkey to show all application windows while in Safari, the Favicons stay floating in place.
  • Under High Sierra, if you restore a previous Safari session, Faviconographer can only show icons for restored tabs after you have clicked them at least once. But for all new tabs, Favicons will be shown immediately.
    This is a limitation of Safari's AppleScript support in macOS 10.13 — it won't return URLs for tabs that have not yet been loaded.
  • Under High Sierra, one user had to delete their Safari preferences file to make Faviconographer work. If Faviconographer does not work out of the box for you after enabling Accessibility, please reach out so we can figure out a solution :-)
  • Faviconographer currently only uses Favicons, not "touch icons" or Apple's SVG icon format for pinned tabs.
  • Favicons for websites you've never visited outside incognito mode will not be shown.
  • Given its dependency on polling Safari for information, Faviconographer may stop working at any time.
    I can't (and won't) make any promises with regards to functionality, or to keep updating it in the future. (I hope to, but no promises.)
  • If you'd rather try a different approach and are comfortable with disabling System Integrity Protection, have a look at SafariStand.

Why I built it

When John Gruber wrote about Safari's lack of tab Favicons a few weeks ago, I realized that you could emulate this feature by overlaying the corresponding icon above each tab. This would require just three steps:

  1. Obtain the current tabs' positions from Safari via the Accessibility API.
  2. Obtain the current tabs' URLs from Safari via AppleScript.
  3. Efficiently fetch Favicons for each of those URLs.

Turns out, my automatic time tracking app Timing already has code for all three steps:

  1. It uses the Accessibility API to track which document you are editing.
  2. Similarly, it uses AppleScript to detect which websites you spend your time on.
  3. And because Timing lists your most frequently visted websites, it even has code to fetch Favicons from Safari's own cache already!

With all the necessary components already there, I "remixed" them into Faviconographer.
A few hours later, I tweeted a screenshot of the prototype.
The positive response to that tweet kept me going, and here we are now with a working version that you can download and use.

Screenshot of the Preferences screen

Frequently Asked Questions

How much does it cost?

Faviconographer is free to use, and given that it's just a hack I wouldn't feel comfortable charging money for it.

If you'd like to support my work, please feel free to try out Timing, my other Mac app.

Why does it need the Accessibility API?

The Accessibility API lets an app determine the position of user interface elements on the screen. Faviconographer uses this to figure out in which places your Favicons should be drawn.

Does it steal or collect my data?

Of course not! Faviconographer does not (and will never) collect any information about your tabs, let alone send them anywhere.
The data it needs to display Favicons is discarded right after use and not even written to disk.

Faviconographer does connect to our server at launch to automatically check for updates, though, and it uses Fabric to gather crash reports.
Both connections can be turned off in its preferences, though.

Why is it not open source?

As mentioned above, Faviconographer contains some proprietary code from Timing that I am not comfortable with open sourcing right now.
If you have a legitimate interest in the source code, contact me.

How do I open the Preferences?

While Faviconographer is running, simply double-click its icon a second time to open the preferences window.

What are the system requirements?

Faviconographer has been tested to work on macOS Sierra and some users also reported it to work on El Capitan.

Who are you?

I am Daniel Gräfe, an independent Mac and iOS app developer.
If you'd like to get notified whenever I create another project like this, feel free to sign up for my newsletter.
You can also follow me on Twitter, visit my linkblog at danielalm.de, or check out my products at timingapp.com and pocketcas.com.

Contact

Please check the issues listed above before reaching out — most of these are technical limitations that can't be worked around, so no need to report them ;-)
In case you want to give feedback, feel free to send an email to daniel@(this domain).

Release Notes

Version 1.1.2 — 12.6.2018

This version disables Favicon drawing on macOS Mojave and on Safari Technology Preview, as those versions support Favicon drawing out of the box.
That also means that there will likely be no further updates to Faviconographer, but feel free to keep using it with Safari 10 and 11 :-)

FYI, to enable Favicons in Safari 12, go to Preferences > Tabs, and check “Show website icons in tabs”.

Version 1.1 — 15.1.2018

  • Improvement: Faviconographer should now be able to display icons for tabs that Safari 11 has re-opened from a previous session, even when they were never visited during this Safari session. (Safari 11 no longer provides URLs for re-opened tabs that have not yet been visited during this session, so Faviconographer now caches the mappings of Tab Title to URL and persists that cache to disk.)
  • Improvement/Bugfix: Faviconographer should no longer draw Favicons over the "Downloads" popover.
  • Improvement/Bugfix: Faviconographer will now use Safari Technology Preview's own Favicon cache when using that browser, so it should now be able to display more Favicons when using STP.
  • Improvement/Bugfix: Reduced the likelihood of accidentally drawing the wrong Favicon for some tabs. Let us know if you still encounter wrong Favicons from time to time.
  • Bugfix: Faviconographer should now work properly with Russian versions of Safari.
  • Bugfix: Fixed the "Check for Updates" button.
  • Minor Improvement: Slightly improved performance and reduced CPU/power usage (even though those should already have been fine before).
  • Plus a few more minor tweaks and copy fixes.

More Screenshots

Screenshot
Screenshot
Screenshot

Screenshot

Screenshot

Made with ❤️ in 🇩🇪 by the creator of ⏱ Timing.

Follow me on Twitter

Imprint / Privacy Policy