Liquid Metal Buttons · chrome & liquid metal for any website · v1.0

Make every button liquid.

Chrome, gold, mercury, holographic and 8 more metals on your own buttons, links, badges and cards. The reflections follow your pointer, hover melts the metal, a press squishes it and ripples. It stays a real button, and the label stays readable. A script tag, a React component or a Framer component.

Buy Liquid Metal Buttons · $12Open the playground

One-time payment · Instant download · Single-project license · Free v1.x updates

Move your pointer. Then scroll through all 12

Showcase: all 12 metals

  1. Chrome

    Polished mirror chrome. The horizon in it moves with your pointer.

    preset="chrome"Try Chrome with your label →
  2. Gold

    Warm, deep yellow gold for the button that matters most.

    preset="gold"Try Gold with your label →
  3. Mercury

    The most liquid one. Hover it and the metal melts under the pointer.

    preset="mercury"Try Mercury with your label →
  4. Holographic

    Pastel rainbow foil, with a dark label that stays readable on every color.

    preset="holographic"Try Holographic with your label →
  5. Gunmetal

    Dark blue-grey steel with a light label. Quiet, serious, still shiny.

    preset="gunmetal"Try Gunmetal with your label →
  6. Rose Gold

    Pink gold for softer brands, with the same contrast-safe label.

    preset="rose-gold"Try Rose Gold with your label →
  7. Black Chrome

    A near-black mirror. Looks expensive on light pages.

    preset="black-chrome"Try Black Chrome with your label →
  8. Titanium

    Brushed grey with a fine grain and a hint of color.

    preset="titanium"Try Titanium with your label →
  9. Copper

    Orange-red copper, warm against dark backgrounds.

    preset="copper"Try Copper with your label →
  10. Oil Slick

    Dark metal with a rainbow sheen that shifts as it flows.

    preset="oil-slick"Try Oil Slick with your label →
  11. Ice

    Cold, pale blue metal for winter launches and clean tech.

    preset="ice"Try Ice with your label →
  12. Neon Edge

    A glowing violet rim around a dark fill. Focus it with Tab to see the glow.

    preset="neon-edge"Try Neon Edge with your label →

Buttons, pills, icons, badges and cards

Five variants, each with sizes, radius and rim thickness. With no button or link inside, the tag itself becomes the metal: a badge, a price card, any box.

  • Button variant="button"

  • Pill variant="pill"

  • Icon button variant="icon"

  • NewBetaLive

    Badge variant="badge"

  • Annual planTwo months free. Cancel any time.

    Card variant="card"

Still your button

The metal is a layer inside your own button or link, behind the label. Tab, Enter and Space, form submits, links, disabled and screen readers all work as they did. Try it here.

A form

Press Enter in the field, or Tab to Subscribe and press Space.

A button, a link, a disabled button

A real link

Tab through them: each has its own focus ring and glow. Screen readers hear a button, a link and a dimmed button.

30 buttons, one WebGL context

Every metal surface on a page is drawn by one shared renderer. These numbers are live, from this page. Scroll away and the frame rate drops to paused.

  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
WebGL contexts
–
Metal surfaces on this page
–
Frames / s
–

Playground

Type your label, pick a metal, a variant and a size, then shape it. The code under the preview follows along: copy it for a script tag, React or Framer.

Hover it, press it, Tab to it.

<script src="/liquid-metal-buttons.min.js" defer></script>

<pf-liquid-metal preset="chrome" variant="pill" size="lg" weight="600">
  <button type="button">Get started</button>
</pf-liquid-metal>

11/28
Variant
Size
auto
auto
Label color and stage

Any label color stays readable: the metal behind it adapts to keep 4.5:1.

Hover
Press
1.00
1.00
0.60

Like what you made? The snippet runs with the script from the download.

Buy Liquid Metal Buttons · $12

Works with

  • FramerCode component: label, link or your own component, properties panelIn the v1.0 download
  • WebflowCustom attribute data-liquid-metal on any Button, or attach by classIn the v1.0 download
  • Plain HTML / any site<pf-liquid-metal> around your <button> or <a> + one scriptIn the v1.0 download
  • WordPressCustom HTML block, or skin the Button block by classIn the v1.0 download
  • ShopifyTheme asset + Custom Liquid; Add to cart keeps workingIn the v1.0 download
  • Squarespace, WixCode Injection / embed block (plan must allow custom code)In the v1.0 download
  • React, Next.js, Vite<LiquidMetal onClick> renders a real <button> or <a>, server-renderedIn the v1.0 download

What it does

  • 12 metals. Chrome, gold, mercury, holographic, gunmetal, rose gold, black chrome, titanium, copper, oil slick, ice and neon edge, or your own colors, fill, iridescence and brushed grain.
  • Alive, not busy. Reflections follow the pointer anywhere on the page (and the tilt of a phone). Hover melts the metal, a press squishes it and sends a ripple from your finger, focus glows, and a glint sweeps across now and then.
  • Still your button. The metal is a layer inside your <button> or <a>, behind the label. Tab, Enter, Space, forms, links, disabled and screen readers work exactly as before.
  • Readable labels. Behind the label, the metal stays in a brightness range with at least 4.5:1 contrast against the label color, whatever the reflections do. Pick any label color; the metal adapts.
  • Buttons, pills, icons, badges, cards. Five variants with sizes, radius, rim thickness, label font and weight. Or skin buttons already on the page with a selector or a data attribute.
  • Many on a page. Every button on the page shares one WebGL context: 30 buttons cost one context, not 30. Offscreen ones pause, idle ones skip frames, and quality steps down on slow devices.
  • Respectful. Reduce Motion shows still metal. Without WebGL you get a CSS version of the same metal, with the same contrast.
  • Same settings everywhere. HTML attributes, data attributes, React props, or Framer's properties panel.

What's in the download

  • liquid-metal-buttons.min.js: drop-in script for any website (36 KB, 14.7 KB gzipped)
  • liquid-metal-buttons.esm.js + TypeScript types, for bundlers
  • react/LiquidMetal.tsx: React component (React 18+, server-rendered, renders a real <button> or <a>)
  • framer/LiquidMetal.tsx: the Framer code component, with a link, tap event and Framer's font picker
  • demo.html with every preset and variant, forms, links and skinning existing buttons; quick starts for each platform
  • Free updates to v1.x

Single-project license (LICENSE.md in the download): one website or project per license.

Install in about a minute

  1. Upload liquid-metal-buttons.min.js from the download to your site.

  2. Add the script once, and wrap any button or link in a <pf-liquid-metal> tag. It stays your button.

  3. Pick a preset and a variant, or set size, radius, label color and the rest as attributes.

<script src="/liquid-metal-buttons.min.js" defer></script>

<pf-liquid-metal preset="chrome" variant="pill">
  <a href="/start">Get started</a>
</pf-liquid-metal>

Squarespace and Wix: add the script and the tag in a Code or Embed block (your plan must allow custom code). The download's README has a quick start for every platform and the full settings reference.

Liquid Metal Buttons

$12 one-time

  • Script tag, React and Framer builds
  • All 12 metals, five variants and every setting
  • Free v1.x updates
  • Single-project license
Buy on Polar · $12

Secure checkout by Polar. Instant download after payment.

FAQ

Where does it work?

Anywhere you can add a script tag: Webflow, WordPress, Shopify, Squarespace, Wix, plain HTML. Also React/Next.js and Framer. Site builders need a plan that allows custom code.

Does my button still work like a button?

Yes. The metal is drawn in a layer inside your button or link, behind its label, and ignores the pointer. Clicks, Tab and focus, Enter and Space, form submits, links, disabled and screen readers are all your element's own. Take the tag away and the element is exactly what it was.

Can people read the label?

Yes. Behind the label, the metal is kept in a brightness range that gives at least 4.5:1 contrast (WCAG AA) with the label color, while the rim keeps the full shine. We measured it on every preset. If you change the label color, the metal adapts.

What about pages with lots of buttons?

Every button on the page shares one WebGL context and one renderer, so 30 buttons cost about what one does. Buttons offscreen don't render, idle ones skip frames, and quality steps down on slow devices. It also shares the page-wide budget with our other WebGL products.

Can I use it on buttons my site builder makes?

Yes. Give a Webflow button the custom attribute data-liquid-metal="gold", or point one tag at a class: attach=".cta-button". Shopify, WordPress and Squarespace buttons work the same way.

What about Reduce Motion and old browsers?

With Reduce Motion on, visitors see still metal. Without WebGL there's a CSS gradient version of the same metal, with the same label contrast.

Does it slow my page down?

The script is 14.7 KB gzipped with no dependencies, and draws only buttons that are on screen and changing. In our tests 30 buttons on one page ran at 40-55 fps even on a software renderer with no GPU.

What's the license?

Single project: one website or project per purchase. The details are in LICENSE.md in the download.

Do I get updates?

Yes, free updates for v1.x.

Questions before buying?

Email hi@gunnargray.com.

Hear about updates

The launch, new metals, v1.x releases and the occasional new tool. No more than that.

Liquid Metal Buttons $12 · 12 metals · one-timePlaygroundBuy