ImVexed/muon has 2,939 GitHub stars and 67 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-08 18:04 UTC. Last push 2023-03-15.
GPU based Electron on a diet
What you can do
- Full JS to Go interop
- GPU based rendering
- Superior disk size + memory & cpu usage
- MEM - 26.0 MB - 201.7 MB
Measured star growth
- in 24h
- 0
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalMuon is a lightweight alternative to Electron written in Golang in about ~300 LoC, using Ultralight instead of Chromium. Ultralight is a cross-platform WebKit rewrite using the GPU to target embedded desktop applications that resulted in a fast, lightweight, and low-memory HTML UI solution that blends the power of Chromium with the small footprint of Native UI.
Features
- Full JS to Go interop
- GPU based rendering
- Cross-platform
- Hot-reloading
- Superior disk size + memory & cpu usage
Comparison with a "Hello, World!" React App
| Muon | Electron | |
|---|---|---|
| CPU | 0.0% | 1.2% |
| MEM | 26.0 MB | 201.7 MB |
| DISK | 42 MB | 136 MB |
Example
From examples/create-react-app/main.go:
package main
import (
"github.com/ImVexed/muon"
"cra-go/webfiles"
"net/http"
)
func main() {
// Any static asset packer of your liking (ex. fileb0x)
fileHandler := http.FileServer(webfiles.HTTP)
cfg := &muon.Config{
Title: "Hello, World!",
Height: 500,
Width: 500,
Titled: true,
Resizeable: true,
}
m := muon.New(cfg, fileHandler)
// Expose our `add` function to the JS runtime
m.Bind("add", add)
// Show the Window and start the Runtime
if err := m.Start(); err != nil {
panic(err)
}
}
// Muon automatically handles interop to and from the JS runtime
func add(a float64, b float64) float64 {
return a + b
}
FAQ
Q: How are JS types translated to Go types?
- JS:
BooleanGo:bool - JS:
NumberGo:float64 - JS:
StringGo:string - JS:
ObjectGo:structvia JSON
Q: How do I setup Ultralight?
- See our getting started guide
Q: Is there perfect Chrome or Firefox feature parity?
- No, see Missing Ultralight Features
Q: How do I get rid of the Console on Windows?
- Add
-ldflags -H=windowsguito either yourgo buildorgo runto get rid of the window.
Q: I get exit status 3221225781
- Your program likely can't find the Ultralight libraries. Ensure they're either installed on the system, or, in the same folder as your program. Currently, Muon uses the 1.1 Ultralight pre-release that hasn't yet propagated to their main site and can only be downloaded from the Ultralight github repo.
Q: I get libWebCore.so: cannot open shared object file
- If you're attempting to load the libraries out of the same directory as your program add
-ldflags "-r ."to yourgo buildto setrpathto the local directory for library resolution.
Q: I get symbol not found: ulCreateSettings
- This likely means you're not using the 1.1 Ultralight pre-release which can be downloaded only from their GitHub Repo for now
Q: How do I compile for x86?
- Currently, Ultralight only supports Windows for x86. Ensure you have a 32-bit
gccin your path, and ensure you haveCGO_ENABLED=1andGOARCH=386environment variables set.
Licensing
While muon itself is MIT licensed, Ultralight is not.
Ultralight is free for non-commercial use, educational use,
and also free for commercial use by small indie developers making
less than US$100,000 a year. You can find full terms in the SDK.
Pricing plans for larger commercial projects will be announced later.
Their specific license terms can be found here.
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
561,111 starspublic-apis/public-apis
A collective list of free APIs
497,345 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
444,147 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,210 stars