Sign in

Hawk Ticehurst

@hawkticehurst.com
1.7K followers 327 following 605 posts

UX Engineer @vscode.dev. He/Him 🕸️ hawkticehurst.com 📍 New York, NY

PostsRepliesMedia
Hawk Ticehurst @hawkticehurst.com · 10/05/2026
A year of work later and we can finally tie a bow on this series of web component perf threads. I built a fully declarative, compile-time reactive framework on web components. In the latest JS Framework Benchmark, Roqa is the 2nd fastest (unflagged) – beating Ripple, Vue Vapor, Solid & Svelte. 🏎️💨
Screenshot of the official JS Framework Benchmark run for Chrome 148. The implementation for Roqa is highlighted, showing it is in the second place position.
2243
Hawk Ticehurst @hawkticehurst.com · 04/02/2026
It's wild how much has changed in the last 100 days (literally) –– both in terms of LLMs and VS Code agent features. @vscode.dev release notes are now generated with a tiny custom web app. Took 1 day to design and build. I would have never considered even attempting this before.
250
Hawk Ticehurst @hawkticehurst.com · 19/01/2026
And that's a first (first) for me 🍾
Hacker News front page. "CSS Web Components for marketing sites" blog post is in the number one spot
000
Hawk Ticehurst @hawkticehurst.com · 11/01/2026
You can actually do this! Altho it's admittedly a bit clunky 1. Disable all extensions (globally) 2. Now in each new workspace, click the "Enable (Workspace)" option for each extension you want enabled in that workspace *Option can be found by clicking the split button dropdown on extension pages
A VS Code extension page showing the "Enable" extension split button menu. The menu has two options "Enable" and "Enable (Workspace)". The "Enable (Workspace)" menu item is highlighted.
110
Hawk Ticehurst @hawkticehurst.com · 01/01/2026
Not sure if you were able to figure out how to open chat, but if not there's a few ways: 1. Top bar icons (see screenshot) 2. Command palette: "Chat: Open Chat" command 3. `Cmd/Ctrl + Option + B` keybinding If those don't work perhaps chat is disabled or not installed?
Top right corner of VS Code. Two red arrows point at two different icons in the top bar that will open the VS Code Chat view when clicked.
110
Hawk Ticehurst @hawkticehurst.com · 28/12/2025
For special situations, we go even further and will call out that a tool is about to edit a "sensitive file" (see below) Long short: You should never end up in a situation where an agent decides to `rm -rf` your files and then does it, UNLESS you have explicitly given permission for that to happen
VS Code chat thread. A prompt message says "Can you update package.json to add typescript as a depedency?" A tool call permission widget is rendered below the prompt saying "Allow edits to sensitive files? The model wants to edit sensitive files (package.json). Do you want to allow this?" A file diff is shown below that text and then two buttons saying "Allow" and "Skip".
120
Hawk Ticehurst @hawkticehurst.com · 24/12/2025
💯 Political and otherwise the vibes have been sus for a very long time
Beginning of New York Times article from 2021 that reads: “Nicki Minaj and Husband Sued, Accused of Harassing Sexual Assault Victim. Jennifer Hough said in a lawsuit filed in New York that the couple pressured her to recant her account of the rapper’s husband, Kenneth Petty, sexually assaulting her in 1994.”
010
Hawk Ticehurst @hawkticehurst.com · 17/12/2025
First NYC winter has not disappointed so far. After 25 years in Seattle, feels like I’ve stepped into some kind of holiday movie — winter wonderland vibes go crazy
Snow covered pathway in Morningside Park at nighttime. A large fallen tree branch sits in the foreground. An ornate lamp post and stone stair case sit just beyond in the distance. Black and white filter applied to photo.A yellow orange sunset in Central Park. Foreground contains a snow covered area with a lamp and slanted tree. Just beyond is the Jacqueline Kennedy Onassis Reservoir. In the background is the NYC skyline.A partially frozen lake in Central Park at night time. A very small island sits in the middle of the lake containing trees strung up with thousands of colored holiday string lights. A few hundred geese sit on the ice hanging out. In the background are a few skyscrapers.An expansive snow covered field in Central Park. Footsteps in the snow criss cross everywhere. A lonesome soccer net sits in the middle of the field. In the distance a stark black and a silvery glass clad skyscraper rise up from a tree covered horizon. The sky is a light pale blue to pale yellow gray gradient.
050
Hawk Ticehurst @hawkticehurst.com · 09/09/2025
Video is WIP, but wanted to share a side quest I went on adding some of the ideas from @trueadm.dev's Ripple, esp the control flow I've never seen anyone support the execution of inline functions in an `html` tagged template (pls correct me), but this is a *really* cool and powerful primitive y'all
VS Code Insiders showing an Example.js file. The file contains:

import { Component, html, defineComponent } from '../../@lib/client.js';

class CounterButton extends Component {
  count = 0;

  render() {
    return html`
      <button
        onclick=${() => {
          this.count++;
          this.rerender();
        }}
      >
        Clicked ${this.count} ${this.count === 1 ? 'time' : 'times'}
      </button>
      ${() => {
        if (this.count === 5) {
          return html`<p>You got to 5! Keeping going!</p>`;
        }
        if (this.count === 10) {
          this.count = 0;
          return html`<p>Incredible! You win!</p>`;
        }
      }}
      <ul>
        ${() => {
          const items = [];
          for (let i = 1; i <= this.count; i++) {
            items.push(html`<li>Item ${i}</li>`);
          }
          return items;
        }}
      </ul>
    `;
  }
}

defineComponent('counter-button', CounterButton);
340
Hawk Ticehurst @hawkticehurst.com · 29/08/2025
How funny! You’re the one who snagged the "ripple" NPM package! No joke, I was working on component model I was calling Ripple earlier this summer that has a *shockingly* similar shape to your ripple. I really love how much further you pushed the syntax tho, esp the native JS control flow!
An old Obsidian note containing the following code snippet:

import {
  Component, 
  signal
} from 'ripple';

class Button extends Component {
  count = signal (0);

  increment() {
    this.count(this.count() + 1);
  }

  <button onclick={this.increment}>
    Count is {this.count()}
  </button>

  <style>
    button {
      color: pink;
    }
  </style>
}
140
Hawk Ticehurst @hawkticehurst.com · 29/03/2025
Congrats to @zachleat.com for expanding into the menswear business. Huge!! 🔥
A rack of men’s shirts, pants, and jackets at Nordstroms with a sign above the rack saying “Eleventy”
1110
Hawk Ticehurst @hawkticehurst.com · 24/02/2025
The idea of web component “overhead” is overblown — to even my own surprise! Rendering 1000s of nested WCs is *more* than competitive with the heavyweight champs of the web framework world. We’re talking S/S+ tier perf depending on the initialization method. Cont…
Screenshot of the JS Framework Benchmark results run locally on my computer. The order of results from most performant to least is:

1. Vanilla JS
2. Web Components 1
3. Web Components 2 Fast
4. Web Components 2
3. Web Components 3 Fast
4. Svelte 1
5. Solid 2
6. Solid 1
7. Web Components 3
8. Solid 3
9. Svelte 2
10. Svelte 3
1266
Hawk Ticehurst @hawkticehurst.com · 03/02/2025
Yep agreed. Since last night I realized (really remembered) that the screenshots I've been sharing is only 1 of 3 tables for keyed framework results. I had totally missed it until now but the third table shows transferred size and first paint so it looks like we do have the ability to disambiguate!
Screenshot of JS Framework Benchmark. It's a table with all the same frameworks listed but it contains metrics about the transferred size (in kilobytes) and first paint.
120
Hawk Ticehurst @hawkticehurst.com · 03/02/2025
Did another run and definitely feeling even more confident that initial render is being measured. In the benchmark output you'll see logs about first paint / paint metrics. Makes me think that perhaps the link that @jakelazaroff.com shared is just one component of what is tested?
Screenshot of terminal logs emitted by the JS Framework Benchmark. Two sections are highlighted that indicate paint events are being measured and saved to a JSON file with the name "first-paint."
120
Hawk Ticehurst @hawkticehurst.com · 02/02/2025
Update: I wrapped `customElements.define` in a timeout that runs after 2s to mock a slow initial render (to hopefully test if the benchmark starts after button click or not). The implementation dropped to 5th place implying that initial render and therefore WC initialization is counted (right?).
Screenshot of the JS Framework benchmark. The Vanilla JS Portable Web Components implementation is highlighted as being in 5th place.
120
Hawk Ticehurst @hawkticehurst.com · 29/01/2025
Y'ALL. Portable HTML Web Components are fucking cracked. It looks like they are **faster** than the fastest Vanilla JS implementation in the JS Framework Benchmark. I literally reran the benchmark 5 times because I didn't believe it, but every single time they came in first place 🤯
A screenshot of a local run of the JS Framework Benchmark. The portable HTML web component implementation is the fastest. Faster than Vanilla JS.
4547
Hawk Ticehurst @hawkticehurst.com · 28/01/2025
Also to poke some fun, if you want god tier performance in Solid, just use web components 😉 Context: @ryansolid.bsky.social ranked rendering perf in his last stream. Solid was S tier, but he mentioned the only thing better than S tier is vanilla JS at “god tier”
Another screenshot of a local run of the JS Framework Benchmark. Two columns are highlighted showing Solid’s performance as the 8th fastest implementation and Solid with HTML web components performance as the 3rd fastest implementation.
210
Hawk Ticehurst @hawkticehurst.com · 28/01/2025
Don’t let anyone ever tell you that web components aren’t performant They can absolutely flyyy 😮‍💨
A screenshot of a local run of the JS Framework Benchmark. Several popular web frameworks are shown along with the vanilla JS implementations. The run for a vanilla JS HTML web components implementation is highlighted as the second fastest right behind vanilla JS.
1278
Hawk Ticehurst @hawkticehurst.com · 28/01/2025
Nice, all those changes made a huge difference. Now at a weighted geo mean of 1.04
A screenshot of the JS Framework Benchmark. Only a few of the framework tests have been run for vanilla JS, a framework called Sonnet, vanilla web components, Svelte, Solid, React, and Progressive Element. Progressive element is now situated between vanilla JS and vanilla web components in terms of performance.
110
Hawk Ticehurst @hawkticehurst.com · 27/01/2025
Lol I couldn't help myself and ran the benchmark myself. Had to fix a few things and did some optimizations but generally seems like this method is sitting in Svelte/Solid territory of perf 👀
A screenshot of the JS Framework Benchmark. Only a few of the framework tests have been run for vanilla JS, a framework called Sonnet, vanilla web components, Svelte, Solid, and Progressive Element. Progressive element is situated between Svelte and Solid in terms of performance while all the other implementations are faster.
110
Hawk Ticehurst @hawkticehurst.com · 07/01/2025
My favorite is the skeleton analogy of web development
A drawing of four skeletons. From left to right the first skeleton is pile of bones with the word "content" underneath. The next skeleton is a regular skeleton with the word "HTML." The third skeleton has clothing with the word "CSS." The final skeleton is clothed and dancing with the word "JavaScript."
0110
Hawk Ticehurst @hawkticehurst.com · 12/12/2024
Ship it?
Web component wrench logo with the saturation and contrast cranked way up. At the bottom edge is purple text saying “Design is my passion.” The WC emoji is repeated along all the other edges of the image at different sizes.
060
Hawk Ticehurst @hawkticehurst.com · 12/12/2024
🫡🫡🫡🫡
Web component with lots of wrenches logo, but every single wrench, the letters, and background have an intense drop shadow applied.
140
Hawk Ticehurst @hawkticehurst.com · 11/12/2024
🫡🫡🫡
A very large button overlayed on top of the Web Component Wrench log. The button is in the style of the 11ty documentation button with the text "Web Components" and some text underneath the button reads "Zach said the button should be bigger and as you can see he was right."
260
Hawk Ticehurst @hawkticehurst.com · 11/12/2024
🫡🫡
The proposed Web Component logo with even more wrenches in the background.
150
Hawk Ticehurst @hawkticehurst.com · 11/12/2024
🫡
A version of the Web Component and Custom Elements logo with a bunch of tiny wrenches in the logo background
2101
Hawk Ticehurst @hawkticehurst.com · 11/12/2024
The whole family doesn't look too shabby 👀 I'd happily accept your HTML logo as canon @nerdy.dev
A row of web technology logos. It includes a prototype HTML logo created by Adam Argyle, a proposed Web Components and Custom Elements logo created by Hawk Ticehurst, the new CSS logo, the JavaScript logo, the TypeScript logo, and the Web Assembly logo.
2100
Hawk Ticehurst @hawkticehurst.com · 11/12/2024
The web moves quick. New #WebComponents logo just dropped, but instead it's #CustomElements (as it should be) 👀
A proposed web component logo. It's a very slightly rounded red-orange square with the top left corner sliced off at a 45 degree angle. In the bottom right corner is a white condensed font saying "CE" for "Custom Elements." There's also a dark mode and light mode version of the same logo using a black and white color palette.
020
Hawk Ticehurst @hawkticehurst.com · 11/12/2024
This! Completely agreed that it should be Custom Elements instead. PSA to Everyone: This is my new proposal.
Another version of the original web component logo, but instead of the letters "WC" the letters are "CE" for "Custom Elements." There's also a dark mode and light mode version of the logo using a black and white color palette.
360
Hawk Ticehurst @hawkticehurst.com · 11/12/2024
👀
A version of the proposed web component logo that emulates the styles of the WC emoji. The background is a blue color that has a gradient going to white at the top.
210
Hawk Ticehurst @hawkticehurst.com · 11/12/2024
Option D: I've always thought something like this could be a cool version of a #WebComponent logo that still fits within the larger family vanilla web logos.
A proposed web component logo. It's a very slightly rounded red-orange square with the top left corner sliced off at a 45 degree angle. In the bottom right corner is a white condensed font saying "WC". Also in the image is the JavaScript and CSS logos and some reference illustrations showing the process of how the web component logo was created.
8130
Hawk Ticehurst @hawkticehurst.com · 09/12/2024
Heads up looks like there might be a bug in the dark/light theming (on iOS)
Screenshot of graze.social. It had a dark mode theme but the text font is black and unreadable.
110
Hawk Ticehurst @hawkticehurst.com · 11/11/2024
Dev Tools: Zen is built on top of Firefox. I was a bit nervous about the transition from Chrome, but have found the dev tools are excellent and more than competitive with Chrome.
Firefox dev tools open on the GitHub homepage.
100
Hawk Ticehurst @hawkticehurst.com · 11/11/2024
Split Views, Zen Mods, and Workspaces are also features I love and use on a daily basis.
Three websites shown on one screen in a grid like view.Zen marketplace page showing Zen Mods that can be installed.
100
Hawk Ticehurst @hawkticehurst.com · 11/11/2024
Theme Colors let's you customize the browser shell, with a color picker UX similar to the Arc browser.
100
Hawk Ticehurst @hawkticehurst.com · 11/11/2024
Tab Previews on hover offers extra information when trying to find a tab amongst many others.
100
Hawk Ticehurst @hawkticehurst.com · 11/11/2024
Features: There's so many good ones... Zen Glance for previewing links on the web.
100
Hawk Ticehurst @hawkticehurst.com · 11/11/2024
Performance: Anecdotally, I've found Zen to be ridiculously quick too. Loading pages and zooming around the web feels breeezy.
100
Hawk Ticehurst @hawkticehurst.com · 11/11/2024
Like Ben, I love compact mode. But I also love the option to have different levels of UI density/collapse-ability. It let's me focus when I need to, get more details when desired, or somewhere in between.
Zen browser compact mode. No browser UI is shown.Zen browser in collapsed mode. The browser UI is shown, but in a low density collapsed way.Zen browser in expanded mode. All the UI is shown.
100
Hawk Ticehurst @hawkticehurst.com · 03/11/2024
Screenshot from an animated movie where two dogs are holding a “no war” banner but image has been edited so the “no” is crossed out
010
Hawk Ticehurst @hawkticehurst.com · 02/11/2024
I've also been climbing since May 2021. I very occasionally make videos about it too. www.instagram.com/hawthornethe...
110
Hawk Ticehurst @hawkticehurst.com · 02/11/2024
I still make small videos here and there. Here's one from last year on what I think is a surprisingly powerful way of building UI using vanilla techniques.
100
Hawk Ticehurst @hawkticehurst.com · 02/11/2024
I also spend a fair bit of time on side projects. A favorite is Stellar, a framework for building reactive HTML Web Components. Stellar's novel feature is "HTML-based state" where reactive state is defined in HTML and then made accessible for manipulation in JavaScript. github.com/hawkticehurs...
The Stellar logo placed above a blue and purple gradient background.
120
Hawk Ticehurst @hawkticehurst.com · 02/11/2024
A highlight at Microsoft has been building the Webview UI Toolkit for VS Code. It's a project I've watched grow from empty repo, to being used by teams like GitHub Next and GitLens, to now sadly being sunset in January -- it's been quite the journey. github.com/microsoft/vs...
An instance of VS Code with a tab that days Demo and a screen filled with components from the Webview UI Toolkit. Above the VS Code instance is the text "Webview UI Toolkit for Visual Studio Code."
110