Sign in

Bruno Stasse

@brunostasse.bsky.social
156 followers 264 following 160 posts

Creator of @silkhq.com • Making on the web what the web can't do • EU/France 🇪🇺 • silkhq.com

PostsRepliesMedia
Bruno Stasse @brunostasse.bsky.social · 19/05/2026
Silk has passed 100k weekly downloads on npm! 🎉
Npm screenshot
021
Bruno Stasse @brunostasse.bsky.social · 07/05/2026
ChatGPT’s mobile web app uses @silkhq.com for its bottom sheets. Silk is now powering native-like interactions inside one of the most-used products in the world 🎉
141
Bruno Stasse @brunostasse.bsky.social · 28/04/2026
Lovable's bottom sheets are built with @silkhq.com. On the web and in the app. Same code. Native feel everywhere.
001
Bruno Stasse @brunostasse.bsky.social · 16/04/2026
Love how AtoBeach.com is built with @silkhq.com 15+ swipeable bottom sheets, a swipeable sidebar. All running at up to 120fps, even in iOS Safari. Beautiful work
011
Bruno Stasse @brunostasse.bsky.social · 15/04/2026
The new docs for @silkhq.com are now live on the website. Every page is available in Markdown, with an llms.txt to guide AI tools. More information on the "Usage with AI Tools" page. Link below 👇
Silk's docs screenshot
220
Bruno Stasse @brunostasse.bsky.social · 01/12/2025
Only 2 days left to take advantage of @silkhq.com Black Friday deal! 25% off all commercial licenses.
001
Bruno Stasse @brunostasse.bsky.social · 26/11/2025
Black Friday Deal ✨ Silk is 25% off for one week. Don't miss it.
Silk — Native-like swipeable sheets on the web — 25% off
112
Bruno Stasse @brunostasse.bsky.social · 08/07/2025
Page with background parallax. 120fps trackpad swipe animation. Animated header fade. Fully accessible. On the web, with @silkhq.com
011
Bruno Stasse @brunostasse.bsky.social · 07/07/2025
Just added an `updateThemeColor()` function to @silkhq.com that lets you update the page `theme-color` used for the iOS status bar while preserving the dimming that makes it blend with the Sheet's Backdrop. Pretty useful when you're switching between light/dark mode from within a Sheet!
001
Bruno Stasse @brunostasse.bsky.social · 05/07/2025
If you're doing cool stuff with @silkhq.com too, send it my way, I'd love to see it!
000
Bruno Stasse @brunostasse.bsky.social · 03/07/2025
This is what the mobile web should have felt like all along. My goal is to make this the new normal.
251
Bruno Stasse @brunostasse.bsky.social · 02/07/2025
Tjek’s eTilbudsavis web app, home to digital catalogs from brands across Scandinavia, is now using @silkhq.com. It looks great, check it out 👇
011
Bruno Stasse @brunostasse.bsky.social · 01/07/2025
Sometimes all you need is a clean, smoothly animated page. 120fps enter/exit animations. Inner scrolling with overshoot. Perfect body scroll locking. Fully accessible. Made with @silkhq.com, on the web.
021
Bruno Stasse @brunostasse.bsky.social · 30/06/2025
Rich in-editor hints for @silkhq.com just shipped! You now get information about each component, sub-component and prop inline as you type. Learn what is required, what things do and how they compose together without leaving you editor.
001
Bruno Stasse @brunostasse.bsky.social · 20/06/2025
Coming soon: Rich code editor hints for Silk ✨ You'll know which sub-components are required, how they compose together and what their props do without leaving your editor.
Screenshot of Silk's rich hints in VSCode
011
Bruno Stasse @brunostasse.bsky.social · 19/06/2025
Long scrollable sheet. Swipe up or down to dismiss with your trackpad. Made with Silk, on the web.
031
Bruno Stasse @brunostasse.bsky.social · 18/06/2025
Silk is getting an upgrade today. It's a letter. silkhq.co becomes silkhq.com
silkhq.com
Silk - Native-like swipeable sheets on the web
Find out how to get access for commercial and non-commercial usage for Silk, the swipeable and accessible modal sheet component for React.
011
Bruno Stasse @brunostasse.bsky.social · 13/06/2025
Apple says the new iOS Safari is all about an immersive, edge-to-edge experience. But after testing it out, that promise doesn’t hold up. In fact, beta 1 delivers the least immersive experience ever, unless you only visit websites from the ‘90s when `position: fixed` didn’t exist.
Screenshot of the new Safari, with a label "Doesn't live up to its promise"
332
Bruno Stasse @brunostasse.bsky.social · 03/06/2025
Sheet with transient detent. The intermediate detent is removed once the sheet reaches the last detent. Swipe up or tap the input to expand. Scroll to dismiss the keyboard. Swipe down to dismiss the sheet. Made with Silk, on the web.
021
Bruno Stasse @brunostasse.bsky.social · 02/06/2025
Just shipped a big revamp of Silk examples' code. Each example is now fully self-contained, making it much easier to just copy/paste into your own project. The generic part of the example is now also structured as compound components, matching Silk's API and providing granular control. v1 → v2
Example using slots as propsExample using compound components
111
Bruno Stasse @brunostasse.bsky.social · 28/05/2025
Detached side drawer. Scrollable, swipeable, stackable. Made with Silk, on the web.
121
Bruno Stasse @brunostasse.bsky.social · 27/05/2025
The backdrop not covering the status bar when opening a sheet on the web makes it feel... subpar compared to native. So in Silk I baked-in the ability to blend them together by automatically dimming the theme-color in sync with the backdrop opacity.
6404
Bruno Stasse @brunostasse.bsky.social · 26/05/2025
Little UX improvement to the music player example that'll come with the code revamp I'm working on: you'll be able to scroll the page right after swiping down the panel, without having to wait for the animation to end.
001
Bruno Stasse @brunostasse.bsky.social · 20/05/2025
Simple swipeable page on the web, made with Silk.
111
Bruno Stasse @brunostasse.bsky.social · 15/05/2025
Want a sheet that can only be dismissed with a button tap? With Silk just set the `swipeDismissal` prop to `false` and the sheet won’t be dismissible by swipe. On iOS the user can still swipe the sheet, but it will snap back into place instead of closing.
011
Bruno Stasse @brunostasse.bsky.social · 14/05/2025
Working on revamping @silk_hq examples' code to make them a lot more flexible and easier to drop into your project. One change I’m making is switching from props as slots to compound components that match the actual API. before → after
Silk bottom sheet example using props as slotsSilk bottom sheet example using compound components
001
Bruno Stasse @brunostasse.bsky.social · 13/05/2025
Detached sheet made with silkhq.co on the web. Natural overshoot, status bar blending with the backdrop, swipe or click outside to dismiss.
111
Bruno Stasse @brunostasse.bsky.social · 06/05/2025
Revamped the Community sheet and made it accessible through the nav. Really like that little sheet switching
020
Bruno Stasse @brunostasse.bsky.social · 02/05/2025
With Silk you get a nice <Sheet.Backdrop> sub-component that animates its opacity automatically as the sheet goes in and out of the view. It also has a special prop to blend it with the iOS status bar, and you can make it respond to swipe or not. All fully configurable.
import { Sheet } from "@silk-hq/components";

const BottomSheet = () => (
	<Sheet.Root>
    <Sheet.Trigger>Present sheet</Sheet.Trigger>
		<Sheet.Portal>
			<Sheet.View>
				<Sheet.Backdrop
				  themeColorDimming="auto"
				  swipeable={false}
				/>
				<Sheet.Content>
				  ...
  			</Sheet.Content>
			</Sheet.View>
		</Sheet.Portal>
  </Sheet.Root>
);
011
Bruno Stasse @brunostasse.bsky.social · 01/05/2025
Using Radix's DropdownMenu or other overlay components? Silk is built to be fully compatible with all of them. Just added a guide about it to the docs.
Screenshot of the docs page "Usage with third-party overlays"
001
Bruno Stasse @brunostasse.bsky.social · 30/04/2025
Toast with natural swipe overshoot. Implemented with @silkhq.bsky.social and React on the web.
001
Bruno Stasse @brunostasse.bsky.social · 26/04/2025
Did you try installing silkhq.co on your home screen? It extends below the status bar there. That's how it looks
121
Bruno Stasse @brunostasse.bsky.social · 25/04/2025
`<Sheet.View>` is Silk's most important sub-component. It defines the area where the sheet is visible, but it's also where you set most of its configuration. It has props for content placement, detents, swipe behavior, interactions outside, and a lot more.
import { Sheet } from "@silk-hq/components";

export default () => (
	<Sheet.Root>
		<Sheet.Trigger />
		<Sheet.Portal>
			<Sheet.View
				contentPlacement="top"
				detents="100px"
				swipeDismissal={false}
				inertOutside={false}
			>
				<Sheet.Backdrop />
				<Sheet.Content>
					Content
				</Sheet.Content>
			</Sheet.View>
		</Sheet.Portal>
	</Sheet.Root>
);
001
Reposted by Bruno Stasse
Mike @mikefrancis.dev · 24/04/2025
After playing with the demo, all I can say is: hnnnnngggg
121
Bruno Stasse @brunostasse.bsky.social · 24/04/2025
Added some very nice quotes to Silk's website
051
Bruno Stasse @brunostasse.bsky.social · 23/04/2025
This move by the DOJ is bad news for the web. Google is singlehandedly founding up to two-thirds of browser engine development (Chromium & Gecko) at the moment. Cut that off and the platform will likely stagnate and slowly become irrelevant...
000
Bruno Stasse @brunostasse.bsky.social · 22/04/2025
Little bouncy card implemented with Silk on the web. Swipe up to dismiss
021
Bruno Stasse @brunostasse.bsky.social · 21/04/2025
Just released Silk v0.9.0, which improves compatibility with Tailwind v4 and some build tools! Silk's CSS styles are now exported from the package, letting you import them as you need in your project.
Announcement: Silk v0.9.0 Released
121
Bruno Stasse @brunostasse.bsky.social · 16/04/2025
Bottom sheets are great, but what about top sheets? Swipeable. 120fps. On the web. Made with Silk.
021
Bruno Stasse @brunostasse.bsky.social · 15/04/2025
ˋ<Sheet.Trigger>` in Silk isn't just used to open a sheet, it’s a versatile component. You can use it to dismiss a sheet, or step to the next detent too.
<Sheet.Trigger>
      Present the sheet
    </Sheet.Trigger>
      
    <Sheet.Trigger action="dismiss">
      Dismiss the sheet
    </Sheet.Trigger>
      
    <Sheet.Trigger action="step">
      Step to the next detent
    </Sheet.Trigger>
031
Bruno Stasse @brunostasse.bsky.social · 14/04/2025
Working on improving Silk's compatibility with Tailwind V4. V4 use of CSS `@​layer` makes Tailwind's styles less specific than unlayered styles. This means you currently need to use a ˋ!` marker to override Silk's (very few) default styles. Aiming to remove the need for that workaround.
020
Reposted by Bruno Stasse
Adam Argyle @nerdy.dev · 11/04/2025
G̶o̶o̶g̶l̶e̶r̶… ex-Googler. nerdy.dev/ex-googler
nerdy.dev
G̶o̶o̶g̶l̶e̶r̶… ex-Googler. · April 10, 2025
My role at Google was eliminated.
4911637180
Reposted by Bruno Stasse
Bruno Stasse @brunostasse.bsky.social · 03/04/2025
I built Silk to feel right on both mobile and desktop. You can swipe sheets with your trackpad, just like switching workspaces or going back in the browser. If you’ve got a mouse, the scroll wheel works too. Or just click the backdrop or close button. No mouse? Hit escape.
132
Bruno Stasse @brunostasse.bsky.social · 11/04/2025
In Silk, the `<Sheet.Root>ˋ sub-component acts like an umbrella that gathers and links together the other sub-components. It holds the states that needs to be shared among them. For example, it is where is set the ˋpresented` prop, which allow you to make the sheet a controlled component.
import { Sheet } from "@silk-hq/components";

const BottomSheet = () => {
  const [presented, setPresented] = useState(false);
 
  <Sheet.Root presented={presented} onPresentedChange={setPresented}>
    <Sheet.Outlet />
    <Sheet.Trigger />
    <Sheet.Portal>
      <Sheet.View>
        <Sheet.Backdrop />
        <Sheet.Content>
          <Sheet.Handle />
          Content
        </Sheet.Content>
      </Sheet.View>
    </Sheet.Portal>
  </Sheet.Root>
};
011
Bruno Stasse @brunostasse.bsky.social · 10/04/2025
Which styling solution do you use these days and would you like to see Silk examples for? CSS and SCSS? Tailwind CSS? CSS Modules? Something else? Let me know in the comments 👇
011
Bruno Stasse @brunostasse.bsky.social · 09/04/2025
In case you missed it, Silk Commercial Plan now starts at €299.
Screenshot of the pricing section.
011
Reposted by Bruno Stasse
Marius Schulz @mariusschulz.com · 08/04/2025
Typesetting on the Web just got more beautiful! Support for `text-wrap: pretty` has landed in Safari Technology Preview 216. @jensimmons.bsky.social's post on the WebKit blog explains how this improves typography in multiple ways: no more ragged edges, poor hyphenation, or short last lines.
1274
Bruno Stasse @brunostasse.bsky.social · 08/04/2025
Swipeable music player. Made with Silk, on the web.
131
Bruno Stasse @brunostasse.bsky.social · 07/04/2025
I've just added a guide to the docs on using Silk's sheet as a controlled component. Let me know your thoughts and if you'd like more guides like this!
Screenshot of the docs page "Implementing a controlled sheet".
141
Bruno Stasse @brunostasse.bsky.social · 05/04/2025
Silk is low-level and unstyled by default. The examples are just a starting point to help you move fast—but you're not limited to them. It's highly flexible and designed to let you build whatever swipeable (or not) sheet UI you may need. Go wild with it!
Unleash the web
041