Kit Package API
Font Awesome Kits can now be installed using npm-compatible package managers. Learn about what's included and how to use the package in JavaScript and other applications.
Before You Start
Make sure you:
- You have a project based setup using a modern package manager
- Configured access to use Font Awesome packages.
- Set up a Kit and Enabled Package Installation to use Pro+ icons.
What's in the package
| Asset | Location | What it's good for |
|---|---|---|
| CSS | css/* |
StyleSheets ready to work in any modern browser using the files in webfonts directory |
| SCSS | scss/* |
SCSS (Sass) files using the webfonts directory |
| Webfont Files | webfonts/* |
WOFF2 webfont files for use with CSS and SCSS |
| Auto loading JavaScript | js/* |
Easier to use JavaScript files for including in <script> tags directly in the browser using SVG + JS technology |
| ESM & CommonJS JavaScript | modules/* |
SVG Core-compatible JavaScript files suitable for use with build tools, JS frameworks, or <script type="module"> using SVG + JS technology |
| SVG Sprites | sprites/* |
SVG Sprites for all icons |
| SVG Files | svg/* |
Individual SVG files for all icons |
| Data files | metadata/* |
JSON and Yaml files containing icon data |
Using the JavaScript API
A modern package for a modern world
The Kit Package uses the newer exports feature of
byPrefixAndName[prefix][iconName]
This object contains all icons in a Kit. If you've subsetted a Kit this can be an easy to understand to use.
Replace KIT_CODE with your Pro Kit unique token
If you've added the "house icon" to your Kit, you could do the following.
import { byPrefixAndName } from '@awesome.me/kit-KIT_CODE/icons' byPrefixAndName.fas['house']
Objects from byPrefixAndName are organized by prefix, then icon name.
byPrefixAndName.fas['house'] byPrefixAndName.far['square'] byPrefixAndName.fass['sword'] byPrefixAndName.fab['font-awesome']
Objects With individual icon objects shaped like this.
// Example icon returned { prefix: 'fas', iconName: 'house', icon: [ 576, 512, [63498,63500,127968,"home","home-alt","home-lg-alt"], 'f015', 'M575.8 255.5c0 18-15 32.1-32 32.1h-32l.7 160.2c0 2.7-.2 5.4-.5 8.1V472c0 22.1-17.9 40-40 40H456c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1H416 392c-22.1 0-40-17.9-40-40V448 384c0-17.7-14.3-32-32-32H256c-17.7 0-32 14.3-32 32v64 24c0 22.1-17.9 40-40 40H160 128.1c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2H104c-22.1 0-40-17.9-40-40V360c0-.9 0-1.9 .1-2.8V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z' ] };
Prefix
The prefix determines what family and style an icon will render in. Below is a list of prefixes organized per Icon Pack.
Kit Custom
| Style | Availability | Prefix | |
|---|---|---|---|
| Kits | Pro Plan | fak |
|
| Kits Duotone | Pro Plan | fakd |
Classic
| Style | Availability | Prefix | Preview |
|---|---|---|---|
| Solid | Free | fas |
|
| Regular | Pro only | far |
|
| Light | Pro only | fal |
|
| Thin | Pro only | fat |
Duotone
| Style | Availability | Prefix | Preview |
|---|---|---|---|
| Solid | Pro only | fad |
|
| Regular | Pro only | fadr |
|
| Light | Pro only | fadl |
|
| Thin | Pro only | fadt |
Sharp
| Style | Availability | Prefix | Preview |
|---|---|---|---|
| Solid | Pro only | fass |
|
| Regular | Pro only | fasr |
|
| Light | Pro only | fasl |
|
| Thin | Pro only | fast |
Sharp Duotone
| Style | Availability | Prefix | Preview |
|---|---|---|---|
| Solid | Pro only | fasds |
|
| Regular | Pro only | fasdr |
|
| Light | Pro only | fasdl |
|
| Thin | Pro only | fasdt |
Brands
| Style | Availability | Prefix | Preview |
|---|---|---|---|
| Brands | Free | fab |
Chisel
| Style | Availability | Prefix | Preview |
|---|---|---|---|
| Regular | Pro+ only | facr |
Etch
| Style | Availability | Prefix | Preview |
|---|---|---|---|
| Solid | Pro+ only | faes |
Jelly
| Style | Availability | Prefix | Preview |
|---|---|---|---|
| Regular | Pro+ only | fajr |
|
| Fill Regular | Pro+ only | fajfr |
|
| Duo Regular | Pro+ only | fajdr |
Notdog
| Style | Availability | Prefix | Preview |
|---|---|---|---|
| Solid | Pro+ only | fans |
|
| Duo Solid | Pro+ only | fands |
Slab
| Style | Availability | Prefix | Preview |
|---|---|---|---|
| Regular | Pro+ only | faslr |
|
| Press Regular | Pro+ only | faslpr |
Thumbprint
| Style | Availability | Prefix | Preview |
|---|---|---|---|
| Light | Pro+ only | fatl |
Whiteboard
| Style | Availability | Prefix | Preview |
|---|---|---|---|
| Semibold | Pro+ only | fawsb |
Parity Across Icon Packs
Each Pro+ only style is considered "small batch" and does not have parity with categories or icons in our larger Packs. Instead they contain a curated selection of the 200 most common icons needed for app and website design.
all[]
All is an array of every icon for a Kit. This is best if the Kit you are using is using custom subsetting.
import { all } from '@awesome.me/kit-KIT_CODE/icons'
The most useful way to use all is to pair it with the SVG Core Library. The
library allows you to register icons you wish to use and look them up in a
variety of ways through other APIs and libraries.
import { library } from '@fortawesome/fontawesome-svg-core' import { all } from '@awesome.me/kit-KIT_CODE/icons' library.add(...all)
The individual icons in the all Array are just like the objects returned from byPrefixAndName.
Icon Packs
One step down from using all is to import icons by their family and style.
import { library } from '@fortawesome/fontawesome-svg-core' import { fas, fad, fasr, fak } from '@awesome.me/kit-KIT_CODE/icons' library.add(fas, fad, fal)
Icon packs are objects keyed from icon names. But the icon names are prefixed
with fa and camel-cased. So square-check becomes faSquareCheck. Since
variable names in JavaScript cannot begin with numbers that's why you see
everything starting with fa.
import { library } from '@fortawesome/fontawesome-svg-core' import { fas } from '@awesome.me/kit-KIT_CODE/icons' library.add(fas.faSquareCheck)
Importing from Icon Packs
Using a prefix, you can import an individual styles for use.
// import classic solid, regular, and light import { fas } from '@awesome.me/kit-KIT_CODE/icons' import { far } from '@awesome.me/kit-KIT_CODE/icons' import { fal } from '@awesome.me/kit-KIT_CODE/icons' // import sharp solid, regular, and light import { fass } from '@awesome.me/kit-KIT_CODE/icons' import { fasr } from '@awesome.me/kit-KIT_CODE/icons' import { fasl } from '@awesome.me/kit-KIT_CODE/icons' // import brands import { fab } from '@awesome.me/kit-KIT_CODE/icons' // import custom icons import { fak } from '@awesome.me/kit-KIT_CODE/icons'
Shaking Those Trees
Using all and icon packs make it hard for build tools to utilize tree shaking. So if that's something you know you
want to use, try using the "Individual icons" import examples below. However, you can accomplish the same goal as
tree-shaking by using a Kit that has been custom subsetted. Custom subsetting allows you to select only the family,
styles, and icons that you'll actually be using. That's the same goal tree-shaking solves but in a less
technically-focused way.
Individual icons
You can import individual icons. This has the advantage of being tree-shakable for keeping your bundles small. To do so...
- Provide the
fa-prefixed, camel-cased format of the icon you want to import's name (e.g.user->faUser) - Include the path with the family and style the icon should render in (e.g.
sharp/thinfor Sharp Thin)
// import user icon in classic, regular, and light import { faUser } from '@awesome.me/kit-KIT_CODE/icons/classic/solid' import { faUser } from '@awesome.me/kit-KIT_CODE/icons/classic/regular' import { faUser } from '@awesome.me/kit-KIT_CODE/icons/classic/light' // import user icon in sharp solid, regular, and light import { faUser } from '@awesome.me/kit-KIT_CODE/icons/sharp/solid' import { faUser } from '@awesome.me/kit-KIT_CODE/icons/sharp/regular' import { faUser } from '@awesome.me/kit-KIT_CODE/icons/sharp/light' // import Font Awesome and Web Awesome brands import { faFontAwesome } from '@awesome.me/kit-KIT_CODE/icons/brands' import { faWebAwesome } from '@awesome.me/kit-KIT_CODE/icons/brands' // import custom icon import { faMyIcon } from '@awesome.me/kit-KIT_CODE/icons/kit/custom`
Troubleshooting
TypeScript
If you run into import errors when using TypeScript you may need to adjust your TypeScript config.
A common error caused by having the wrong moduleResolution is this.
Cannot find module '@awesome.me/kit-KIT_CODE/icons/classic/solid' or its corresponding type declarations.
To fix this, go into your tsconfig.json file and make sure the moduleResolution is set to value supported by the kit package.
| Options | |
|---|---|
| nodenext | Recommended |
| bundler | Also supported if nodenext does not work for you for some reason. |
| node16 | Supported but not recommended because it is currently the same as nodenext and nodenext is forward looking and will be updated to support new Node.js module resolution features as they are added. |
| Unsupported | |
| Unsupported | |
| Unsupported |
"moduleResolution": "bundler",
Note about incompatible TypeScript defaults
Your TypeScript implementation may default to an incompatible module or moduleResolution option. For example, as of TypeScript 5.4.2 a new project will default to using module: commonjs and will not specify moduleResolution. Unfortunately, when module is "commonjs", then the default moduleResolution is "node10", equivalent to "node", which is not supported.
For more information about the moduleResolution setting, see the official TypeScript docs.
TypeScript + SVG Core APIs
Currently there two functions in the API from @fortawesome/fontawesome-svg-core that are affected by a Kit Package.
Because the Kit Package can have a subset of Font Awesome icons or even custom uploaded icons, the TypeScript definitions need to be modified to be aware of these types.
Here, we can see TypeScript is reporting errors with the following code.
import { icon, findIconDefinition } from '@fortawesome/fontawesome-svg-core' import type { IconLookup } from '@awesome.me/kit-KIT_CODE/icons' const lookup: IconLookup = { prefix: 'fas', iconName: 'starship' } icon(lookup) findIconDefinition(lookup)
# tsc index.ts:13:6 - error TS2345: Argument of type 'IconLookup' is not assignable to parameter of type 'IconLookup | IconName'. Type 'import("/path/node_modules/@awesome.me/kit-KIT_CODE/icons/modules/icon-types").IconLookup' is not assignable to type 'import("/path/node_modules/@fortawesome/fontawesome-common-types/index").IconLookup'. Types of property 'iconName' are incompatible. Type 'import("/path/node_modules/@awesome.me/kit-KIT_CODE/icons/modules/icon-types").IconName' is not assignable to type 'import("/path/node_modules/@fortawesome/fontawesome-common-types/index").IconName'. Type '"my-custom-icon"' is not assignable to type 'IconName'.? 13 icon(lookup); ~~~~~~ index.ts:15:20 - error TS2345: Argument of type 'import("/path/node_modules/@awesome.me/kit-KIT_CODE/icons/modules/icon-types").IconLookup' is not assignable to parameter of type 'import("/path/node_modules/@fortawesome/fontawesome-common-types/index").IconLookup'. 15 findIconDefinition(lookup); ~~~~~~
This can be pretty confusing the first time you run into it. TypeScript is
basically telling us that the arguments for icon() or findIconDefinition()
have been defined in the @fortawesome/fontawesome-common-types package. That
package is generic and includes every available Font Awesome icon. It's not
aware of the icons in your Kit.
We can use Module Augmentation to update the definition for both functions.
import { icon, findIconDefinition } from "@fortawesome/fontawesome-svg-core"; - import type { IconLookup } from "@awesome.me/kit-d1e13f5422/icons"; + import type { IconLookup, IconName } from "@awesome.me/kit-d1e13f5422/icons"; + import type { IconDefinition } from "@fortawesome/fontawesome-common-types"; + declare module "@fortawesome/fontawesome-svg-core" { + export function icon(icon: IconName | IconLookup, params?: IconParams): Icon; + export function findIconDefinition(iconLookup: IconLookup): IconDefinition; + } const lookup : IconLookup = { prefix: "fas", iconName: "starship" }; icon(lookup); findIconDefinition(lookup);
This will fix things up. You can place the declare module in any module (according to our testing) and you only need to add it once.
404 Error
If you get this error:
HttpErrorGeneral: 404 Not Found - GET https://registry.npmjs.com/@awesome.me%2Fkit-KIT_CODE - Not found
Try running the update command before running the install command.
npm update '@awesome.me/kit-KIT_CODE' npm install --save '@awesome.me/kit-KIT_CODE@latest'
Windows NPM Install
Sometimes Windows doesn't play nice with single quotes, so if you are getting path issues after installing, you may need to use double quotes.
npm install --save "@awesome.me/kit-[KIT_CODE_GOES_HERE]@latest"