dev-log

Dev Log #1 – Why We Chose Tauri 2 + Rust Over Electron for Our Email Client

By
5 min read
#rust #tauri #performance #electron #desktop-app

For a long time, I relied on standard desktop email programs like Thunderbird. They get the job done, but as your inbox grows, you start to feel the weight: slow startup times, UI lag, and memory usage that keeps creeping up.

When I began designing ColiMail, a lightweight desktop email client, I had one core idea in mind:

If we want to reimagine how we use email, the runtime that powers the client has to be part of the design — not just the UI.

That idea led directly to one of the most important decisions in this project: Tauri 2 + Rust vs Electron.

Electron vs Tauri: Why the Runtime Matters

Electron has done a lot to make cross-platform desktop apps accessible. But each Electron app bundles a full Chromium + Node.js runtime. That is convenient for developers, but it comes with a cost for users.

Application bundle size

  • Typical Electron apps: around 100–250 MB download size, even for relatively simple applications.
  • Typical Tauri apps: often in the 3–10 MB range, because they reuse the system WebView instead of shipping a full browser engine.

For an email client that users may download on multiple machines and update regularly, this difference in bundle size is not just a nice-to-have — it is a user experience and bandwidth consideration.

Memory usage at idle

Public benchmarks and case studies also show clear differences in memory usage:

  • Electron apps often idle at around 200–400+ MB of RAM.
  • Comparable Tauri apps frequently sit in roughly the 30–200 MB range, depending on the UI and workload.

Tauri will not magically optimize your application logic for you, but it gives you a much slimmer baseline to build on compared to Electron.

Startup time and perceived performance

Startup time is one of the most visible aspects of performance. A desktop email client is something people open many times a day, so every second counts.

  • Electron-based apps typically need to spin up a full Chromium instance, which can add noticeable delay to cold starts.
  • Tauri-based apps can leverage the system WebView and a native Rust backend, leading to faster perceived startup times and a more responsive feel.

For ColiMail, which is designed to be a lightweight, always-on email client, this performance profile is a key part of the product experience.

Why We Chose Rust for the Backend

Once we committed to Tauri 2, Rust became the natural choice for the backend of our email client.

Several properties of Rust are especially valuable for a modern IMAP/SMTP client:

  • Type safety — Rust makes it safer to implement IMAP/SMTP parsing, state machines, and edge cases than a dynamically typed language. Many categories of runtime errors are caught at compile time.
  • Zero-cost abstractions — we can design clear, expressive protocol abstractions without paying an extra runtime performance penalty.
  • Fearless concurrency — email synchronization, background indexing, and UI updates can run in parallel without garbage collector pauses or data races.

For an application that constantly talks to remote servers, handles untrusted data, and performs work in the background, this combination of safety and performance is extremely attractive.

Real-World Performance and Large Mailboxes

A natural question is: “How does this actually behave with a real inbox?”

Our internal design target for ColiMail is to comfortably handle 10,000+ messages in a single account without turning your laptop into a space heater.

At the time of writing, we have not published a full benchmark of 10,000-message synchronization yet, and we do not want to present made-up numbers. This first dev log focuses on the architectural decision and the public benchmarks that influenced it.

As ColiMail’s synchronization and indexing pipeline stabilizes, we plan to share a dedicated performance deep dive with concrete metrics, including:

  • Initial synchronization times for large mailboxes
  • Cold vs warm startup behavior
  • Memory footprint under typical daily usage

The Trade-Offs: Learning Curve and Development Speed

Choosing Tauri 2 and Rust is not free. There are real trade-offs:

  • Rust has a steeper learning curve than JavaScript or TypeScript.
  • Compile times can be slower during rapid iteration, especially early in the project.
  • The ecosystem for desktop-specific UX is less mature than Electron’s, which has years of tooling and libraries built around it.

However, for a performance-sensitive, always-on application like a desktop email client, we believe the upfront investment pays off through a smoother, faster experience for users every single day.

Conclusion: Why Tauri 2 + Rust Is the Right Fit for ColiMail

For ColiMail, our goal is to build a lightweight, high-performance email client that respects your time, your focus, and your device.

In that context, the decision can be summarized as:

In performance-critical, always-on workloads like an email client,
Tauri 2 + Rust offers a leaner, safer, and more efficient foundation than Electron.

Smaller bundles, lower memory usage, stronger safety guarantees, and a modern systems language all make this tech stack a long-term, user-friendly bet.

This is just the first entry in our development log. In upcoming posts, we will dive deeper into:

  • How we structure our Rust code for IMAP/SMTP and local caching
  • Indexing strategies for large mailboxes
  • Real-world performance benchmarks and how we measure them

Stay tuned for our next post on indexing benchmarks and performance deep dives.