tonsky.me
Nikita Prokopov — Software developer and creator of Fira Code
Essays on typography, performance, and critical takes on software design.
tonsky.meSharp, opinionated essays on software quality from someone who clearly can't stand when things are broken. Nikita writes about typography, UI design, and performance with the exacting eye of a craftsman — his posts on font rendering and interface consistency have become widely shared references. When he finds something wrong with how software works, he'll write 5,000 words explaining exactly why.
Written by Nikita Prokopov since 2014.
Occasional
Publishes a few times per month
24
Independent Blog
English
How this blog's content is accessed through Blogs Are Back.
Full Content
RSS feed includes complete post content for reading in-app
Proxy Required
Feed is fetched through our proxy for browser compatibility
Proxy Post Links
Post pages are loaded through our proxy for compatibility
Embeddable
Posts can be displayed inline in the reader view
This blog appears in the following curated collections.
Recent posts from tonsky.me's RSS feed.
Every Frame Perfect
Translations: Russian A while ago I was reading about Wayland and this quote stuck with me: A stated goal of Wayland is “every frame is perfect”. And I think this is a goal we should all aspire to. Wayland is talking about the technical side of things (modern GPU stacks are very complex and Wayland is trying to take control back) but it could be applied to UI too. The rule of thumb is: If I take a screenshot of your app at any moment, you should be able to explain what I see EDIT: This used...
Claude is an Electron App because we’ve lost native
In “Why is Claude an Electron App?” Drew Breunig wonders: Claude spent $20k on an agent swarm implementing (kinda) a C-compiler in Rust, but desktop Claude is an Electron app. If code is free, why aren’t all apps native? And then argues that the answer is that LLMs are not good enough yet. They can do 90% of the work, so there’s still a substantial amount of manual polish, and thus, increased costs. But I think that’s not the real reason. The real reason is: native has nothing to offer. AP...
Podcast: На Маке нет никаких шкафов @ Думаем дальше
С Ильей Бирманом провожаем Алана Дая, вспоминая, в чём состоят достижения Мака, Джобса и ХИГа (но и Винду добрым словом тоже вспоминаем).
It’s hard to justify Tahoe icons
Translations: Chinese 1 Chinese 2 Russian I was reading Macintosh Human Interface Guidelines from 1992 and found this nice illustration: accompanied by explanation: Fast forward to 2025. Apple releases macOS Tahoe. Main attraction? Adding unpleasant, distracting, illegible, messy, cluttered, confusing, frustrating icons (their words, not mine!) to every menu item: Sequoia → Tahoe It’s bad. But why exactly is it bad? Let’s delve into it! Disclaimer: screenshots are a mix from macOS 26.1 and...
Statistics made simple
I have a weird relationship with statistics: on one hand, I try not to look at it too often. Maybe once or twice a year. It’s because analytics is not actionable: what difference does it make if a thousand people saw my article or ten thousand? I mean, sure, you might try to guess people’s tastes and only write about what’s popular, but that will destroy your soul pretty quickly. On the other hand, I feel nervous when something is not accounted for, recorded, or saved for future reference. I mig...
If you enjoy tonsky.me, you might also like these blogs.
Jim Nielsen’s Blog
blog.jim-nielsen.comThoughtful essays on web development, design patterns, and the human side of technology.
overreacted
overreacted.ioExploring React, JavaScript, and the evolving landscape of web development through detailed technical analysis.
Read the Tea Leaves
nolanlawson.comSoftware and other dark arts, by Nolan Lawson
Jens Oliver Meiert
meiert.comIntersection of frontend development craft, engineering leadership, and philosophical inquiry.
Follow tonsky.me
If you've ever been annoyed by bad software and wished someone would articulate exactly why — Nikita already has.