Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ body:
attributes:
label: solar_iconkit version
description: Which version are you using? (find it in your `pubspec.lock`)
placeholder: 1.0.0
placeholder: 1.1.0
validations:
required: true

Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ contact_links:
about: See documentation, versions, and API reference.
- name: Interactive icon browser
url: https://solar-icons-web.vercel.app
about: Preview all 1,231 icons and copy Flutter widget code.
about: Preview every icon and copy Flutter widget code.
66 changes: 66 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,72 @@ All notable changes to this package are documented here. The format loosely
follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the
package uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.1.0] — 2026-08-14

Resync with upstream Solar. The catalog grows from 1,231 to **1,247 icons**
(7,482 SVG variants). No constant was removed, and no consumer code needs to
change to keep compiling — but eleven icons now render a different drawing,
so read the visual-changes section before upgrading.

### Added

- **11 brand-new icons**: `cart-4`, `document-2`, `forward-right`,
`list-vertical`, `logout`, `logout-2`, `mirror-2`, `notebook-2`,
`record-audio-circle`, `star-2`, `vanity`.
- **`SolarIcons.legacyAliases`** — a 56-entry map from every retired icon name
to its current replacement.
- **`SolarIcon.resolveName`** — resolves a possibly-retired name to the name
actually shipped as an asset. `SolarIcon.assetPath` now applies it, so raw
strings such as `SolarIcon('magnifer')` keep working after the rename.

### Changed

- **11 icons changed appearance under the same name.** Solar redrew them
upstream. Six had their original drawing moved to a new name:

| Constant | 1.0.x drawing now lives at |
| --- | --- |
| `home` | `house` |
| `reorder` | `reorder2` |
| `stars` | `stars2` |
| `cup` | `mug` |
| `bill` | `bill2` |
| `scale` | `scaling` |

Five more were redrawn with no replacement name: `phone`, `smartphone-2`,
`volume-knob`, `keyboard`, `cloud-snowfall-minimalistic`. Pin `1.0.3` to keep
the old artwork for those. The other 1,236 icons are visually unchanged —
verified by rendering every icon at both versions and diffing the pixels.

- **56 misspelled names corrected upstream**, including `magnifer` →
`magnifier`, `spedometer-*` → `speedometer-*`, `condicioner` →
`conditioner`, `siderbar` → `sidebar`, `recive-*` → `receive-*`,
`*-favourite` → `*-favorite`, `plain` → `plane`, `4k` → `four-k`, and
`winrar` → `win-rar`.

- **Asset bundle shrank to ~5.7 MB** (from ~6.1 MB) despite carrying 16 more
icons, thanks to a fresh SVGO 4 pass. Rendering is unaffected: a sampled
pre/post raster comparison showed a maximum difference of 2.2 %, entirely
anti-aliasing.

- **Golden reference images regenerated.** The `home-2` goldens drifted by 23
pixels out of 480,000 (max channel delta 5/255) after the SVGO pass.

### Deprecated

- The 56 retired names remain available as `@Deprecated` constants whose value
is the replacement name, so existing code keeps rendering the same glyph
while the analyzer points at the new spelling. They are excluded from
`SolarIcons.all`.

### Notes

- `tool/fetch_icons.py` no longer regenerates the catalog purely from Iconify's
browsable listing. That listing omits renamed and hidden entries, so a naive
refresh would have silently deleted 56 shipped constants. The script now
diffs against the committed catalog, maps each retired name to its
replacement, and aborts rather than dropping any name a release has shipped.

## [1.0.3] — 2026-08-02

### Fixed
Expand Down
63 changes: 55 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
[![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/sovanken/solar_iconkit/blob/main/LICENSE)
[![Ko-fi](https://img.shields.io/badge/Support-Ko--fi-FF5E5B?logo=ko-fi&logoColor=white)](https://ko-fi.com/sovanken)

A Flutter package that bundles the entire Solar icon set — **1,231 icons across 6 native styles** (7,386 SVG variants total) — behind a single, type-safe widget API. Zero setup, works offline, integrates with Flutter's `IconTheme` conventions.
A Flutter package that bundles the entire Solar icon set — **1,247 icons across 6 native styles** (7,482 SVG variants total) — behind a single, type-safe widget API. Zero setup, works offline, integrates with Flutter's `IconTheme` conventions.

- **Browse icons**: <https://solar-icons-web.vercel.app>
- **pub.dev**: <https://pub.dev/packages/solar_iconkit>
Expand All @@ -18,7 +18,7 @@ A Flutter package that bundles the entire Solar icon set — **1,231 icons acros

- Six native Solar styles: `linear`, `outline`, `broken`, `bold`, `lineDuotone`, `boldDuotone`.
- One widget: `SolarIcon(name, style: ..., size: ..., color: ...)`.
- ~1,231 generated `SolarIcons.<name>` constants for autocomplete-safe references.
- ~1,247 generated `SolarIcons.<name>` constants for autocomplete-safe references.
- Bundled SVG assets in `assets/icons/`. No network access at runtime, works fully offline.
- Full `IconTheme` integration — size, color, and opacity resolve from the ambient theme when unset on the widget.
- Deterministic asset resolution — `packages/solar_iconkit/assets/icons/{style}/{name}.svg`.
Expand All @@ -42,6 +42,7 @@ A Flutter package that bundles the entire Solar icon set — **1,231 icons acros
- [Option C: Git dependency](#option-c-git-dependency)
- [Option D: Version pin with dependency\_overrides](#option-d-version-pin-with-dependency_overrides)
- [After installing](#after-installing)
- [Upgrading from 1.0.x](#upgrading-from-10x)
- [Quick start](#quick-start)
- [API reference](#api-reference)
- [SolarIcon widget](#solaricon-widget)
Expand Down Expand Up @@ -167,14 +168,45 @@ Verify the install:
import 'package:solar_iconkit/solar_iconkit.dart';

void main() {
print(SolarIcons.all.length); // 1231
print(SolarIcons.all.length); // 1247
print(SolarIcons.home2); // 'home-2'
print(SolarIconStyle.values.length); // 6
}
```

---

## Upgrading from 1.0.x

Release 1.1.0 resynced the catalog with upstream Solar. Nothing was removed and no code changes are required to compile — but **eleven icons now render a different drawing under the same name**, because Solar redrew them upstream.

Six of them had their original drawing moved to a new name. If you want to keep exactly what 1.0.x rendered, switch to the name on the right:

| If you used | 1.0.x drawing now lives at |
| --- | --- |
| `SolarIcons.home` | `SolarIcons.house` |
| `SolarIcons.reorder` | `SolarIcons.reorder2` |
| `SolarIcons.stars` | `SolarIcons.stars2` |
| `SolarIcons.cup` | `SolarIcons.mug` |
| `SolarIcons.bill` | `SolarIcons.bill2` |
| `SolarIcons.scale` | `SolarIcons.scaling` |

Five more were redrawn with no replacement name — `phone`, `smartphone-2`, `volume-knob`, `keyboard`, and `cloud-snowfall-minimalistic`. To keep the old artwork for these, pin `solar_iconkit: 1.0.3`.

The remaining 1,236 icons are visually unchanged.

**Renamed constants.** Solar also corrected 56 misspelled names (`magnifer` → `magnifier`, `spedometer-*` → `speedometer-*`, `condicioner` → `conditioner`, and so on). Every old constant still exists and still renders the same glyph — it is marked `@Deprecated` and resolves to the new name, so the analyzer will point you at the replacement:

```dart
SolarIcon(SolarIcons.magnifer) // still works, deprecation hint in the IDE
SolarIcon(SolarIcons.magnifier) // preferred
SolarIcon('magnifer') // raw strings are redirected too
```

See [`SolarIcons.legacyAliases`](#solaricons-constants) for the full old-to-new table.

---

## Quick start

Three commonly used forms:
Expand Down Expand Up @@ -279,7 +311,7 @@ for (final style in SolarIconStyle.values) {

### SolarIcons constants

Generated file: `lib/src/solar_iconkit_data.g.dart`. Exposes every base icon name as a `static const String` on the `SolarIcons` class, plus an `all` list of every name sorted alphabetically.
Generated file: `lib/src/solar_iconkit_data.g.dart`. Exposes every base icon name as a `static const String` on the `SolarIcons` class, plus an `all` list of every name sorted alphabetically and a `legacyAliases` map of retired names.

```dart
class SolarIcons {
Expand All @@ -288,13 +320,28 @@ class SolarIcons {
static const String heart = 'heart';
static const String rocket = 'rocket';
static const String caseIcon = 'case'; // reserved-word rename
static const String i4k = '4k'; // digit prefix rename
// ... 1,231 total constants
static const String fourK = 'four-k'; // was `4k` before Solar renamed it
// ... 1,247 total constants

static const List<String> all = <String>[/* every icon */];

/// Retired name -> current name, for the 56 icons Solar has renamed.
static const Map<String, String> legacyAliases = <String, String>{
'magnifer': 'magnifier',
'4k': 'four-k',
// ...
};
}
```

Retired names also survive as `@Deprecated` constants whose value is the
replacement, so old code keeps compiling and rendering the same glyph:

```dart
SolarIcons.magnifer // == 'magnifier', flagged by the analyzer
SolarIcon('magnifer') // raw strings are redirected via legacyAliases
```

**Naming rules applied by the generator:**

| Input | Output identifier | Rule |
Expand Down Expand Up @@ -769,7 +816,7 @@ Call from an `initState` or a route enter callback for icons visible in the firs

### Reducing bundle size

The full asset bundle is about **6.1 MB of actual SVG bytes** (7,386 SVGs across six styles, individually minified). Earlier releases quoted 23 MB — that number came from `du -sh` reporting filesystem block-allocation slack (each ~500-byte SVG rounds up to a 4 KB disk block); the actual on-wire content is much smaller. Compressed on the pub.dev archive: ~18 MB (which includes example app, tests, and screenshots).
The full asset bundle is about **5.7 MB of actual SVG bytes** (7,482 SVGs across six styles, individually minified). Earlier releases quoted 23 MB — that number came from `du -sh` reporting filesystem block-allocation slack (each ~500-byte SVG rounds up to a 4 KB disk block); the actual on-wire content is much smaller. Compressed on the pub.dev archive: ~18 MB (which includes example app, tests, and screenshots).

Flutter's tree-shaker does not remove unreferenced assets because `SolarIcon` resolves paths at runtime — so the whole set ships by default.

Expand Down Expand Up @@ -951,7 +998,7 @@ solar_iconkit/
│ └── solar_iconkit_data.g.dart Generated icon name constants.
├── assets/
│ └── icons/
│ ├── linear/ Linear-style SVGs (1,231 files).
│ ├── linear/ Linear-style SVGs (1,247 files).
│ ├── outline/ Outline-style SVGs.
│ ├── broken/ Broken-style SVGs.
│ ├── bold/ Bold-style SVGs.
Expand Down
1 change: 0 additions & 1 deletion assets/icons/bold/accumulator.svg

This file was deleted.

2 changes: 1 addition & 1 deletion assets/icons/bold/adhesive-plaster-2.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion assets/icons/bold/adhesive-plaster.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion assets/icons/bold/airbuds-case-open.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion assets/icons/bold/airbuds-case.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading