Hi everyone,
For years, I used Wails (Go) to build my desktop applications. Recently, I made the decision to fully switch to Nim. However, I quickly realized there wasn't a framework that met my needs for building native desktop apps using modern web technologies (React, Vue, Svelte, etc.) for the UI.
That’s exactly why Jazzy Desktop was born.
Powered by the Jazzy web framework, it uses the OS-native WebView to keep binaries tiny and fast, without any Electron bloat.
Although the GitHub repository might look very new, I've actually been developing and testing this locally for quite some time by building my own apps with it. Now that the core is solid, I decided it's finally time to open-source it and share it with everyone.
The core philosophy is simplicity. You write your backend in Nim, expose your procs with a single macro, and call them directly from your JavaScript frontend:
Backend (Nim):
import jazzy_desktop
# Just add {.expose.} and this becomes a callable RPC endpoint
proc greet(name: string): string {.expose.} =
return "Hello " & name & " from Nim!" Frontend (JavaScript):
// Call your Nim functions directly from JS, no fetch or routing boilerplate
const result = await jazzy.greet("World")
I believe in this so much that I am currently migrating my existing apps to Jazzy Desktop, and starting all my new projects with it.
Jazzy Desktop is a brand new public project. I would absolutely love for you to try it out, test it, report any bugs you find, and even become a contributor! There is a lot of room to grow, especially around macOS/Linux native features.
nimble install jazzy_desktopLooking forward to hearing your feedback!
// Call your Nim functions directly from JS, no fetch or routing boilerplate
const result = await jazzy.greet("World")
Why would you want to though? Use nim js and enjoy a sane type system. ;-)
Hello! While I absolutely love Nim, my goal with Jazzy Desktop is to bring together the best of both worlds.
I want to leverage the vast npm ecosystem, mature React/Vue component libraries, and modern animation frameworks for the frontend. Writing and maintaining nim js bindings for tools like Framer Motion or GSAP would be incredibly tedious and severely hurt developer productivity.
This architecture lets developers build stunning, interactive UIs using the JS frameworks they already know, while seamlessly delegating all the heavy lifting—file I/O, system calls, and native threading—to a Nim backend.