PETAL (@PetalFramework) header
PETAL (@PetalFramework) profile picture

Tools to supercharge Phoenix development: - Petal Components: 100+ free HEEX components - Petal Pro: a paid boilerplate project Built by @mplatts @nicolashoban

Planet Earth
Joined July 2021
Photo by PETAL (@PetalFramework)Photo by PETAL (@PetalFramework)Photo by PETAL (@PetalFramework)Photo by PETAL (@PetalFramework)Photo by PETAL (@PetalFramework)Photo by PETAL (@PetalFramework)Photo by PETAL (@PetalFramework)Photo by PETAL (@PetalFramework)Photo by PETAL (@PetalFramework)Photo by PETAL (@PetalFramework)
Ask a coding agent for Phoenix UI and you get hand-rolled Tailwind, different every time. One command gives it the real schema for all 213 petal_components instead: claude mcp add petal --transport http mcp.petal.build/mcp Free, no account.
2
9
661
Refreshed Petal site coming soon 😎
The new Petal design system really paying off with our landing page refresh 🤩 Spent a lot of time over the past few months making the entire app UI pretty flex now as you can dial in different looks via the token system. Typeset, radius, gray etc…
1
1
201
petal_components 4.15 just dropped 🚀 The biggest release we've ever done! 21 new components, all free and open source. Sidebar, tree, calendar, date picker, number field, slider, sortable, file upload, alert dialog, timeline, resizable panes and more. 🧵👇 Have a play: playground.petal.build
1
1
5
238
The full list: sidebar, tree, calendar, date picker, number field, slider, sortable, file upload, filters, alert dialog, hover card, context menu, resizable panes, scroll area, scrollspy, timeline, collapsible, separator, kbd, empty state and QR code. Every one has a live demo.
1
103
Some really exciting and stunning new components coming to #petalcomponents that you'll want to reach for in any new project. Including a new headline effect: Border plasma. Here's a sneak peak! Synced to our MCP server, so your coding agent knows how to use them. #MyElixirStatus #elixirlang
1
1
4
401
<.file_upload> Hand it your allow_upload/3 config and it renders the whole thing. Drop surface, previews, progress, cancel, plain English errors. Four variants: dropzone, compact, avatar, gallery. Drag and drop is LiveView's own. Zero JS in the component.
1
62
petal_components 4.13.0 is out - there's now a full data table for LiveView. Sorting, filtering, search, pagination, row selection with bulk actions, column reorder. Free and open source. Try it: playground.petal.build/c/dat… #MyElixirStatus #elixirlang #petalcomponents
1
1
2
252
One struct drives the whole thing - %State{order_by, filters, search, page, page_size}. Wire it to events, or to the URL. In link mode every sort and filter patches the query string, so any table view is a link you can share or bookmark.
1
51
petal_components 4.11 is out. Two stunning components just graduated from Petal Pro to the free library, there's a new incredible toggle_group component. Here's what's new 🧵
1
1
2
269
language_select is now free. The locale dropdown that used to be Pro: flags optional (a flag is a country, not a language), text triggers via variant="code" or variant="label", aria-current plus a check on the active locale, and it degrades gracefully when unconfigured.
1
74
Petal Components 4.8 is out and it's a BIG one! 4 new beautiful components: - toast - carousel - color_scheme_switch - local_time Plus a comprehensive facelift across the whole forms layer. All free, all open source. #MyElixirStatus #elixirlang #petalcomponents
1
1
4
365
Toast is LiveView-native, not a JS library taped on. Push from the server with send_toast, update the same toast in place for loading to success morphs, add an Undo that pushes a real event back to your LiveView, and anything in put_flash renders as a toast for free.
1
88
Petal Components 4.7 has charts now. A <.chart> for Phoenix on Apache ECharts. The whole chart is a plain Elixir map, so it lives server-side and travels the LiveView wire as data. Re-assign the option and it animates in place. Free and open source 🧵 #MyElixirStatus #elixirlang #petalcomponents
1
2
6
428
No JavaScript per chart. You describe it as a map (the ECharts option object), hand it to the component, done. areaStyle: %{color: "petal:fade"} gives you that soft gradient fade in the series' own colour. No callback, no client code, no palette lookup.
1
64
Petal Components has an AI chat kit for Phoenix now 🎉 Streaming chat, tool calls, reasoning blocks, a composer. No client AI SDK - tokens stream over the LiveView socket you already have. Plus much much more. Here's what landed 🧵 #MyElixirStatus #elixirlang #petalpro
1
4
8
332
The chat kit is the bit I'm happiest with. Your model streams to your LiveView process, you push each delta to the bubble, and the bubble owns its own DOM so nothing clobbers the text as it arrives. Tool calls render as real Phoenix components. Not JSON blobs.
1
83
Shipped tooltip and popover in petal_components 4.3.0. The part I'm happy about: zero JavaScript dependencies. No Floating UI, no Tippy. Just the platform doing the work. #MyElixirStatus #elixirlang #petalcomponents
1
1
3
401
The tooltip is pure CSS. It opens on hover and on keyboard focus, and it renders on a dead page before LiveView even connects. No hook to register, no JS to ship. petal.build/components/toolt…
1
36
Petal Components 4.2.0 is out, and it's a big typography upgrade. Typography is the cheapest way to make an app look finished, and the easiest thing to get subtly wrong. So we put the work in the defaults. Here's what changed, and why each bit matters.
1
3
1
5
292
A reworked type scale plus 7 new text components: lead, blockquote, inline_code, text_large, text_muted, text_small and hr. You can lay out a full page from components alone now. No dropping to raw HTML, no hand-tuned Tailwind on every element.
1
47
📢 Petal Pro 4.3.0 is out Headline: private file uploads. Flip `private: true` and your bucket stops being public. Files get served through short-lived presigned URLs instead. Same upload flow you already have, just locked down by default. #MyElixirStatus #elixirlang #petalpro
1
1
2
201
It also works with Cloudflare R2 and Fly Tigris now. One `endpoint` config line points at either (or any S3-compatible storage) and uploads, downloads and deletes all just work. No new API to learn.
1
1
63
Most "AI chat UI" tutorials start with a client-side SDK and a useChat hook. In Phoenix you don't need any of it. Streaming, markdown, generative UI all stream over the LiveView socket you already have. Built a page on it: petal.build/petal-components… #elixirlang #MyElixirStatus #petalcomponents
1
5
6
442
🎉 Petal Components 4.1.0 is out - the biggest release in a while. A proper flyout navigation menu, plus a whole new lane of animated components: - meteors - number ticker - confetti - spotlight cards - text effects. All server-rendered, no Alpine, no npm installs. #myelixirstatus #petalcomponents #elixirlang
1
1
6
2,050
The navigation menu follows the disclosure pattern: plain links inside a button with aria-expanded, Escape and click-away to close. 100% LiveView.JS. Set full_width on an item and you've got a mega menu under your header.
1
1
394
Dual range slider just added to petal_components - ships in Petal Components v4.0.12. Two handles, min/max form fields, prefix/suffix for currency or percentage labels. test.petal.build/components/… #MyElixirStatus #elixirlang #petalcomponents
1
2
152
6 new AI recipes on petal.build - tool calling - structured output - cost tracking - background jobs - provider fallback - building an MCP server Code-only, these are infrastructure patterns, not interactive widgets. petal.build/recipes/ai-promp… #petalpro
1
1
77
Thinking about dropping Alpine.js from petal_components in a future major version - LiveView.JS handles almost all of it now. Quick poll - do any of you use petal_components in dead views (non-LiveView)?
0%LiveView only
0%Some dead views still
0 votes • Final results
3
1
176
Petal Pro 4.1 is out — passkeys and persistent AI admin chat.
1
3
9
497
Passkeys ship with two modes out of the box: → Primary auth — passwordless sign-in with Face ID, Touch ID, or a hardware key → 2FA layer — passkey prompt after password login, replacing TOTP One config flag to enable. Up to 5 passkeys per user. Cloned authenticator detection included.
1
196
Passkeys are coming in Petal Pro 4.1.0! #MyElixirStatus #elixirlang #petalpro
1
3
13
407
Sign-in page with "Sign in with passkey" button
1
3
131
Data Table received a significant upgrade in Petal Pro v4 🤩 Check out the docs here: petal.build/components/data-… #MyElixirStatus #elixirlang #petalpro
1
1
285