Browser and Chromium
FAQ › EUZOS Desktop › Browser and Chromium · Nederlands
What is it?
EUZOS Browser ("Browse websites, without traces on this PC") is the web browser of EUZOS Desktop. It has its own engine (libs/web: HTML and CSS, deliberately no JavaScript) and its own HTTP(S) client with TLS 1.3. For sites that need JavaScript, the same browser can use Chromium as the engine, per tab: a Chromium page becomes a tab in EUZOS's own tab bar, drawn by Chromium through EUZOS's own Wayland compositor in the kernel. The Report a problem button (BrowserFeedback) sends a report about a page to the profile server.
How do I…?
How do I open a web page?
Open EUZOS Browser in the mega menu (it opens about:start, the built-in start page, with the address field ready for typing), or type in the console browser <url> (for example browser nl.wikipedia.org/wiki/Amsterdam). browser new [url] opens a new window; without new the top window loads the address.
How do I search from the address bar?
Type in the bar (Ctrl+L or Tab). With a scheme it goes to that address. With a space, without a dot, or with ? in front it searches with the chosen search engine. Otherwise https:// is put in front (nos.nl, localhost:8080). Choose the search engine on about:browser: DuckDuckGo (HTML, default), Mojeek, Qwant, Ecosia or Startpage. Qwant and Ecosia only give results with JavaScript.
How do I use tabs, favourites, find and zoom?
- Tabs: + or Ctrl+T new; ×, Ctrl+W or middle click closes; Ctrl+Tab switches; a link in a new tab with middle click, Ctrl+click, or the context menu (right click / long press) › Open in new tab. At most 8 tabs; only the most recent keep their laid-out page.
- Several windows, duplicate and move tabs: Ctrl+N (or the browser menu › New window) opens a second browser window side by side with the first (the two halves of the display). Right click on a tab: Duplicate tab (a copy right of it, same address and engine), Move to new window, Close tab. Drag a tab out of the tab bar to give it a window of its own under the pointer, or drop it on another browser window's tab bar. The page keeps running (no reload). Only one window at a time shows a live Chromium page (a click on the other's Chromium tab brings it there).
- Favourites: the star in the address, or Ctrl+D; listed on the start page; at most 40; stored in your profile.
- Find in page: Ctrl+F.
- Zoom: Ctrl+plus / Ctrl+minus / Ctrl+0, 25–200 %.
What is in the browser menu (⋮)?
The ⋮ button at the right end of the bar (right of "Report a problem") opens the browser menu, in our own tabs and in Chromium tabs alike: New tab (Ctrl+T), New window, Zoom (−, the percentage (click: back to 100 %), +; in a Chromium tab Chromium's own zoom), Find in page (Ctrl+F), History (Ctrl+H), Downloads (opens My files › Downloads in the explorer), Clear browsing data (Ctrl+Shift+Delete) and Settings (about:browser). There is no print (the browser cannot print).
Where is my history?
On about:history (menu ⋮ › History, or Ctrl+H): the visits of both engines (our own and Chromium) per day (Today, Yesterday, then the date), with time, title and host, a search field, Remove per visit and Clear browsing data. At most 10 000 visits and 90 days. By default it is kept for this session only, in memory. If you turn on Keep browser data on this PC (Settings › Privacy, or the link on the history page or about:browser; off by default) it is kept encrypted in your own profile directory on this PC (systeem/browser/geschiedenis, saved every 30 s after a change). It is never sent to the profile server.
How do I clear browsing data?
Menu ⋮ › Clear browsing data, Ctrl+Shift+Delete, or the button on the history page (about:clear-data). Choose a time range (last hour, 24 hours, 7 days, 4 weeks, all time) and what: browsing history, cookies and other site data, cached images and files. It clears both engines:
| Choice | Own engine | Chromium |
|---|---|---|
| History | the visits in the range (also in the saved copy) | its own history files (History, Visited Links, Top Sites, …) completely, in memory and in the saved copy |
| Cookies and site data, all time | all cookies (in memory) | running: Storage.clearCookies + Storage.clearDataForOrigin for every visited site; not running: the saved cookie and site-storage files in your folder |
| Cookies and site data, a range | the cookies of the sites visited in that range | Storage.clearDataForOrigin for those sites (if Chromium is not running: at its next start) |
| Cached files | the icon cache | Network.clearBrowserCache (the cache is never saved) |
Downloaded files themselves stay in My files › Downloads.
How do I open a site with Chromium?
Use the engine button in the address bar (left of the star, only on http/https): Open with Chromium (this time), Always use Chromium for <host>, or Always use EUZOS for <host>. From a tab with a page of the own engine, Chromium opens in a new tab next to it. On about:browser you choose the default engine and remove per-site rules. From the console: chromium open <url>.
Why does it say "Chromium is not available on this PC"?
There is no Chromium package (not installed in apps/ on partition 2 and not loaded into memory), there is no chrome program in it, starting failed, or Chromium stopped within 4 seconds. The page shows the reason and the buttons "Open with the built-in engine" and "Try again with Chromium". Chromium only runs on x86-64.
How do I get Chromium on my PC?
Tick the Chromium option in the installer (step Apps; see Installer). That writes chromium=yes into \EOS\FW\APPS.TXT; on every boot the PC checks whether Chromium is in apps/, and if not, asks the profile server's app catalogue (GET /api/apps/chromium) and installs the signed package in the background, with a download token if the catalogue names a download server. By hand: apps install chromium (see Desktop and apps).
How do I download a file?
Right-click a link or image › Save link as…, Save image as…, Save file as… or, on an empty spot, Save page as…. The download runs in the background (the tab bar shows "Downloading: name (40%)"), then the Save as dialog opens, starting in My files › Downloads. At most 64 MB and 4 downloads at once. Chromium downloads go to My files › Downloads without a dialog.
What are browser profiles?
Every browser window belongs to a profile; there is always the default one. A profile has its own home page, favourites, history, cookies and, in Chromium, saved logins, so nothing mixes. Open one with New window for another profile in the browser menu (⋮) or the taskbar menu of the browser: choose a profile or create one. A profile can be protected: opening it then asks for your EUZOS password or QR code (Esc goes back). The name is at the right of the tab strip. A tab cannot move to a window of another profile. Each profile has its own Chromium, and they run side by side; if one crashes, only that profile's tabs stop. chromium stop stops them all, chromium stop <name> one. Signing out closes all profiles.
How do I report a problem with a page?
Press Report a problem on the right of the bar. Choose what is wrong (Layout is wrong, Does not load, Too slow, Does not work without JavaScript, Other), add a comment, optionally tick "Send the full address" and "Send a screenshot of this page" (off by default), and press Send. Only possible after login and only on an http(s) page. You get "Thank you! Your report has number N."
Details
The own engine
- HTML (
libs/web/src/html.rs): WHATWG tokenizer and tree construction for the common cases, error recovery without panics, limits (200,000 nodes, 4 MiB HTML); charset fromContent-Typeor<meta charset>. - CSS (
css.rs,style.rs): selectors, cascade,@media,@import, custom properties,calc(); flex and grid layout (see docs/BROWSER.md "CSS layout"). - No JavaScript: scripts are skipped,
<noscript>is shown. - Network (
net::web): HTTP/1.1 with keep-alive, gzip/deflate, redirects, cookies and HSTS in RAM only, cookies only from the site itself; TLS 1.3 only, certificates checked against\EOS\FW\ROOTS.PEM. Mixed content goes over https or not at all; a form from https to http gets a warning first. - Limits: HTML page 3 MiB, a stylesheet 768 KiB, all stylesheets 2 MiB, layout work
max_steps1,500,000, page height 400,000 px, history 50 per tab. - Privacy: typed form content never goes into the log; addresses only as scheme and host (the path only with
browser debug on). At logout favourites, engine choices, history, cookies, icons and opened local files are wiped (browser::logged_out). - Not (yet): JavaScript, HTTP/2 and HTTP/3, brotli, a cache, TLS 1.2, PDF viewing, AVIF/BMP images,
::before/::aftercontent.
Internal pages
| Page | What | Commands |
|---|---|---|
about:start | start page with favourites and search | — |
about:browser | the browser settings: default engine at the top, per-site engines (remove), search engine, history and privacy, then about this browser (build, Chromium state) | ?search-engine=<key>, ?engine=euzos|chromium, ?site-remove=<host>, ?keep-data=on|off (legacy ?zoekmachine=, ?site-weg= still accepted) |
about:history | history per day, search, remove (legacy name about:geschiedenis) | ?q=<text>, ?n=<count>, ?remove=<time>.<hash> (legacy ?wis clears all) |
about:clear-data | the dialog "Clear browsing data" | ?range=hour|day|week|4weeks|all&history=on&cookies=on&cache=on&go=1 |
about:bestand?<n> | an HTML file opened from the explorer (in memory, only <style>, no commands) | — |
about:engine?euzos=<address> / ?chromium=<address> | only from the buttons on the "opens with Chromium" page | — |
Commands in about: pages only work from the browser itself or another about: page, never from a link on a web page (BNET-8).
Chromium in the browser
- One Chromium process per browser profile for that profile's Chromium tabs; following tabs are targets (
Target.createTarget). - Control via the DevTools protocol over a pipe (
--remote-debugging-pipe, fd 3 and 4), no network port (kernel/src/chromium/control.rs,libs/devtools). The bar maps toPage.navigate,Page.navigateToHistoryEntry,Page.reload,Page.stopLoading; closing a tab:Target.closeTarget. - Display: Chromium's Wayland surface is placed in the page area by the kernel compositor (
kernel/src/screen/wayland.rs,kernel/src/screen/chromium.rs); input in the page area goes to Chromium, Ctrl+T/W/L/D and Ctrl+Tab stay with the browser. - Package: from
apps/on partition 2 (signed) or from RAM (package receive chromiumover SSH); runs through the Linux translation layer (x86-64 only). - Profile:
--user-data-dir=/data/chromiumin the app's/data(the user's profile directory, or RAM). What is not kept without "Keep browser data" is listed ineuzos_vfs::mirror::BROWSER_DATA. - Downloads:
Browser.setDownloadBehaviorto the app's/tmp/downloads, then to My files › Downloads, or without a profile directory to Save as. - Stopping:
chromium stop(and logout) stops all of Chromium's processes.
Report a problem (BrowserFeedback)
The panel is libs/web/src/report_panel.rs; sending is kernel/src/browserfeedback.rs, in its own thread. Sent: the address (without user:password@, #fragment and, unless ticked, ?query), the category, the comment (≤ 2000 characters), browser version, build, architecture, language, page area, zoom, HTTP status, load and layout time, size, up to 20 error lines of the browser log for this page, and optionally a screenshot of only the page area (≤ 1280 px wide, PNG ≤ 512 KB). Never cookies, headers or form contents. The id is a per-session value derived from the PC token, so reports cannot be linked to the hardware inventory.
Reference
Console commands
| Command | Arguments | What it does |
|---|---|---|
browser | — | Usage help |
browser | <url> | Show a web page in the top browser window (http://, https://, about:start, about:browser) |
browser new | [url] | A new browser window (without url: the start page). Legacy alias: browser nieuw |
browser debug | on|off | Timings of drawing, copying and events per frame in the log, and full paths of addresses. Legacy aliases: aan, uit |
chromium | [status] | Chromium's state |
chromium open | <url> | Open the address in a Chromium tab of the browser (no scheme: https:// is added) |
chromium stop | — | Stop all Chromium processes (also wipes its in-RAM profile) |
chromium trace | on|off | DevTools protocol trace in the log (x86-64). Legacy aliases: spoor, aan, uit |
browserfeedback test | [small|large] | Send a test report (logged in; in a test build without login a 401 is expected). large adds a ~350 KB noise PNG. Legacy aliases: klein, groot |
perf start / perf yt / perf net on|off / perf play | — | Chromium measurements, see Diagnostics |
linuxtrace | off|errors|all | System calls of Linux programs (Chromium) in the log, see Diagnostics |
package | see Diagnostics | App packages in RAM (how Chromium is loaded by hand) |
Functions and modules
| Function / module | Role |
|---|---|
crate::browser::command | The browser console command |
crate::browser::start_address | about:start for the mega menu |
crate::browser::profile_loaded / logged_out | Favourites, search engine and engines from the profile; wipe at logout |
crate::browser::keep_data / set_keep_data / save_data / profile_dir_open | "Keep browser data on this PC" and the encrypted history |
crate::browser::Browser, BrowserWindow, CrTab | A browser, a window with tabs, a Chromium tab |
crate::browser::Browser::choose_engine | Own engine or Chromium for a new page |
crate::favicon::begin / forget | Site icons in their own thread, cached per host per session |
crate::download::start / tick / logged_out | Background downloads to Save as or the clipboard |
crate::images | Images fetched in their own threads after loading |
crate::chromium::{open_tab, send_command, link, close_target, wipe, state, status, command} | Chromium as engine |
crate::chromium::control::{begin, stop, open, attach, command, set_trace, status} | The DevTools pipe |
crate::chromium::downloads::event | Chromium downloads |
crate::screen::chromium::{open_url, new_tab, gone, stopped, download_notice} | Chromium's area in the window |
crate::browserfeedback::{send, png, command} | Report a problem |
crate::app_install | Background install of Chromium from the app catalogue |
libs/web (html, css, style, layout, tabs, favorites, find, zoom, address_bar, engine, pages, report_panel, contextmenu) | The engine and the browser UI logic |
libs/browserfeedback | The report format (write in the kernel, strict read on the server) |
libs/devtools | DevTools protocol messages |
Config files and profile settings
| File / setting | Key | Values | Meaning |
|---|---|---|---|
\EOS\FW\APPS.TXT | chromium | ja | Install Chromium in the background after installation |
\EOS\FW\APPS.TXT | chromium_url | URL | Test override: fetch the package from this URL instead of the catalogue |
\EOS\FW\ROOTS.PEM | — | PEM certificates | Root certificates for TLS |
| profile setting | browser-zoekmachine | duckduckgo, mojeek, qwant, ecosia, startpage | Search engine |
| profile setting | browser-engine | euzos, chromium | Default engine |
| profile setting | browser-site | <host> TAB <engine> (one per site, max 32) | Per-site engine |
| profile setting | browser-favoriet | one line per favourite (max 40) | Favourites |
| profile directory | systeem/instellingen/browsergegevens | on, off (legacy aan, uit, still read) | Keep browser data on this PC |
| profile directory | systeem/browser/geschiedenis | text | The kept history (only with keep data on) |
Since 27-10-2026 EUZOS writes English config file names, keys, values and confirmation words (for example
WIPE-…,environment=inPROFILE.TXT); the old Dutch names (marked legacy here) are still read and accepted (docs/ENGLISH.md).
API endpoints (called by the kernel)
| Method | Path | Used for |
|---|---|---|
POST | /api/browserfeedback/melding?token=<pc-token> | Report a problem. This is the legacy Dutch route, still called by the kernel; the English route is /api/browserfeedback/report (see API) |
GET | /api/apps/chromium | App catalogue entry for Chromium (see Apps and downloads) |
Protocol messages and formats
BrowserFeedback report (version 1): a line header, an empty line, then the PNG (or nothing). The field names are wire format and stay Dutch:
browserfeedback=1
id=<session id>
build=<build>
arch=x86_64
browser=<version>
taal=<language>
adres=<address>
volledig=0|1
categorie=opmaak|laadt_niet|traag|zonder_js|anders
viewport=<w>x<h>
zoom=<percent>
status=<http status>
laadtijd=<ms>
opmaaktijd=<ms>
bytes=<size>
opmerking=<comment, escaped>
fout=<error line> (0..n times)
afbeelding=<PNG length>
<PNG bytes>
Response: ok + id=<number>, or fout + reason with 400, 401 (not logged in), 404 (reports off), 408, 413, 429 (too often), 503. Limits: header 16 KiB, PNG 512 KiB; 10 per hour per network, 20 per day per account. Full rules: docs/BROWSERFEEDBACK.md.
DevTools over the pipe: JSON messages of the Chrome DevTools protocol (Target.createTarget, Target.closeTarget, Page.navigate, Page.navigateToHistoryEntry, Page.reload, Page.stopLoading, Browser.setDownloadBehavior), on fd 3 (to Chromium) and fd 4 (from Chromium).
See also
- docs/BROWSER.md: the browser and its engine
- docs/CHROMIUM.md: Chromium on EUZOS
- docs/WAYLAND.md: the compositor in the kernel
- docs/BROWSERFEEDBACK.md: Report a problem
- docs/APPS.md: apps and the app store
- FAQ: Explorer, Desktop and apps, Diagnostics
EUZOS