Command Palette
Search for a command to run...
Fully Animated, Production-Ready
UI Library for React Native
Built for Developers, Designers and Vibe Coders.
Production-ready animated components with zero complexity.
Mobile First Designed Components
Fleet UI is a mobile first designed component library. Also support Variants, Type-Safe, and Accessibilities.
Interactive Demo
Select a component to see it in action.
Engineered for Performance
Built close to the metal. Fleet UI leverages C++ bindings and worklets to deliver native-grade performance.
Zero Runtime Overhead
Built on Unistyles with C++ bindings. Styles computed ahead of time or on UI thread. Native performance, always.
Type-Safe Tokens
Full TypeScript design system. Change once, propagate everywhere. Autocomplete for all your tokens.
Reanimated Core
Every animation driven by worklets. 120fps smooth on any device. Complex gestures made simple.
Designed for Expression
Craft stunning, accessible interfaces that feel alive. Modern aesthetics meet strict usability standards.
Universal Minimalism
Stop looking like a Bootstrap app. Fleet UI help you to create apps that looks like Series B Quality apps.
Truly Mobile First
Not just a web port. Touch targets, native gestures, and mobile patterns from day one.
Accessible by Default
ARIA roles, contrast ratios, screen reader support. Inclusive design is not an afterthought.
Less Code. More Impact.
We handle the complexity so you can focus on shipping.
import type { ReactNode } from 'react';
import { forwardRef, isValidElement, useCallback, useEffect, useMemo } from 'react';
import {
ActivityIndicator,
type GestureResponderEvent,
Pressable,
Text,
View,
} from 'react-native';
import Animated, {
useAnimatedStyle,
useSharedValue,
withSpring,
} from 'react-native-reanimated';
import { StyleSheet } from 'react-native-unistyles';
import { useAnimatedVariantColor } from 'react-native-unistyles/reanimated';
import type { ButtonProps, ButtonSize } from './Button.types';
export const buttonStyles = StyleSheet.create((theme, _rt) => {
const containerCompoundVariants = theme.utils
.getColorSchemePaletteEntries(theme)
.flatMap(([scheme, palette]) => {
const hasSolidColor = theme.utils.paletteHasSolid(palette);
return [
{
colorScheme: scheme,
variant: 'filled' as const,
styles: {
backgroundColor: hasSolidColor
? palette.solid
: palette.content_inversed,
_web: {
_hover: {
backgroundColor: palette.hover,
},
},
},
},
// ... more variants
];
});
// ... styles implementation
return {
container: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
borderRadius: theme.rounded.md,
// ... more styles
},
// ...
};
});
// Animation Constants
const SPRING_CONFIG = {
stiffness: 1600,
damping: 65,
mass: 2.5,
};
const AnimatedPressable = Animated.createAnimatedComponent(Pressable);
export const Button = forwardRef<View, ButtonProps>((props, ref) => {
const {
colorScheme = 'primary',
variant = 'filled',
size = 'md',
loading = false,
children,
onPress,
// ... other props
...rest
} = props;
const scale = useSharedValue(1);
const opacity = useSharedValue(1);
buttonStyles.useVariants({
colorScheme,
size,
variant,
// ...
});
const animatedStyle = useAnimatedStyle(() => ({
transform: [{ scale: scale.value }],
opacity: opacity.value,
}));
const handlePressIn = useCallback(
(event: GestureResponderEvent) => {
scale.value = withSpring(0.94, SPRING_CONFIG);
opacity.value = withSpring(0.86, SPRING_CONFIG);
},
[scale, opacity]
);
// ... more event handlers
return (
<AnimatedPressable
ref={ref}
style={[
buttonStyles.container,
animatedStyle,
]}
onPress={handlePress}
onPressIn={handlePressIn}
{...rest}
>
{resolvedChildren}
</AnimatedPressable>
);
});
Button.displayName = 'Button';import { Button } from '@fleet-ui/components';
export function Example() {
const handlePress = () => {
// Handle press
};
return (
<Button
variant="solid"
size="md"
onPress={handlePress}
>
Get Started
</Button>
);
}Your Own Token Architecture
A three-tier token system designed for scalability.
// Primary (Accent) - Light Scale
const primaryLightScale: ColorScale = {
'1': '#f0ffff',
'2': '#dbffff',
'3': '#77fbff',
'4': '#00e7ff',
'5': '#00c5ff',
'6': '#0098ff',
'7': '#0069bb',
'8': '#004679',
'9': '#002f4e',
'10': '#002236',
'11': '#001e2e',
};
export const rawColors = {
neutral: {
light: neutralLightScale,
dark: neutralDarkScale,
},
primary: {
light: primaryLightScale,
dark: primaryDarkScale,
},
white: '#ffffff',
black: '#000000',
transparent: 'transparent',
} as const;Choose Your Installation Track
Whether you want full ownership of the source code or a traditional package dependency.
Track A: Local Install
Copy-paste components into your project. You own the code.
pnpm dlx @fleet-ui/cli initTrack B: Package Install
Standard npm dependency. Receive updates automatically.
pnpm add @fleet-ui/core @fleet-ui/componentsReady to Ship Beautiful Apps?
Start building in minutes. No configuration needed.