Neubrutalism
Black outlines, flat bright fills, and shadows with no blur.
Riso prints for small rooms.
A two-person studio printing tide charts, zines, and sticker sheets in four inks.
Harbor zine no. 4
Buoy sticker sheet
Button states
- Border 2px
- Shadow 4px 4px 0
- Radius 4px
Launch week
How it works
Color
Typography
Characteristics
Ink outlines
Every card, field, and button carries a black border. Component kits use 2px; Gumroad uses 1px.
Zero-blur shadows
A solid copy of the shape sits 4px down and to the right, with no blur or spread. Featured surfaces double the offset.
Flat, saturated fills
Pink, yellow, blue, green, and orange fills sit on a pale or cream ground.
Shadow as state
Hover and press move the element against its shadow. A pressed button lands where its shadow was.
Plain, heavy sans type
Plain sans faces, bold headlines, and medium-weight body text.
One small radius
Corners are rounded by about 4 to 5px, and the same value repeats across components.
Use it
Figma
Hard shadow effect style
- Select a frame and add a Drop shadow in the Effects section.
- Set X 4, Y 4, Blur 0, Spread 0, and the ink color at 100% opacity.
- Save it as an effect style named Shadow/Base.
- Duplicate it at X 8, Y 8 as Shadow/Large for featured cards.
A parent frame with Clip content on cuts the shadow off. Turn clipping off or pad the parent by the offset.
Button with press states
- Draw a frame 4px wider and taller than the button face, with no fill and Auto Layout off.
- Inside it, build the face with Auto Layout, a flat fill, a 2px inside stroke in ink, a 4px radius, and Shadow/Base.
- Make it a component with a State property: Default, Hover, and Pressed.
- In Pressed, move the face 4px right and down and remove its shadow.
- On Default, add a While pressing interaction that changes to Pressed with Smart animate.
The fixed outer frame keeps neighbors from shifting when the face moves.
Palette as variables
- Create a color collection with Ink, Ground, and four Fill variables.
- Add a Dark mode and give Ink and Ground new values there.
- Bind every fill and stroke to a variable.
- Check each text and fill pair with a contrast plugin before publishing the library.
When ink text fails on a fill, lighten the fill rather than changing the text color.
Sticker badge
- Draw a star or circle, fill it yellow, and add a 2px ink stroke.
- Apply Shadow/Base.
- Set a short label in Archivo Black, all caps.
- Group, rotate 6 to 10 degrees, and overlap a panel corner.
One tilted element per view reads as a choice. Several read as disorder.
Starting points
- Pick a pale ground, one ink color, and three to five flat fills.
- Define one border weight, one shadow offset, and one radius, and apply them to every component.
- Design hover, pressed, and focus states against the shadow, then check contrast on every fill.
Research notes & sources
Implementation details on this page are read from shipped code: Gumroad's open-source web app and the MIT-licensed Neobrutalism components library. The style's popular history, including when Gumroad adopted the look and how Figma's marketing spread it, is widely repeated but was not verified for this page and is left out. Raw, document-first web brutalism has its own page.
2020s to present
Web product and marketing design
Component libraries and landing pages
Neo-Brutalism, Neobrutalism
Related styles
- Brutalism, WebRaw web brutalism exposes the document; neubrutalism keeps the bluntness and makes it a polished, colorful component system.
- Flat DesignShares flat fills and no gradients; neubrutalism adds ink outlines and hard shadows.
- MaximalismShares loud color and type, but neubrutalism holds to one border, one shadow, and a straight grid.
- ClaymorphismBoth use bright fills and depth; clay blurs and inflates its shadows, neubrutalism keeps them solid and flat.
- Neobrutalism: Definition and Best PracticesNielsen Norman Group
- Neobrutalism components: Introductionneobrutalism.dev
- neobrutalism-components (source, MIT license)GitHub
- Gumroad web app: tailwind.css themeAntiwork / GitHub
- Gumroad web app: _definitions.scssAntiwork / GitHub
- Gumroad web app: Button componentAntiwork / GitHub
- GumroadGumroad
- Neo-Brutalism UI LibraryGitHub
- Understanding Success Criterion 1.4.3: Contrast (Minimum)W3C
- Understanding Success Criterion 1.4.11: Non-text ContrastW3C

