Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/imvexed/muon
GPU based Electron on a diet
https://github.com/imvexed/muon
cross-platform desktop electron hacktoberfest
Last synced: about 1 month ago
JSON representation
GPU based Electron on a diet
- Host: GitHub
- URL: https://github.com/imvexed/muon
- Owner: ImVexed
- License: mit
- Created: 2019-09-26T20:26:52.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-03-15T06:02:13.000Z (over 1 year ago)
- Last Synced: 2024-10-14T13:42:44.417Z (about 1 month ago)
- Topics: cross-platform, desktop, electron, hacktoberfest
- Language: C
- Homepage:
- Size: 137 MB
- Stars: 2,879
- Watchers: 44
- Forks: 64
- Open Issues: 26
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
----
`Muon` is a lightweight alternative to Electron written in Golang in about ~300 LoC, using Ultralight instead of Chromium. [Ultralight](https://ultralig.ht/) 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 usageComparison 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`:
```go
package mainimport (
"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](https://github.com/ImVexed/muon/blob/master/getting-started.md)## Q: *Is there perfect Chrome or Firefox feature parity?*
- No, see [Missing Ultralight Features](https://github.com/ultralight-ux/Ultralight/issues/178)## Q: *How do I get rid of the Console on Windows?*
- Add `-ldflags -H=windowsgui` to either your `go build` or `go 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](https://github.com/ultralight-ux/Ultralight#getting-the-latest-sdk) 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 your `go build` to set `rpath` 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](https://github.com/ultralight-ux/Ultralight#getting-the-latest-sdk) 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 have `CGO_ENABLED=1` and `GOARCH=386` environment variables set.# Licensing
While muon itself is MIT licensed, [Ultralight](https://ultralig.ht/) 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](https://github.com/ultralight-ux/Ultralight/tree/master/license).