

TypeScript.fm - The Friendly Show for TypeScript Developers
Kamran Ayub and Erik Onarheim
The two TypeScript Fools, Kamran Ayub and Erik Onarheim, get together weekly to bring you news, community highlights, and deep dives into the TypeScript ecosystem. Stay up-to-date on what's happening and learn new things to make you a better TypeScript developer along the way!
Episodes
Mentioned books

7 snips
Sep 30, 2025 • 59min
New ECMAScript Proposals, Cap'n Web, and TS on DOS/PlayStation | News | Ep 37
Discover the latest updates in TypeScript with the introduction of a new default safety feature in version 6.0. Explore exciting ECMAScript proposals, including one for non-extensible private fields and the performance-enhancing Array.prototype.pushAll. Learn about Cap'n Web, Cloudflare's innovative RPC system, and the intriguing idea of running TypeScript on MS-DOS. Additionally, check out discussions on using JavaScript on PlayStation and the community's thoughts on effect-ts, weighing its complexities against benefits.

Sep 23, 2025 • 52min
Let the Spicy Takes Flow: Shai-Hulud Hits npm, Motion's TS Exodus | News | Ep 36
News of the week of September 15, 2025: Shai-Hulud worm hits npm supply chain, WebAssembly 3 spec is ratified, and Elixir fans finally get their time in the spotlight. From the community: SquiggleConf was awesome, type branding and tuples, local-first app dev, and why @ts-ignore is almost always the worst option.Chapters(00:00) - Welcome to the Show
(04:36) - News: Shai-Hulud Worm Attacks Over 500 npm Packages
(12:31) - News: WebAssembly 3 Spec is Done
(14:05) - News: Ash Framework Announces AshTypeScript
(15:08) - News: ts-to-zod Now Supports Zod 4
(15:36) - News: Typebox 1.0 Release
(17:26) - Community Highlight: SquiggleConf 2025 Happened!
(20:51) - Community Highlight: Type Branding in TypeScript by AzraelSec
(21:35) - Community Highlight: TypeScript Tuple Length Hacks
(22:24) - Community Highlight: TypeScript Developer Roadmap
(23:15) - Community Highlight: GitHub Actions Can Now Run Pure TypeScript
(23:59) - Community Highlight: Why @ts-ignore is Almost Always the Worst Option
(24:55) - Community Highlight: Using Node's Test Runner with TS and React
(26:05) - Library Watch: Combinatorial CLI Options Parsing
(27:53) - Library Watch: Valibot Helper Utilities
(29:03) - Tool Watch: Local-first Development with FullStacked
(31:15) - Tool Watch: Retro 3D Engine with TS Scripting API
(32:09) - Discuss: Moving Off of TypeScript by Motion
(41:34) - Funny Read: Is Your Son a Computer Hacker?
(43:03) - Cool Library: Render a DOM Element as an Image
(45:04) - Cool Tool: Pages CMS Runs on Top of Your Git Repo
(47:08) - The Minnesota Long Goodbye
NewsSocket.dev covers Shai-Hulud: Updated and Ongoing Supply Chain Attack Targets CrowdStrike npm Packages Popular Tinycolor npm Package Compromised in Supply Chain Attack What the npm package attacks mean for us developersWasm 3.0 spec completedAnnouncing AshTypeScript, part of the Ash Framework (Phoenix/Elixir)ts-to-zod now supports Zod 4.0Typebox 1.0 releaseFrom the CommunitySquiggleConf Happened! Check out the streams (separate videos to come)Day 1: https://www.youtube.com/live/C_ePbVZqXrw?si=MpRiE8n4xLNpfbV0Day 2: https://www.youtube.com/live/vSXLDvvIpYE?si=cWKQTjZCx91HWJN9Federico (AzraelSec): Type Branding in Typescript Renato: TypeScript Tuple Length Evan Hahn: @ts-ignore is almost always the worst optionRoadmap.sh: Everything You Need to Learn to be a TS DevGitHub Actions can now run pure TS on Node 22/24 runners without a build step (h/t Brian Muenzenmeyer)Mathew Brown: Using Node's Test Runner with Typescript & React Library Watch: Combinatorial CLI opt parsingLibrary Watch: Introducing: @traversable/valibot (h/t Andrew Jarret)Tool watch: FullStacked, a local-first app development environmentTool watch: Roguestrad, a Retro 3D Game engine forked from DOOM-3-BFG with TypeScript scripting supportCool StuffFunny Read: Is your son a computer hacker?Cool Lib: dom-to-image-more – render DOM elements as imagesCool Tool: Pages CMS - Hassle-free CMS for static sites powered by Git Sponsored by Excalibur.jsExcalibur.js is the friendly TypeScript game engine for making 2D web games. Use your TypeScript or JavaScript skills to make games! Excalibur comes out-of-the-box with everything you need to make web games, like physics, sprites, animations, sound effects, input, and particles. Design your assets with tools like Aseprite and Tiled, then load them natively using first-party plugins.MusicSeahorse Dreams by Kubbi (Spotify)

Sep 18, 2025 • 1h 10min
ArkType is TypeScript's 1:1 Validator | David Blass | Ep 35B
David Blass (@ssalbdivad.dev) teaches the two fools about ArkType and its 1:1 validator type system. If you, like us, thought ArkType was only about validation, think again! David pulls back the curtain on what makes ArkType unique, how he built a type-level parser to provide helpful error messages, and why ArkType can provide soundness guarantees that go beyond even what vanilla TypeScript can offer. *waves hand* These are the array intersections you're looking for.Chapters(00:00) - Introducing David Blass
(02:39) - ArkType vs. Zod
(04:28) - ArkType's Differences
(06:21) - Defining ArkType Types
(10:33) - Matching TypeScript's Syntax
(14:24) - Detailed Editor-time Errors
(17:14) - Type-level Testing with attest
(18:26) - Runtime Error Checking
(21:05) - Generating JIT-optimized Code
(27:27) - Benchmarking ArkType's Performance
(29:41) - Optimizing the Parser for ArkType Types
(32:13) - Tips for Optimizing TypeScript Types
(38:12) - Type Mapping API
(40:20) - Set-based APIs
(43:15) - Typing Array and Tuple Intersections
(45:57) - ArkType's Internal Type System
(49:01) - Serializing Types to JSON
(50:09) - Porting Enhancements to TypeScript
(51:55) - Compatibility with Standard Schema Spec
(57:15) - Introspecting ArkType Types
(01:00:10) - Use Cases for ArkType
(01:03:34) - What's Next for ArkType?
(01:05:59) - Getting Started with ArkType
(01:07:56) - Where to Follow David
ResourcesArkType.ioArkType DiscordArkType GitHub@ark/attest testing libraryWhere to Follow DavidDavid on BlueSkyArkType on BlueSkySponsored by Excalibur.jsExcalibur.js is the friendly TypeScript game engine for making 2D web games. Use your TypeScript or JavaScript skills to make games! Excalibur comes out-of-the-box with everything you need to make web games, like physics, sprites, animations, sound effects, input, and particles. Design your assets with tools like Aseprite and Tiled, then load them natively using first-party plugins.MusicSeahorse Dreams by Kubbi (Spotify)

Sep 16, 2025 • 49min
Deno 2.5, Type-safe Configs and Forms, and Underrated TS Features | News | Ep 35
Deno 2.5 has arrived with exciting features like enhanced permission management and better testing APIs. The hosts discuss underrated TypeScript functionalities and showcase tools for type-safe configurations, secrets, and forms. They also weigh the pros and cons of using Bun in production. Light-hearted banter about parenting and personal anecdotes about camping and retro gaming add charm to the conversation. Plus, don't miss their excitement over the release of 'Assassin's Creed Mirage' and insights on npm security challenges!

Sep 11, 2025 • 50min
Fresh 2.0 Beta, TS Nostalgia, and Spear Phishing the Supply Chain | News | Ep 34
This week, Deno Fresh 2.0 enters beta, enhancing TypeScript development with Vite support. A significant spear-phishing attack on npm maintainers raises alarm about security in the software world. The community reflects on a decade of TypeScript, highlighting past innovations and the rise of type-safe state machines. Exciting performance improvements in Immer.js and intriguing new tools, like Wi-Fi sharing utilities, are showcased. Also, a legal discussion around AI piracy and authors' rights takes center stage, reminding us of the importance of ethics in tech.

Sep 3, 2025 • 56min
Breaking Changes in TS 6, a Calm Migration to Type Stripping, and Deno's #FreeJavaScript Campaign | News | Ep 33
News of the week of August 25, 2025: the two fools unpack the expected breaking changes to TSConfig in the upcoming 6.0 release, explain Node's latest LTS notable changes, and cover the latest in the JS trademark case from Deno. Plus, a PSA if you use Nx! From the community: making the case to migrate to Node's type stripping, a peek at Vitest 4, Zod's new Codecs feature, refactoring types, Rolldown is the opposite of a letdown, and a bunch of neat libraries/framework releases to watch. Chapters(00:00) - Welcome to the Show
(06:46) - News: TSGo Refactoring and Find Reference Enhancements
(07:54) - News: Expect Some (Good) Breaking Changes in TS 6.0
(12:26) - News: Node.js 22.19.0 LTS Notable Changes
(18:13) - News: RsPack 1.5 Features Type Re-export Analysis
(21:27) - News: Deno's GoFundMe to #FreeJavaScript
(22:38) - PSA: Supply Chain Attack Against Nx Packages
(25:49) - Community Highlight: Attend SquiggleConf 2025
(26:43) - Case Study: How Calm.com Migrated to Node Type Stripping
(30:13) - Community Highlight: Dr. Axel's Corner
(33:01) - Community Highlight: Vitest 4 Sneak Peek
(34:28) - Community Highlight: Zod 4.1 Codecs
(36:39) - Community Highlight: Shout-out to Remco for Fixing JSX Typing Bugs
(37:24) - Community Highlight: TypedRocks Shows You How to Refactor Type Definitions
(38:27) - Community Highlight: Neovim Support for TSGo Spotted in the Wild
(39:09) - Library Watch: csv-utils Helps You Deal with CSV Files
(39:39) - Library Watch: contrastrast Provides WCAG-compliant Color Manipulation
(41:16) - Case Study: Plaid Cut Build Time by 97% with Rolldown
(42:17) - Framework Watch: Runner V4 Released
(43:53) - Framework Watch: Ripple, a TypeScript UI Framework
(45:20) - Community Highlight: Joke of the Week
(45:48) - Secret of the Handbook: declarationMap
(47:17) - Cool Link: MuJS for Embedding Scripting into C/C++
(48:57) - Cool Link: Cory Doctorow is Kickstarting a Book
(50:44) - Cool Watch: Learn Game Dev from a Nintendo Game Designer
(52:29) - The Minnesota Long Goodbye
Personal NewsKamran's new Qwik City Foundations course (requires subscription)Affected by the Verizon outage? Get some monies (or try visiting the Transfer Phone/PIN page in your account)Alternatively, switch to Mint and save some cheddar (that's Kamran's referral link :-)NewsTS 6.0 proposed deprecations and breaking changesNode 22.19.0 LTS notable changes include a new CA certificate API and unflagging WASM modules (see: source-phase imports)Rspack 1.5 release features type re-export analysisDeno's GoFundMe for #FreeJavaScriptPSA: Nx supply chain attack (write-ups from Socket.dev and TheHackerNews)From the CommunitySquiggleConf: September 18-19Calm.com: How we migrated our Rush.js monorepo to Node type strippingDr. AxelJavaScript’s trademark problem Learning web development: Web servers Learning web development: JavaScript exceptionsLearning web development: JSON and processing files in Node.js Learning web development: JavaScript MapsVitest 4 will be faster!Zod creator explains 4.1's new codecs featureUppy issue reveals a bug in JSX typing across ecosystemTypedRocks: Let’s Replace 100+ React Types with 3 Lines Of Code (Same Type Safety!) Possible sighting of neovim TSGo supportLibrary watch: doeixd/csv-utils: Helpful utils for working with csv files or arrays of objectsLibrary watch: ammuench/contrastrast: A library to determine text contrast based on WCAG Standards VoidZero: How PLAID Cut Build Times by 97% Migrating From Rollup To RolldownFramework watch: Runner V4 releasedFramework watch: trueadm/ripple: the elegant UI framework for the webThis week's TS JokeSecret of the HandbookThe declarationMap config option significantly speeds up Project References performance in IDEs. Cool StuffMuJS: Introduction Cory Doctorow’s KickstarterLegendary Nintendo game designer published 200+ videos on gamedev for free.Sponsored by Excalibur.jsExcalibur.js is the friendly TypeScript game engine for making 2D web games. Use your TypeScript or JavaScript skills to make games! Excalibur comes out-of-the-box with everything you need to make web games, like physics, sprites, animations, sound effects, input, and particles. Design your assets with tools like Aseprite and Tiled, then load them natively using first-party plugins.MusicSeahorse Dreams by Kubbi (Spotify)

16 snips
Aug 26, 2025 • 51min
TypeScript Go Nightly Improvements, Rslint Announced, and Big Bun Updates | News | Ep 32
This week, dive into the major updates with TypeScript Go and the introduction of Rslint, a game-changing linter. Discover Bun's impressive speed boosts and memory reductions. Next.js 15.5 rolls out type-safe routing, while Angular goes zoneless! The community showcases an exciting Hangman project in TypeScript, alongside a discussion on safeguarding browser assets. Plus, get tips on efficient testing in CI and deploying code effectively with feature flags and observability. It's a jam-packed session of innovation and insights!

Aug 19, 2025 • 18min
Astro DB Gets Enum Support, Type-safe Data Flow in Next.js, and a Moose-y ORM | News | Ep 31
News of the week of August 11, 2025: there ain't much! Astro 5.13 minor release brings enums to Astro DB and improved meta environment variables. From the community: learning web dev, Result-typing Next.js server actions, and Clickhouse built an ORM.Chapters(00:00) - Welcome to the Show
(05:07) - News: Astro 5.13 Adds import.meta.env and Astro DB Enum Support
(06:47) - Community Highlight: Dr. Axel's Learning Web Dev Series
(07:47) - Community Highlight: Type-safe Data Flow Between Client and Server in Next.js by Nahuel Scotti
(08:45) - Community Highlight: Clickhouse Made an OLAP ORM with TS
(11:25) - Cool Link: nextra, a Next.js Static Site Generator
(11:50) - Cool Link: editly, Non-linear Video Editing in Node.js and ffmpeg
(12:33) - Cool Links: A Bunch of Excalibur Games!
(14:36) - The Minnesota Long Goodbye
NewsAstro 5.13 From the CommunityDr. Axel’s Blog Series on Learning Web DevNahuel Scotti: Type-Safe data flow between client & server in Next.js applicationsClickhouse: Does OLAP need an ORM? Plus, listen to our ORMed and Dangerous (Ep 7) deep dive episode! Cool StuffMore Excalibur Games!https://daviderisaliti.itch.io/spookytruth https://daviderisaliti.itch.io/quadrush https://mookie4242.itch.io/zombie-shooter-clone Nextra – a Next.js static site generator with some built-in gizmos editly – non-linear video editing with Node.js and ffmpegSponsored by Excalibur.jsExcalibur.js is the friendly TypeScript game engine for making 2D web games. Use your TypeScript or JavaScript skills to make games! Excalibur comes out-of-the-box with everything you need to make web games, like physics, sprites, animations, sound effects, input, and particles. Design your assets with tools like Aseprite and Tiled, then load them natively using first-party plugins.MusicSeahorse Dreams by Kubbi (Spotify)

Aug 12, 2025 • 49min
WebStorm Supports TS Go, V8 Stringifies JSON 2X Faster, and a TypeScript AI Conference | News | Ep 30
News of the week of August 4, 2025: WebStorm 2025.2 adds support for TypeScript Go language server (preview), V8 made JSON.stringify supa-supa-fast, and there's a new TypeScript AI conference on the block. From the community: recommended tools and libraries for TS developers, how to prevent ReDOS attacks, and an interview discussing how the JavaScript language evolves.Chapters(00:00) - Welcome to the Show
(04:52) - News: Erik's High Performance JavaScript Talk is OUT!
(06:02) - News: WebStorm 2025.2 Features TypeScript Go Language Server Support
(06:57) - News: V8 Improved JSON Stringify Perf by More than 2X
(10:54) - News: Bun 1.2.20 Includes Type-level Assertions and TS 5.9 Support
(12:24) - News: Mastra is Hosting a TypeScript AI Conference
(19:58) - Community Highlight: How I Built CSS' light-dark() Function in TypeScript by Robert Hameetman
(21:32) - Community Highlight: Type-Aware Linting with Oxlint
(22:39) - Tool Watch: Prevent ReDOS Attacks with regolith
(24:20) - Tool Watch: Filter tsc Errors by File or Folder Using tsef
(25:57) - Community Highlight: Tools or Libraries That Make Your Life Easier With TypeScript
(30:16) - Community Highlight: A Fast-paced Lumberjack Game Built with Excalibur.js
(30:51) - Community Highlight: Daniel Ehrenberg on How JavaScript Evolves by Weekly DevBrew
(31:10) - Community Highlight: Joke Bailey
(31:51) - Secret of the Handbook: Indexed Types
(36:20) - Cool Link: Speeding Up the semver Package
(38:36) - Cool Link: Enhance.dev, an HTML-first Full Stack Web Framework
(39:37) - Cool Link: mitata, a Benchmarking Tool That Loves You
(40:44) - Cool Link: Why contenteditable on Android is the Absolute Worst
(41:56) - Cool Link: Creating Legal Documents with Markdown
(43:18) - The Minnesota Long Goodbye
NewsErik’s talk is live! JavaScript Blazingly FAST! Lessons from a Game EngineWebStorm 2025.2: TypeScript-Go Language Server SupportV8 engine: How we made JSON.stringify more than twice as fastBun v1.2.20 includes type-level assertions and @bun/types fixes for TS 5.9Mastra announces TypeScript AI conferenceFrom the CommunityRobert Hameetman: How I Built CSS's light-dark() in TypeScript Boshen: Oxlint working on type-aware linting with TSGo (experimental)JakeRoggenbuck/regolith: Safely write RegExp that are ReDOS-proofPS. Listen to the TypeScript Security episode with Liran Taliostreamer-X/tsef: CLI tool to filter tsc output and only show errors for specific files and directoriesCould be a good companion to ts-migrating by Jason YuReddit: What tools and libraries do you use with TypeScript to make your dev life easier?ts-patternZodLefthookEffect.ts and XstateneverthrowTimber Clone: An Excalibur game (written in TS!)Source code: jyoung4242/TimberEx Weekly Dev Brew with Daniel Ehrenberg (President of Ecma International & TC39 veteran)Joke Bailey on Why is TS is so slow?!Secret of the HandbookTypescript Indexed TypesExample 1Example 2 Cool StuffMarvinH: Speeding up the JavaScript ecosystem - Semver Plus a cool profiling viewer, cpuproEnhance, an HTML-first full stack web dev frameworkevanwashere/mitata: benchmark tooling that loves you ❤️ Contenteditable on Android is the Absolute Worst (But, ProseMirror looks really cool) petalo/legal-markdown-js: Write legal docs in Markdown and TSSupabase, hosted PostgresSponsored by Excalibur.jsExcalibur.js is the friendly TypeScript game engine for making 2D web games. Use your TypeScript or JavaScript skills to make games! Excalibur comes out-of-the-box with everything you need to make web games, like physics, sprites, animations, sound effects, input, and particles. Design your assets with tools like Aseprite and Tiled, then load them natively using first-party plugins.MusicSeahorse Dreams by Kubbi (Spotify)

Aug 7, 2025 • 42min
State of TypeScript Linting 2025 | Joshua Goldberg | Ep 29B
Joshua Goldberg (JoshuaKGoldberg.com), creator of typescript-eslint, joins us to discuss the state of linting TypeScript projects in 2025. Which linters should we pay attention to? Why are there so many? What's unique about TypeScript? Josh shares his perspective and covers what to look for in a linter and how best to utilize them in your projects.Chapters(00:00) - Introducing Josh Goldberg
(02:10) - Why Are There So Many Linters?
(02:48) - Why Do I Need a Linter With TypeScript, Anyway?
(04:13) - Landscape of Linters in 2025
(06:56) - How Does TypeScript Linting Actually Work?
(08:15) - Creating Type-aware Native Speed Linters
(11:06) - What Would the Ideal Linter Look Like?
(12:48) - Where is the Bottleneck in Type-aware Linting?
(15:15) - Are Native Speed Linters the Answer?
(21:03) - Okay, So Which Linter Should I Use?
(23:33) - Are There Some Golden Type-aware Rules to Use?
(24:44) - Customizing Your Linting Setup
(27:05) - Writing Your Own Custom Lint Rules
(31:08) - Josh's Recommended ESLint Plugins
(34:15) - Future of Linting with Flint
(36:37) - Attend SquiggleConf 2025 in Boston
Linterstypescript-eslint (stable) – TypeScript, most type-aware lint rulesoxlint (stable) – Rust, no type-aware lint rulesBiome (stable) – Rust, limited type-aware lint rules in V2tsslint (stable) – TypeScript, integrates with tsserver, custom rules with TS compiler APItsl (new) – tsc plugin that ports a selection of typescript-eslint type-aware lint rulesDeno lint (stable) – Rust, subset of ESLint rules, no type-aware lint rulesFlint (unstable) – TypeScript, Josh’s fast, friendly linter, still in developmenttsgolint (prototype) – Go, proof-of-concept experimental TypeScript Native integrationResourcesLearn: Vanilla TypeScript ExperienceLearn: ASTs and typescript-eslintLearn: If I Wrote a Linter, Part 4: Summary Learn: TypedRocks Builds a Type-aware ESLint PluginDustinSpecker/awesome-eslint – a list of awesome ESLint plugins and resourcesJoshuaKGoldberg/create-typescript-app – pick and choose the rules you likeESLint now supports linting for Markdown and CSSJosh’s Favorite Rules and Plugins:typescript-eslint/no-floating-promises – to avoid non-awaited Promisestypescript-eslint/no-deprecated – to avoid calling deprecated APIseslint-plugin-regex – to catch ReDOS vulnerabilitieseslint-plugin-n – for Node.js projectseslint-plugin-jsdoc – for the “informative docs” ruleeslint-plugin-erasable-syntax-only – to enforce erasable syntax in your TS project (prior to TS 5.8)eslint-plugin-package-json – lint your package.json fileWhere to Find JoshJoshuaKGoldberg.comFlint DiscordJosh on BlueSkyJosh on FosstodonJosh on GitHubSponsored by Excalibur.jsExcalibur.js is the friendly TypeScript game engine for making 2D web games. Use your TypeScript or JavaScript skills to make games! Excalibur comes out-of-the-box with everything you need to make web games, like physics, sprites, animations, sound effects, input, and particles. Design your assets with tools like Aseprite and Tiled, then load them natively using first-party plugins.MusicSeahorse Dreams by Kubbi (Spotify)