CLI
Copy components into your app with npx ivorie, shadcn/ui style.
The ivorie CLI copies component source into your app, so you own and edit it. It needs Angular 22 or newer and Node 22.22.3+ or 24.15+. See Requirements. It has no runtime dependencies.
init
Run it once in your Angular workspace:
npx ivorie initIt does this, and never overwrites a file you changed:
- Writes
components.json. - Writes
<path>/styles/theme.cssand the style file, for examplestyle-nova.css. - Copies
core(cn, ids, positions, the Ivorie config). - Adds
@importlines to your styles file: Tailwind,tw-animate-css, the preset fonts, the theme and the style. - Adds
class="style-nova"to<body>inindex.html. - Writes
.postcssrc.jsonfor@tailwindcss/postcss, if no PostCSS config loads it yet. - Installs
@angular/cdk,tw-animate-css, thecoredeps, the font packages and Tailwind.
| Flag | Default | Description |
|---|---|---|
--project <name> |
the only app | App in angular.json. Needed when there are several. |
--path <dir> |
src/app/ui |
Where components go. |
--prefix <prefix> |
iv |
Selector and class prefix: acme gives <acme-tabs>, acmeButton, AcmeButton. |
--preset <name|code> |
default |
Theme preset. |
--style <name> |
from the preset | vega, nova, maia, luma, rhea, lyra, mira, sera, glass, bento or mono. |
--base-color <name> |
from the preset | neutral, stone, zinc, mauve, olive, mist or taupe. |
--font <name> |
from the preset | system or a font name, for example inter. |
--font-heading <name> |
from the preset | inherit (same as --font) or a font name. |
--radius <name> |
from the preset | default, none, small, medium or large. |
--icon-library <name> |
from the preset | lucide, tabler, phosphor, hugeicons or remix. |
--theme <name> |
from the preset | Accent color over the base color: base (none) or red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose. |
--chart-color <name> |
from the preset | theme (follow --theme), base (the base color's greys) or an accent name. |
--menu-accent <name> |
from the preset | subtle or bold (menu highlights in the primary color). |
--force |
off | Run again over an existing setup. |
-y, --yes |
off | No prompts. |
--skip-install |
off | Print the install commands instead of running them. |
--dry-run |
off | Show what would change. Write nothing. |
add
npx ivorie add button dialog
npx ivorie add --all- Copies each component and the components it needs into
<path>/<name>/. - Rewrites
@inlaylab/ivorie/<name>imports to the copied folders, and the prefix to yours. - A file you changed is skipped. Pass
--overwriteto replace it. - Installs the npm packages the components need, unless
--skip-install.
Import the copy from its folder:
import { IvButton } from './ui/button/public-api';Blocks
npx ivorie add login-01- A block lands in
src/app/blocks/<name>/, next topath. SetblocksPathincomponents.jsonto put blocks elsewhere. - The components it uses are added too. Each
@inlaylab/ivorie/<name>import is rewritten to your copy. - Icons are renamed to your
iconLibrary. Blocks draw app icons with@ng-icons/core, which is installed. --alladds components only, never blocks.
migrate
Updates code written for the old ui-* components:
npx ivorie migrate src- Renames symbols, selectors and import paths (
UiButtonComponent→IvButton,ui-card→iv-card,.../ui-card/...→@inlaylab/ivorie/card). - Turns
<ui-button>into<button ivButton>. - Lists what it cannot fix as
file:line note, for exampleIvTabs.setActive → select. - Running it twice changes nothing.
--dry-runlists the files.
migrate icons
Moves your own <ng-icon> icons to another library:
npx ivorie migrate icons --from lucide --to tabler src- Renames
@ng-iconsnames everywhere in.tsand.htmlfiles (lucideHouse→tablerHome), and the@ng-icons/<set>import. - Covers 185 common icons. An icon with no match stays as is and is listed.
- Install the new set:
npm i @ng-icons/tabler-icons. - The component icons switch with
apply, not with this command.
apply
Change the look of an app that ran init. Pass a preset name or a code from the playground:
npx ivorie apply ivp1_…It rewrites theme.css, writes the new style file, swaps the style and font @import lines, sets the <body> style class, updates components.json and installs new font packages. When the code picks another icon library, it copies that set to <path>/icons-<lib>/, adds provideIvIcons(COMPONENT_ICONS) to app.config.ts, installs @ng-icons/<set> and tells you the migrate icons command for your own icons. Run it again with the same code and nothing changes. The old style file stays; delete it if you did not change it.
| Flag | Default | Description |
|---|---|---|
--project <name> |
the only app | App in angular.json. |
--skip-install |
off | Print the install command instead of running it. |
--dry-run |
off | Show what would change. Write nothing. |
components.json
| Field | Description |
|---|---|
$schema |
The JSON schema, also at /schema/components.json on this site. |
path |
Where components go. |
prefix |
Selector and class prefix. Lowercase letters and digits, starting with a letter. |
style |
The component style. |
tailwind.css |
Your styles file. |
tailwind.baseColor |
The base color of the theme. |
font |
system or a font name. |
fontHeading |
Optional. The heading font. Left out: same as font. |
radius |
default, none, small, medium or large. |
iconLibrary |
lucide, tabler, phosphor, hugeicons or remix. Set by init and apply. |
registry |
Optional. A registry dir or URL for add. |
Presets
A preset names a style, a base color, a font, a heading font, a radius and an icon library. Make one in the playground and copy its code (ivp1_…). --preset default is nova, neutral, the system font, the default radius and lucide icons. Before 1.3 the default style was maia; old codes keep their style.
Registry
The CLI ships its registry. A hosted copy lives on this site at /r/:
npx ivorie add badge --registry https://<docs-host>/rThe items use the shadcn registry format, so npx shadcn add https://<docs-host>/r/r/badge.json also works.