Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/tim-janik/webhead

WebHead - Wrap Web Browser Engines for Application GUIs
https://github.com/tim-janik/webhead

Last synced: 9 days ago
JSON representation

WebHead - Wrap Web Browser Engines for Application GUIs

Awesome Lists containing this project

README

        

# WebHead

WebHead is a small C++17 library that detects, configures, and runs the web rendering engine of pre-installed web browsers
as a chrome-less child process of an application.
By fully owning the web rendering process and controlling its lifetime, this can be used to render the application GUI and
allows front end implementations of local applications in pure HTML/CSS/JS.

**Goals:**
- A parent->child process relationship must be maintained between the application and the web head.
- The web head runtime must be reliably coupled to the existence of the child process.
- The web heads must be chrome-less without any ordinary web-browser menus or popups.
- The web head must be securely authenticated for the application.

## Browser Support

Support has been implemented for the following browsers:

- [x] Chromium - this makes use of the `--app`, `--user-data-dir` and a few other options to construct an isolated, chromeless application UI window.
- [x] Google-Chrome - supported in the same way as Chromium.
- [x] Firefox - current versions of Firefox lack a proper application / chromeless mode. So `--private-window`, `--profile` and a number of other options and CSS settings are applied to mimick an application window without web browser chrome elements as best as possible.
- [x] Epiphany - this browser is run in application mode with a dynamically created `APPLICATION.desktop` file.
- [x] Snap - on Ubuntu, web browsers may be installed as snap package with hard limitations on readable and writable paths. For snap based browsers, remporary profile directories are created under `~/snap/`.

## Roadmap

- [x] Scan for available browsers.
- [x] Add Chromium type web heads.
- [x] Add Firefox web head (needs profile setup).
- [x] Add Epiphany web head (needs desktop file setup).
- [ ] Support a user provided Electron as web head.
- [ ] Support a user provided NW.js as web head.
- [ ] Support size optimized WebKit based renderer.
- [ ] Example: Demonstrate JSONIPC setup.
- [ ] Example: Add pandoc based mdview example.
- [ ] Security: Add secure authentication of the web-head to the application.
- [ ] Security: Add example that allows single-connection only.
- [ ] Security: Avoid proxies to disallow sniffing.

## Related projects:
- [Electron.js](https://www.electronjs.org/) - The most popular web rendering engine for application front ends.
- [Embrace Modern Technology: Using HTML 5 for GUI in C++](https://www.youtube.com/watch?v=bbbcZd4cuxg) by Borislav Stanimirov, providing a good description of the motivations behind implementing UIs based on a web engine.
- [WebUI v2](https://github.com/webui-dev/webui) - Similar in scope, with MacOS & Windows support and includes a Civetweb WebSocket implementation.