My Tech Stack in 2025

2025-05-03 · Ryan X. Charles

I want to spend a moment to highlight some of the open-source projects and cloud services I use that make all of my apps possible in 2025.

Currently I operate three apps in production: Hallucipedia, a collaborative AI-generated encyclopedia, Identellica, a pseudonymous identity verification system, and EarthBucks, a blockchain for small casual transactions. All three apps are webapps that work well on mobile web and desktop.

Current Tech Stack

  • Node.js: Although I am excited about bun.sh and Deno, I still use Node.js for all of my apps because it is so proven and reliable and the benefits of the alternatives are not yet compelling enough for me to switch.
  • TypeScript: Ever since I switched to TypeScript, it instantly improved my productivity, and I would never want to go back to plain JavaScript. Being able to specify types reduces almost all of the standard bugs with JavaScript that I used to experience all the time. I no longer need to create 99% test coverage for my code because the type system catches the bugs that I used to have to write tests for. This saves enormous amounts of time.
  • Docker: I always build my apps into a container to deploy them.
  • fly.io: Fly.io is an outstanding data center provider that makes it very easy to deploy horizontally scalable webapps. I have had a great experience with it and heartily recommend it for all small apps. However, it has an issue, which is that their managed database solutions are not mature, and for this reason I intend to move to AWS Fargate.
  • PlanetScale: PlanetScale is an incredibly thoughtful, mature and proven managed MySQL database solution. They solve both the developer-experience issue of managing a database as well as the sharding problem so that your database will not need to be changed at scale. I heartily recommend PlanetScale for anybody using AWS or Google Cloud.
  • React 19: This is the standard for webapps, for better or worse. The advantages of using such a popular tool outweigh any hypothetical benefits of alternatives like Svelte and Vue in my opinion. All of my apps have been migrated to React 19, even though I don’t use some of the latest features, like RSC, or “use”.
  • React Router 7: This is the latest iteration of React Router which is heavily informed by Remix versions 1 and 2. It is essentially an entire framework that does most of the things you need to do to build a webapp. I’m a big fan of the routing model and their extreme care about providing an upgrade path for new versions.
  • tRPC 11: tRPC is an outstanding RPC framework for TypeScript that I have found to complement React Router very well. Although it is technically possible to build an API with React Router, tRPC is specifically designed for type-safe APIs and has made it easy to solve every problem I’ve faced, including the streaming AI output of Hallucipedia.
  • Tailwind 4: Once you go Tailwind, you never go back. Almost every problem I’ve had with CSS has been solved by using Tailwind. I no longer write any CSS by hand, instead I just use Tailwind classes.
  • Drizzle ORM: Drizzle is a new “ORM” (is it really an ORM?) that works well with TypeScript. It is by far the best ORM I’ve ever used and solves every problem in a developer-friendly way. I can’t really give any criticism at all and I’m excited to continue to use it, although their relational database support is not 100% and every once in a while I desire to use a feature of MySQL that doesn’t exist in Drizzle, and I have to work around it. However, they are adding new features all the time.
  • Rust/WASM: I’ve discovered that Rust is a great pairing for web technologies any time you need some high performance CPU code. Using wasm-pack makes it almost trivial to build rust code to WASM and then use it inside your webapp. In some cases where I need high performance CPU code, such as cryptography, and where the libraries I need are either not available or not ideal in TypeScript/node.js, I write the libraries I need myself in Rust and build it to WASM for use inside my webapps. This architecture allows me to do almost anything on the web because it removes the CPU bottleneck from webapps.
  • WebGPU: Although this is built into the web and I have assumed the web as the platform, WebGPU deserves a special mention as the final piece of the puzzle of web technologies, which makes it possible to do almost anything, including video games, in a browser. I currently use WebGPU for mining EarthBucks.
  • All the AI: I currently use OpenAI and xAI for my AI needs, particularly in Hallucipedia. However, I plan to add support for all major AI models, including Google, Anthropic, DeepSeek, and others, and it is my opinion that all apps can benefit from AI models such as moderating content, generating avatars, and countless features that would have been inconceivable even just five years ago.

Developer Environment

  • biome.js: This formats and lints my TypeScript code. It is fast and I hardly think about it because it just works.
  • nushell: When I was in graduate school, I gained a lot of experience with the Linux command line. In my opinion, nushell is the logical next step for the command line which dramatically improves the utility of pipes by support rich data types. I love nushell and I use it for everything.
  • neovim: I used to use vim, and then VS Code, and now I’ve switched back to neovim. It is my humble opinion after many years of experience that neovim is fundamentally faster than VS Code and could never be matched. Augmented with GitHub Copilot, and extensive customization, neovim is extremely fast for editing. Most of my code is written with AI, I don’t have to waste time clicking around inside the editor!
  • wezterm: Wezterm is a terminal emulator that supports GPU rendering and is extremely fast. Once I started using it, it has seamlessly blended into the background and I hardly even think about it anymore.
  • tmux: Theoretically wezterm solves the entire terminal emulation problem, but I have found a good workflow is to also use tmux inside wezterm. This allows me to use the best of both worlds: wezterm for the GUI, and tmux for all key-stroke based terminals for each project that I work on.
  • GitHub Copilot: I use GitHub Copilot for almost all of my code. Everybody is using AI these days, so I almost forgot to mention it, but I consider GitHub Copilot one of the biggest milestones in the history of IDEs. I would never want to go back to writing code without it. By using context thoughtfully, most of my lines of code are now written with AI.
  • Grok: I also keep a Grok tab open whenever I need to chat with an AI. I have found Grok to be on par with the best AI models for programming tasks, and it serves me well whenever I need to ask a question or solve some one-shot web problem.

Future Tech Stack

I plan to build some apps for mobile as well as migrate my cloud infrastructure to AWS, so here are my plans for the future:

  • AWS Fargate: While I deeply love fly.io, it is not the ideal hosting solution to me, because their data centers are in different physical locations than my databases, which introduces needless latency. To reduce latency, I either have to put my database in fly.io or put my app in AWS (where my PlanetScale database is hosted). Because fly.io’s reliability and maturity are not at the level of AWS, it makes sense to use AWS’s solution for deploying horizontally scalable webapps, which is Fargate. I plan to slowly migrate my apps with time as needed.
  • Tauri: Tauri seems to be an outstanding tool for building cross-platform native apps with web technologies. Conceptually similar to Electron, the biggest difference is that the system webview is used instead of bundling Chromium. This makes it possible to run on mobile, not just desktop! Tauri seems to be very well thought out and I am excited to try it out.
  • Electron: Although Tauri looks great, it has one issue for me, which is mining EarthBucks, which only works in Chromium-based browsers. Thus, for the EarthBucks mining app specifically, I plan to use Electron.

Conclusion

The web is a mature platform that makes it possible to build almost any sort of app, and I’ve had success with a node.js-based tech stack.


Earlier Blog Posts

Bitcoin is Dead in 2025
2025-04-08 · Ryan X. Charles
Trump’s Tariffs
2025-04-03 · Ryan X. Charles
I’m Fired
2025-03-22 · Ryan X. Charles
Vibe Coding a New Blockchain in 30 Minutes
2025-03-15 · Ryan X. Charles

Back to Blog

Copyright © 2025 Ryan X. Charles
Home · CV · About · Blog