Muon – GPU based Electron on a diet
source link: https://www.tuicool.com/articles/EnURFfJ
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 MBExample
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: I get exit status 3221225781
when I try to run my program
- 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: How do I get rid of the Console window on Windows?
- Add
-ldflags -H=windowsgui
to either yourgo build
orgo run
to get rid of the window.
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
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