The Font Awesome SVG JavaScript library for programmatic icon rendering and DOM manipulation
npx @tessl/cli install tessl/npm-fortawesome--fontawesome-svg-core@7.0.0Font Awesome SVG Core is the foundational JavaScript library for the Font Awesome 7 icon system. It provides programmatic icon rendering, DOM manipulation, and configuration management for SVG-based icons. This library enables dynamic icon creation, styling, and transformation without requiring font files or CSS dependencies.
npm install @fortawesome/fontawesome-svg-coreimport {
icon,
library,
dom,
config,
findIconDefinition,
toHtml,
layer,
text,
counter
} from "@fortawesome/fontawesome-svg-core";For CommonJS:
const {
icon,
library,
dom,
config,
findIconDefinition
} = require("@fortawesome/fontawesome-svg-core");import { icon, library } from "@fortawesome/fontawesome-svg-core";
import { faHome, faUser } from "@fortawesome/free-solid-svg-icons";
// Add icons to the library
library.add(faHome, faUser);
// Create an icon
const homeIcon = icon({ prefix: 'fas', iconName: 'home' });
// Convert to HTML
document.body.innerHTML = homeIcon.html[0];
// Or use the abstract representation
console.log(homeIcon.abstract);Font Awesome SVG Core is built around several key components:
icon() function that converts icon definitions to renderable objectslibrary) for managing available iconsdom) for finding and replacing icons in HTMLconfig) for customizing behaviorCore icon rendering functionality for converting icon definitions to HTML, SVG, or abstract representations.
function icon(
icon: IconName | IconLookup,
params?: IconParams
): Icon;
interface IconParams {
title?: string;
titleId?: string;
classes?: string | string[];
attributes?: { [key: string]: number | string };
styles?: { [key: string]: string };
transform?: Transform;
symbol?: string | boolean;
mask?: IconLookup;
maskId?: string;
}Icon library system for registering and managing available icon definitions.
interface Library {
add(...definitions: Array<IconDefinition | IconPack | Array<IconDefinition | IconPack>>): void;
reset(): void;
}
const library: Library;
function findIconDefinition(iconLookup: IconLookup): IconDefinition;Automated DOM scanning and icon replacement with CSS injection capabilities.
interface DOM {
i2svg(params?: { node: Node; callback?: () => void }): Promise<void>;
css(): string;
insertCss(): string;
watch(): void;
}
const dom: DOM;Global configuration object for customizing Font Awesome behavior.
interface Config {
familyPrefix: string;
cssPrefix: string;
styleDefault: IconPrefix | CssStyleClass | IconStyle;
familyDefault: IconFamily;
replacementClass: string;
autoReplaceSvg: boolean | 'nest';
autoAddCss: boolean;
searchPseudoElements: boolean;
searchPseudoElementsWarnings: boolean;
searchPseudoElementsFullScan: boolean;
observeMutations: boolean;
keepOriginalSource: boolean;
measurePerformance: boolean;
mutateApproach: "async" | "sync";
showMissingIcons: boolean;
}
const config: Config;
function noAuto(): void;Complex icon compositions, transformations, and text integration.
function layer(
assembler: (addLayerCallback: (layerToAdd: Icon | Text | Icon[] | Text[]) => void) => void,
params?: LayerParams
): Layer;
function text(content: string, params?: TextParams): Text;
function counter(content: string | number, params?: CounterParams): Counter;
function toHtml(content: any): string;// Core icon types (re-exported from @fortawesome/fontawesome-common-types)
type IconName = '0' | '1' | '11ty' | /* ... 2555 total icon names */;
type IconPrefix = "fas" | "fass" | "far" | "fasr" | "fal" | "fasl" | "fat" | "fast" | "fad" | "fadr" | "fadl" | "fadt" | "fasds" | "fasdr" | "fasdl" | "fasdt" | "fab" | "faslr" | "faslpr" | "fawsb" | "fatl" | "fans" | "fands" | "faes" | "fajr" | "fajfr" | "fajdr" | "facr" | "fak" | "fakd";
type IconFamily = "classic" | "duotone" | "sharp" | "sharp-duotone" | "chisel" | "etch" | "jelly" | "jelly-duo" | "jelly-fill" | "notdog" | "notdog-duo" | "slab" | "slab-press" | "thumbprint" | "whiteboard";
type IconStyle = "solid" | "regular" | "light" | "thin" | "duotone" | "brands" | "semibold";
type CssStyleClass = "fa-solid" | "fa-regular" | "fa-light" | "fa-thin" | "fa-duotone" | "fa-brands" | "fa-semibold";
type IconPathData = string | string[];
interface IconLookup {
prefix: IconPrefix;
iconName: IconName;
}
interface IconDefinition extends IconLookup {
icon: [
number, // width
number, // height
string[], // ligatures
string, // unicode
IconPathData // svgPathData
];
}
interface IconPack {
[key: string]: IconDefinition;
}
// FontAwesome object types
interface FontawesomeObject {
readonly abstract: AbstractElement[];
readonly html: string[];
readonly node: HTMLCollection;
}
interface Icon extends FontawesomeObject, IconDefinition {
readonly type: "icon";
}
interface Text extends FontawesomeObject {
readonly type: "text";
}
interface Counter extends FontawesomeObject {
readonly type: "counter";
}
interface Layer extends FontawesomeObject {
readonly type: "layer";
}
interface AbstractElement {
tag: string;
attributes: any;
children?: AbstractElement[];
}
// Transform and styling types
interface Transform {
size?: number;
x?: number;
y?: number;
rotate?: number;
flipX?: boolean;
flipY?: boolean;
}
type IconProp = IconName | [IconPrefix, IconName] | IconLookup;
type FlipProp = "horizontal" | "vertical" | "both";
type SizeProp = "2xs" | "xs" | "sm" | "lg" | "xl" | "2xl" | "1x" | "2x" | "3x" | "4x" | "5x" | "6x" | "7x" | "8x" | "9x" | "10x";
type PullProp = "left" | "right";
type RotateProp = 90 | 180 | 270;
type FaSymbol = string | boolean;
// Parameter interfaces
interface Params {
title?: string;
titleId?: string;
classes?: string | string[];
attributes?: { [key: string]: number | string };
styles?: { [key: string]: string };
}
interface LayerParams {
classes?: string | string[];
}
interface TextParams extends Params {
transform?: Transform;
}
interface CounterParams extends Params {
}