# forty-cdk > Headless / styleless UI primitives for Angular with WAI-ARIA accessibility built in. Every primitive exposes state, behavior, focus management and keyboard interaction, and applies no styles of its own. Version 0.31.0, documented in 74 pages listed below: 49 primitives, 8 utilities, 11 guides, 3 orientation pages and 3 further entry points. Required peers: `@angular/common` `^22.0.1`, `@angular/core` `^22.0.1`. Optional peers, each unlocking one part of the library: `@angular/forms` `^22.0.1`, `@internationalized/date` `^3.0.0`. ```bash npm install forty-cdk ``` **The package root exports nothing.** `import { ForDialog } from 'forty-cdk'` resolves to an empty barrel and does not compile. Every primitive ships as its own secondary entry point, named after its folder, and the entry point specifier is published before each description below. Each page of the documentation site is published as markdown at that page's own URL plus `.md` — the page at https://tutkli.github.io/forty-cdk/select is https://tutkli.github.io/forty-cdk/select.md. The error roster is the one departure: https://tutkli.github.io/forty-cdk/errors.md carries every `FORCDK-*` code in a single file, and the per-code pages under https://tutkli.github.io/forty-cdk/errors have no markdown sibling of their own. Load the one page you need; `llms-full.txt` is every document at once and is listed under Optional for indexers. ## Getting started - [Installation](https://tutkli.github.io/forty-cdk/installation.md): forty-cdk is a single unscoped npm package that ships one **secondary entry point per primitive**. Installing it adds no styles, no global CSS and no `NgModule` to your application, only the directives you import. - [Getting started](https://tutkli.github.io/forty-cdk/getting-started.md): This page builds one primitive end to end (installed, composed, styled, and bound to a form) so that by the end you have written every kind of code forty-cdk asks for. The primitive is **Switch**, chosen because it is small enough to show whole and is a form control, so it exercises the one API that has an extra step. - [Concepts](https://tutkli.github.io/forty-cdk/concepts.md): forty-cdk is one idea applied consistently: **the library owns behaviour, and you own everything else**. Six conventions fall out of that, and they hold across every entry point. Learn them once on a Switch, and a Table page reads the same way. ## Primitives - [Accordion](https://tutkli.github.io/forty-cdk/accordion.md): `forty-cdk/accordion` — A stack of collapsible sections, optionally allowing multiple panels open at once. - [Aspect Ratio](https://tutkli.github.io/forty-cdk/aspect-ratio.md): `forty-cdk/aspect-ratio` — A container that keeps its content at a fixed width-to-height ratio. - [Avatar](https://tutkli.github.io/forty-cdk/avatar.md): `forty-cdk/avatar` — A user image with a graceful fallback across its loading lifecycle. - [Breadcrumbs](https://tutkli.github.io/forty-cdk/breadcrumbs.md): `forty-cdk/breadcrumbs` — A labelled navigation landmark for a breadcrumb trail: links with aria-current='page' on the current page and decorative separators hidden from assistive technology. - [Button](https://tutkli.github.io/forty-cdk/button.md): `forty-cdk/button` — Turns any element (a native `