DEV Community

Rocky Kev
Rocky Kev

Posted on • Updated on

I'm officially done with FontAwesome

(This post was originally written in January 2022 on my defunct blog. Moved it here.)

Check out Dan's counter on this post! It's pretty good! :-)

When I first discovered FontAwesome in 2013, I like everyone thought the same thing -- this is a MAJOR game changer.

It is now 2022. As I look back, FontAwesome has become unsustainable.

I'm officially 'done' with FontAwesome.

Credit where credit is due

I know this is a 'complaint'-style post.

(There's a lot of toxicity in software development) [https://jamie.build/dear-javascript.html]. This post is full of emotion (and contributes to that toxicity).

But credit where credit is due.

FontAwesome solved major problems with icons. The team worked really hard over the years.

We stand on the shoulders of giants.

But as we continue moving forward in web development, I'm sending FontAwesome into the 'thank you for your service' graveyard, along with jQuery, Bootstrap, Foundation, Gulp, and Sublime.

Additionally, the bulk of my complaints is the css portion of it. 90% of fontawesome projects I've worked in over the decade of development imported it this way.

Using FontAwesome as single file svgs, which is my current preferred way of importing icons, mitigates all of these problems. (Which then begs the question, "Why even use Font Awesome?")

Problem #1 - version nightmare

If you were building a website in 2018, you may have used FontAwesome 5. Set it and forget it, right?

Let's say you need a gameboy icon. Here is one!

gameboy icon

Direct link

<i class="fal fa-game-console-handheld"></i>
Enter fullscreen mode Exit fullscreen mode

But it doesn't work.

Here's all the reasons why.

REASON 1: You're on FontAwesome 5.0. And this is on FontAwesome 5.11.0.

REASON 2: This is a 'pro' font. You're using a free version.

REASON 3: You've been importing solid versions of fonts. You should You need the light versions.

So not only does FontAwesome have minor versions, it also has variants! There's regular versions, light versions, solid versions, duotone versions, brands... all in separate files, with separate markup.

This juggling of version and variant, if it's Free or Pro, and which of the many different files continues in FontAwesome 6.

Problem #2 - Massive font set

FontAwesome's strength is the range of icons.

How many icons are you really using on your site? Maybe 6 or 7?

Most sites (and I'm speaking from my own background) only use a handful of icons, like magnifying-glass or circle-question (https://fontawesome.com/icons/circle-question?s=solid) or social media icons.

If you're importing a fontAwesome's regular.css, you're bringing in hundreds of fonticons you don't need. It's even more nightmare-ish if you're getting a circle-question icon (which lives in regular.css) AND a Facebook icon (which lives in brands.css). Now there's thousands of fonts imported... all eating bandwidth. Yum.

You want to a few icons on your site? Gotta import the massive set of files.

Defenders may say, "Well you can tree-shake it" or "optimize it".

And you're right! So... how many devs even know to do that or have the gumption to set that up?

TailwindCSS includes the entire kitchen sink as well. But they also include helpers to prune it all so you ship the absolute, smallest most performant css you can.

Problem #3 - Fonts first

A major problem with font icons is that you're treating them like fonts first, not icons.

You want a horse icon to be 100px wide.

This won't work:

.fa-horse {
  width: 100px; /* does nothing */
  font-size: 100px;
}
Enter fullscreen mode Exit fullscreen mode

Instead, you have to fiddle with this using font-size.

See the Pen Untitled by rockykev (@rockykev) on CodePen.

codepen

That also means these icons are also affected by other css text modifiers, like line-height.

Are you screaming yet? 😱😱😱

Problem #4 - Changing APIs

Let's use a real example.

You have a feature for visitors to leave a review - a simple leave a 1 to 5 star review.

Here's how to do that, depending on the FontAwesome version.

// FontAwesome 3
<i class="icon-star"></i> 

// FontAwesome 4
<i class="fa fa-star" aria-hidden="true"></i>

// FontAwesome 5
<i class="fas fa-star"></i>

// FontAwesome 6
<i class="fa-solid fa-star"></i>
Enter fullscreen mode Exit fullscreen mode

Starting to see the problem?

If I wanted to upgrade FontAwesome 3 to FontAwesome 6, I'll have to go find all the markup and fix that.

Worst, try juggling multiple projects with multiple different versions of FontAwesome. It's a nightmare.

Problem #5 - Locking you into the model

The last problem is that Pro is yearly.

If I have FontAwesome 5 Pro, which I purchased in 2019, and I wanted a Tiktok logo, I'll have to either:

Option 1: Keep FontAwesome 5 Pro and also include FontAwesome 6 brands
Option 2: Buy FontAwesome 6 Pro.

Just to get a TikTok logo, I now can either fracture my versions or pay $99.

Summary

All of these problems do have workarounds. The thing is -- all these problems are strictly from using FontAwesome!

Instead, switch to SVGs. Boom! All the 5 problems disappeared. (And devs have been [banging their drum (2015 article)]...(https://cloudfour.com/thinks/seriously-dont-use-icon-fonts/) to leaving icon fonts (2021 article) for years...)

There's plenty of sites to score free SVGs or to buy SVGs. And SVGs are performant and AMAZING. (Animated SVGs, wow!)

After years of FontAwesome, I'm done.

Thank you FontAwesome for your service. It's time to go.

Discussion (9)

Collapse
moopet profile image
Ben Sinclair

I think the biggest problem with things like FontAwesome is that they could be used effectively, but what most people ended up doing was scattering non-semantic <i> elements and so forth across their site. Accessibility was never even an afterthought, and it's a very good thing that people are stopping using this approach.

Collapse
danwalsh profile image
Dan Walsh

It seems a little unfair to negatively review FontAwesome (FA henceforth) based on improper or impractical implementations, right? That would be like giving negative reviews to a toaster manufacturer because lots of people set up their toasters in their bathrooms (and were met with unfortunate accidents). It’s not a failing of the manufacturer.

FA can be implemented in many ways such as using Kits, downloading and hosting the SVG files, and my personal favourite: importing FA npm package into your project and using the Library for selective icon importing.

No one should be linking the entire FA CSS files in production (unless you’re happy to accept the pitfalls that go along with it). But to be clear: this is not the optimum nor the recommended implementation approach, and as such, shouldn’t be used as the yard stick to measure the practicality of FA.

Addressing your points:

Point #1: Version nightmare
If implemented as an npm package, a quick update to your packages will provide you with all the latest icons.

REASON 1: You're on FontAwesome 5.0. And this is on FontAwesome 5.11.0.

Run your npm update command against your FA packages—job done.

REASON 2: This is a 'pro' font. You're using a free version.

When searching for icons to use on the FA website, just click on the “Free” filter so you only list the icons available to your project—no problem-o.

REASON 3: You've been importing solid versions of fonts. You should You need the light versions.

So then install the light npm package and import the icon—easy.

Problem #2 - Massive font set
Again, if set up as intended, only the very few imported icons you are actually using (and their supporting CSS styles) are added to your final transpiled build files.

Defenders may say, "Well you can tree-shake it" or "optimize it".

And you're right! So... how many devs even know to do that or have the gumption to set that up?

I’m glad that you agree that the defenders are right. Also, how many developers know how to properly set up their FA installs and have the gumption to do so? You’re taking a pretty broad swipe at the dev community here with this assumption, as if this is some Herculean task beyond the understanding of most devs.

TailwindCSS includes the entire kitchen sink as well. But they also include helpers to prune it all so you ship the absolute, smallest most performant css you can.

Your comparison to TailwindCSS is moot, given that FA provides the same optimisation options out of the box, provided your chosen implementation method supports it.

Problem #3 - Fonts first

Instead, you have to fiddle with this using font-size.

That also means these icons are also affected by other css text modifiers, like line-height.

Are you screaming yet? 😱😱😱

FA uses the font-size property because the icons are sized relative to the content and UI elements surrounding them. When you place a contextual icon next to your button label, it’s great that the icon will automatically match its size with that of the button label text.

A quick skim over the documentation will tell you everything you need to know about sizing your icons, no screaming required.

Problem #4 - Changing APIs

If I wanted to upgrade FontAwesome 3 to FontAwesome 6, I'll have to go find all the markup and fix that.

If someone is using FA3, sure, they would have to do that.

However, from FA4 and up, backward compatibility is built in. You can upgrade your FA4 or FA5 project to FA6 without having to make any changes to your markup.

If you check out the “Backward Compatibility” section of the “What’s Changed” section of the FA docs, you’ll find that the use of the old style syntax (and even old icon names and Unicode values) are supported out of the box.

Problem #5 - Locking you into the model
Perhaps your choice of a TikTok icon was a mistake, because that falls under their “brands” style which is free to use, no payment required. But I understand your point: what if you have FA5 Pro but the icon you want to use is in FA6 Pro?

The answer is easy: just use FA6 Pro. A pro plan with FA means you can use any icon in the latest version of FA, always. So when FA7 inevitably gets released, you’ll get access to those icons too, no plan upgrade or additional payments required.

Summary

All of these problems do have workarounds. The thing is -- all these problems are strictly from using FontAwesome!

This is almost true. I would go further to say that “all these problems are strictly from implementing FontAwesome in an inefficient manner”.

When used properly, FA provides you with lean, accessible, scalable icons for your projects. Unfortunately, your post conflates the issues present in bloated and “quick” implementations with the service as a whole, which I feel misinforms people of it’s great many utilities when used appropriately.

Remember: Always import your icons and tree-shake your project, and never make toast in the bath.

Collapse
rockykev profile image
Rocky Kev Author

Heya! You're totally right. I actually point that out before I start listing my grievances - that my preferred method is through svgs and through npm packages.

All of those solutions is if you have the luxury of doing that from the start.

I inherit a lot of old projects, and hence my frustration. (love the toaster metaphor)

Also, I noticed your comment is pretty long! Do you want to shape it into a separate blog post and do a counter-post? I promise I take no offense, and it'll be like a rap battle in blog form. :-)

Collapse
danwalsh profile image
Dan Walsh

I can absolutely appreciate your position. Inheriting technical debt just compounds your workload. And of course, you have to make that “refactor or leave it” decision (if you have the luxury), which you know is going to impact the next web dev one way or another.

Great minds must think alike, because I already spun-up a counter-post! 😅

I’m glad to hear you took my comment as it was intended—not as a personal attack, but as a rebuttal of your position. All too often (especially online) our words get taken out of context and perceived as an attack to be offended by. Grateful to see we can still have rational, mature discussions in 2022. 😊

Collapse
thomasbnt profile image
Thomas Bnt

I moved some years ago on Fork Awesome. This library of icons is litteraly a fork of Font Awesome with more OSS icons like Mastodon, DEV, GitHub, GitLab etc.

I prefer using this fork because :

  1. The documentation is very easily to understand
  2. To research a good icon, press CTRL + F, and that it's. No slowly website
  3. Moore icons on OSS section
  4. No fab fa-tree.
Collapse
rockykev profile image
Rocky Kev Author

Beautiful! I never heard of Fork Awesome! Thank you for the recommendation!

Collapse
andrewbaisden profile image
Andrew Baisden

Always room to improve.

Collapse
krishnaagarwal profile image
Krishna Agarwal

True