GitHub - ImVexed/muon: GPU based Electron on a diet
source link: https://github.com/ImVexed/muon
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
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 }
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.
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 build
to setrpath
to 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
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.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK