All apps · 0 apps
Brave-Origin
Docker app from shoyrock's Repository
Overview
Readme
View on GitHubBrave Origin in Docker
Testing release:
1.0.1-beta.2fixes automatic resizing, keeps Brave maximized, and includes application security fixes. Known dependency vulnerabilities remain, so it is not security-cleared for production. Stable1.0.0images do not include these fixes. See security guidance.
Run Brave Origin in a web browser over HTTPS. Your bookmarks, settings, extensions, and downloads stay in a persistent folder. The container uses Debian 13 Trixie Slim and the official stable brave-origin package.
Stable release: 1.0.0. Use latest for stable updates or pin 1.0.0 to keep this container version. Development builds use beta and need a separate appdata folder.
Prefer X11? The stable X11 edition uses KasmVNC and is available as ghcr.io/shoyrock/brave-origin:x11 or forgejo.foss.homes/shoy/brave-origin:x11. It has its own Unraid template and x11-beta development channel. Use a separate appdata folder and host port when running both editions.
Get started
You need an x86-64 Linux host with Docker and Docker Compose v2. GPU access is optional.
git clone https://github.com/shoyrock/Brave-Origin.git
cd Brave-Origin
cp .env.example .env
Edit .env and set AUTH_PASSWORD to a password of your choice. Then start the container:
docker compose pull
docker compose up -d --no-build
Open https://YOUR-SERVER-IP:8443 and sign in as brave. The container creates a self-signed certificate, so your browser will show a certificate warning. For a trusted connection, supply your own certificate as described below.
Images are available from both registries:
ghcr.io/shoyrock/brave-origin:latestforgejo.foss.homes/shoy/brave-origin:latest
Set IMAGE_NAME in .env to choose a registry or a specific version. To build from source, run docker compose build followed by docker compose up -d --no-build.
Unraid
The Unraid template uses bridge networking, HTTPS port 8443, and /mnt/user/appdata/brave-origin for persistent storage. It defaults to Unraid's user ID 99 and group ID 100.
To install the template from the Unraid terminal:
mkdir -p /boot/config/plugins/dockerMan/templates-user
curl -fL https://raw.githubusercontent.com/shoyrock/Brave-Origin/main/templates/brave-origin.xml \
-o /boot/config/plugins/dockerMan/templates-user/my-brave-origin.xml
In Docker → Add Container, select Brave-Origin. Set a password, review the appdata path and port, then apply. Use the container's WebUI menu to open it.
For Intel or AMD graphics, add a Device mapping from /dev/dri to /dev/dri in the advanced template view. Leave this mapping out on systems without that device. The template settings are checked automatically and tested with Unraid's user and group IDs. Installation through the Unraid web interface has not been verified on this development host.
Copy and paste
Use Ctrl+C and Ctrl+V inside the remote session. On macOS, use the shortcuts supported by your client browser. Text can move in both directions, including Unicode and multiple lines. The server also supports image clipboard transfer when the client enables it.
Clipboard access depends on your client browser's permissions and a secure context. Allow clipboard access when prompted and keep the session page focused. If automatic clipboard access is blocked, open Clipboard in the sidebar, enter your text, click Send to session, then paste inside Brave. Chromium-based clients also support native paste events, including paste from the browser menu. Clipboard permissions and image support vary by client browser.
Settings
Set these values in .env, the Unraid template, or your container's environment.
| Setting | Default | Purpose |
|---|---|---|
CONFIG_PATH |
./appdata |
Compose host folder mounted at /config. |
IMAGE_NAME |
ghcr.io/shoyrock/brave-origin:latest |
Compose image and release channel. |
WEB_PORT |
8443 |
Compose host port. The container always listens on 8443. |
PUID / PGID |
1000 / 1000 |
Nonzero user and group IDs for browser files. |
UMASK |
022 |
File creation permissions. |
TZ |
Etc/UTC |
Timezone. |
AUTH_ENABLED |
true |
Require a login. Disable only when access is already restricted by your network or proxy. |
AUTH_USER |
brave |
Initial login username. |
AUTH_PASSWORD |
Empty | Initial password; required unless a password file or saved credentials exist. |
AUTH_PASSWORD_FILE |
Empty | Path inside the container to a mounted password file. |
AUTO_UPDATE |
true |
Update the browser inside the running container. |
UPDATE_INTERVAL |
21600 |
Seconds between update checks (six hours). |
MIN_UPDATE_FREE_SPACE_MB |
1024 |
Free disk space required before downloading an update. |
BRAVE_ORIGIN_VERSION |
latest |
Browser package version to request. Older versions are never installed over newer ones. |
DOWNGRADE_RETRY_INTERVAL |
300 |
Seconds before retrying a session blocked by an older browser. |
BRAVE_STARTUP_TIMEOUT |
15 |
Seconds the resume command waits before reporting that startup is pending. |
ENABLE_AUDIO |
true |
Stream session audio. |
ENABLE_GPU |
true |
Use available GPU hardware for browser rendering. |
DRI_NODE |
/dev/dri/renderD128 |
Render device when a GPU is passed through. |
DISPLAY_AUTO_RESIZE |
true |
Automatically resize the desktop to the browser window, including 1440p, 4K, and ultrawide displays. |
DISPLAY_WIDTH / DISPLAY_HEIGHT |
1920 / 1080 |
Fixed desktop size, used only when DISPLAY_AUTO_RESIZE=false. |
BROWSER_LOCK_MAXIMIZED |
true |
Keep Brave maximized. Set to false to allow minimizing, restoring, and dragging its windows. |
BRAVE_FLAGS |
Empty | Extra space-separated browser arguments. Shell quoting is not interpreted; flags that disable the sandbox or change the profile are rejected. |
CONTAINER_HOSTNAME |
brave-origin |
Compose container hostname. |
Automatic resizing follows the available browser window, including changes when you maximize or resize it. Existing width and height values no longer lock the desktop unless you set DISPLAY_AUTO_RESIZE=false. Use beta or 1.0.1-beta.2 for this fix; it is not included in the stable 1.0.0 images.
Starting with 1.0.1-beta.2, Brave stays maximized: minimize, restore, and window dragging cannot take it off screen or make it smaller. Its title-bar buttons remain visible. Tabs, the address bar, and automatic display resizing continue to work. Set BROWSER_LOCK_MAXIMIZED=false and recreate the container to restore the previous window controls. In Unraid, this is Keep Browser Maximized.
This behavior belongs to the container's window manager. Brave remains the official, unmodified package and can receive browser updates independently. The image includes the modified Labwc 0.8.3 source at /usr/local/share/brave-origin/labwc-source.tar.xz; its build recipe is in Dockerfile and its changes are in patches/labwc/lock-maximized.patch.
The older KASM_AUTH_ENABLED, KASM_USER, KASM_PASSWORD, and KASM_PASSWORD_FILE names remain accepted. The corresponding AUTH_* setting takes precedence.
Saved credentials take precedence over password environment variables. On first setup, a password file takes precedence over AUTH_PASSWORD; an unreadable or empty file stops startup. New and reset passwords use bcrypt hashes. Existing saved credentials are retained.
To change a saved password:
docker exec brave-origin /usr/local/bin/reset-password.sh --generate
The generated password is printed to that command's output. Save it securely. You can also pass a chosen password as the argument, but doing so can leave it in your shell history. Resetting a password does not enable authentication if you explicitly disabled it.
Storage and backups
| Container path | Contents |
|---|---|
/config/profile |
Browser profile, bookmarks, history, and extensions. |
/config/downloads |
Downloads and files transferred through the session. |
/config/state |
Locks, version records, status, and logs. |
/config/ssl |
HTTPS certificate and private key. |
/config/.passwd |
Saved login credentials. |
Back up the entire appdata folder while the container is stopped. For backups without stopping the container, pause the browser first:
docker exec brave-origin /usr/local/bin/profile-control.sh quiesce
# Back up your appdata folder after the command succeeds.
docker exec brave-origin /usr/local/bin/profile-control.sh resume
The backup command waits for the profile lock and flushes writes before reporting success. A failed command means the profile is not ready for backup. A backup hold persists across container restarts until you run resume.
Run docker exec brave-origin /usr/local/bin/profile-control.sh status to inspect the session. A healthy container can be paused for backup. A browser that is too old for the saved profile reports DOWNGRADE_BLOCKED and does not open the profile.
The /config mount root, login file, TLS directory, and lifetime locks belong to root. Browser data directories remain writable by PUID and PGID. Do not recursively change ownership of the whole appdata folder. Nginx access and error logs are available through docker logs.
Changing PUID or PGID repairs profile ownership at the next startup. This can take time for a large profile. Do not run two containers against the same appdata folder.
Updates and release channels
Browser updates download first while the browser stays open. After the download succeeds, the browser closes, the package installs from the local cache, and the session restarts. Expect a brief interruption. A download failure leaves the browser running. Failed installation recovery also uses cached packages only.
To check for a browser update manually:
docker exec brave-origin /usr/local/bin/update-brave.sh
Container updates are separate: use docker compose pull and docker compose up -d --no-build, or Unraid's container update controls.
betais the development branch and image tag. It receives tested development builds.mainholds release preparation and stable code. A push tomainbuilds and tests but does not publish images.- A tag such as
v1.0.0-beta.1publishes a beta version. It does not changelatest. - A stable tag such as
v1.0.0, created frommain, publishes the version and updateslatestin both registries.
The first stable container release is 1.0.0. Back up appdata before moving from older wayland images. Never run stable and beta containers against the same live profile. See release notes for changes and the release guide for maintainer steps.
HTTPS and access
The web session provides access to the browser profile and downloaded files. Keep it behind a trusted network, VPN, or authenticated proxy. Login protection is enabled by default. A reverse proxy must preserve the original Host header, including a nonstandard port. Requests from unrelated website origins are rejected.
Brave runs as braveuser with its Chromium sandbox enabled. The supplied configuration uses seccomp:unconfined so the browser can create user namespaces; this disables Docker's syscall filter for this container. The host must permit unprivileged user namespaces. no-new-privileges prevents child processes from gaining permissions through setuid programs. Do not add --no-sandbox, privileged mode, or SYS_ADMIN.
To use your own TLS certificate, place its certificate chain at /config/ssl/cert.pem and its private key at /config/ssl/cert.key, then restart the container. A simple nginx reload does not copy newly supplied files into place.
GPU support
Without a GPU mapping, the container uses software rendering. With an Intel or AMD GPU available, start Compose with:
docker compose -f compose.yaml -f compose.gpu.yaml up -d --no-build
Browser hardware rendering, WebGL, and video decoding were verified on Intel graphics. Stream encoding can fall back to the CPU when a driver does not support the requested format. Support varies by GPU and host driver; ENABLE_GPU=false disables browser GPU rendering.
License
This container project uses the MIT License. Brave Origin, Selkies, and the other included components retain their own licenses. Brave Origin and the Brave logo are trademarks of Brave Software, Inc. This project is unofficial and is not affiliated with or endorsed by Brave Software, Inc.
Install Brave-Origin on Unraid in a few clicks.
Find Brave-Origin in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/shoyrock/brave-origin:latestRuntime arguments
- Web UI
https://[IP]:[PORT:8443]/- Network
bridge- Privileged
- false
- Extra Params
--security-opt seccomp=unconfined --security-opt no-new-privileges=true --shm-size=1g --pids-limit 2048
Template configuration
Single-origin HTTPS web port for remote browser access.
- Target
- 8443
- Default
- 8443
- Value
- 8443
Persistent directory for browser profile, downloads, and state.
- Target
- /config
- Default
- /mnt/user/appdata/brave-origin
- Value
- /mnt/user/appdata/brave-origin
Initial login password. Required when password protection is enabled; use reset-password.sh to change it after setup.
- Target
- AUTH_PASSWORD
Container user ID (Unraid default: 99).
- Default
- 99
- Value
- 99
Container group ID (Unraid default: 100).
- Default
- 100
- Value
- 100
File creation permissions mask.
- Default
- 022
- Value
- 022
Container timezone.
- Target
- TZ
- Default
- America/New_York
- Value
- America/New_York
Resize the desktop to fit your browser window automatically. Disable only to use a fixed width and height.
- Target
- DISPLAY_AUTO_RESIZE
- Default
- true|false
- Value
- true
Prevent minimizing, restoring, or dragging a maximized browser window. Disable to restore the previous window controls.
- Target
- BROWSER_LOCK_MAXIMIZED
- Default
- true|false
- Value
- true
Fixed desktop width in pixels; used only when Automatic Display Resize is disabled.
- Target
- DISPLAY_WIDTH
- Default
- 1920
- Value
- 1920
Fixed desktop height in pixels; used only when Automatic Display Resize is disabled.
- Target
- DISPLAY_HEIGHT
- Default
- 1080
- Value
- 1080
Enable PulseAudio virtual sink and unified Opus audio streaming.
- Target
- ENABLE_AUDIO
- Default
- true|false
- Value
- true
Download browser updates in the background and install them while the browser is stopped.
- Target
- AUTO_UPDATE
- Default
- true|false
- Value
- true
Enable hardware acceleration (mount /dev/dri devices).
- Target
- ENABLE_GPU
- Default
- true|false
- Value
- true
Require a password to open the browser. Set a password below before starting.
- Target
- AUTH_ENABLED
- Default
- true|false
- Value
- true
Username for the web login.
- Target
- AUTH_USER
- Default
- brave
- Value
- brave
Render device to use when /dev/dri is passed through.
- Target
- DRI_NODE
- Default
- /dev/dri/renderD128
- Value
- /dev/dri/renderD128