Stoyan Stefanov @stoyan.me · 04/10/2026My friend Javor Vatchkov just launched bandscheck.com, a nice way to see who's playing in your area tonight and in the future. Fun way to discover new artists too, thanks to audio (video) sample of each artist's work. Give it a spin! 000
Stoyan Stefanov @stoyan.me · 30/09/2026america.gov vs gov.uk on my iPhone 8 (Safari 15). Watch this talk www.youtube.com/watch?v=VdBx... by @therealnooshu.bsky.social Hobbs about what happened during the pandemic, people desperately looking for gov't info and browsing with horrible connections on devices such as ... 162
Stoyan Stefanov @stoyan.me · 30/12/2025New blog post about subsetting a ligature-heavy font highperformancewebfonts.com/read/subsett... Almost always we subset based on text. But in my case, a more fine-tuned glyph-based approach saves 91% of bytes as opposed to 74% in the usual way. Worth it? 000
Stoyan Stefanov @stoyan.me · 24/12/2025New blog post "Lazy-Loading Optional Fonts with Native Browser API" describing a wee trick I do on sightread.org to load music glyphs, optionally highperformancewebfonts.com/read/lazy-lo... 020
Stoyan Stefanov @stoyan.me · 02/12/2025Bug or a feature: selecting code in the devtools console makes some tokens black rather than white? 010
Stoyan Stefanov @stoyan.me · 29/10/2025perforomance.run() everybody! The latest API available to folks visiting for #perfnow 120
Stoyan Stefanov @stoyan.me · 11/07/2025Ha! @11ty.dev folks have opened a Beverly Hills location /cc @zachleat.com 170
Stoyan Stefanov @stoyan.me · 26/05/2025performance.now() conference by @ppkoch.bsky.social and friends is back again for another edition: perfnow.nl 2 days, single-track, 100% web performance geekout happening 30th and 31st of October in Amsterdam. First 9 speakers announced, tickets on sale now. 031
Stoyan Stefanov @stoyan.me · 25/05/2025highperformancewebfonts.com/read/pick-ch... A quick JS snippet that adds a feature to fontdrop.info to hand pick characters for subsetting with Glyphhanger. You click around and get a command generated that looks like: $ glyphhanger --format=woff2 --subset="font.otf" --whitelist="U+0025,U+0026... 040
Stoyan Stefanov @stoyan.me · 03/04/2025Read in 2025 so far, in an attempt to work on my attention span 020
Stoyan Stefanov @stoyan.me · 31/03/2025I need to make like a 100 slides for a class I'm taking and I found this little tool is perfect www.markdowntoolbox.com/tools/conver... 020
Stoyan Stefanov @stoyan.me · 18/02/2025I found one here (next to Firebug and something called "PageTest" :D ) calendar.perfplanet.com/2009/perform... 210
Stoyan Stefanov @stoyan.me · 14/02/2025getting all "scientific" on linkedin's URL shortening logic. Seems like URLs > 26 characters are shortened in posts, but left alone in comments 100
Stoyan Stefanov @stoyan.me · 11/02/2025Put this in your console: setInterval = setTimeout = requestAnimationFrame = console.log ... end you might be stunned, nay, horrified by what's happening in your app, especially with third-party code (inspired by @andydavies.me) 040
Stoyan Stefanov @stoyan.me · 07/02/2025I hung out in the Chicago public library today and I found someone has checked out one of my books. I'm torn between being proud someone is reading or feeling guilty and responsible for the person reading a 9-year old book. I mean the second edition feels old, let alone the 1st 150
Stoyan Stefanov @stoyan.me · 06/02/2025"Which local fonts can I use?" writeup, official docs and a web app to gather field data so we can have an authoritative answer to this question now and in the future highperformancewebfonts.com/read/which-l... 140
Stoyan Stefanov @stoyan.me · 01/02/2025New blog post: "First timid steps in Rust" www.phpied.com/first-timid-... 1. Install Rust 2. A new project 3. Add dependencies to Cargo.toml 4. All ok so far? 5. Tweaks in src/main.rs 6. (Optional, VSCode only) install rust-analyzer Rust in peace! 110
Stoyan Stefanov @stoyan.me · 01/02/2025I'm having troubles uploading a video. It's an MP4 encoded by Handbrake that seems to work in QuickTime, linkedIn, etc. I'm on Firefox @support.bsky.team 110
Stoyan Stefanov @stoyan.me · 27/01/2025My attempt at clarifying what we mean when we say font, font-family, font-face, typeface, etc. highperformancewebfonts.com/read/font-ja... 050
Stoyan Stefanov @stoyan.me · 25/01/2025Today's mini-post on fonts turned out not so mini. A look into the past and future of `-apple-system` and `BlinkMacSystemFont`: highperformancewebfonts.com/read/ditch-B... 0184
Stoyan Stefanov @stoyan.me · 24/01/2025New mini-post, this time on extreme font subsetting highperformancewebfonts.com/read/extreme... 1123
Stoyan Stefanov @stoyan.me · 23/01/2025There *is* a solution to 🧭 Safari's annoying insistence of adding its little triangle icon to <details><summary> and it's summary::-webkit-details-marker { display: none; } 030
Stoyan Stefanov @stoyan.me · 23/01/2025A quick note on the importance of adding `crossorigin` when <link>-preloading fonts: highperformancewebfonts.com/read/on-the-... Otherwise you get duplicate font downloads and the preload is unused 082
Stoyan Stefanov @stoyan.me · 21/01/2025Fafofal (Fabulous Font Fallbacks): now with buttons for bold and italics in the test area highperformancewebfonts.com/tools/fafofal/ 051
Stoyan Stefanov @stoyan.me · 21/01/2025Ha, since when does Chrome do this? CTRL + Refresh gives you options 330
Stoyan Stefanov @stoyan.me · 16/01/2025"Menlo Regular" is a font - a specific instance of the Menlo typeface. When we say "Menlo" we may mean three different things: a typeface, a font collection (a .ttc file) or a font family. Confusion? Yes, please. 050
Stoyan Stefanov @stoyan.me · 10/01/2025Friends concerned about me & family's safety in LA fire, here's a map. The red arrow points at where we live. Not too close to be affected. We can smell smoke and see little bits of ash in the air, but we're good otherwise. The two yellow rectangles are "warning" next to the red "evacuation zone" 180
Stoyan Stefanov @stoyan.me · 02/01/2025The article shows the troubles with `local()`... E.g. `local('Avenir')` doesn't work in Chrome (it needs `Avenir Book`) but it does in FF. FWIW here's an automated way to test for support which seems to work correctly across browsers. "Correctly" meaning the same behavior as when used in CSS 020
Stoyan Stefanov @stoyan.me · 30/12/2024Anyone wants to beta-test a new font-face fallback tool? highperformancewebfonts.com/tools/fafofal/ A spiritual (to say the least) descendant of tools and ideas by @industrialempathy.com @notwaldorf.bsky.social and Katie Hempenius. Pictured below: Poppins.ttf from G-fonts with Avenir Book fallback 141
Stoyan Stefanov @stoyan.me · 28/12/2024Improving CLS from 0.00 to 0 (I kid you not!) with a better @font-face fallback 1120
Stoyan Stefanov @stoyan.me · 19/12/2024The web application quality we've grown to expect from our financial institutions (embark.ca in this case) 110
Stoyan Stefanov @stoyan.me · 13/12/2024How did I manage to mess up a "social" image everywhere? I saw the portrait image on after posting on bsky and then changed to landscape with white space. LinkedIn - tiny. Threads - cut off. Twitter - killed the punch line. Mastodon - win! 120
Stoyan Stefanov @stoyan.me · 08/12/2024oh, Safari uses a cute little font called `.AppleSystemUIFontMonospaced` when you do `font: ui-monospace, monospace;` (The other browsers use Menlo) All one needs to know about fonts in 2025 is: body {font-family: system-ui; sans-serif} code, pre {font-family: ui-monospace; monospace} 241
Stoyan Stefanov @stoyan.me · 07/12/2024You can force garbage collection in your JS by starting Chrome with a flag: open "/Applications/Google Chrome.app" --args --js-flags=--expose-gc Now you can call `gc()` to collect the rubbish :) 061
Stoyan Stefanov @stoyan.me · 05/12/2024In a burst of 2000's nostalgia I added border-radius: 4px everywhere on the perfplanet calendar 290
Stoyan Stefanov @stoyan.me · 03/12/2024HackerNews' markup is... entertaining. A spacer gif, a spacer table row (a table layout too) and even "morespace" to finish off the table. You know... more space, when you just need a little something extra. Should've gone to 11px. 2174
Stoyan Stefanov @stoyan.me · 02/12/2024Here's a one-liner to append a (social) sharing button to any page, in this case a wordpress blog post. Web Share API FTW! 1161
Stoyan Stefanov @stoyan.me · 29/11/2024Here we have 3 MP3 samples served from service worker cache. And one E3 (aka MIDI note 52) is having its URL rewritten, requested from the new "correct" URL and then also cached. 100
Stoyan Stefanov @stoyan.me · 29/11/2024Ha! So in JS, a default function param can be the value of another param 4165