Jolt's apps reuse 93% of code between the IDE plugins, web app, and desktop app

How our client architecture let us use the same SolidJS codebase across six platforms

AI coding tools need to reach as many users as possible to be effective and successful. But building your app specifically for each platform can be a nightmare. Feature drift. Missed deadlines. Duplicate work. And a lot of wasted time.

At Jolt we wanted to avoid that. You can use Jolt on the web, as a VSCode or JetBrains plugin, or alongside any editor with our desktop app. The desktop runs on macOS, Windows, and Linux. That's 6 platforms in total and we're a small team so we looked at ways to build our client apps with a single codebase. The obvious answer is start with a UI based on web technologies. It's 2025, web technologies should be the default choice for building user interfaces.

Why create so many client apps?

Despite our hands being full with building the best codebase context engine that does all the hard work for you, it doesn't matter if we can't meet users where they are.

  1. The browser is the most accessible platform for users, so we started there. It also is great for Jolt's growing non-developer user base too.
  2. Visual Studio Code and its forks are the most popular IDEs, so we built a full Jolt experience as an extension.
  3. JetBrains IDEs are also very popular among Java, Go, Rust, Python, and Android developers, so we built a full Jolt experience as a plugin there too.
  4. Finally, we recently just launched our desktop app, which runs on macOS, Windows, and Linux. This is a great option for users who want to use Jolt alongside any other app such as Xcode, Visual Studio, or VIM.

Jolt's client apps

How we built our client apps

React is the most popular library for building UIs and we each have a decade of shipping production apps with it. So we went with a library that's nearly identical to React, but with a few key differences that made it a better fit for us: SolidJS. SolidJS keeps the same functional unidirectional data flow and component model as React, but it doesn't use a virtual DOM. The lower memory footprint is perfect for embedded runtime environments inside VSCode, JetBrains IDEs, and even the Electron-based desktop app. We also used Tailwind CSS for styling, Zod for schema validation, and TypeScript.

The apps are split into two parts: the UI and the business logic.

  • The UI is presentational and is built with SolidJS. It has no idea how the data is fetched, it just displays it and accepts user input.
  • The business logic is a collection of TypeScript-based services that work in Node or the browser that make API requests, handle authentication, manage durable storage, and for the IDE extensions performs file operations and git commands to work with our users' codebases.

The UI is built using Vite and the business logic core using tsdown. tsdown is very similar to tsup but uses Rust under the hood for 70% faster builds and smaller bundles.

System architecture

Each UI has its own implementation of a CoreAdapter that connects the UI to the business logic. Running the same business logic in the different apps was just as important, if not more so, than sharing the UI. Jolt is a complex dev tool and rebuilding the same services in Kotlin or Objective-C could introduce unwanted variances in functionality. A unified UI also lets users switch between IDEs and the browser while keeping the UX familiar and consistent.

Here's a visual overview of how the apps are structured and share code:

This architecture has let us create new plugins and apps using our existing core services faster than ever. We'll get into the details of how the core adapter works and how we got the same Node services to run in radically different environments in the next post.

¹ This number is based on approximately 32K lines of code for the client apps. About 2.25K is IDE-specific code, a majority in Kotlin for JetBrains, to bootstrap Jolt or handle IDE-specific integrations.

² This number is based on a comparison of build times between tsup (17s) and tsdown (10s) on building the client core on an M3-based MacBook Pro.

Carlos Kelly

June 24th, 2025