When I started building Axion Notes, Electron appealed to me for a fairly simple reason—it offered a practical way to build a cross-platform desktop application using web technologies I already knew.
React was already familiar territory, so being able to build the interface with React and TypeScript made the transition much easier. It also meant I could reuse a large part of the same code for a web version of the application instead of maintaining two completely separate codebases.
That convenience was probably the biggest reason Electron made sense for the project.
Familiar, but not quite the same
At first, Electron feels a lot like normal web development.
You still have components, state, styling, event handling, and the usual React workflow. That familiarity helps a lot, especially when most of the interface behaves like a regular web application.
The main learning curve for me was understanding the separation between Electron’s main and renderer process.
Early on, it wasn’t immediately obvious why I couldn’t simply call filesystem APIs directly from the React side of the application. In a normal Node.js environment, reading or writing a file is straightforward. In Electron, the renderer is deliberately separated from that level of access.
Once that architecture clicked, the rest of Electron made much more sense. The renderer handles the interface, while privileged operations belong in the main process and are exposed through controlled communication between the two.
Desktop applications bring their own quirks
Another thing I had to think about was native desktop behavior.
Menus are a good example. On desktop, Electron gives you access to native application menus, but those menus behave differently across macOS and Windows. A web version, on the other hand, doesn’t have that native menu system, so equivalent functionality has to be represented within the application UI.
That means “shared codebase” doesn’t mean “identical application.” Some behavior has to remain platform-specific.
The main takeaway
Electron made it possible to build a desktop application using technologies I was already comfortable with, while still giving me access to native desktop capabilities when I needed them. The main lesson was learning how to structure those responsibilities cleanly rather than treating everything as if it belonged in the React layer.
Top comments (0)