Publishing
Publishing is the bridge between the curate side and the use side. When you publish an icon pack, the current set of assigned slots gets frozen into an immutable release that developers can install.
Namespace
Section titled “Namespace”Every published pack has a three-part identifier:
org / project / packFor example: acme/brand/core-icons
| Segment | Scope | Example |
|---|---|---|
| org | Globally unique | acme |
| project | Unique within the org | brand |
| pack | Unique within the project | core-icons |
This is what developers pass to the CLI when installing.
Slug rules
Section titled “Slug rules”Slugs are auto-generated from the names you give your org, project, and pack:
- Lowercase letters, numbers, and hyphens only
- Derived automatically —
Core Iconsbecomescore-icons - Collisions within the same scope get a numeric suffix
- Slugs can’t be set manually in v1
What happens when you publish
Section titled “What happens when you publish”When you hit Publish:
- All currently assigned slots are snapshotted
- Empty or unassigned slots are excluded
- A release hash is generated — an opaque 12-character identifier like
8f3a9c2d14be - If nothing material has changed since the last publish, Icon Forge returns the existing release as
noop - The release is frozen — the manifest, component source files, and framework archives all point to that version
Developers install by pack name and get the latest release by default. They can also pin a specific release hash when they need a fixed version.
Before you publish
Section titled “Before you publish”Make sure:
- The slots you care about are assigned
- The slot names are the component names you actually want to ship — this is what developers will import
- The assigned icons are finals, not temporary placeholders
Everything assigned at publish time becomes the release. Unassigned drafts stay in the workspace.
Latest release status
Section titled “Latest release status”The pack panel keeps the latest published release visible so you can confirm what is currently installable:
- The release hash
- When it was published
- How many slots were included
If your current assigned slots already match that latest release, publishing returns the same hash instead of creating a new one.
How publishing connects to the CLI
Section titled “How publishing connects to the CLI”A few things that matter to the install side:
- Latest means “most recent published release for this namespace”
- Pinned install means “install this exact release hash, not latest”
- Slot names become component names —
check-circlebecomes<CheckCircle /> - Namespace slugs become the install identifier —
acme/brand/core-icons - Assigned slots only means drafts and empty slots never ship until you attach them to a named slot and publish