Chris Krycho
@chriskrycho.com
Software craftsman, composer, theologian, writer, runner, photographer. Anglican Christian. Platform engineering at Vanta. Co-author of the Rust book. Previously front-end platform at LinkedIn; Ember TS & Framework teams alum.
→ chriskrycho.com
→ chriskrycho.com
One of my favorite pictures from the past year, snapped by a friend, at another friend’s 40th birthday party themed as a millennial prom: dancing with my most excellent wife. Sixteen years married and it’s very good.
November 1, 2025 at 12:39 AM
One of my favorite pictures from the past year, snapped by a friend, at another friend’s 40th birthday party themed as a millennial prom: dancing with my most excellent wife. Sixteen years married and it’s very good.
bsky.app/profile/musi... is the post with the embed; note that it *should* look something more like the attached image at this point.
October 31, 2025 at 3:35 PM
bsky.app/profile/musi... is the post with the embed; note that it *should* look something more like the attached image at this point.
Well this is hilariously broken.
October 24, 2025 at 2:38 PM
Well this is hilariously broken.
In concrete terms: define a schema with any of those libraries, use our `parserFor` or `asyncParserFor` functions and associated types, and then use them interchangeably. These screenshots from the blog post capture it well: Standard Schema plus True Myth means you get one clean interface!
August 25, 2025 at 2:45 AM
In concrete terms: define a schema with any of those libraries, use our `parserFor` or `asyncParserFor` functions and associated types, and then use them interchangeably. These screenshots from the blog post capture it well: Standard Schema plus True Myth means you get one clean interface!
…means you just wouldn’t write it the same way. You *can* do that in JS, buuuuut…
And those languages often have better affordances for “monadic pipelining”—`do` notation in Haskell, `?` and `await` in Rust for the most common cases, etc.
Doing it in JS *works* but is always less elegant.
And those languages often have better affordances for “monadic pipelining”—`do` notation in Haskell, `?` and `await` in Rust for the most common cases, etc.
Doing it in JS *works* but is always less elegant.
August 19, 2025 at 5:26 PM
…means you just wouldn’t write it the same way. You *can* do that in JS, buuuuut…
And those languages often have better affordances for “monadic pipelining”—`do` notation in Haskell, `?` and `await` in Rust for the most common cases, etc.
Doing it in JS *works* but is always less elegant.
And those languages often have better affordances for “monadic pipelining”—`do` notation in Haskell, `?` and `await` in Rust for the most common cases, etc.
Doing it in JS *works* but is always less elegant.
One of my favorite “did no one think this through at all?” things about Google Docs: these two buttons do the same thing. They’re… completely unlike each other, in position and presentation. Why? Lol. It’s Google Docs!
August 11, 2025 at 4:32 PM
One of my favorite “did no one think this through at all?” things about Google Docs: these two buttons do the same thing. They’re… completely unlike each other, in position and presentation. Why? Lol. It’s Google Docs!
Maximum Dad Energy trolling my 13-year-old daughter here.
July 29, 2025 at 4:38 PM
Maximum Dad Energy trolling my 13-year-old daughter here.
An “easy” way to think about it is: the cropped version is still higher-resolution than the 6K displays out there, and much higher resolution than a 4K display, whereas the full resolution version is about 25% higher-resolution than an 8K TV. This image is accurate (I just made it)!
July 26, 2025 at 5:17 PM
An “easy” way to think about it is: the cropped version is still higher-resolution than the 6K displays out there, and much higher resolution than a 4K display, whereas the full resolution version is about 25% higher-resolution than an 8K TV. This image is accurate (I just made it)!
July 18, 2025 at 3:56 PM
I’ve been using RustRover from JetBrains this weekend, and I was reminded that JetBrains is still basically the only company out there that has a subscription model that actually respects its users. So I wrote about it! v5.chriskrycho.com/notes/subscr...
July 6, 2025 at 4:30 AM
I’ve been using RustRover from JetBrains this weekend, and I was reminded that JetBrains is still basically the only company out there that has a subscription model that actually respects its users. So I wrote about it! v5.chriskrycho.com/notes/subscr...
Out today: I’m in Christianity Today’s July/August 2025 issue on intelligence (artificial and human) and the imago dei—
July 3, 2025 at 2:20 PM
Out today: I’m in Christianity Today’s July/August 2025 issue on intelligence (artificial and human) and the imago dei—
Oh look, Clippy is back, this time in Google Docs, and you can’t turn it off. 😑
July 1, 2025 at 2:47 PM
Oh look, Clippy is back, this time in Google Docs, and you can’t turn it off. 😑
…mean some paragraphs end up a solid 2–3em narrower than those above or below them. It’s visually jarring and feels like a mistake. I’ve attached the same section of v5.chriskrycho.com/essays/the-l... with and without `text-wrap: pretty`, which I think shows it pretty clearly. The same effect is…
April 28, 2025 at 1:16 AM
…mean some paragraphs end up a solid 2–3em narrower than those above or below them. It’s visually jarring and feels like a mistake. I’ve attached the same section of v5.chriskrycho.com/essays/the-l... with and without `text-wrap: pretty`, which I think shows it pretty clearly. The same effect is…
I am signing out of social media for Lent, as I do also during Advent and at least once in mid-summer. If you’d like to keep up with my work in the meantime, see chriskrycho.com – in particular, v5.chriskrycho.com/feed.xml will serve you well. 😉
Grace and peace to all of you! See you in Eastertide!
Grace and peace to all of you! See you in Eastertide!
March 5, 2025 at 2:52 PM
I am signing out of social media for Lent, as I do also during Advent and at least once in mid-summer. If you’d like to keep up with my work in the meantime, see chriskrycho.com – in particular, v5.chriskrycho.com/feed.xml will serve you well. 😉
Grace and peace to all of you! See you in Eastertide!
Grace and peace to all of you! See you in Eastertide!
This is not an unreasonable change, but it is also not a minor release: It’s not backwards compatible! The API of a tool like rustup is its CLI! This should have been a 2.0 release if they were going to do it, and if they didn’t want to make a breaking change release, they shouldn’t have done this.
March 3, 2025 at 6:56 PM
This is not an unreasonable change, but it is also not a minor release: It’s not backwards compatible! The API of a tool like rustup is its CLI! This should have been a 2.0 release if they were going to do it, and if they didn’t want to make a breaking change release, they shouldn’t have done this.
A couple weeks ago I discovered the twitter:label1 and twitter:data1 (and the corresponding `2`) meta tags, and wrote up a note about them. Now my post about them is the second hit on DuckDuckGo and is on the first page (whatever that means these days) of Google.
Blog things! It’ll help people!
Blog things! It’ll help people!
February 18, 2025 at 2:32 AM
A couple weeks ago I discovered the twitter:label1 and twitter:data1 (and the corresponding `2`) meta tags, and wrote up a note about them. Now my post about them is the second hit on DuckDuckGo and is on the first page (whatever that means these days) of Google.
Blog things! It’ll help people!
Blog things! It’ll help people!
Redesign looks good! One nit: justification is producing some nasty gaps. If you add `hyphens: auto` to the `article` definition, it significantly improves it!
February 11, 2025 at 11:43 PM
Redesign looks good! One nit: justification is producing some nasty gaps. If you add `hyphens: auto` to the `article` definition, it significantly improves it!
I wish I could make everyone who is tempted to crap on “front-end complexity” really grok this post. The bit in the screenshotted text in particular!
(Yes, many apps do things they don’t need to; yes, frameworks could be better; but also, a lot of the complexity actually cannot just be vanished.)
(Yes, many apps do things they don’t need to; yes, frameworks could be better; but also, a lot of the complexity actually cannot just be vanished.)
February 6, 2025 at 6:34 PM
I wish I could make everyone who is tempted to crap on “front-end complexity” really grok this post. The bit in the screenshotted text in particular!
(Yes, many apps do things they don’t need to; yes, frameworks could be better; but also, a lot of the complexity actually cannot just be vanished.)
(Yes, many apps do things they don’t need to; yes, frameworks could be better; but also, a lot of the complexity actually cannot just be vanished.)
Back on January 1, I took this lovely photo shortly after getting up in the morning. Love to live here.
February 5, 2025 at 3:11 AM
Back on January 1, I took this lovely photo shortly after getting up in the morning. Love to live here.
If you’re trying to do Git things with GitHub: no, it's not just you. www.githubstatus.com
January 14, 2025 at 12:04 AM
If you’re trying to do Git things with GitHub: no, it's not just you. www.githubstatus.com
Your cursed intersection of JavaScript and Unicode for the day. You’re welcome.
January 7, 2025 at 11:03 PM
Your cursed intersection of JavaScript and Unicode for the day. You’re welcome.
Took long enough! I’ve been thinking about implementing a `Task` type (think a type safe `Promise`) for the #TypeScript True Myth lib literally since we shipped the first releases back in 2017! This should be out in 8.2.0 after I land some more documentation improvements later this evening! 🎉
January 3, 2025 at 1:00 AM
Took long enough! I’ve been thinking about implementing a `Task` type (think a type safe `Promise`) for the #TypeScript True Myth lib literally since we shipped the first releases back in 2017! This should be out in 8.2.0 after I land some more documentation improvements later this evening! 🎉
Wrapped up my year in a pretty great spot—my best year in terms of training volume, at over 2,000 miles running and over 1,500 miles cycling, and in terms of results: beating an almost-decade-old half marathon PR by 1:45 in May (1:23:13), then beating the new one by 4:26 in October (1:18:47).
January 1, 2025 at 1:06 AM
Wrapped up my year in a pretty great spot—my best year in terms of training volume, at over 2,000 miles running and over 1,500 miles cycling, and in terms of results: beating an almost-decade-old half marathon PR by 1:45 in May (1:23:13), then beating the new one by 4:26 in October (1:18:47).
Stepping away from social media for Advent, as I do every year. I’ll be back either in Christmastide (December 25–January 5) or Epiphany (January 6 until Lent).
If you need to get in touch, you can find my email on my website, and I will still be posting regularly there. Godspeed!
If you need to get in touch, you can find my email on my website, and I will still be posting regularly there. Godspeed!
December 1, 2024 at 4:00 PM
Stepping away from social media for Advent, as I do every year. I’ll be back either in Christmastide (December 25–January 5) or Epiphany (January 6 until Lent).
If you need to get in touch, you can find my email on my website, and I will still be posting regularly there. Godspeed!
If you need to get in touch, you can find my email on my website, and I will still be posting regularly there. Godspeed!