Muon
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.
- 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 |
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
}
- JS:
Boolean
Go:bool
- JS:
Number
Go:float64
- JS:
String
Go:string
- JS:
Object
Go:struct
via JSON
- See our getting started guide
- No, see Missing Ultralight Features
- Add
-ldflags -H=windowsgui
to either yourgo build
orgo run
to get rid of the window.
- 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.
- If you're attempting to load the libraries out of the same directory as your program add
-ldflags "-r ."
to yourgo build
to setrpath
to the local directory for library resolution.
- This likely means you're not using the 1.1 Ultralight pre-release which can be downloaded only from their GitHub Repo for now
- Currently, Ultralight only supports Windows for x86. Ensure you have a 32-bit
gcc
in your path, and ensure you haveCGO_ENABLED=1
andGOARCH=386
environment variables set.
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.