55 free components · MIT licensed
Your app shouldn't
look vibe-coded.
The motion, haptics and accessibility the good apps get right — as production SwiftUI components. Every one is a single file that depends on nothing butSwiftKitUI.swift, so your agent can install one correctly on the first try. Free forever, no sign-up. Point your agent at /ui/llms.txt.
Every preview below runs the same spring values as the Swift component it shows — duration 0.32, bounce 0.12 and four more, used everywhere. Reduce Motion is respected here and on device.
Toggle
Drag the knob, do not just tap it. Release commits on projected velocity, so a short fast flick still switches, and the track colour crossfades under your finger.
Get the free code →Custom Tab Bar
One pill, moved by the layout engine rather than an offset you calculate. The label opens with the pill and leaves instantly, so two are never visible at once.
Get the free code →Section
A titled group of rows that assembles on a stagger instead of appearing at once. Generic over its content, so a section never needs to know what a row is.
Get the free code →Row
Leading symbol, title, optional subtitle, and whatever you want trailing. The separator insets to the title so a stack reads as one list, not a pile of boxes.
Get the free code →Revenue Card
A trend line that draws itself rather than fading in, over a gradient fill, with the figure counting up to meet it and the last point popping into place.
Get the free code →Gauge
A 270-degree arc that sweeps to its value. The arc carries its own start angle, so the label stays upright without the caller counter-rotating anything.
Get the free code →Glass Panel
iOS 26 Liquid Glass with a specular rim, bright at the top-left and gone by the bottom-right. Without that edge, frosted glass just reads as grey.
Get the free code →Segmented Control
The indicator travels between segments instead of cutting, and the value beneath it swaps on the same spring so the two read as one movement.
Get the free code →Activity Indicator
Three loaders that are not the system spinner: bouncing dots on a stagger, a sweeping arc, and equaliser bars. All stop dead under Reduce Motion.
Get the free code →Wheel Picker
A horizontal ruler for weight, age or tempo. Values snap to centre and tick as they pass, framed by a window rather than a line drawn through them.
Get the free code →Slider
The track thickens and the thumb grows on contact, the same trick that makes the system volume slider feel physical, with haptic ticks across steps.
Get the free code →Skeleton
Placeholders shaped like the content that is coming, so nothing jumps when it lands. The shimmer is staggered per row and disabled under Reduce Motion.
Get the free code →Button
Five roles on one interruptible spring, so a rapid double-tap retargets mid-flight instead of queueing. The haptic fires on press-down, not release.
Get the free code →Text Field
The label rises within the box, never onto the border where it would collide with the stroke. The error slot reserves its height so validation never shoves the form.
Get the free code →Search Bar
Cancel is width-animated rather than inserted, so the field shrinks smoothly instead of the button popping in and shoving it sideways.
Get the free code →Code Field
One hidden field drives visible boxes, which is the only approach that keeps SMS autofill working. Per-box fields look right and silently break it.
Get the free code →Stepper
Press and hold to repeat, accelerating to a floor so it never runs away. Digits roll rather than pop, because at hold speed a popping label reads as flicker.
Get the free code →Rating
Tap or drag across the stars. Only the star being set pops — popping all of them at once reads as a glitch rather than as feedback.
Get the free code →Chip
Selection animates on the same spring as the toggle and the tab bar, so a filter row feels like the same control family rather than a neighbour.
Get the free code →Colour Picker
A fixed brand palette, not an infinite wheel. The selection ring sits outside the swatch so the colour being chosen is never altered by its own UI.
Get the free code →Card
One padding scale for every card. Without it each screen picks its own and they drift apart by a few points until nothing lines up.
Get the free code →Badge
Tones resolve to real tinted colours rather than opacity over a solid, because opacity composites against whatever is behind it and drifts between screens.
Get the free code →Icon Bubble
The tinted container every settings row, feature list and empty state reinvents slightly differently. The box scales with the glyph so it stays balanced.
Get the free code →Avatar
Initials are coloured deterministically from the name, so one person is one colour everywhere. The presence dot is ringed to read as cut out, not stuck on.
Get the free code →Neumorphic Card
Two shadows, light from the top-left and dark from the bottom-right. The illusion only holds when the card and its background are the same colour.
Get the free code →Floating Action Button
Actions fan out on a stagger so the menu unfolds rather than simply appearing, and the icon rotates into a close affordance so no second button is needed.
Get the free code →Empty State
The screen you get when there is nothing to show. Most apps ship a blank view here, which reads as a bug rather than as a state.
Get the free code →Confetti
Pieces squash on a sine wave so they tumble edge-on like paper. Pieces that only translate and spin look like falling stickers.
Get the free code →Progress Ring
Determinate and indeterminate. The spinning mode rotates one fixed arc rather than re-trimming a path every frame, which is far cheaper on older devices.
Get the free code →Tooltip
The arrow is part of the bubble shape, not a rotated square behind it. A rotated square shows a seam wherever the bubble is translucent.
Get the free code →Alert
A styled alert that can carry a text field, presented as an overlay so the backdrop dims your actual app rather than the system scrim.
Get the free code →Bottom Sheet
It rises, it does not fade. Dismissal projects the flick, so a short fast swipe closes it the way a long drag would, and the top rubber-bands.
Get the free code →Accordion
The chevron rotates on the same spring as the height change, so the two read as one movement. The body fades rather than sliding up through the header.
Get the free code →Carousel
Off-centre cards shrink and dim continuously as they move, driven by real scroll position rather than by a selected index, so they respond mid-gesture.
Get the free code →Timeline
The connector is drawn by the step above it and stops at the row edge, so the line never overshoots past the final node — the giveaway of a hand-rolled one.
Get the free code →Navigation Bar
The background fades in as content scrolls under it rather than sitting on an opaque slab from the first pixel. It takes an offset; it never owns your scroll view.
Get the free code →Side Menu
The app is pushed and scaled behind the drawer, not merely dimmed. Scaling is what sells the depth — it reads as the app stepping back.
Get the free code →Page Indicator
The active dot stretches into a capsule instead of only changing colour, and each dot is tappable, so it doubles as navigation.
Get the free code →Pull to Refresh
The arc fills in proportion to the pull, so the gesture tells you how much further to go, and ticks once as you cross the commit point.
Get the free code →Toast
Drops in over the app, never inside your layout, with the tick popping a beat after the banner settles. Swipe it away early or let it time out.
Get the free code →Chat Bubble
NewBody and tail are one continuous path, so the border follows the silhouette instead of running around two shapes. Consecutive messages group: corners tighten and only the last keeps its tail.
Get the free code →Streaming Text
NewTokens arrive in bursts of one then forty; this drains toward them at a bounded catch-up rate, so the reply reads at a steady cadence. The caret blinks only while waiting on the model.
Get the free code →Chat Composer
NewOne corner, three jobs — dictate when empty, send when there is a draft, stop while the model answers. The field grows to a line limit then scrolls, so send is never pushed off screen.
Get the free code →The run finished at 04:12. Two rows were rejected for a null tenant_id.
- 1,284,003 records in 38 minutes
- Peak of 9,400 rows/sec
Markdown View
NewReal blocks — headings, lists, quotes, fenced code — with inline parsing handed to Foundation so bold still works inside a bullet. An unterminated fence renders as an open code block.
Get the free code →// Streaming is just a sequence of partial strings.func stream(_ prompt: String) async throws {var reply = ""for try await chunk in client.send(prompt) {reply += chunk
Code Block
NewCopy confirms in place without resizing the button. Four token classes claimed in priority order, so a keyword inside a string stays a string. Long lines scroll rather than wrap.
Get the free code →Reasoning Block
NewShows the line the model is currently on instead of a spinner, replaced as it moves. Collapsed it costs one line; when reasoning ends the header settles into the measured duration.
Get the free code →Tool Call Card
NewNames the action an agent is taking while it takes it. The bar is indeterminate on purpose — a tool call has no measurable progress, so it proves the app is alive without pretending.
Get the free code →Annual plans now account for 61% of new subscriptions1, up from 44% in Q22.
Citation Chip
NewSized to sit inside a sentence without breaking its rhythm, with a fixed width so one- and two-digit citations do not jitter the line. Opens a popover, not a screen.
Get the free code →Token Meter
NewChanges colour at 70% and again at 90%, where the copy changes and the upgrade action appears. A prompt to upgrade at 15% is an advert; the same prompt at 92% is help.
Get the free code →Model Picker
NewPlain-language subtitles and a badge for the trade — fast, balanced, powerful — with the raw identifier kept small. Locked models are shown, not hidden.
Get the free code →Prompt Suggestions
NewStarter prompts on a 45ms stagger, wrapped by a real flow layout rather than a grid — so a short chip and a long one are not forced to the same width.
Get the free code →Voice Orb
NewForty-four bars in one Canvas draw, driven by fast attack and slow release — the envelope a VU meter has. Two incommensurate waves stop the ring pumping uniformly.
Get the free code →Revenue grew 12% this quarter and churn fell to 1.8%. The gain is concentrated in annual plans, which now account for 61% of new subscriptions — up from 44% in Q2.
Message Actions
NewCopy confirms with a tick in place, and the rating is exclusive and latching — tapping the lit thumb clears it. Deliberately quiet: it sits under every reply.
Get the free code →Attachment Tray
NewA progress ring on each thumbnail rather than one shared bar, because three uploads at three speeds cannot be described by a single percentage.
Get the free code →Conversation Row
NewA timestamp that adapts to age — a time today, a weekday this week, a date beyond. Unread is carried by weight and a dot, never by colour alone.
Get the free code →