detached 3cb3770

chore: add v0.28.0 changelog entry

commit
3cb37708b6e0ec93fef599c66defb225d40aa631
author
bnema · · 2026-03-27 21:12 UTC
parent
e2241c5
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
refs
tag: v0.28.0
1 file · +29 -0
M CHANGELOG.md +29 -0
@@ -4,6 +4,35 @@ All notable changes to this project will be documented in this file.
44
55 ## [Unreleased]
66
7+## [0.28.0] - 2026-03-27
8+
9+### Added
10+
11+- **Engine abstraction layer**: Introduced a major architectural refactor that decouples the browser engine layer from the UI. The new `Engine` interface and supporting infrastructure make it possible to support alternative rendering engines beyond WebKit in the future. Users with custom configurations should run `dumber config migrate` to transition to the new engine configuration format (`[engine]/[engine.webkit]` structure). The migration is automatic and backwards-compatible.
12+- **Website data access permission**: New permission dialog and system for controlling access to website persistent data. Users can now grant or deny individual websites access to cookies, localStorage, and other persistent storage.
13+- **Content blocker large filter set support**: Filter sets exceeding WebKit's 150k rule limit are now properly handled by compiling each part file as a separate WebKit filter, enabling support for comprehensive filter lists. Filter file discovery is now dynamic via manifest instead of a hardcoded list.
14+- **Content blocker debug logging**: Added load-failed signal logging to help diagnose content blocker and filter compilation issues.
15+
16+### Changed
17+
18+- **Database backend modernization**: Replaced the WASM-based `ncruces/go-sqlite3` with native `purego-sqlite` via pure FFI (no WASM runtime, no CGO required). This simplifies the build process and improves startup performance by removing the SQLite WASM initialization precompile step.
19+- **Keyboard and input system overhaul**: Complete rewrite of keyboard routing with native dead key and compose sequence support. The new unified key routing system properly handles accent input with bubble-phase handling and input method fallback, restricted to editable targets with accessibility fallback.
20+- **Omnibox ghostwriter reliability**: Reimplemented the ghost text system to eliminate letter-eating on fast typing. Replaced the goroutine/token/coalescer machinery with synchronous ghost computation, a guard flag for programmatic `SetText`, debounced echo detection, and stale input checks.
21+- **Omnibox URL intent matching**: Improved URL detection to prioritize URL-like input on Enter, normalize bare IPs to HTTP for local/tailnet services, and handle leading whitespace correctly. Explicit omnibox selections are now always honored over ghost input.
22+- **Permission system hardening**: Strengthened permission origin handling to use the live page URI from the signal's WebView for all permission lookups. Exported metadata key constants replace raw string literals. Cookie policy default now correctly aligns with Epiphany ITP model.
23+- **GTK binding upgrades**: Migrated from `jwijenbergh/puregotk` to `bnema/puregotk` with `ebitengine/purego`. Signal callbacks now receive `*glib.Error` instead of raw `uintptr`, providing actual error messages in load-failed and download-failed logs. Fixes `g_object_new_with_properties` use-after-free via `[]string` keepalive.
24+
25+### Fixed
26+
27+- **WebView accent picker**: Fixed double-character input and focus loss in the WebView accent picker during rapid typing.
28+- **Async callback safety**: Hardened async callbacks with URI validation and timer generation counters to prevent stale callbacks from executing on the wrong WebView.
29+- **Modal phase synchronization**: Made `setControllerPhase` synchronous and dispatched modal timeouts via the GTK main thread to prevent race conditions.
30+- **Keyboard routing thread-safety**: Resolved thread-safety issues and nil-guard checks in keyboard routing.
31+- **Application shortcuts restoration**: App shortcuts are now restored when WebView has focus.
32+- **Favicon caching**: Fixed stacked title bar favicons to populate from cache on stack creation, guarded against nil texture overwriting a good favicon, and prevented swap on pool reuse.
33+- **SIGABRT crash on permission requests**: Fixed a crash that occurred when the permission-request signal was emitted during rapid pane teardown.
34+- **Panic logging in safeGLibType**: Recovered panics are now logged instead of silently swallowed.
35+
736 ## [0.27.2] - 2026-02-17
837
938 ### Changed
@@ -4,6 +4,35 @@ All notable changes to this project will be documented in this file.
4 4
5 ## [Unreleased]5 ## [Unreleased]
6 6
7+## [0.28.0] - 2026-03-27
8+
9+### Added
10+
11+- **Engine abstraction layer**: Introduced a major architectural refactor that decouples the browser engine layer from the UI. The new `Engine` interface and supporting infrastructure make it possible to support alternative rendering engines beyond WebKit in the future. Users with custom configurations should run `dumber config migrate` to transition to the new engine configuration format (`[engine]/[engine.webkit]` structure). The migration is automatic and backwards-compatible.
12+- **Website data access permission**: New permission dialog and system for controlling access to website persistent data. Users can now grant or deny individual websites access to cookies, localStorage, and other persistent storage.
13+- **Content blocker large filter set support**: Filter sets exceeding WebKit's 150k rule limit are now properly handled by compiling each part file as a separate WebKit filter, enabling support for comprehensive filter lists. Filter file discovery is now dynamic via manifest instead of a hardcoded list.
14+- **Content blocker debug logging**: Added load-failed signal logging to help diagnose content blocker and filter compilation issues.
15+
16+### Changed
17+
18+- **Database backend modernization**: Replaced the WASM-based `ncruces/go-sqlite3` with native `purego-sqlite` via pure FFI (no WASM runtime, no CGO required). This simplifies the build process and improves startup performance by removing the SQLite WASM initialization precompile step.
19+- **Keyboard and input system overhaul**: Complete rewrite of keyboard routing with native dead key and compose sequence support. The new unified key routing system properly handles accent input with bubble-phase handling and input method fallback, restricted to editable targets with accessibility fallback.
20+- **Omnibox ghostwriter reliability**: Reimplemented the ghost text system to eliminate letter-eating on fast typing. Replaced the goroutine/token/coalescer machinery with synchronous ghost computation, a guard flag for programmatic `SetText`, debounced echo detection, and stale input checks.
21+- **Omnibox URL intent matching**: Improved URL detection to prioritize URL-like input on Enter, normalize bare IPs to HTTP for local/tailnet services, and handle leading whitespace correctly. Explicit omnibox selections are now always honored over ghost input.
22+- **Permission system hardening**: Strengthened permission origin handling to use the live page URI from the signal's WebView for all permission lookups. Exported metadata key constants replace raw string literals. Cookie policy default now correctly aligns with Epiphany ITP model.
23+- **GTK binding upgrades**: Migrated from `jwijenbergh/puregotk` to `bnema/puregotk` with `ebitengine/purego`. Signal callbacks now receive `*glib.Error` instead of raw `uintptr`, providing actual error messages in load-failed and download-failed logs. Fixes `g_object_new_with_properties` use-after-free via `[]string` keepalive.
24+
25+### Fixed
26+
27+- **WebView accent picker**: Fixed double-character input and focus loss in the WebView accent picker during rapid typing.
28+- **Async callback safety**: Hardened async callbacks with URI validation and timer generation counters to prevent stale callbacks from executing on the wrong WebView.
29+- **Modal phase synchronization**: Made `setControllerPhase` synchronous and dispatched modal timeouts via the GTK main thread to prevent race conditions.
30+- **Keyboard routing thread-safety**: Resolved thread-safety issues and nil-guard checks in keyboard routing.
31+- **Application shortcuts restoration**: App shortcuts are now restored when WebView has focus.
32+- **Favicon caching**: Fixed stacked title bar favicons to populate from cache on stack creation, guarded against nil texture overwriting a good favicon, and prevented swap on pool reuse.
33+- **SIGABRT crash on permission requests**: Fixed a crash that occurred when the permission-request signal was emitted during rapid pane teardown.
34+- **Panic logging in safeGLibType**: Recovered panics are now logged instead of silently swallowed.
35+
7 ## [0.27.2] - 2026-02-1736 ## [0.27.2] - 2026-02-17
8 37
9 ### Changed38 ### Changed

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close