Installation
This guide will show you how to install Takeoff UI from the public npm registry and integrate it into your project.
Prerequisites
- Node.js ≥ 20.12.2
- One of: npm, Yarn, or pnpm
Install Packages
Takeoff UI is published under the @takeoff-ui scope on npm. You can install
the core package alone, or add framework-specific bindings:
Using npm:
npm install @takeoff-ui/core # core web components
npm install @takeoff-ui/react # React bindings
npm install @takeoff-ui/vue # Vue bindings
npm install @takeoff-ui/angular # Angular bindings
Using pnpm:
pnpm add @takeoff-ui/core @takeoff-ui/react @takeoff-ui/vue @takeoff-ui/angular
Using Yarn:
yarn add @takeoff-ui/core @takeoff-ui/react @takeoff-ui/vue @takeoff-ui/angular
Quick Start
After installing, import the core CSS and register the component library for your framework of choice.
Typography Defaults
Takeoff UI uses Geologica as the default font family.
If you want to use Takeoff custom fonts (tk-text / tk-display) instead,
enable them with an opt-in class or data attribute:
<html class="tk-font">
<!-- app -->
</html>
<html data-tk-font="true">
<!-- app -->
</html>
React
Add the core stylesheet in your entry point (e.g. src/main.tsx):
import '@takeoff-ui/core/dist/core/core.css';
Then use a component:
import { TkButton } from '@takeoff-ui/react';
export default function App() {
return <TkButton label="Click me" />;
}
Vue
Add core.css and ComponentLibrary to main.ts file.
import '@takeoff-ui/core/dist/core/core.css';
import { createApp } from 'vue';
import { ComponentLibrary } from '@takeoff-ui/vue';
import App from './App.vue';
createApp(App).use(ComponentLibrary).mount('#app');
<template>
<TkButton label="Click me" />
</template>
Angular
The package was published with Angular 21
@import '@takeoff-ui/core/dist/core/core.css';
import { Component, inject } from '@angular/core';
import { RouterOutlet } from '@angular/router';
import {
FormBuilder,
FormGroup,
FormsModule,
ReactiveFormsModule,
} from '@angular/forms';
import { JsonPipe } from '@angular/common';
import { TkButton, TkInput, TextValueAccessor } from '@takeoff-ui/angular';
@Component({
selector: 'app-root',
imports: [
RouterOutlet,
TkButton,
TkInput,
TextValueAccessor,
ReactiveFormsModule,
JsonPipe,
FormsModule,
],
templateUrl: './app.html',
standalone: true,
styleUrl: './app.css',
})
export class App {
private readonly fb = inject(FormBuilder);
formGroup: FormGroup = this.fb.group({
firstname: [''],
surname: [''],
});
onButtonClick(): void {
alert('Button clicked!');
}
}
<div class="container">
<h4>Button and Event Usage Example</h4>
<tk-button
label="Example Button"
variant="primary"
(tk-click)="onButtonClick()"
></tk-button>
<h4>Reactive Form Example</h4>
<form [formGroup]="formGroup">
<tk-input label="Name" formControlName="firstname" />
<tk-input label="Surname" formControlName="surname" />
</form>
{{ formGroup.getRawValue() | json }}
</div>
<router-outlet />
Next.js (App Router)
In src/app/layout.tsx or src/app/page.tsx:
import '@takeoff-ui/core/dist/core/core.css';
If you need dynamic imports for client-only components:
'use client';
import dynamic from 'next/dynamic';
const TkButton = dynamic(
() => import('@takeoff-ui/react').then(mod => mod.TkButton),
{ ssr: false },
);
export default function Example() {
return <TkButton label="Click me" />;
}
Next Steps
Now that Takeoff UI is installed, head over to the Components section in this documentation to explore available widgets, their props, and usage examples. Happy building!