Installation
Install Kikita UI from the public npm registry, wire the published stylesheet through Angular CLI, and register the provider in the consumer app.
Kikita UI is published under the @kikita-labs scope on the public npm registry. No registry configuration or auth token is required.
pnpm add @kikita-labs/uiUse the package schematic when possible. It preserves existing style entries and configures the selected Angular project.
ng add @kikita-labs/uiThis docs app keeps the stylesheet in angular.json because that path is verified in a fresh Angular consumer build.
"styles": [
"node_modules/@kikita-labs/ui/styles/kikita-ui.css",
"src/styles.scss"
]Use these options when a consumer app needs to control which parts of setup are written.
| Name | Type | Default | Description |
|---|---|---|---|
| --project | string | — | Targets a specific Angular project when the workspace contains multiple projects. |
| --skip-provider | boolean | — | Skips writing provideKikitaUi() when the app manages providers manually. |
| --skip-styles | boolean | — | Skips adding the package stylesheet to angular.json. |
| --theme | boolean | — | Writes the default theme seed configuration into provideKikitaUi(). Without it Kikita UI uses the same default theme internally and adds no theme code to the app. |
When styles are managed outside Angular CLI, import the public style entrypoint once and register the provider by hand.
@import '@kikita-labs/ui/styles';kui-fieldandkui-iconstyles live in thekui.componentslayer, so both needkikita-ui.csslike every other component. An unlayered application rule overrides them without raising specificity.theme-default.cssis part of@kikita-labs/ui/styles, so the default theme works from CSS alone. The generated theme sheet sits in thekui.tokenslayer, declared beforekui.baseandkui.components, so a variable you write outside any layer wins regardless of source order.provideKikitaUi()setsdata-kui-densityon<html>fromseeds.density, on the server too, unless the page already set it.
The default Lucide set is read at a pinned lucide-static version (1.51.0) and converted to glyph data, not inserted as trusted HTML.
import {
createKuiLucideResolver,
provideKikitaUi,
provideKuiIcons,
} from '@kikita-labs/ui';
// Serve the pinned lucide-static files yourself instead of reading them from the CDN.
export const appConfig = {
providers: [
provideKikitaUi({ icons: false }),
provideKuiIcons(createKuiLucideResolver({ baseUrl: '/assets/lucide' })),
],
};| Name | Type | Default | Description |
|---|---|---|---|
| KUI_LUCIDE_STATIC_VERSION | '1.51.0' | — | Exact lucide-static version the default resolver reads. It changes only with a Kikita UI release. |
| createKuiLucideResolver | (options?: KuiLucideResolverOptions) => KuiIconResolver | — | Reads another lucide-static version or origin, for self-hosted icon files. |
| provideKuiIcons | (icons: KuiIconRegistry) => EnvironmentProviders | — | Registers named icons and resolvers for the injector it is provided in. |
- Allow
connect-src https://cdn.jsdelivr.netin a Content Security Policy, or serve the files yourself withcreateKuiLucideResolverandprovideKuiIcons, and opt out of the default set withprovideKikitaUi({ icons: false }). - A name that is not a Lucide kebab-case name resolves to nothing without a request, and structural icons never use the network.
Update the package and run the migration that ships with it. See the Migrating to 2.0 page for every breaking change.
ng update @kikita-labs/ui- The migration renames only identifiers (
rename-symbols-v2) and skips strings, comments and templates. Names used through a dynamic import are not seen, so search for the old suffixes withgit grep. - If you render on the server, check that a cache in front of it sends
Vary: Accept-Language.