Midwess
Est. 2025 • Mekong Delta, South Vietnam

Software that feels
like magic

Midwess is a boutique startup studio and open knowledge base. We build high-performance productivity tools. We are dedicated to building user-centric solutions that enable modern engineering teams to achieve more through reliable, high-speed tools.

Vibe
High Fidelity
Heart
Mekong Delta
~/midwess/dna.json
ethos
{
  "mission": "Create moments of delight",
  "vision": "Software worth loving",
  "craft": ["Rust", "Next.js", "AI"],
  "location": "Mekong Delta",
  "status": "Building magic"
}
Portfolio

Our Products

Bytover Magic

Experience the freedom of instant sharing. No cloud, no zips, no waiting. Just a link and your files move like magic, directly between devices.

Background

Bytover
Direct

Why upload when you can just share? Bytover creates a direct bridge between devices, giving you total control and unmatched speed.

Instant
Private
Blog posts.

Where curiosity meets the keyboard.

Building software is a journey of discovery. We share the stories, the mistakes, and the breakthroughs behind the products we craft.

Article3 min read

Deploy Flutter Web with GitHub Actions

A step-by-step guide to deploying Flutter web applications using Docker and GitHub Actions for automated delivery.

Jan 20, 2026
Article3 min read

Implementing a Custom Resource Pool in Rust

A deep dive into building an efficient, thread-safe resource pool in Rust to optimize performance.

Dec 1, 2025
Article3 min read

Understanding Polymorphism in Rust

A clear and simple guide to how Rust handles polymorphism using Traits and Enums.

Dec 15, 2025
Article3 min read

My Journey from JavaScript to Rust

Why I moved from JavaScript to Rust for backend services and a simple plan to help you do the same.

Jan 5, 2026

My Journey from JavaScript to Rust

January 5, 20263 min read

The Problem with JavaScript on the Backend

I used to be a firm believer in using JavaScript for everything. However, as our projects grew, I began to see its limitations. The biggest problem? JavaScript is too quiet about its mistakes.

I remember a day when a simple missing await caused a major production crash while I was on vacation. In languages like Rust, the compiler would have caught that error before the code even ran. In JavaScript, it only revealed itself as a silent failure at the worst possible time.

Working with JavaScript backend services often feels like walking on eggshells. You have to be perfect, because if you make a mistake, the language won't warn you—it will just let the error happen. After years of this stress, we decided it was time for a change. We chose Rust.

The Migration Strategy

Switching languages while maintaining an active project is like changing the tires on a car while it's moving at 60 mph. You cannot simply stop everything and rewrite for months. You need a plan that is safe, fast, and testable.

1. The Side-by-Side Approach

Instead of replacing everything at once, we built a new service in Rust to run alongside our existing JavaScript service. They communicate through gRPC. This allowed us to build all new features in Rust immediately while keeping the old code running.

2. Using Decorators as a Bridge

In JavaScript, a decorator is a wrapper around a function. We used a @Migrated decorator to slowly transition functions from JavaScript to Rust.

class UserService {
  @Migrated(async function(data) {
    // This calls the new Rust service
    return await rustService.createUser(data);
  })
  async createUser(data) {
    // This is the old JavaScript code
    // It only runs if the Rust code is turned off
  }
}

3. The Safety Switch

We added a feature toggle (a simple environment variable). If we found a bug in our new Rust code, we could flip a switch, and the application would instantly revert to using the old, reliable JavaScript code. This made our migration significantly safer.

How the Languages Talk to Each Other

To make JavaScript and Rust talk to each other without losing speed, we used ConnectRPC. It is a modern version of gRPC that is much easier to use than traditional libraries.

We also used a "Struct" format to send data. This acts like a standard JavaScript object, which saved us hours of writing complex data maps for every single function. This bridge made the two languages feel like they were part of the same system.

Deployment

If you use Kubernetes, the most efficient way to deploy this is to place both the JavaScript and Rust services in the same Pod. This makes communication between them incredibly fast and keeps your infrastructure simple.

Conclusion

Moving to Rust was one of the best decisions we made for our team's productivity and mental health. We spend much less time fixing silly bugs and more time building high-quality features.

This "bridge" strategy is perfect for large teams that need to keep shipping updates while improving their codebase. You get the safety and performance of Rust without the risk of a "big bang" rewrite. If you are tired of silent failures in JavaScript, I highly recommend giving Rust a try.

Midwess Software that feels like magic.

We believe software should be more than just a tool. It should be a seamless, high-fidelity experience that delights the people who use it.