NewFileUpload, and Sheet for the web

Beautiful components for your app and your website

Accessible, animated and styled with Tailwind: for Expo, with zero native code, and for the web. Install the package or copy the code, then make it your own.

npx create-panelui-app@latest

One import, and it already looks like this

Go on, press something. Then switch the theme: every component reads the same tokens, so the whole wall changes at once, corners included.

Skip the component previews
BadgeSecondaryShipped
Attachments
launch-hero@2x.pngUploading · 62%
sales-dashboard.pdfPDF · 2.4 MB
q3-forecast.xlsx
Pull request #218
Opened the pull request2h ago
Review requested1h ago
Checks passed24m ago
MergeWaiting
Check your emailEnter the six digits we sent you.
482
3 to go
Sessions by channelToday
4,812Across the day
SocialSearchDirect
00:0006:0012:0017:0023:00
Overview
Total Revenue$317,904+7.8% vs the one before
Bounce Rate37.6%−8.4% vs the one before
New Customers2,867+4.2% vs the one before
Contributions6 months
1,284Peak in March
DecJanFebMarAprMay
Choose a plan
Set a new milestoneName it, then say when it lands.
Goal name
Target
Date
Minimum payout$2,500
Upload72%
Storage18%
Update availableA newer version is ready to install.
InfoSuccessWarningOutline

Yes. There is no native code in it, so there is nothing to build first.

It is one setting. Every component reads the same tokens, light and dark.

Roles, states and labels are wired into every component.

PA
AssistantOnline
How do I switch the theme at runtime?
Call setTheme from useThemeMode.
Just now
July 2026
SunMonTueWedThuFriSat
Wed Jul 29 2026
KAMLJR
and 12 others
Most used
ComponentState
ButtonStable12.4k
BottomSheetStable9.1k
ColorPickerStable4.8k
FlowAlpha1.2k
Notifications
Push notificationsMentions and replies
Weekly digestEvery Monday morning
SoundsWhen a message arrives
Rate this release4 of 5
Seats
3
Sample text
Storage79%
Photos48%
Documents22%
Apps9%
2
3
4
ShippingStandard, arrives Thursday

And built for the web you already have

A collection of components for React, built on shadcn/ui. Each one is copied into your project, drawn in your theme, and usable from the keyboard.

Copied in, and drawn in your theme
A component is a file the shadcn CLI adds to your project, yours to read and to change. Its colour is one of five roles your theme defines, so it matches the rest of your interface in light and dark.
Fig 1Add and colour
addcomponents/paneluiplanet.tsxkpi.tsxflow.tsxcolor="success"PISWD
add · space / role · p i s w d2 files · --success
Fig 2Keys and motion
↑←↓→glide
arrows · spacerow 2 · column 2 · glides
Keyboard first, motion optional
Grids, boards and canvases take the arrow keys. Every animation stops for anyone who has asked for reduced motion.
Fig 3Same parts
next part · spaceKpi.Value · app + web
The same parts as the app
KPI and Flow have the parts and props of the React Native library. KPI runs on the server and sends no JavaScript.

Built for production Expo apps

Every component follows the same rules: variants computed once at module scope, animations on the UI thread, and overlays that unmount after they animate out.

Fig 1Class press
p-4roundedbg-card
chips · 1 2 3p-4 rounded · 2
Tailwind CSS for React Native
Built on Uniwind — no Babel transform, and roughly 2.4–3× faster styling than NativeWind.
Fig 2Frame meter
offon16.7ms
switch · spaceoff · idle
60fps on the UI thread
Press feedback, switches, sheets, dialogs and tabs run on Reanimated 4 and never touch the JS thread.
Fig 3Swatch stair
panelmoongrasslight
family · 1 2 3 dpanel · light · r 7
Six themes, three families
A theme sets radius as well as colour, so switching one restyles the shape of the UI too.
Fig 4Wall switch
renders 0darklight
rocker · spacedark · flip 0 · 0 renders
Native dark mode
Theme changes are applied natively by Uniwind, without re-rendering your component tree.
Fig 5Screen reader
SaveShare“Save, button”←→
swipe · ← →focus 1/2 · icon hidden
Accessible by default
Every interactive component wires up its role, mirrors its state, and hides decorative icons from screen readers.
Fig 6Package
panelui-native0 native modulesbutton.tsxsheet.tsxtheme.tsnative/ — emptypanelui-native
lid · spaceclosed · pure ts
Zero native modules
Pure TypeScript, tree-shakeable and typed. Runs in Expo Go with no prebuild.

Three theme families, light and dark

A family sets its own radius scale as well as its palette, so switching one changes the shape of the UI, not just the colour.

Panel
The default — neutral greys, moderate corners.
Moon
A near-black canvas, a lavender accent, and elevation carried by hairlines.
Grass
Green accent on warm neutrals, soft generous corners.
Read the theming guide
PanelUI Studio · Free for one project

Feedback and support, answered from one inbox

Studio is the hosted backend for what your users send. Install the panelui-studio SDK, ship a publishable key, and reply from an inbox your team shares. You run no backend of your own, and your users need no account.

  • Feedback

    Reports with screenshots and device context, each one a two-way conversation.

  • Announcements

    Write a message once and show it in every app that asks for it.

  • Support inbox

    Users start a conversation themselves, and your team answers from one place.

Inbox
Resolved

#42 The workout screen freezes.

iOS 26.1v2.4.0 (118)/workout/starten-GB
  1. User

    Tapping start does nothing after the update.

  2. You

    Thanks — fixed in 2.4.1, out today. Can you try again?

  3. User

    Works now, thank you!

Frequently asked questions