A bowl of lamian starts as one lump of dough. Stretched, folded and stretched again, it doubles with every pull, two strands, four, eight, until there are hundreds.
The dough never changes. The hands do.
135 components across 8 categories. Every one of them works in all 67 noodles, in light and dark.
Triggers an action. Six colour roles, five variants, four sizes, icon-only, loading and disabled states.
Joins related buttons into one control, horizontally or vertically.
A set of pressable buttons, single choice like a segmented control, or multiple like a formatting toolbar.
A menu of actions anchored to a trigger. Built on the native Popover API: top layer, light dismiss and Escape are free.
Copies text to the clipboard and confirms it in place, visually and for screen readers.
An icon toggle that swaps between two states with a small rotation, menu/close, play/pause, sun/moon.
A button that must be held for a moment before it acts. For actions that are hard to undo, without a second dialog.
Label, control, hint and error message wired together, plus form and fieldset layout.
Single-line text entry. Styles every native input type: text, email, password, search, number, date, time, color.
Multi-line text. Grows with its content in browsers that support field-sizing.
A styled native select. Keeps the platform picker on mobile and full keyboard support everywhere.
Native checkbox, restyled. Checked, indeterminate, disabled and invalid states; any colour role.
Native radio button, restyled. Use for one choice from a short list.
An on/off toggle for settings that apply immediately. A native checkbox with role="switch".
A styled native range input with a filled track. Works without JS; mian.js paints the fill in WebKit.
A styled native file picker, and a drag-and-drop zone that wraps one.
An input with leading or trailing addons, text, icons or buttons, inside one border.
A stepper: a numeric input between decrement and increment buttons. Respects min, max and step; hold to repeat.
One-time-code entry. Auto-advances, handles backspace and paste, supports SMS autofill on the first box.
Star rating built from radio buttons, so it submits with a form and needs no JavaScript.
Autocomplete: a text input that filters a listbox as you type. Keyboard navigation and aria-activedescendant included.
A month grid for picking a date, on its own or in a popover as a date field. Full keyboard support and locale-aware names.
Type to add tags as removable chips. Enter or comma adds, Backspace removes, pasted lists are split.
A password input with a show/hide toggle and an optional four-step strength meter.
Pick a colour (or any visual option) from round swatches. Real radio buttons underneath.
A grid of bookable times, available, nearly full or taken, built on radio buttons.
Pick seats for a cinema, theatre, bus or venue: rows, an aisle, taken and accessible seats, and a legend.
Selectable cards for shipping, plans or payment, and pill options for sizes and variants.
Pick a period for a report: presets for the common ranges and two dates for anything else.
A checklist where a finished task is struck through as the box is ticked.
Hours, minutes and seconds as three small fields that move on as you type.
Headings, lead, body, links, quotes and lists that follow the noodle's heading and body fonts.
An image, initials or icon representing a person or entity. Sizes, shapes, presence and stacked groups.
A compact label for status, counts and categories.
Removable tags and toggleable filter chips.
A surface for grouped content: header, body, footer, media and actions.
Data tables with hover, striping, compact density, selection, numeric alignment and sortable columns.
Bordered lists of rows with titles, descriptions, avatars and trailing content, or links.
Keyboard keys and shortcuts.
Inline code and code blocks in the noodle's monospace font.
Key metrics with labels and trend deltas, alone or in a joined row.
Bar, horizontal bar, line/area and donut charts from plain markup. Each noodle draws them in its own style.
A vertical sequence of events with markers, titles, times and content.
Stacked disclosure sections. Native <details>; give them the same name for exclusive open.
Key–value pairs for detail views and summaries.
A horizontal or vertical rule, optionally with a label.
Loading placeholders shaped like the content that is coming.
What to show when there is nothing to show, with a next step.
A count or status dot pinned to the corner of any element, avatars, icons, buttons.
Message bubbles for conversations and assistants, with avatars, timestamps and a typing state.
Nested, collapsible lists, file trees, navigation and outlines, built on native <details>.
Columns of cards for a pipeline, sprint or sales process, counts, colour dots and card meta.
Plan usage against limits, seats, storage, API calls, with warning and over-limit states.
An inbox of notifications with unread markers, icons or avatars, times and inline actions.
A printable invoice or receipt: parties, line items, totals with tax, and payment notes.
Conversion through the stages of a funnel, visits to signups to paid, with the rate between steps.
A ranked list, top sellers, customers, contributors, with medals for the top three and a trend.
A main image with clickable thumbnails, pure CSS, keyboard-friendly, up to six images.
An average rating with stars, the number of reviews and a distribution of 5 to 1 stars.
A post in a feed: author, time, text, media and like / reply / repost / share actions with counts.
The top of a profile page: cover, avatar, name, bio, details, stats and a follow button.
Nested comments with replies, times and reply / like actions.
The toolbar above a list or table: search, quick filter chips, sort, a view switch and the result count.
A bar that appears when rows are selected, the count, actions for the selection, and a way out, with select-all.
Modules and lessons of a course with durations, lesson type, done and locked states, each module a native disclosure.
A property, rental or venue in a results grid: photo, price, key facts, address and a save toggle, the title is the link.
One number that matters, with its change, a sparkline you can hover and a line of context.
Activity by day, or by hour and weekday, as a grid of cells whose depth of colour is the value. Hover a cell for the exact number.
A half-circle meter for one value against a known range: a score, a quota, a target.
How a total splits into parts: one stacked bar and a list with each part’s value and share.
A status page row: a service, its state today and one bar per day of history. Hover a day for what happened.
An audio message as a waveform: play, pause, see where you are and drag to seek.
Inline messages for information, success, warnings and errors, with optional actions and dismiss.
Temporary notifications. Mian.toast() from script, or data-mn-toast on a button. Pause on hover, stack, dismiss.
Linear progress, determinate from aria-valuenow, or indeterminate without it.
Circular progress with a centred value.
Indeterminate loading indicators: ring and dots.
A full-width announcement bar for launches, maintenance notices or cookie-free notes. Dismissible.
The first steps of a new account, with progress, done states and one action per step.
Eight loading indicators, dots, bars, wave, grid, pulse, orbit, ring and a top-of-page line, in the current colour.
A consent notice with equal-weight Accept and Reject, and per-purpose switches, honest by default, dismissible.
A dialog on the native <dialog> element: focus trap, Escape, inert background and focus return from the platform.
A panel that slides in from the right, left or bottom. Also a native <dialog>.
Rich, non-modal content anchored to a trigger, on the native Popover API.
Short labels on hover and focus. Pure CSS; the text is a real element referenced by aria-describedby.
Search-and-run: filterable, grouped, keyboard-driven. Inline or in a dialog opened with ⌘K.
A preview card that appears when hovering or focusing a link, profiles, link previews, definitions.
A menu that opens at the pointer on right-click, or from the keyboard with Shift+F10.
A single show/hide section. Native <details>, no JavaScript.
A horizontally scrolling, snapping track. Swipe, trackpad and keyboard; optional arrows and dots.
Switch noodle and light/dark mode for a page, or scope a noodle to any element.
A scrolling region with thin scrollbars and shadows that appear only where more content is hidden.
Browser, window and phone frames for screenshots, demos and landing pages.
A twelve-track grid for dashboards and a widget frame: title, period, body, footer. It lays out for the width it gets, so it works beside a sidebar.
Soft mesh gradients for a band, a hero or a media frame. By default they are mixed from the noodle’s own colours, so they follow the noodle and the mode; eight named palettes are there when you want a fixed mood.
A small motion system: three durations, three curves, the noodle’s own entrance for anything you add, staggered lists, press and lift feedback, drawn lines, counted numbers and cross-faded changes. All of it stops under reduced motion.
A presentation website: full-height slides that snap, with arrow-key navigation, a counter and progress.
Open roles for a careers page: title, team, location and type, the whole row one link.
Selected projects for an agency or portfolio in mixed sizes: the image, client, what was made and the outcome, each tile one link.
Plans or products side by side: grouped feature rows, included and not-included marks, a highlighted column and a sticky header.
Release notes by date: version, a headline, and changes tagged New, Improved or Fixed.
A directory of integrations or partners: mark, name, category and one line on what it does, each tile one link.
The end of a company or agency page: what happens after you write, direct details, and a short form, side by side.
Containers, section rhythm, display type and grids, the frame every page is built in.
A website header: brand, navigation, actions, and a menu that works without JavaScript on small screens.
The opening section of a page: a display headline, an intro, actions and optional media, stacked, split or centred.
A quiet row of customer or partner wordmarks, with an optional caption.
Features as a ruled editorial grid or with icons, plus a check list for plans and specs.
A grid of tiles in mixed sizes for showing several product details at once.
Images, video and illustrations in a fixed aspect ratio, with captions and a labelled placeholder for photos still to come.
One large pull quote, or a wall of short customer quotes.
Plan tiers with a featured plan, feature lists and a monthly/yearly switch in pure CSS.
A closing band that asks for one thing, sign up, book, subscribe, with an optional inline email form.
A website footer: brand, link columns, legal line and an optional giant wordmark.
A long-read layout: headline, byline, a comfortable reading column, wide figures, drop cap and pull quotes.
The frame of a web app: a sidebar, a top bar and a content area that becomes a drawer layout on small screens.
A documentation page: navigation on the left, the reading column, and an “on this page” list on the right, collapsing to a menu on small screens.
A split sign-in or sign-up page: the form on one side, the brand and a quote or image on the other.
A menu-style list of items with dotted leaders to the price, for restaurants, salons, studios and services.
A grid of people with a portrait, name and role.
Products in a shop grid: image, name, variant, price and a badge, the whole card is one link.
Articles and posts in a grid or as a lead story: image, kicker, headline, excerpt and byline, the headline is the link.
A schedule of times, sessions, speakers and tracks, for events, courses and programmes.
Questions and answers beside a sticky heading, built on the accordion.
Large numbers with a line of context each, results, scale or specs, set in display type.
Numbered steps in a row, how it works, how to order, what happens next.