A Technical Deep Dive Into the New Bundlwise

The story behind Bundlwise’s cross-platform rewrite and the details that…

AvatarAvatar

With our latest release, we completely transformed the foundation of Bundlwise. In this technical deep dive, we'll share the story behind our cross-platform rewrite, why we shifted to a hybrid tech stack, and the engineering details that helped us maintain a ultra-fast, native experience.

Why We Rewrote the Core App

As Bundlwise grew from a simple tracking tool into a comprehensive subscription intelligence platform, our old native macOS codebase started hitting scalability bottlenecks. Adding features like multi-currency support, AI recommendations, and collaborative team workspaces required duplicating complex business logic across macOS, Windows, and iOS. We needed an architecture that allowed for high code reuse without sacrificing the snappy performance our users love.

The Tech Stack

We designed a hybrid architecture combining the best of web and native worlds:

  • Core Engine (Rust): Encrypted local database storage, synchronization algorithms, and local AI inference scripts are written in Rust for absolute security and speed.
  • Frontend Layer (TypeScript + React): The UI is built using lightweight web components. We avoid heavy browser dependencies and render using a custom-tuned embedded layout engine.
  • Native Shells (Swift on macOS, C# on Windows): Platform integration (hotkeys, system tray menus, push notifications) is handled by thin, native wrapper shells.

Achieving Zero-Latency UI

Web-based shells are notorious for visual lag. To solve this, we implemented custom communication bridges between the React frontend and the native shells, avoiding IPC overhead. We also wrote a custom styling compiler that outputs high-performance, layout-optimal CSS variables.

// Low-overhead bridge messaging
export async function sendNativeMessage(action: string, payload: any) {
  if (window.webkit?.messageHandlers?.nativeBridge) {
    return await window.webkit.messageHandlers.nativeBridge.postMessage({
      action,
      payload
    });
  }
  return console.warn("Native bridge not found, running in browser fallback mode.");
}

Hot Reloading and Developer Velocity

Moving to this hybrid stack has decreased our compilation cycles to less than a second. We can iterate on UI layouts, tweak interactions, and ship improvements at a pace that was simply impossible when writing raw AppKit/SwiftUI code. The result is a more polished app, shipped faster.