I made an Electron app which doesn’t use gigabytes of RAM! Electron + SvelteKit + GQL

Building a Lightweight Electron Application with SvelteKit and GraphQL

In the world of desktop application development, Electron has become a popular choice due to its ease of use and cross-platform compatibility. However, many Electron-based apps tend to consume excessive amounts of RAM and CPU resources, leading to sluggish performance and poor user experiences. Recently, I developed a streamlined Electron application that sidesteps these common pitfalls, achieving impressive efficiency without sacrificing functionality.

Why Traditional Electron Apps Struggle

A significant factor behind performance issues in Electron applications is the heavy reliance on frequent visual repaints and re-renders orchestrated by Chromium. These constant repaints lead to high CPU and memory usage, especially when animations and complex UI effects are involved. Many popular apps, like Discord, run on frameworks such as React and can easily use hundreds of megabytes of RAM, primarily due to inefficient rendering strategies.

Optimizing Performance Through Rendering Techniques

My approach centered on minimizing unnecessary repaints. Key strategies included:

  • Limiting the use of CSS properties like transform and opacity for animations, which are GPU-accelerated and lightweight.
  • Enabling background throttling to reduce resource usage when the app is inactive or in the background.
  • Applying sophisticated CSS effects, such as image and video glow, which are surprisingly inexpensive in terms of rendering cost.

These adjustments provided ample free space for enriching features such as intricate 3D animations and advanced visual effectsโ€”demonstrated at the start of the accompanying video.

Choosing the Right Framework

For the user interface, I chose SvelteKit over heavier frameworks like React. My reasoning is straightforward: React-based Electron apps often balloon in memory consumptionโ€”sometimes exceeding 800MB just for the JavaScript heapโ€”making them less suitable for resource-conscious environments.

Stack and Additional Features

The core stack comprises:

  • TypeScript: Enforcing robust code quality through an exceptionally strict ESLint configuration.
  • GraphQL: Using urql and gql.tada for efficient offline caching, entity normalization, and seamless data managementโ€”even when the application is disconnected.
  • UI Components: Implementing interface elements with shadcn/svelte for modern, accessible, and customizable UI blocks.

Performance-Centric Architecture

A crucial aspect of this application is that most of the heavy lifting occurs within Electronโ€™s utilityProcess, a specialized worker built solely using Node.js. This setup ensures intensive operations run separately from the main process,


Leave a Reply

Your email address will not be published. Required fields are marked *