vue-fontawesome: the Vue 3 component for Font Awesome 7 SVG icons
Font Awesome Vue component
At a glance
- What is it?
- The Vue sibling of the React binding, published for Vue 3 with hand-maintained type declarations, and more interesting than it looks because two of its last three releases were type-only fixes for real compile errors people hit in TSX and render functions.
- Who is it for?
- vue-fontawesome is a good default for a Vue 3 application already using Font Awesome, mainly because it is the binding the icon library documents and because its type declarations are maintained rather than generated loosely. Version 3.3.3 was published on 2026-07-21, the repository is not archived, and the last push was on 2026-09-13.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 24 days ago.
- What is it written in?
- Mainly JavaScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 7, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What the component actually is, and what it is not
The README is one line of description and it is accurate: a Font Awesome Vue 3 component using SVG with JS. As with the React binding, the icon data does not live here. You install a Font Awesome core package separately and this component renders the icons you hand it as inline SVG elements rather than as glyphs in a webfont.
That distinction decides your bundle. Each icon becomes JavaScript and markup in your chunk, so unused icons never ship, and an icon imported at the top of a widely shared component does ship to every route that imports it. The Vue-specific cost of this approach is that Vue's template compiler will happily resolve the component for you in templates, which makes it easy to forget that something was imported.
The repository topics are `fontawesome`, `frontend`, `icons`, `javascript` and `vue`, and the package description reads Official Vue component for Font Awesome 7. There is no build step for your application and no configuration file. You add a dependency and register a component.
Publishing shape: rollup, hand-written index.d.ts, and a files allowlist
The package manifest describes a build that is small enough to read in one sitting. Rollup does the bundling, with a separate production path behind an environment switch, and `prepack` runs the distribution build so a published tarball is never stale.
"build": "rollup -c rollup.config.js",
"dist": "cross-env NODE_ENV=production npm run build",
"test": "vitest run",
"prepack": "npm run dist"Two details there are worth pausing on. `prepack` calling `dist` means the artifact you install is the production build, not whatever happened to be in a working directory. And `vitest` with a `vitest.config.js` at the root is the test runner, which matches the `types-test/` directory in the tree, a directory that exists specifically to type-check the public surface.
The `files` allowlist is the other interesting part. It names `index.js`, `index.es.js`, `index.d.ts` and the source globs under `src/`, plus the four documentation files. Publishing an explicit list means the published package is small and predictable, and it is also why `main`, `module` and `jsnext:main` all point at root-level files rather than into a build directory.
Two of the last three releases exist only to fix TypeScript
This is the part of the release history that tells you something real about who uses the library. Release 3.3.1 on 2026-07-09 fixed a `TS2590` error, expression produces a union type that is too complex to represent, that appeared when using `FontAwesomeIcon` in a Vue render function written as `h(FontAwesomeIcon, { icon })`. It is labelled types-only and non-breaking.
Release 3.3.3 on 2026-07-21 fixed a different type problem: `class` and `style` failing to type-check on the component in JSX and TSX, a regression from an earlier change. The explanation in the notes is technical and correct: the component was declared as a `FunctionalComponent`, whose JSX attribute surface resolves from the component's own props only, so the declaration was updated to also intersect `AllowedComponentProps` and `VNodeProps`, which restored `class`, `style`, `key` and `ref`.
Both bugs are invisible to anyone who is not type-checking. That is the honest characterisation of this library's recent history: the rendering behaviour has been stable, and the churn has been in making the type declarations match how Vue and TSX actually use a component. If you are on TypeScript, these are the releases you want, because they are the ones that make your editor stop complaining about attributes the component has always accepted.
Release 3.3.2 on 2026-07-13 is the only feature in the group: new `canvasSquare` and `canvasRoomy` props for the canvas sizing options introduced in Font Awesome 7.3.0. Again, the feature arrives from the core library and the binding exposes it.
The compatibility boundary is the 3.x branch and Vue 3
The default branch of this repository is named `3.x`, and the README title says vue-fontawesome with Vue 3. That is the whole of the version story the README gives, and it is thinner than the React sibling's compatibility table. If you are on Vue 2, this branch is not for you and the repository gives you nothing further to go on.
One improvement over the previous line is visible in the CI notes attached to 3.3.3: the public API type-check now runs against the oldest supported Vue, which is 3.0.x, as well as the newest. That matters because a type helper exported only by newer Vue versions is exactly the kind of thing that breaks a library's declarations for users on an older 3.x, and catching it requires testing the floor rather than the ceiling.
The 3.3.1 notes also mention adding a strict peer-dependency check job, and fixing a build matrix that was failing to install older Vue versions. Both of those are about the integrity of the project's own test setup rather than about your application, which is the right place for that work but worth knowing if you follow the changelog closely.
Where the README sends you for actual setup
The README delegates all instructions. Official documentation is hosted at docs.fontawesome.com, and it links three Vue pages specifically: Set Up With Vue, Add Icons with Vue, and Adding Icon Styling with Vue. That is the whole tutorial, and it is not an oversight. Setup instructions for a component that depends on a separate core package read the same whether the framework is Vue, React or plain JavaScript, so keeping one copy of them avoids three copies drifting apart.
The third of those links is the one people skip and then wonder about. Icon styling in Vue is a separate topic because passing class or style through to the rendered SVG is exactly what release 3.3.3 fixed at the type level, which tells you it is a real area of friction rather than a hypothetical.
What the repository does carry is process documentation: `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `DEVELOPMENT.md` and an `UPGRADING.md`, plus `.babelrc`, `.prettierrc` and a `.tool-versions` file pinning the local Node version. The README notes that releasing is restricted to project owners and points at the release section of `DEVELOPMENT.md`. None of it is needed to use the component, and all of it is a good sign about how the project is run.
Comparing it with the React binding and with writing your own
There are three reasonable answers to needing icons in Vue, and this is one of them. The other is the Font Awesome webfont, where you get a single font file and swap the SVG-per-icon cost for a request and a flash of unstyled glyphs. The third is a component you write yourself over your own SVG assets, which is entirely reasonable when the icon set is small and internal.
Against the React binding, the comparison is more interesting. Both are official, both are MIT licensed, and both ship from the same organisation, but they are not maintained identically. The React package was rewritten in TypeScript for its 3.0.0 release and carries an explicit compatibility table mapping React versions to core versions to Node versions. This repository publishes a hand-written `index.d.ts` at the root, keeps a dedicated `types-test/` directory, and runs its type check against both ends of the supported Vue range. The maintenance attention just lands in different places.
What both cost you is the same thing: a dependency that tracks an icon library's release cadence. Font Awesome 7.3.0 introduced canvas sizing, and catching up with it required a release in this repository. If you want to be insulated from that entirely, an icon set you control is the only real answer.
Editorial conclusion
vue-fontawesome is a good default for a Vue 3 application already using Font Awesome, mainly because it is the binding the icon library documents and because its type declarations are maintained rather than generated loosely. Version 3.3.3 was published on 2026-07-21, the repository is not archived, and the last push was on 2026-09-13. It is the wrong choice if you want Vue 2, since the 3.x branch and its default branch are named `3.x` and the README title says with Vue 3. Install `@fortawesome/vue-fontawesome` next to a Font Awesome 7 core package, follow the Set Up With Vue page on docs.fontawesome.com, and read `UPGRADING.md` before jumping versions.
Frequently asked questions
Does vue-fontawesome support Vue 3?
Yes, that is what the 3.x line is for. The README title names it as the Font Awesome Vue 3 component, and the default branch of the repository is named `3.x`. Release notes for 3.3.3 mention that the public API type-check now runs against the oldest supported Vue, which is 3.0.x, as well as the newest.
Does vue-fontawesome bundle the Font Awesome icons?
No. The package is the Vue component that renders an icon as an inline SVG, and you install a Font Awesome core package alongside it. The package description reads Official Vue component for Font Awesome 7, and the README links to the Set Up With Vue page on docs.fontawesome.com for the setup steps.
Which version of vue-fontawesome should I install?
The current line is 3.x, published as `@fortawesome/vue-fontawesome`, with version 3.3.3 released on 2026-07-21. The repository includes an `UPGRADING.md` file, and the README gives no compatibility table, so reading that file is the documented path when moving between major versions.
What is the license for vue-fontawesome?
MIT. The `package.json` in the repository states the licence directly and the tree includes a `LICENSE.txt`. MIT carries no reciprocity requirement, so code that depends on this component is unaffected in how it can be licensed.
Why does class or style fail to type-check on FontAwesomeIcon?
That was a regression in the type declarations, fixed in release 3.3.3 on 2026-07-21. The component was declared as a `FunctionalComponent`, whose JSX attribute surface resolves from the component's own props only, so the declaration was changed to also intersect `AllowedComponentProps` and `VNodeProps`, which restored `class`, `style`, `key` and `ref` in TSX and JSX. Upgrading to 3.3.3 is the fix.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/fortawesome-vue-fontawesome)