Quillo UI
877 components, one file each
Buttons, forms, sign-in, date pickers, dialogs, tables, charts and trading charts, commerce, dashboards and more, each one .qwe file to copy into your program. They bring their styles, follow the system's light or dark theme, and work with the keyboard and screen readers. Most are views that add no JavaScript; the rest run in the browser as components.
Layout36Typography26Actions20Forms101Feedback28Overlays20Navigation36Data84Charts67Media24Commerce35Finance50News17Travel16Blogging19Marketing18Dashboard22Social16Scheduling23Mobile200Utilities19
interactive504no-js370mobile211forms176tablet151data128smart100list84chart80commerce68input64navigation63layout59card57finance52gesture48media44dashboard42text39button38feedback38keyboard37social37marketing36table34typography32search31status31user31document30image28picker28link26page26time26banking25calendar24overlay24select24progress23trading22calculator21schedule21travel20grid19settings19menu18news18security18utility18offline17price17blogging16dialog16sheet16swipe15accessibility14drag14notification14tabs14upload14chat13checkout13filter13popover13file12loans12section12audio11loading11profile11coop10forex10icon10code9article8camera8developer8flights8form8print8record8validation8comment7location7onboarding7pricing7video7cart6json6theme6animation5barcode5field5health5keypad5map5planning5qr5scroll5sort5admin4analytics4clock4dates4editor4feed4header4live4notes4parser4photo4player4seo4share4statistics4subscription4toast4analysis3banner3billing3budget3checklist3compare3date3election3games3gloves3gps3haptics3monitoring3number3panes3payment3pen3rotation3sensor3sync3tasks3timeline3timer3toolbar3tracking3undo3units3update3url3voice3wheel3wizard3writing3alerts2balance2capacity2cards2colour2columns2csv2currency2dedupe2device2discount2draft2drawing2education2email2experiment2feeds2files2forecast2fuzzy2help2history2hotels2links2long-press2meetings2merge2messages2money2motion2network2otp2panel2payments2permission2permissions2photos2pin2pinch2query2questions2quiz2rating2reactions2refresh2reorder2report2responsive2retry2scanner2selection2shipping2sign-in2slider2split2stock2storage2store2stories2summary2svg2tax2ticket2till2timezone2tracker2transfer2version2wallet2zoom2accordion1activities1ads1agenda1aggregate1agile1alert1amount1annotate1anomaly1api1app-shell1approval1archive1assessment1audit1autosave1availability1back1backlog1backtest1badge1bank1bar1battery1bibliography1bill1bills1book1bracket1branching1browser1builder1bulk1bundle1business1buy1byline1campaign1carousel1cars1cash1change1changes1check1chips1citation1cleaning1clipboard1cloud1cohort1combobox1comments1compass1conditional1configurator1confirm1conflicts1contact1context-menu1contrast1conversion1converter1cooking1copy1cost1coupon1cron1curl1dark-mode1deadline1debt1decimal1decision1decode1delivery1dependencies1design1detents1diff1disclosure1documents1downloads1dst1duplicates1edit1emoji1empty1encoding1entropy1envelopes1error1event1expenses1explorer1export1fab1faq1fashion1first-run1fit1fixtures1flashcards1flashlight1flesch1floor-plan1formatter1formula1frame1fullscreen1funnel1gallery1game1generator1geofence1goals1grades1grammar1group1groups1guard1handwriting1haptic1heading1headline1heatmap1hours1http1i18n1iban1import1income1indicator1inference1insights1interest1invoice1ios1isbn1job1jsonpath1jwt1kanban1keywords1kiosk1league1learning1level1like1lint1loan1localization1lock1logs1lyrics1mail1margin1markdown1markup1master-detail1matching1memory1mention1modal1mortgage1music1natural1notch1notice1notifications1options1order1orientation1outlier1overflow1overtime1packing1pagination1passcode1password1paste1pattern1payoff1payroll1paywall1people1plans1podcast1pointer1policy1poll1power1preview1profiling1projects1properties1publishing1quality1queue1rail1ranked1ranking1readability1reader1receipt1recipe1recommendations1records1reference1refinance1regex1register1regression1reliability1reload1reply1resize1resources1restaurant1resume1retention1revision1rewards1rings1risk1roles1roster1rota1rules1salary1save-data1savings1schema1screen1seats1seeds1seek1series1shake1shortcuts1sidebar1signature1signup1sizing1slo1slug1splash1sports1spotlight1spreadsheet1sql1stack1staff1standings1startup1status-bar1stepper1steps1sticky1streaks1study1style1subscribe1subtotals1support1survey1switch1tags1team1teams1temperature1template1time-zones1tip1tldr1toggle1torch1tour1tournament1transit1translation1tree1trend1tutorial1typo1unread1unsaved1username1validate1vibrate1viewer1virtual1visualisation1vote1voting1wake-lock1warehouse1waveform1wcag1weather1weight1weights1widget1world1
No component matches. Try fewer words, or take a tag off.
Layout 36
Typography 26
Actions 20
Forms 101
Feedback 28
Overlays 20
Navigation 36
Data 84
Charts 67
Media 24
Commerce 35
Finance 50
News 17
Travel 16
Blogging 19
Marketing 18
Dashboard 22
Social 16
Scheduling 23
Mobile 200
Utilities 19
Use the whole kit
$ curl -O https://quillolang.org/components/quillo-ui.qweuse quillo-ui.qweroute GET / = <html> <head><style>{ui_css}</style></head> <body class="ui-root"> <Button href="/start">Get started</Button> <SiteFooter/> </body> </html>Or only what you use
Each component is its own file, and every one needs theme.qwe: put theme_css in the page's style, and each component brings its own CSS to the pages that show it. A few need another file, which their page names. import and use paths count from the folder of the program's main file, and a component's file takes the others it needs itself.
$ mkdir -p ui && cd ui$ curl -O https://quillolang.org/components/ui/theme.qwe$ curl -O https://quillolang.org/components/ui/modal.qweimport ui/theme.qwe use theme_cssimport ui/modal.qwe use Modalroute GET / = <html><head><style>{theme_css}</style></head><body class="ui-root">...</body></html>With git
$ git submodule add https://github.com/quillolang/components vendor/quillo-ui$ git submodule update --remote vendor/quillo-ui # later, for the newestuse vendor/quillo-ui/quillo-ui.qweMake it yours
Every colour, font and radius is a CSS variable from theme.qwe. Set them again after the kit's styles; class="ui-dark" or class="ui-light" on any element fixes the theme inside it.
:root { --ui-accent: #0a7d55; --ui-radius: 4px; --ui-font: "IBM Plex Sans", sans-serif; }Size and speed
What a program pays for the components it holds, whether or not a page shows them. The kit's scripts/bench.mjs loads its components into one program, then the kit several times over, renamed, as a stand-in for a large app:
| Components in one program | quillo check | Start-up | Memory, running | A page |
|---|---|---|---|---|
| 0 | 0.01 s | 0.01 s | 13 MB | 0.3 ms |
| 100 | 0.07 s | 0.14 s | 70 MB | 0.2 ms |
| 250 | 0.16 s | 0.32 s | 118 MB | 0.2 ms |
| 744 | 0.42 s | 1.09 s | 372 MB | 0.2 ms |
| 2,976 | 1.89 s | 6.58 s | 1443 MB | 0.2 ms |
quillo 0.6.0 (378e64b, 2026-11-01), Apple M5, 16 GB, darwin arm64, 2026-11-01.
- Visitors pay only for what a page shows. A page carries the components it shows and their styles, whatever the program holds.
- The server holds what the program declares. Start-up and memory grow in a straight line, about 1 ms and 0.3 MB a component, once per process (each
--watchreload,--instancescopy and service copy is one). Pages stay fast at any size. - The leanest app takes the files it uses.
quillo-ui.qweis the whole kit in oneuse; picking files keeps a process to what the app shows. Each component's page gives the commands, with the files it needs.