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.
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:
Boolean
Go:bool
- JS:
Number
Go:float64
- JS:
String
Go:string
- JS:
Object
Go:struct
via 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=windowsgui
to either yourgo build
orgo run
to get rid of the window.
exit status 3221225781
Q: I get - 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.
libWebCore.so: cannot open shared object file
Q: I get - 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.
symbol not found: ulCreateSettings
Q: I get - 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
gcc
in your path, and ensure you haveCGO_ENABLED=1
andGOARCH=386
environment 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.