@tabler/icons-svelte-runes
v3.36.0
Published
A set of free MIT-licensed high-quality SVG icons for Svelte 5+ using runes
Maintainers
Readme
Tabler Icons for Svelte (Runes)
Why This Package?
This package is specifically built for Svelte 5+ using the new runes reactivity system ($props(), $derived, etc.).
- For Svelte 5+ projects: Use this package (
@tabler/icons-svelte-runes) - For Svelte 3/4 projects: Use
@tabler/icons-svelte
Installation
pnpm add @tabler/icons-svelte-runesor
npm install @tabler/icons-svelte-runesor
yarn add @tabler/icons-svelte-runesRequirements
- Svelte 5.0+ with runes enabled
- For older Svelte versions, use
@tabler/icons-svelteinstead
Usage
It's built with ES modules so it's completely tree-shakable. Each icon can be imported as a component.
<script lang="ts">
import { IconHeart } from '@tabler/icons-svelte-runes';
</script>
<IconHeart />You can pass additional props to adjust the icon:
<IconHeart size={48} stroke={1} color="red" />Props
| name | type | default |
| -------- | ------------------ | ------------ |
| size | number \| string | 24 |
| color | string | currentColor |
| stroke | number \| string | 2 |
| class | string | '' |
All other HTML attributes are forwarded to the SVG element.
TypeScript Support
The package includes full TypeScript definitions. Icons are typed as Svelte 5 Component<IconProps>:
import type { Icon } from '@tabler/icons-svelte-runes';
import { IconHeart } from '@tabler/icons-svelte-runes';
// Icon is compatible with Svelte 5's Component type
const MyIcon: Icon = IconHeart;Using Icons in Props
When passing icons as props, use the Component type or any for maximum compatibility:
<script lang="ts">
import type { Component } from 'svelte';
import { IconHeart } from '@tabler/icons-svelte-runes';
interface Props {
icon: Component<any>;
label: string;
}
let { icon: Icon, label }: Props = $props();
</script>
<button>
<Icon size={20} />
{label}
</button>Examples
Basic Icon Usage
<script lang="ts">
import { IconHeart, IconStar, IconHome } from '@tabler/icons-svelte-runes';
</script>
<IconHeart />
<IconStar size={32} color="gold" />
<IconHome stroke={1.5} class="my-icon" />Dynamic Icons with Runes
<script lang="ts">
import { IconHeart, IconStar, IconCircle } from '@tabler/icons-svelte-runes';
const icons = {
heart: IconHeart,
star: IconStar,
circle: IconCircle
};
let selected = $state('heart');
let DynamicIcon = $derived(icons[selected]);
</script>
<DynamicIcon size={32} />
<button onclick={() => selected = 'heart'}>Heart</button>
<button onclick={() => selected = 'star'}>Star</button>
<button onclick={() => selected = 'circle'}>Circle</button>Reactive Size with $derived
<script lang="ts">
import { IconHeart } from '@tabler/icons-svelte-runes';
let isLarge = $state(false);
let iconSize = $derived(isLarge ? 48 : 24);
</script>
<IconHeart size={iconSize} />
<button onclick={() => isLarge = !isLarge}>Toggle Size</button>Migrating from @tabler/icons-svelte
The API is identical, just change the package name:
- import { IconHeart } from '@tabler/icons-svelte';
+ import { IconHeart } from '@tabler/icons-svelte-runes';No other changes needed! Your existing props and usage remain the same.
What's Different from @tabler/icons-svelte?
Internally, this package uses Svelte 5's new features:
$props()instead ofexport let$derivedfor computed values- Modern TypeScript
Componenttype - Optimized for Svelte 5's fine-grained reactivity
Result: Better performance and smaller bundle sizes in Svelte 5 projects!
Sponsors
If you want to support this project, you can become a sponsor on GitHub or just donate on PayPal :)
Contributing
For more info on how to contribute please see the contribution guidelines.
Caught a mistake or want to contribute to the documentation? Edit this page on Github
License
Tabler Icons is licensed under the MIT License.
