vite-awesome-svg-loader
March 29, 2026 ยท View on GitHub
A framework-agnostic Vite plugin that:
- Can import SVGs as:
- Can improve performance of your website by using an alternative SVG loading method.
- Can preserve line width. Images will retain line width regardless of the size.
- Can replace colors with
currentColoror a custom color. - Will automatically minimize your SVGs using SVGO.
- Allows you to create SVG sprites using optional integrations.
A quick glance
Basic inline imports
Set import type in import query:
import image from "./image.svg?url";
import image from "./image.svg?source";
import image from "./image.svg?source-data-uri";
import image from "./image.svg?base64";
import image from "./image.svg?base64-data-uri";
Basic inline transformations
Apply transformations in import query:
import image from "./image.svg?preserve-line-width";
import image from "./image.svg?set-current-color";
import image from "./image.svg?skip-transforms";
import image from "./image.svg?skip-awesome-svg-loader";
Combined inline imports
Combine import type with multiple transformations:
import image from "./image.svg?url&preserve-line-width&set-current-color";
Configuration (recommended)
To avoid repeating import queries for each image, configure default transformations and use inline import queries only to override configuration:
// vite.config.ts
import { defineConfig } from "vite";
import { viteAwesomeSvgLoader } from "vite-awesome-svg-loader";
export default defineConfig({
plugins: [
viteAwesomeSvgLoader({
preserveLineWidthList: [/preserve-line-width\//, /all\//],
replaceColorsList: [/set-current-color\//, /all\//],
urlImportsInLibraryMode: "emit-files",
}),
],
});
SVG symbols
This is how to display SVG images and icons with SVG symbols:
React
import image from "./image.svg";
import icon from "./image.svg";
import { SvgImage, SvgIcon } from "vite-awesome-svg-loader/react-integration";
export default function App() {
return (
<Fragment>
<SvgImage src={image} />
<SvgIcon src={icon} size="48px" color="red" />
<Fragment>
)
}
Vue
<template>
<SvgImage :src="image" />
<SvgIcon :src="icon" size="48px" color="red" />
</template>
<script lang="ts" setup>
import image from "./image.svg";
import icon from "./image.svg";
import { SvgImage, SvgIcon } from "vite-awesome-svg-loader/vue-integration";
</script>
Web components (custom elements)
import image from "./image.svg";
import icon from "./image.svg";
import esc from "escape-html";
import { SvgImage, SvgIcon } from "vite-awesome-svg-loader/web-components-integration";
SvgImage.define();
SvgIcon.define();
document.getElementById("app")!.innerHTML += `
<svg-image src="${esc(image)}"></svg-image>
<svg-icon src="${esc(icon)}" size="48px" color="red"></svg-icon>
`
Vanilla JS (classic API)
import image from "./image.svg";
import icon from "./image.svg";
import { SvgImage, SvgIcon } from "vite-awesome-svg-loader/vanilla-integration";
new SvgImage(image, "#app");
new SvgIcon(image, "#app").setSize("48px").setColor("red");
Installation
-
Run:
npm i vite-awesome-svg-loader -
Update
vite.config.ts:import { viteAwesomeSvgLoader } from "vite-awesome-svg-loader"; export default defineConfig({ plugins: [ viteAwesomeSvgLoader(), // Other plugins... ], // Other configuration options... });
Documentation
The documentation website is the central knowledge base for vite-awesome-svg-loader.