
Embedded app shell
hex-browser - embedded app shell for native Flutter, web apps, QML, plugins, and RTSP
hex-browser is an embedded app shell for systems that need a stable, purpose-built user surface. Built on the Qt 6/QML stack, it runs multiple tabs and brings together native Flutter, web apps, QML apps, <so> plugins, and RTSP streams, so application teams can stay inside their own ecosystem instead of rebuilding embedded UI plumbing for every device.
- One application shell: Use a single shell for operator panels, local applications, service tools, remote content, and fullscreen web workflows.
- Low-memory embedded tuning: Background web tabs can be discarded, renderer process count is capped, and Chromium low-end device flags are applied for constrained hardware.
- Ecosystem and service: Developers stay in their own application ecosystem while VNC, watchdog integration, startup splash handling, keyboard control, popup policy, and dark mode stay in the shell.
App shell first, browser included
hex-browser is better understood as an embedded app shell and kiosk starter than as a browser wrapper. Web apps are one supported content path beside native Flutter, QML scenes, <so> plugins, and RTSP streams.
One configuration, mixed content
The same deployment can combine native Flutter, remote web applications, local QML apps, plugin-based native code, and live video feeds without switching shells.
Configuration space for field deployment
Fullscreen behavior, rotation, popup policy, persistent storage, navbar behavior, keyboard handling, screenshots, VNC, and debugging switches are configuration-driven. In combination with ttmdaemon, the surrounding configuration space grows much further.





Prepared for real operator screens
hex-browser fits environments where operators need a dedicated flow, clear state, and predictable recovery.

Industrial machine control
Machine HMIs, line-side dashboards, alarm states, and touch-first operator screens for industrial automation.

Home and building automation
Wall panels, energy dashboards, room control, and connected-device orchestration with a dedicated kiosk surface.

Browser-in-browser workflows
Nested web tools, service consoles, and controlled popup flows inside a managed kiosk shell.

Feature screencast
A clean stage for navigation, tab switching, plugin loading, remote access, and other browser capabilities in motion.
Plugins and extension path
hex-browser exposes a native plugin path so teams can extend the shell for their own devices, protocols, media paths, and application models.

The public example repository shows the HexBrowserPluginInterface entry path for native extensions and QML-backed plugin UIs.
Open example repositoryFlutter is integrated as a native plugin behind the shell. To the application team it stays a Flutter application, not a browser app.
Plugins loaded through <so> let you integrate custom protocols, device control, media pipelines, or project-specific applications into the same shell.
Supported content paths
The routing layer distinguishes the main content types directly from the configured URL.
Source-mapped JSON configuration reference
This table is based on the keys that are actually wired in the current hex-browser source, not just on the sample config file. It covers startup keys, tab parsing, runtime UI, WebEngine behavior, persistence, VNC, and recovery switches.
Source basis: gui/main.qml, gui/PanelView.qml, gui/Custom*View.qml, misc.cpp, StartupLogoResolver.cpp.
Tabs and routing
These keys define which tabs exist and how hex-browser maps each configured source to a web view, QML view, native plugin, or RTSP player.
Shell, navbar, and operator tools
These keys shape the kiosk shell itself: navigation behavior, visual style, tab icons, and operator-facing buttons.
Keyboard, gestures, and input handling
These keys tune the virtual keyboard, the swipe model, and pointer behavior for touch devices.
WebEngine and per-view behavior
These top-level keys are pushed into each created view. In the current source, most of them have concrete behavior on Chromium web tabs; plugin, QML, and RTSP tabs mainly expose the same property surface for consistency.
Storage, brightness, timers, and lifecycle
These keys affect persistence, screenshots, backlight behavior, tab lifecycle, and screensaver-related timers.
Startup, system integration, and splashscreen
These keys are evaluated early or at boot-time and affect environment setup, rotation, color scheme, splash handling, and debugging.
Reload, VNC, and resilience controls
These keys control automatic refresh, remote service access, and threshold-triggered recovery behavior.