703 lines
91 KiB
Markdown
703 lines
91 KiB
Markdown
# Changelog
|
||
|
||
Release history focused on **features, settings, default behavior, compatibility and fixes**. Changes to internal code structure and preliminary performance experiments are intentionally omitted. Historical descriptions reflect their respective releases; consult the current documentation for the settings available in the latest release.
|
||
|
||
## 0.36.5 — automatic certificate choice and clearer host conflicts
|
||
|
||
- **Certificate auto-selection:** when creating a vhost, redirect or 404 host, RustProxy picks the stored certificate that covers every host name you enter (an exact name beats a wildcard, the narrowest certificate wins). A hint names the chosen certificate and the selector still lets you pick another one or the global default. Existing entries are never changed.
|
||
- **Clearer host conflicts:** the "overlapping frontend bindings for hostname …" error now names the entry that already uses the host (`vhost`, `redirect` or `404 host` plus its ID) and the conflicting listener address.
|
||
- **Clearer validation errors:** duplicate or invalid IDs, repeated hostnames, missing hostnames or listeners, invalid location IDs, regular expressions, exact paths and duplicate location matchers now say which value or location is wrong and how to fix it.
|
||
- **Deploy script:** `update.sh` / `install.sh` retry the GeoIP download (transient 502/503/504, timeouts) up to four times and, if it still fails, warn and continue with the installed GeoIP data instead of aborting the update with `HTTP Error 504`.
|
||
|
||
## 0.36.4 — cache readability and editor UX polish
|
||
|
||
- **Cache → Domains and effectiveness:** decision counters are one compact line (`name count`, top three, the rest in a `+N` tooltip) instead of a wall of chips; the rest of the table keeps its 0.36.3 look.
|
||
- **Cache → Static response transformation:** the "Transformations by type" and "Vhost effectiveness" tables use the same presentation as Domains and effectiveness (right-aligned tabular numbers, emphasised vhost name, non-zero errors in red, reduction meter) and the skip reasons are compact `name count` lines.
|
||
- **Cache → Stored objects:** the tier is a badge in the same style as the other badges (follows the corner-radius setting), numeric columns are right-aligned, long targets and cache keys are truncated (full text on hover, click still copies), rows highlight on hover, and the Previous / range / Next pager is a single segmented control.
|
||
- **Docker vhosts:** the per-service link is now **Open** (same wording as in Vhosts); the expandable per-application forms and their protocol, ACL, timeout and health sections have a chevron, keyboard focus outline and a framed panel when open.
|
||
- **Automatic IDs:** when creating a vhost, web service, stream, redirect, 404 host or ACL profile, the ID is generated from the name (for vhosts, from the first host name) as a unique slug; the ID field comes after the name (after the hosts for vhosts) and is shown as a plain value with a **Change** link — the input only appears when you ask for it (or when validation needs it) — `example.com` becomes `example-com`, Polish and other accented letters are folded to ASCII, and `-2`, `-3`… is appended when the ID is taken. Typing in the ID field switches to a manual ID; a "Generate automatically" button (or clearing the field) restores it. Existing IDs are never changed.
|
||
- **Vhost, Web service, Stream, Redirect and ACL forms:** section tabs wrap onto a second line instead of scrolling horizontally, and use a readable 12 px underlined tab style with a clear active state and hover; form action bars are aligned consistently.
|
||
|
||
## 0.36.3 — settings, cache and dashboard layout polish
|
||
|
||
- **More chart styles:** Settings → Appearance → Chart style now offers eight additional presets: **Sunset**, **Aurora**, **Ocean**, **Forest**, **Pastel**, **Terminal** (green phosphor, square lines), **Blueprint** (thin technical lines on a blue tint) and **Colorblind safe** (Okabe–Ito palette with dashed grid). The `chart_style` preference accepts the new values (`sunset`, `aurora`, `ocean`, `forest`, `pastel`, `terminal`, `blueprint`, `colorblind`); existing values and the default are unchanged.
|
||
- **Cache → Domains and effectiveness:** numeric columns are right-aligned with tabular digits, HIT / MISS / BYPASS counts use the same colours as the Dashboard cache bar, the hit ratio has a small meter, domain names are emphasised and decision-counter chips are quieter.
|
||
- **Docker vhosts:** collapsed service rows are compact on desktop (publish switch, name with image/ports, and health with actions in one row instead of a stacked column).
|
||
- **Cache and Static response transformation pages:** the Cache → General tab is split into *Behavior* and *Memory and limits* groups (the fallback TTL and bypass options moved up next to the other behavior switches), switch descriptions sit directly under their checkbox, the memory/transform preset cards have a compact header, and numeric fields use a responsive grid (up to four per row) instead of two fixed columns.
|
||
- **Settings layout:** Settings → Appearance now uses one-setting-per-row layout (label and help on the left, control on the right, checkboxes on the right edge) instead of an uneven two-column grid, section headings no longer duplicate their first setting (`Charts`, `Tables and logs`) and the small eyebrow labels were dropped. Sub-tabs (Rules & headers, Cache, HTTP connections, Logging, …) are a horizontal tab bar on desktop instead of a vertical stack of full-width buttons, and the main settings menu has thin separators between its groups.
|
||
- **Compact stat cards:** Dashboard cards that consist of a title, a value and one secondary line (Requests, Active exchanges, Payload transferred, Errors, Process memory, HTTP/2 requests, backend and stream cards, …) now show that line to the right of the value, which makes them about 20 px lower. WebSocket tunnels shows a plain `H1 · H2 · H3` split (full names in the tooltip) HTTP/2 shows `H2 connections` and HTTP/3 now shows `H3 connections` (active HTTP/3 connections); the labels were shortened in `langs/en_US.json` and `langs/pl_pl.json`.
|
||
- **WebSocket tunnels card:** the *Established* count moved from its own text line to the right of the main value (it wraps below only when the card is too narrow), so the card is one line shorter.
|
||
- **Cache outcomes bar:** the HIT / MISS / BYPASS / OTHER segments of the Dashboard cache bar now show their percentage inside the bar (bar height 12 → 20 px with tighter margins, so the card keeps its height). A label that does not fit a narrow segment is hidden automatically and re-evaluated on resize; the legend below keeps the exact count and percentage.
|
||
- **CSS cleanup:** removed orphaned panel styles: the legacy `body[data-density=…]` rules (46 selectors across 7 modules; density is controlled only by `html[data-table-density]` and `html[data-dashboard-density]`), the unused `.badge` branch of the corner-style selector list, references to undefined custom properties (`--radius`, `--surface`, `--line-strong`; their fallbacks are now inlined) and duplicated `.path-permissions-*` blocks. A static audit found no other unused classes, ids, keyframes or custom properties. Computed styles of all panels at 402 px and 1280 px (several corner/density/icon settings) are identical before and after; the bundle is about 3 KB smaller.
|
||
- **Upgrade notes:** interface-only release; no configuration or database migration is required. New interface labels were added to `langs/en_US.json` and `langs/pl_pl.json` (`appearanceChartsTitle`, `appearanceTablesTitle`, `cacheSectionBehavior`, `cacheSectionMemory`, `h3ActiveConnections`, `chartStyleSunset` … `chartStyleColorblind`) and the WebSocket / HTTP/2 labels were shortened.
|
||
|
||
## 0.36.2 — icon semantics review and optional logo animation
|
||
|
||
- **SVG icon review:** every panel control was re-checked against its function. Fixes include **Unlock layout** (was the sign-out icon, now an open padlock), **Save and lock** (padlock), **Dashboard presets** (layers instead of edit), **Docker agents settings** (was a pin because "docker" matched "dock"), cache/transform memory presets (were the undo icon because "preset" matched "reset"), **Previous/Next** in Cache and Stored logs (chevrons instead of database/list), **Close** in the health and history dialogs (close instead of activity/history), revision history **Reload/Restore/Compare** (refresh/undo/compare), **Sign in** (sign-in instead of check), **Sign out all sessions** (sign-out instead of trash), **Run operation** (play), **Purge / Ban** and **Active BANs** (ban), **Clean cold cache** and **Clear** (eraser), **Download now** (download), token generation/rotation (key), **Repeated values / Count repeats** (hash), **Open Logs** (list), **Configure fields** (sliders), **About** (info), automatic renewal enable/disable (toggles) and Live logs **Pause/Resume** (pause/play). Expand/collapse toggles now follow their current state.
|
||
- **Distinct section icons:** Streams (transfer arrows), Listeners (plug), GeoIP updates (map pin) and Administration (users) no longer share icons with Vhosts, HTTP connections and Settings. The settings cog, pin, undo and sign-in/sign-out glyphs were redrawn to be more recognizable.
|
||
- **Icon fixes:** English labels whose translation equals the key (for example **Edit**) no longer fall back to the generic placeholder icon; buttons labelled with a single symbol (`×`, `−`, `↑`, `←` …) keep the native glyph instead of showing a duplicate SVG; protocol badges and history calendar days no longer receive icons.
|
||
- **Mobile/Safari chart fixes:** with SVG icons enabled, the **Hide** / **Show** buttons of the Traffic-by-interface charts made the Overview jump and flicker on every refresh. Root causes: the chart lookup (`row.querySelector("svg")`) could return the button's icon instead of the chart (axis labels were then drawn inside the button); the periodic label update rebuilt the button and its icon each time; and descendant chart rules (`.network-interface-row svg`, `.stat-chart svg`, `.system-card svg` …) stretched icons to full chart size. Charts are now addressed with `svg:not(.ui-icon)`, the axis renderer ignores icons, refreshes update only the text node, chart rules exclude `.ui-icon`, and small buttons use an 11 px icon so their height never changes. A measured 28-refresh run kept the container height constant (previously a 13 px swing) with zero icon rebuilds.
|
||
- **Badge consistency:** the upstream protocol badges in the Vhost policy row (for example `origin · H2 compatible → H2`) now use the same geometry as the other policy pills (9 px mono, 1 px letter-spacing, 4×8 padding, transparent background, square corners in the original corner style, 20 px height); only the colour differs (muted = not observed, green = observed). The **Transformed** marker in the Cache objects table now uses pill typography (1 px letter-spacing, square corners). ACL picker tags (selected countries/IPs) now use the same chip look as host chips (square corners, 10 px mono, same padding and remove button) instead of a rounded pill with a different font. A style comparison of every pill/badge/chip family and of controls sharing a row found no further deviations besides intentional ones (ACL rule action labels that mimic form fields, quick enable/disable toggles, the sort-direction arrow).
|
||
- **Spacing review:** a rendered scan of every panel, settings page and dialog (402 px and 1280 px wide) found descriptive text and blocks that touched the next element. Added spacing for TLS policy (description → TLS 1.2/1.3 switches, PQC help → documentation link, which is now styled as a link), Rules & headers, HTTP connections and Logging sub-tabs, Cache and Transform live-activity cards, empty-state notes under tables, Logs footnote, Dashboard presets footer, GeoIP and cache-cleanup field groups, htaccess/PHP help dialogs and several settings help paragraphs. The rules add space only where the layout had none.
|
||
- **Mobile layout:** the mobile **Menu** button no longer shows two hamburger icons, and **System uptime** wraps inside the System load card instead of overflowing its right edge.
|
||
- **Logo animation:** new **Settings → Appearance → Interface → Animate logo** option (account-scoped `logo_animation`, **off by default**) plays short, subtle random effects on the sidebar logo; it pauses in hidden tabs and respects reduced-motion preferences.
|
||
- **Upgrade notes:** no configuration or database migration is required; `logo_animation` is an additive preference field that defaults to `false` for existing accounts.
|
||
|
||
## 0.36.1 — interface icon polish and on-demand live logs
|
||
|
||
- **SVG icon polish:** HTTP/2 and HTTP/3 tabs now use the same protocol icon; listener HTTP/2/HTTP/3 limit links use the settings cog; **Apply preset** uses a preset/wand icon; the top **Logs** menu receives its missing icon. Compact Overview layout controls keep their native `+ / − / ← / → / ×` glyphs instead of receiving duplicate SVGs, and UI icon sizing is protected from chart SVG rules.
|
||
- **WebSocket tunnels:** **Active tunnels** is now a compact clickable badge without an SVG icon.
|
||
- **Overview metric cards:** removed the redundant **Recent samples / Ostatnie próbki** footer from the lower metric tiles; the footer is shown only when a metric has real detail text to present.
|
||
- **Appearance copy:** removed the experimental/default-state sentence from the SVG icon option help text. The option remains account-scoped and off by default.
|
||
- **On-demand live logs:** the panel status SSE uses `/api/events?...&logs=false`; `/api/logs` refreshes only while the Live Logs window is open or docked and actively following the bounded buffer. Closing, pausing or expanding the history view stops periodic log reads; reopening/resuming triggers an immediate refresh. Existing `/api/events` API consumers remain compatible because the new `logs` query parameter defaults to `true`.
|
||
- **OPNsense certificate deploy:** the source release now includes the previously referenced `rustproxy-acme.conf.example` and `actions_rustproxy_cert.conf`; the integration guide explicitly requires certificate scope plus `allow_deploy` for the deployment credential.
|
||
- **Preference persistence fix:** expanded the per-administrator UI preference document limit from 4 KiB to 64 KiB. Customized Overview layouts can exceed the old limit once widget widths are stored; affected saves previously surfaced as `auth.unavailable` even though authentication was healthy.
|
||
- **Upgrade notes:** the SQLite schema is migrated automatically to expand administrator preference storage; proxy configuration is unchanged.
|
||
|
||
## 0.36.0 — leaner administration polling
|
||
|
||
- **Experimental interface icons:** **Settings → Appearance → Interface → Show SVG interface icons** adds semantic inline SVG icons to navigation, action buttons, tabs and dialogs. The account-scoped option is **off by default**, keeps text labels as the accessible source of meaning, follows the current theme via `currentColor`, and can be disabled without changing the original control layout or behavior.
|
||
- **Polling API:** `GET /api/cache`, `GET /api/transform` and `GET /api/traffic` now accept `view=live` for lightweight periodic refreshes. The default response remains the complete backward-compatible payload. Live responses carry the configuration `revision`, and the panel automatically reloads static data when that revision changes.
|
||
- **Panel network load:** Cache and Transform polling no longer retransmit static settings/Vhost configuration on every refresh; Traffic polling omits the static Vhost list. Certificate API credentials are fetched only when the corresponding Settings tab is opened.
|
||
- **Refresh behavior:** configuration writes and operational actions refresh status without also forcing a full `/api/logs` snapshot. Initial load, explicit log refresh and the existing live-log/fallback path retain log coverage.
|
||
- **API contract:** OpenAPI documents the polling views and revision fields; regression tests cover compatibility, invalid views and the panel refresh contract.
|
||
- **Upgrade notes:** no configuration or database changes are required. Existing API clients that do not send `view=live` retain their previous response shapes, with the additive `revision` field on Cache, Transform and Traffic observations.
|
||
|
||
## 0.35.5 — Overview polish and cache build fix
|
||
|
||
- **Overview charts:** the cache-results heading now matches the other chart headings and its HIT/MISS/BYPASS legend stays on one line; system uptime is shown in the System load header; the backend count is aligned with Open connections; the redundant Requests per second footer was removed from the PHP requests tile.
|
||
- **PL/EN status labels:** the sidebar healthy-state label is now **SYSTEM OK**, and the application self-check uses the shorter **API** label.
|
||
**Upgrade notes:** no configuration or database changes are required.
|
||
|
||
## 0.35.4 — Dashboard status and control cleanup
|
||
|
||
- **Overview samples:** the history sample selector is right-aligned on desktop and mobile and now saves immediately in the browser; the separate Remember choice button is removed.
|
||
- **Application self-check:** the old runtime/control-plane sidebar block is replaced by a color-coded application status indicator. Clicking it shows checks for the control API, listener restart state, backend readiness and logging pipeline issues.
|
||
- **Dashboard footer:** removed the low-value dropped-log counter; API latency and update availability remain.
|
||
- **Navigation cleanup:** removed the static `RUNTIME / Rust / Tokio / Hyper / Axum / Tower / SQLite` text from the sidebar.
|
||
- **Dashboard layout editing:** blocks are now moved by dragging the ⠿ handle with a live drop placeholder (mouse, pen and touch), smooth movement of neighbouring blocks, edge auto-scroll and **Esc** to cancel; arrow keys on the handle move a block from the keyboard. Custom layouts no longer back-fill gaps automatically, so blocks stay where they were placed; the new **Fill gaps** action packs them on request. The edit toolbar is a single compact row, so the layout keeps its shape while unlocked.
|
||
- **Interface fixes:** the WebSocket tunnels title no longer overlaps its **Active tunnels** button; summary tiles on the Cache, Traffic and Transform pages fill each row instead of leaving empty columns; identifier fields (username, certificate, Docker agent and redirect IDs) no longer trigger an invalid-pattern error in current browsers; several layout-editor tooltips showed raw translation keys.
|
||
- **Cache under turnover:** returning freed memory to the operating system is now rate-limited (at most four times per second, plus the regular maintenance pass) instead of running after every eviction. With a full HOT cache and constant replacement this measured about 2.3× higher throughput with the default system allocator (2,900 → 7,000 req/s, one core) at about 7% higher resident memory.
|
||
- **Cache hot path:** popular objects no longer re-link the LRU list on every hit, HOT/COLD index lookups use the already-uniform cache digest instead of a second SipHash pass, and the request-collapsing bypass marker for uncacheable URLs keeps working when its table is full.
|
||
- **Per-response work:** configured `Server` and cache `Via` values are parsed once per worker instead of on every response, and cache diagnostic headers avoid temporary allocations.
|
||
- **Upgrade notes:** no configuration or database changes are required.
|
||
|
||
## 0.35.3 — Overview layout fixes
|
||
|
||
- **Standard Overview layout restored:** the quick-health tiles added in 0.35.2 (healthy backends, error share, requests rejected by limits, nearest certificate expiry) are now hidden by default and placed at the end of the Overview, so they no longer shift the standard block layout. Enable them in the layout editor when needed.
|
||
- **Fixed:** the "Saved default" status next to the history sample count was always visible and looked like a fresh save notification. It now appears only for an unsaved temporary choice or briefly after **Remember choice**.
|
||
- **Upgrade notes:** no configuration changes are required. If 0.35.2 already changed your Overview, use **Unlock layout → Reset layout** to restore the default arrangement, or hide the tiles in the layout editor.
|
||
|
||
## 0.35.2 — memory fix, health check options and Overview tiles
|
||
|
||
- **Memory use restored:** with a large HOT cache, 0.35.1 used about 25% more memory than 0.35.0 (for example 1.1–1.2 GiB instead of about 800 MiB with a 600 MiB cache). The default build is back to the 0.35.0 memory profile. The faster alternative allocator is available as an optional build feature for servers with spare RAM; the Performance guide explains the trade-off with measurements.
|
||
- **Health check port:** active TCP and HTTP health checks can probe a different port than the one receiving traffic, for example a status port 8079 for a backend serving on port 80. It can be set for a whole Vhost or per backend; host, TLS and address restrictions stay the same.
|
||
- **Expected response text:** HTTP health checks can require a text fragment in the response body, so a status page that answers 200 while reporting a degraded state marks the backend as down.
|
||
- **New Overview tiles:** healthy backends (with the names of failing ones), error share, requests rejected by limits and the nearest certificate expiry.
|
||
- **Certificate expiry metrics:** Prometheus now exports the expiry date and remaining days of every installed certificate, including manually uploaded ones, for alerting.
|
||
- **Safari:** the Overview no longer jumps when you scroll near the Backends table while live values refresh.
|
||
- **Fixed:** network interface traffic below 1 KiB/s is shown as a whole number of bytes instead of a long decimal.
|
||
- **Upgrade notes:** no configuration changes are required. Existing Overview layouts receive the new tiles at the end; hide or move them in the layout editor.
|
||
|
||
## 0.35.1 — performance, licensing and documentation
|
||
|
||
- **Faster Web Server:** static files are read directly by the request instead of being handed to a background thread pool. Small and large files are served up to 1.8× faster with lower latency and CPU use.
|
||
- **Faster reverse proxy and cache:** lighter request processing, header handling and traffic statistics collection. Proxied requests are about 3–7% faster and cache hits about 11% faster on the same hardware.
|
||
- **Vhost charts:** the per-Vhost request-rate chart no longer shows a false spike right after the page opens or when two refreshes arrive at the same moment.
|
||
- **Performance guide:** new documentation page with the benchmark method, a comparison with a similarly configured Nginx and production tuning advice.
|
||
- **About window:** redesigned with the project description, copyright, a GNU AGPL v3.0-or-later license summary and links to the project website, source code, built-in documentation and the full license text.
|
||
- **License:** RustProxy is published under the GNU Affero General Public License v3.0 or later. The license text is included in the built-in documentation.
|
||
- **Documentation:** rewritten project overview with a complete feature list, panel screenshots and links to [rustproxy.linuxiarz.pl](https://rustproxy.linuxiarz.pl/). Container, API access, post-quantum TLS and integration notes were merged into the related guides. The built-in Reader now displays tables and bold text.
|
||
- **Upgrade notes:** no configuration changes are required.
|
||
|
||
## 0.35.0 — encoded-slash proxy compatibility and release cleanup
|
||
|
||
- **Encoded slash compatibility:** `%2F` and `%2f` are accepted in request paths. RustProxy decodes them to `/` only for routing/security decisions and applies the same duplicate-slash normalization as literal `/`.
|
||
- **Preserve-mode forwarding:** when a location does not rewrite the path, the original encoded request target is retained for the upstream, including query strings. Applications that use encoded slashes inside path parameters therefore receive the same target the client sent.
|
||
- **Path hardening retained:** encoded `..` traversal after slash normalization, encoded backslash, `%`, `?`, `#`, `;`, controls, malformed percent escapes and invalid UTF-8 remain rejected.
|
||
- **Release gate cleanup:** source/tests are adjusted for the current Rust/Clippy gate without weakening runtime security checks.
|
||
|
||
## 0.34.16 — optional OIDC central login
|
||
|
||
- **Configuration size fix:** increased the total serialized configuration limit from 256 KiB to 2 MiB. The administration request limit, configuration file import, SQLite/history loading and NPM migration utility use the same expanded bound; the existing limits on Vhosts, backends and locations remain unchanged.
|
||
- **Vhost → Authentication:** separates **Identity provider** (Tinyauth, Authelia, authentik, Pocket ID, custom OIDC, HTTP Basic) from **Integration method** (Forward Auth, OIDC, HTTP Basic). Pocket ID/custom support OIDC; Tinyauth/Authelia/authentik support Forward Auth or OIDC. Only one method can be active per Vhost. An optional `{ "authentication": { "provider": "authelia", "method": "oidc" } }` selector is validated against the existing provider settings. Omitted selectors retain legacy `*.enabled` behavior, including OIDC without an explicitly named vendor. Existing passwords, application callbacks, sessions and stored secrets retain their original keys and behavior.
|
||
- **Cross-domain login:** a protected application can use an unrelated HTTPS issuer with OIDC Authorization Code, S256 PKCE, transaction-bound state and nonce, and a fixed callback on the application hostname. Optional internal backend-origin routing supports identity providers running behind this same RustProxy without a circular public proxy dependency. The login provider keeps its own cookies; RustProxy issues a separate encrypted, host-only application session cookie.
|
||
- **ID token verification:** issuer discovery and same-origin JWKS retrieval, RS256/ES256 signature verification, issuer/audience/authorized-party/expiry/nonce checks, bounded HTTP responses and fail-closed provider errors. No access tokens are forwarded to application backends. Application identity is injected from verified token claims as `Remote-Sub`, `Remote-Issuer`, `Remote-User`, and optional name, email and groups headers after stripping forged client values.
|
||
- **Session policy:** HTTPS-only, HttpOnly, SameSite=Lax cookies; an independent random session secret per Vhost; one-hour default lifetime; callback at `/_rustproxy/oidc/callback` and local logout at `/_rustproxy/oidc/logout`. Invalid logins, expired cookies and unavailable issuer responses never authorize upstream access.
|
||
- **Administration:** new OIDC fields in the Vhost panel, matching OpenAPI schema and English/Polish labels. All OIDC values are disabled by default. Source candidate: the Rust build and live OIDC compatibility checks have not been performed in the packaging environment.
|
||
|
||
## 0.34.15 — optional Authelia and authentik forward auth
|
||
|
||
- **Provider-neutral refactor:** Extracted `auth_provider::Provider` with unified selected-provider dispatch, verified identity/cookie handling and one `error_auth_provider.html` template. Removed three Tinyauth-only HTML template files; 502/504 titles still identify Tinyauth, Authelia or authentik and failure category. Shared `forward_auth` transport continues to be reused without embedding vendor-specific branching in the request pipeline.
|
||
- **Vhost → Authentication:** two additional, independently configurable choices: Authelia (`/api/authz/forward-auth`) and authentik (`/outpost.goauthentik.io/auth/nginx`), alongside unchanged Tinyauth and HTTP Basic Auth. Exactly one method can be active per Vhost; both new methods default off, with old configurations remaining compatible. Settings can be edited through the panel and vhosts configuration API.
|
||
- **Authelia:** bounded server-side verification, trusted original-request metadata, allowlisted identity headers and strict same-portal-origin login redirects. The Authelia portal and session cookies must be configured for each protected parent domain; a single portal URL cannot issue a valid browser session cookie for unrelated parent domains.
|
||
- **authentik:** supports forward auth (single application) with each protected host's reserved `/outpost.goauthentik.io` route automatically proxied to the configured outpost. The protected URL is passed to the outpost for SSO login; request cookies, identity headers and session-refresh `Set-Cookie` values are propagated with limits. Different parent domains can use one central authentik instance with distinct per-app proxy providers.
|
||
- **Fail closed:** verifier transport/invalid-response errors return 502; timeout returns 504; unauthenticated/denied requests never reach application origins. Provider identity is never accepted from incoming client headers. Cache sharing is disabled for protected requests; fail-closed auth responses are kept out of custom-error interception.
|
||
|
||
## 0.34.14 — Tinyauth gateway error pages
|
||
|
||
- **Tinyauth outage:** when RustProxy cannot reach the Tinyauth verifier (connect, DNS, TLS or transport error), it returns a built-in **502 Tinyauth connection error** HTML page rather than plain `502 Bad Gateway`. The page is local and self-contained; no failed authentication is bypassed and no backend address, certificate detail or transport error is revealed to the caller.
|
||
- **Tinyauth compatibility patch:** the Nginx verifier now receives one consistent auth-request header set. RustProxy removes ForwardAuth module markers (`X-Forwarded-Host`, `X-Forwarded-URI`) while preserving the verified client IP and original request URL. This resolves the `conflicting auth module headers` rejection introduced in Tinyauth 5.2.0 without disabling anti-spoofing checks. Added regression tests for conflicting module headers and forged client identity. Use the internal `/api/auth/nginx` endpoint.
|
||
- **Tinyauth timeout:** a verifier request that exceeds the configured deadline returns a distinct **504 Tinyauth timeout** page. Invalid verifier responses, unexpected HTTP statuses and oversized identity/response data return **502 Tinyauth verification error**. All retain no-store and the authenticated-request isolation marker, so Vhost/global error-page overrides do not mask Tinyauth's diagnostic category.
|
||
|
||
|
||
## 0.34.13 — Global security, section-based configuration API and panel UX
|
||
|
||
- **GeoIP:** on-demand data refresh moved from the isolated `POST /api/geoip/update` to `POST /api/config/geoip/update`, colocated with the revisioned GeoIP settings. This action does not change the config revision; the UI and RO/RW token allowlist use the new URL. Section paths now consistently use kebab-case, including `not-found-hosts` (the JSON property remains `not_found_hosts`). Old action/section paths are removed.
|
||
- **API:** all 23 supported configuration sections now have `GET /api/config/{section}` returning `{revision, section, value}` and `PUT /api/config/{section}` accepting `{expected_revision, value}`. PUT still returns the updated full `{revision, config}` envelope so clients can refresh all sections. Both methods use the same section registry. Unknown/removed sections are 404; stale writes return 409. Writes remain full section replacements, validated and committed atomically; there are no partial PATCH semantics.
|
||
- **Global security:** the canonical User-Agent blocklist is now `config.global_security.user_agent_blocking`. `PUT /api/config/global-security` accepts one `GlobalSecurity` object, including an explicit `user_agent_blocking`, and no longer requires a special two-object wrapper. The old independent `/api/config/user-agent-blocking` section is removed. Per-vhost User-Agent policies are unaffected.
|
||
- **Upgrade safety:** legacy top-level `config.user_agent_blocking` is accepted on full-document input, compiled into the nested policy and omitted from normalized saved configuration. A payload containing contradictory legacy and nested policies is rejected rather than silently enabling/disabling a rule. Raw unnormalized backup payloads retain the old value until migrated.
|
||
- **Grouped sections:** `logging` is now strictly `{logging, error_log}`; `response` is `{server_header, diagnostic_headers, compression}`. The old bare logging-only PUT shape is rejected to prevent partial group replacement. All other section PUT payloads retain their previous single-field value formats. RO API tokens may read individual sections; RW tokens may write them subject to existing restrictions.
|
||
- **Settings → Rules & headers → Global block / allow:** replaces the separate global User-Agent blocklist editor with a unified global country block/allow policy, the existing User-Agent patterns, IP/CIDR and allow-only dynamic DNS ACL, HTTP method allow/block rules, request Content-Type denylist, and an optional client-IP request-rate limit shared across public HTTP vhosts. Each control is disabled by default. Existing User-Agent settings are retained, not reset. Global and per-vhost restrictions are cumulative, and access checks run before upstream requests, redirects and cache invalidation; TCP/UDP Streams and the private admin listener are excluded.
|
||
- **Global security headers:** separate subtab for HSTS, nosniff, X-Frame-Options, Referrer-Policy, CSP and Permissions-Policy. Global values form a response baseline; explicit per-vhost header values override matching settings. HSTS is sent only over HTTPS. Test restrictive policies before production rollout.
|
||
- **Config/API:** additive `global_security` configuration object, backwards-compatible defaults, atomic `PUT /api/config/global-security` payload containing the complete nested `global_security` object (including `user_agent_blocking`). Country detection uses trusted client IP/GeoIP; global DNS ACL rules use the existing safe background resolver. English and Polish panel strings, OpenAPI and guides updated.
|
||
- **Panel layout:** separated static cookie-cache advice from response-header toggles, added space between transform numeric controls and minification checkboxes, and moved certificate access-permission guidance next to the generated command preview. The **Copy commands** button remains hidden until commands are generated.
|
||
|
||
## 0.34.12 — cache diagnostics and optional chart axes
|
||
|
||
- Origin-provided `Cache-Status`, `X-Cache`, `X-Cache-Hits`, `X-Cache-Reason`, `X-Cache-Resident-Age` and `X-Cache-Status` are retained on forwarded and cached responses; the HOT/COLD cache and conditional `304` refresh no longer erase these values from stored metadata. Cache-disabled and HIT-only display modes leave origin headers untouched.
|
||
- `Cache-Status` follows RFC 9211's ordered member model: preserve upstream members and append the RustProxy member if enabled. RustProxy reports `hit; ttl=...` for a local cache hit, `fwd=miss`/`fwd=bypass` for forwarded requests, and `fwd=stale; fwd-status=304` when revalidation used a `304`. The existing fixed reason goes into `detail="..."`; transformation metadata applies to RustProxy's member only. No non-standard `backend=` parameter is generated.
|
||
- Existing `X-Cache*` RustProxy diagnostics remain available so clients can refresh all sections. To avoid deleting an upstream value on a naming conflict, displaced origin values are exposed separately as `X-Upstream-Cache*`, one field value for each original value. These aliases are non-standard; clients should prefer `Cache-Status` when available.
|
||
- Added regression coverage for origin/proxy naming collisions, disable/HIT-only modes, HOT/COLD storage, RFC 9211 member order and metadata generated after revalidation.
|
||
- **Appearance → Charts:** optional account-scoped **Show X/Y scales** switch, off by default. On sampled line plots, HTML labels show the exact Y range used by the existing SVG renderer (including fixed percentage and adaptive Vhost/Docker ranges) and the X sample indices. Charts with separately normalized HTTP/WebSocket protocol lines identify each series' own Y maximum instead of inventing a common scale. Missing/compacted samples are not mislabeled as minutes; any clipped Vhost peak remains available in the existing legend. Disable the switch to restore original geometry. Donuts, gauges and categorical bars are unchanged.
|
||
- The new preference is included in API/Reader docs and both interface languages. Existing accounts retain their chart style and the new switch stays off until explicitly enabled.
|
||
- Source-only candidate: the target Rust toolchain and proxy integration suite must pass native compilation/tests before deployment.
|
||
|
||
## 0.34.11 — adaptive Vhost request-rate scaling
|
||
|
||
- **Vhosts and Docker Vhosts:** both live **Lifetime request rate** sparklines now use one adaptive Y-axis calculation. The scale follows the 85th percentile of the last 24 displayed rate samples, with 25% headroom and a minimum of 1 req/s, instead of using the maximum across the entire session history. This prevents one or a few exceptional spikes from flattening normal traffic. It expands for sustained higher rates and shrinks as traffic returns to normal.
|
||
- **Peak visibility:** readings above the dynamic range are clipped only in the SVG plot; the numeric peak still shows the real maximum of the retained browser-side history. Hovering the rate value and the chart's accessible description expose the current Y range and clipping notice. Rate sampling, Docker agent protocol, stored counters, API and other Overview chart scaling are unchanged.
|
||
|
||
## 0.34.10 — path permission helpers and automatic certificate SNI
|
||
|
||
- **Permission helper appearance:** keep the original compact ACL code-block styling for both certificate paths and Web Server roots, with a quiet copy action. Account selection and extended guidance are collapsed under **Options and help**; generated commands remain below the path fields.
|
||
- **External certificate files:** replace the fixed example ACL block with commands generated from the entered certificate/key paths, placed below both path fields. The helper resolves symlink targets, removes unsafe write/world-read file permissions, grants directory traversal and adds read access for the `rustproxy` service account. Commands remain operator-run; external-path ownership and private-key checks remain enforced.
|
||
- **Certificate SNI:** inspect the actual public certificate after a path/source change and fill legacy SNI names from DNS SAN entries. Preserve manually entered or cleared values and ignore stale asynchronous results. **Read names from certificate** retries a failed read or explicitly refreshes the field after fixing permissions. Inspection does not read the private key or save configuration.
|
||
- **Web Server:** generate document-root permission commands directly below its path, updating them for input, edits, resets and presets. Include parent traversal, read access to the served tree and default ACLs for new content without granting RustProxy write access. The permission walk does not follow child symlinks. PHP-FPM and systemd/MAC policies remain separately managed.
|
||
- **API and documentation:** add a session-authenticated, CSRF-protected certificate inspection endpoint with matching OpenAPI/access regressions; update English/Polish panel text and filesystem guidance. General administration tokens and certificate-only tokens cannot use the inspection endpoint. Package and lockfile are aligned to **0.34.10**; native Cargo and protocol acceptance are still required for this source candidate.
|
||
|
||
## 0.34.9 — experimental TLS post-quantum key exchange
|
||
|
||
- **Dashboard source maintenance:** panel styles are organized into eight modules with consolidated responsive conditions and a deterministic build step. Login and the dashboard continue to load one fingerprinted stylesheet; rebuilding the binary applies changes. Source checks and browser regression tooling cover the module order and UI cascade. Native Rust validation remains required for this source candidate.
|
||
- **CSS build preflight fix:** ship local `scripts`/`build` package markers so unrelated installed Python packages cannot hide `build.panel_css` or the application scripts. This fixes `dev.sh` startup/repair, the CSS audit and packaging imports on affected environments; generated styles remain unchanged.
|
||
- **Generated CSS recovery:** detect a root `build.rs` without the panel generator, track the generated CSS as a Cargo dependency and reject missing/empty helper output before compiling the application. Document refreshing `build.rs` after overlaying a reproducibly timestamped archive onto an existing build cache.
|
||
- **Settings → TLS policy:** new disabled-by-default experimental `post_quantum` toggle. When enabled with TLS 1.3, inbound TCP TLS and HTTP/3 QUIC use an explicit aws-lc-rs provider, prioritizing the hybrid **X25519MLKEM768** key-exchange group while retaining classical alternatives. When disabled, the original ring provider is retained. This changes KEX, not TLS cipher suites or certificate signing; no change to upstream/client-side TLS providers.
|
||
- **Per-vhost TLS override:** may opt out when global PQC is enabled; cannot enable PQC if the global policy disables it. TLS 1.3 is required. Existing per-vhost policies lacking the field continue to default to non-PQC. HTTP/3 continues to require exactly matching global policy.
|
||
- **UI/docs/API:** English/Polish switch and key-exchange group readout, authenticated Reader guide linked from the TLS policy page, OpenAPI and regression unit tests.
|
||
|
||
## 0.34.8
|
||
|
||
- **Mobile UI follow-up (source-only):** backend column picker fits narrow screens, chart legends wrap, long System information actions adapt and file-log tabs scroll horizontally when needed. Navigation, backend detail triggers and additional controls follow the saved corner rounding preference. Docker service card spacing retains the previous mobile fix.
|
||
- Docker vhosts now use container names by default instead of image/port names. Existing saved hostnames and manually configured aliases remain unchanged. Docker Agent updated to 1.0.1.
|
||
|
||
## 0.34.7
|
||
|
||
- Docker discovery: default hostname now uses the Docker container name, without the image or port suffix. Previously generated hostnames are updated on discovery; manually configured hosts and aliases are retained.
|
||
— Varnish-compatible cache lookup (source candidate)
|
||
|
||
- **Settings → Cache → Varnish-compatible cache policy (`varnish_compatible`)** stays **ON by default**, including upgraded configurations without the field. An adjacent **i** popover (PL/EN) explains its effects, limitations and safety controls. OFF retains strict client hard-reload behavior. The live toggle invalidates existing entries across HOT/COLD.
|
||
- Only client hard-reload `Cache-Control: no-cache`, `max-age=0` and `Pragma: no-cache` are ignored when considering a **fresh HIT**, retaining `Age` and hit counters. Kept the original `Cache-Control: no-store` bypass, `only-if-cached` 504 on cache MISS and no background origin refresh on HIT, and `min-fresh`/`max-stale`/positive `max-age` freshness constraints (including explicit `max-stale=0` during grace). Original request headers, Vary, access/privacy rules and Web Server handling remain intact.
|
||
- Source-level regression cases cover hard reload, fallback TTL, validator revalidation, no-store/private/Surrogate protections, zero-TTL stale-if-error, min-fresh/max-stale, and `only-if-cached` for proxy and Web Server. Native Rust compilation and runtime acceptance are required before a production release claim. This remains a Varnish-inspired policy subset, not a VCL clone.
|
||
|
||
## 0.34.6 — Docker live logs, neutral Publish switch and Vhost Content-Type rules
|
||
|
||
- **Security / ordinary Vhosts:** optional per-vhost list of up to 64 blocked request media types (`multipart/form-data`, `application/json`, `image/*`). Matches case-insensitively, ignores MIME parameters, returns 403 before any proxy, Web Server/PHP-FPM, Custom location or cache response. Missing `Content-Type` is permitted; malformed/ambiguous headers are refused while filtering is enabled. Docker editor is unchanged. Default off for existing and new Vhosts.
|
||
- **Interface:** Vhosts → Security has a dedicated Content-Type subgroup with enable checkbox and multiline patterns. The Docker Publish toggle is smaller, unboxed and neutral with standard theme colors; instant save, rollback and live logs remain.
|
||
- **Per-service Live logs:** a button beside **Open app** opens the existing authenticated live HTTP access-log dialog with the generated Docker vhost ID preselected. It covers all aliases of that publication and keeps the filter while waiting for its first entries. The action needs current Docker route metadata; it remains disabled until the status refresh supplies it. No new Docker socket permissions, agent endpoints or public log APIs were introduced. It displays RustProxy request logs, **not container stdout/stderr**.
|
||
- **Publish switch:** replaced the plain Publish checkbox with an on/off slider matching panel themes, corner preferences and keyboard/screen-reader accessibility. Each change still saves immediately through the existing Docker assignment API, with pending/failed saves reflected in the control. Unpublishing does not stop the container; configuration and statistics sections retain their prior behavior.
|
||
- **Open app URL:** use the selected listener's actual `binding.tls` and `binding.address` so HTTPS and nonstandard public ports are reflected in generated app links.
|
||
- **Release:** Cargo package and lockfile, embedded OpenAPI version, Polish/English UI hints and documentation aligned to 0.34.6. This is a source-only release candidate requiring native compilation and integration testing before deployment. Blocking `Content-Type` does not replace security updates for PHP or the application.
|
||
|
||
## 0.34.5 — Administration UX improvements
|
||
|
||
- **Docker vhosts traffic view:** added the ordinary Vhost status, cumulative requests/active/errors, EWMA latency, traffic/s and lifetime-rate chart in a collapsed-by-default disclosure below each published Docker vhost's configuration editor. One toolbar button expands/collapses all active publications; individual disclosure state survives live refreshes. Values use generated Vhost counters from the existing status stream. The browser chart begins collecting when the vhost is observed and resets on sign-out; backend/configuration behavior is unchanged.
|
||
|
||
- **Linux deployment/package filesystem access:** packaged and manually generated
|
||
systemd services now use `ProtectHome=read-only` rather than `true` so a
|
||
Web Server can read `/home` and other external document roots using Unix
|
||
groups/ACLs without per-host systemd overrides. `ProtectSystem=strict`,
|
||
the dedicated service account, private state/log paths and certificate
|
||
ownership/symlink validation remain in place. New DEB/RPM units require a
|
||
packaging rebuild; no installed service is changed by this source archive.
|
||
|
||
- **Web Server → Delivery:** separated static-file delivery, dynamic compression/codecs and precompressed `.br`/`.gz` sidecar controls into individually labelled settings groups. Existing options, defaults and configuration keys remain unchanged.
|
||
- **Web Server → PHP-FPM:** grouped profile and endpoint selection, request behavior, timeouts/capacity, and FastCGI/php.ini overrides. Disabled inputs, selectors and textareas now share a clear inactive appearance when PHP is off or controlled by a shared profile.
|
||
- **Streams → Backends:** split backend routing/capacity from health checks. Probe timing and UDP payload fields appear only when a health-check mode is selected; hidden controls retain their values and cannot block form validation.
|
||
- **Redirects and 404 hosts:** separated identity/domains from frontend listener and certificate selection, with more consistent checkbox alignment and spacing.
|
||
- **Vhost → Transform:** the file-extension override checkbox now sits directly above its textarea, separated from format selectors. The three similar Vhost cache overrides (static extensions, bypass prefixes and unsafe force targets) are stacked consistently; disabled overrides no longer appear editable. Existing saved field names and policy behavior remain unchanged.
|
||
- **Vhost access:** relocated the inline IP/CIDR ACL editor to **Security → Traffic policy**, alongside reusable ACL profiles. **Authentication** now contains Basic Auth and Tinyauth alone. An inline ACL remains an independent, cumulative restriction (it cannot be bypassed by a profile allow).
|
||
- **Web Server presets:** the two hardening checkboxes appear together below preset selection/action rather than beside them. **Settings → Appearance → Data refresh** shows the master refresh checkbox on its own line, with four equally sized refresh selectors in a balanced two-column grid (one column on mobile).
|
||
- **Settings → System information:** removed the dedicated RustProxy process block from this screen while preserving **Statistics source** with the host details. Status/metrics API fields and backend monitoring are unchanged.
|
||
- **Corner-style consistency:** additional Vhost dependent-field groups, cache/legend and metric-info controls, selected admin cards and the self-contained authenticated documentation page follow the saved Square/Subtle/Rounded/Extra corner preference. Circular status indicators/spinners remain circular by design; Original retains its legacy styling.
|
||
- Updated English and Polish labels, documentation and UI regression checks. This is a UI-only release; it does not change backend execution or configuration semantics. Native Rust builds and target-system acceptance remain required.
|
||
|
||
## 0.34.4 — Multi-profile ACLs, certificate override and mobile Docker details
|
||
|
||
- ACL profile picker corners (dropdown, counter, rule cards, policy badges, selected chips and remove buttons) follow the dashboard corner-style setting (Square, Subtle, Rounded, Extra rounded); Original keeps its prior shape. ACL selection and rule evaluation are unchanged.
|
||
- Docker agent details now wrap certificate SHA-256 fingerprints on narrow screens.
|
||
- Ordinary Vhosts and Docker publications may attach up to eight reusable ACL profiles. Legacy `acl_profile_id` remains loadable; new assignments use `acl_profile_ids`. Among selected profiles, an explicit IP deny or blocked country always denies, explicit IP/country allows are unioned, and unmatched defaults must all permit access. Single-profile behavior is unchanged. Inline Vhost/location/global controls are still additional (AND) restrictions, not bypassed. Docker assignments override inherited agent profiles when they select their own profiles.
|
||
- `allow_certificate_mismatch` permits a deliberate, confirmed exception per named certificate assignment on an ordinary Vhost or Docker publication. TLS identity/key checks remain intact. Only explicitly selected hostname/certificate pairs skip RustProxy DNS SAN binding verification. Client hostname validation still fails/warns for a mismatched certificate; do not use as a permanent replacement for a matching certificate.
|
||
- Refined Vhost editor layout: separate **SSL certificates** (selection and explicit mismatch consent) from **SSL settings** (TLS policy), and split Traffic policy into ACL, method, IP/country/User-Agent rate limits. Vhost security now separates HSTS, response headers and User-Agent blocking; Custom location access, balancing controls and WebSocket settings have their own groups. Checkbox/button alignment was adjusted in toolbars, dialogs and configuration cards; ordinary UI surface corners follow the selected dashboard rounding style where previously fixed. Backend settings and API semantics are unchanged.
|
||
- Docker publication editor shows the certificate/domain mismatch consent immediately below **Backend host IP**, with a small vertical gap.
|
||
- The source release needs native Rust compilation and target-system acceptance tests before production use.
|
||
|
||
## 0.34.3 — QUIC socket buffering, live HTTP/3 settings and cache outcome mix
|
||
|
||
- QUIC now opens the UDP listener socket with per-listener receive/send buffer targets (4 MiB each by default; `udp_receive_buffer_bytes`, `udp_send_buffer_bytes`; `0` uses OS defaults). Reports the effective buffer sizes and warns if kernel limits clamp them. Linux `SO_RCVBUF` / `SO_SNDBUF` accounting is accommodated, so observed `ss` values correspond to the configured effective target when permitted. UDP buffer modifications require restart, not silent hot application. Existing configs without these fields load the new defaults.
|
||
- HTTP/3 `Alt-Svc` follows newly saved listener lifetime immediately on H1/H2 TLS responses for an already-bound H3 socket; disabling H3 publishes `Alt-Svc: clear`. New QUIC handshakes use saved stream/idle limits and reduced connection caps. Listener binding/TLS/H1-H2 changes, a new/disabled UDP listener or expanding startup capacity still need restart; UI restart indicator reflects this.
|
||
- DEBUG-level bulk QUIC snapshots expose packet loss, congestion window, RTT, MTU and datagram syscall counters to investigate slow H3 and CPU usage, without assuming an unmeasured throughput improvement.
|
||
- Overview includes a **cumulative HTTP cache outcomes** 100% stacked bar with HIT, MISS, BYPASS and OTHER (requests without a cache decision), using totals since service start instead of sampled deltas. Hotfix: each category now shows counts and percentages, including before a second browser poll; the lifetime HTTP request count sits compactly in the upper-right corner with the full label available as a tooltip and accessibility text. Invalid/inconsistent totals are not normalized into misleading percentages. The widget remains **hidden by default** and opt-in via the layout editor. Saved layout visibility, the lifetime HIT/MISS donut and the separate recent cache trend chart are preserved. Both UI languages are supported.
|
||
- Delivered as source for compilation and protocol acceptance on supported targets; no compiled Rust binary or measured post-patch benchmark is included in this candidate.
|
||
|
||
## 0.34.2 — configuration storage visibility and public HTTP error responses
|
||
|
||
- Added poll-based `GET /api/metrics/json` to the authenticated admin API and a `.json` sibling route on the optional standalone Prometheus exporter. JSON contains Overview-style monitoring snapshots and every numeric sample from the Prometheus collector (including labelled histograms). Added `summary` projection in the full payload and compact `GET /api/metrics/summary` / exporter `.summary.json` routes: calculated static and Docker backend/vhost readiness, request/error rates, overall byte totals, rolling transfer rates, memory/cache percentages and Web Server/Stream totals. Reuses the respective API or exporter Bearer/CIDR security policies, without SSE/WebSockets. Rolling rates are `null` until a usable second pull and after sampling gaps/resets.
|
||
- **Settings → Manual config** now reports whether SQLite or an explicit JSON file is the authoritative configuration source, shows its resolved path and distinguishes the SQLite history/audit database from the file-backed active configuration. The authenticated `GET /api/config` response supplies this read-only `storage` metadata without changing the editable JSON schema or write responses; no extra endpoint is needed.
|
||
- Added an optional `systemctl edit rustproxy` example using `--config /etc/rustproxy/config.json` with the required ACLs, owner/mode setup, systemd filesystem allowance, validation and safe reload instructions. The original SQLite configuration mode remains the default.
|
||
- Web Server-generated errors now reuse the bundled application-style HTML pages (400/403/404/500 and other available templates), with the same styled fallback for statuses such as 405. Proxy-generated non-template errors continue to use ordinary HTTP status text; no implementation diagnostics are exposed publicly. Preserved HTTP statuses, `HEAD` behavior, `Allow`/`Retry-After`, existing custom pages, backend-origin responses and authentication behavior.
|
||
- Removed an unused forwarding accessor (`peer_header`) to avoid a Rust `dead_code` warning without changing forwarded header behavior.
|
||
|
||
|
||
## 0.34.1 — explicit configuration, hot reload and API tokens
|
||
|
||
- `--config /absolute/file.json` / `RUST_PROXY_CONFIG`: an existing JSON file becomes the authoritative configuration source. Panel edits and restored revisions are written atomically to that file, with revision history in SQLite. Manual edits are imported by an explicit reload. Fingerprints reject unexpected external changes.
|
||
- `rust-proxy reload` and `rust-proxy config reload` run through the authenticated local admin control plane. The example systemd unit provides `ExecReload` for `systemctl reload rustproxy`; frontends requiring new binds/ALPN still require a service restart.
|
||
- Separate administrative API Bearer credentials can be generated and revoked in Settings, with RO/RW permissions, source-IP/CIDR allowlists, hash-only persistence and one-time secret display. Only an explicit API method/path allowlist is accessible; existing browser and certificate-scoped authentication remain unchanged.
|
||
- Certificate inventory supports bulk Vhost assignment to a selected certificate.
|
||
- Settings supports generate/rotate/revoke for a standalone Prometheus scrape Bearer token. Only its hash is stored. An explicit revocation record overrides legacy environment credentials.
|
||
- Moved RO/RW API token management from **Settings → Administration** to **Settings → Security**; Administration now links directly to the token card.
|
||
|
||
|
||
## 0.34.0 — cache consistency, static delivery and proxy optimization
|
||
|
||
### Cache
|
||
- Improved HOT/COLD cache retention when saving operational Vhost settings such as backend keepalive, connection recycling and load-balancer diagnostics. Unrelated changes should no longer unnecessarily clear compatible cached content.
|
||
- Changes affecting served content invalidate the relevant Vhost cache scope and pending fills. Global changes to response representation may still invalidate content more broadly.
|
||
- Added protection against restoring obsolete persistent COLD responses after an interrupted scoped purge or restart. Previously stored objects may need to be populated again during compatibility checks.
|
||
- Corrected freshness and expiry handling: a local maximum TTL limits **remaining freshness**, not the upstream response's existing `Age`. The dashboard now distinguishes total HTTP `Age` from time spent in HOT/COLD cache.
|
||
- Improved cache HIT/LRU accounting, `Vary` handling and response-header isolation. Existing `private`/`no-store` rules, conditional requests, PURGE/BAN controls and authenticated-request protections remain in effect.
|
||
|
||
### Static content and backend traffic
|
||
- Added **`sendfile: off | auto`** in **Web Server → Delivery**, disabled by default. `auto` supports eligible full static GET responses of **64 KiB or more** on Linux over unencrypted HTTP/1.1; TLS, HTTP/2, HTTP/3, ranges, compression, transformations and other excluded requests use standard delivery.
|
||
- Increased the default HTTP/1.1 idle backend connection pool size for **new** Vhost/origin configurations from **4 to 64**. Existing explicitly saved values remain unchanged; a larger pool can use more file descriptors and connections.
|
||
- Reduced overhead in common reverse-proxy routing, upstream connection reuse, backend selection, request forwarding and streamed responses. Existing ACLs, trusted-proxy checks, request limits, load-balancer choices and retry rules are preserved.
|
||
- Optimized request forwarding for common HTTP/1.1 paths and forwarding headers without changing public path validation, IPv6 handling or the HTTP/2 and HTTP/3 security model.
|
||
|
||
### Metrics, logging and compatibility
|
||
- Improved traffic analytics, per-Vhost cache statistics, latency reporting and log handling under load. Analytics collection remains bounded and non-blocking; dropped samples are still counted when limits are reached.
|
||
- Reduced monitoring overhead without removing existing Prometheus, dashboard, cache or protocol metrics. Dashboard labels and reported cumulative latency values remain compatible.
|
||
- Preserved protected `X-Request-ID` formatting as **64 lowercase hexadecimal characters**; request IDs now use cryptographically secure 256-bit randomness combined with the process sequence.
|
||
- Preserved response-compression settings, cache exclusions, existing configuration formats and database compatibility. No new mandatory migration or load-balancer control was introduced for these optimizations.
|
||
|
||
## 0.33.8 — safer file responses and request handling
|
||
|
||
- Reduced work for requests where caching cannot apply, while retaining independently configured security checks, response transformations and monitoring.
|
||
- Improved Web Server file streaming and file-read behavior, preserving filesystem root and symlink protections.
|
||
- Fixed successful HTTP/1.1 file responses sometimes being reported as cancelled; corrected cases where complete or empty eligible files were not committed to cache.
|
||
- Improved handling of short or unexpectedly oversized local streams without changing upstream streaming and trailer behavior.
|
||
- Fixed Host/port validation, extended `Expires` parsing, cache inventory reporting, diagnostic-header spoof protection and redaction of sensitive values in escaped JSON logs.
|
||
- Corrected certificate API token authorization checks; added HTTP compatibility and performance test scenarios for future releases.
|
||
|
||
## 0.33.7 — saved dashboards and Vhost backend details
|
||
|
||
- Added **Dashboard Presets**: up to **16 named Overview layouts per administrator**, with save, load, overwrite, rename, delete and factory reset.
|
||
- Presets retain card order, visibility, widths, density and chart history length. Existing account preferences and proxy settings remain compatible.
|
||
- Added an interactive Vhost backend summary showing the configured destination, HTTP mode, health state and latest observed HTTP response without generating extra probes.
|
||
- Changed HTTP/1.1 and HTTP/2 backend badges from basic tooltips into interactive details panels with current observations and response counts.
|
||
- Standardized Overview card titles, chart captions, legend typography and popover appearance; styles follow the selected dashboard theme and corner-rounding preset.
|
||
|
||
## 0.33.6 — consistent chart scales
|
||
|
||
- Fixed Overview and Web Server chart heights to prevent stretched or uneven plots at different screen sizes.
|
||
- Kept CPU and other percentage-based charts on consistent **0–100%** scales, with actual values still shown in legends.
|
||
- Made rate, count, latency and memory charts start from zero instead of exaggerating low traffic.
|
||
- Unified Cache and Transform rate-chart dimensions, preserving the real values, history and refresh intervals.
|
||
|
||
## 0.33.5 — CPU monitoring and chart headings
|
||
|
||
- Corrected System and process CPU charts so low utilization no longer appears as a full-height spike; legends continue to show actual percentages.
|
||
- Stabilized CPU chart dimensions across layout sizes and dashboard densities.
|
||
- Moved the maximum requests-per-second reading next to the Requests per second heading and simplified live chart labels.
|
||
|
||
## 0.33.4 — Web Service live metrics
|
||
|
||
- Made Web Service live metrics always visible in the service view, with **six responsive metric tiles** matching the Vhost dashboard.
|
||
- Added a full-width Web Service request-rate history chart and improved metric refresh during service-list updates.
|
||
- Preserved existing PHP concurrency metrics, request sampling and monitoring APIs.
|
||
|
||
## 0.33.3 — flexible Overview layout
|
||
|
||
- Added card-width choices of **2, 3, 4, 6 or 12 columns** and improved drag-and-drop ordering between different widget groups.
|
||
- Updated the layout editor to remain usable on small screens; saved widths, hidden widgets and factory layout settings are preserved.
|
||
- Fixed charts that did not fill resized widgets and false gaps or zero readings after returning to a suspended browser tab.
|
||
- Made the sidebar's selected/hover colors follow the interface theme rather than the independent chart palette.
|
||
|
||
## 0.33.2 — theme consistency
|
||
|
||
- Made Cache, Web Server, Traffic and Overview progress indicators follow the selected chart colors and corner-rounding style.
|
||
- Unified RAM utilization meters and matching progress bars across dashboard panels, including light/dark theme switching.
|
||
- Monitoring values, polling frequency and saved preferences remain unchanged.
|
||
|
||
## 0.33.1 — reliable layout editing
|
||
|
||
- Fixed hidden/shown Overview widgets unexpectedly reverting while editing the layout; Save and Cancel now respect the unfinished changes.
|
||
- Added a consistent factory Overview layout and an explicit reset/preview workflow for card order, visibility, compact density and initial chart history.
|
||
- Preserved history and rate baselines while widgets are temporarily hidden, and clarified lifetime versus recent cache HIT ratios.
|
||
|
||
## 0.33.0 — Web Server monitoring
|
||
|
||
- Added richer Web Server and PHP-FPM statistics, including request types, HTTP status counts, methods, response-header timing, compression and PHP concurrency.
|
||
- Expanded Prometheus/Grafana reporting with per-service Web Server and PHP activity, errors and performance metrics.
|
||
- Added **12 optional Web Server Overview cards**, hidden by default, with the existing layout and refresh controls.
|
||
- Improved Overview history selection and corrected a dashboard initialization issue that could stop the panel loading.
|
||
- Kept the existing configuration format, API compatibility and saved dashboard preferences.
|
||
|
||
## 0.32.8 — resource and compression charts
|
||
|
||
- Added capacity indicators for HOT RAM cache, COLD queue/disk, file descriptors, HTTP protocol share and backend usage.
|
||
- Added compact cache HIT/MISS donut charts with counts and percentages.
|
||
- Added detailed Transform and Compression activity graphs with separate series for transformation results and gzip/Brotli/Zstd/deflate.
|
||
- Improved Overview action-button layout on narrow screens without changing stored settings or metrics.
|
||
|
||
## 0.32.7 — HTTP/2 lifecycle and dashboard fixes
|
||
|
||
- Improved handling of an upstream HTTP/2 connection shutting down gracefully, including a limited retry for eligible empty, safe requests on the same backend.
|
||
- Prevented normal HTTP/2 shutdown events from incorrectly counting as backend health failures; unrelated connection errors still count.
|
||
- Improved backend recovery after passive health ejection, including bounded recovery when active health probes are disabled.
|
||
- Reduced duplicate shutdown diagnostics and improved Overview button sizing and density presentation.
|
||
|
||
## 0.32.6 — appearance and backend protocol visibility
|
||
|
||
- Improved Appearance layout controls, dashboard card density, responsive mobile metrics and corner-rounding consistency.
|
||
- Expanded live Process and Network charts using available CPU, memory and network-interface measurements.
|
||
- Prevented false zero-rate readings and interrupted chart histories when returning to inactive browser tabs.
|
||
- Added the **observed** backend HTTP/1.1/HTTP/2 mode next to the configured mode; unknown or stale observations display `?` instead of a guessed result.
|
||
- Preserved existing refresh settings, polling behavior and administrator preferences.
|
||
|
||
## 0.32.5 — DNS/DDNS access rules
|
||
|
||
- Added DNS/DDNS hostnames as **allow-only** entries in reusable client ACLs, Vhosts, Custom locations and Docker ACL assignments.
|
||
- Hostname A/AAAA records are periodically refreshed (**60-second** interval); unresolved or failed lookups deny access rather than allowing unknown clients.
|
||
- Added DNS/IP selection and guidance to the ACL editor. Existing IP/CIDR rules and stored policy formats remain compatible.
|
||
|
||
## 0.32.4 — Preserve Host with HTTP/2
|
||
|
||
- Expanded **Preserve Host** support across HTTP/1.1, automatic HTTPS H2/H1, compatible HTTP/2 and strict H2/H2C upstream modes.
|
||
- Forwarded the public hostname as HTTP/2 authority while continuing to use the configured origin for destination routing and TLS identity checks.
|
||
- Removed unnecessary UI restrictions when using Preserve Host with different backend protocols, while retaining warnings for potentially invalid HTTPS certificate names.
|
||
|
||
## 0.32.3 — protocol selection and customizable Overview
|
||
|
||
- Added strict **`h2`** upstream mode; existing `http2` remains compatible with HTTPS H2/H1 negotiation and plaintext H2C. `http1` and `auto` keep their previous behavior.
|
||
- Expanded the Vhost Origin protocol selector with clearer choices for HTTP/1.1, Auto, compatible HTTP/2 and H2-only.
|
||
- Expanded Overview customization: unlock editing directly on the dashboard, reorder or hide registered cards, preview changes, Save/Cancel and reset to the default layout.
|
||
- Added optional protocol, cache, backend health, connection and system/process charts; the Overview catalog expanded to **62 blocks**. New diagnostic cards remain hidden unless enabled.
|
||
- Added **Ultra dark** and **Warm cream** panel themes and account-level corner-rounding presets (Original, Square, Subtle, Rounded and Extra rounded).
|
||
- Improved the default Overview grid and customized card arrangement across desktop, mobile and browser zoom. Existing saved layouts remain compatible.
|
||
|
||
## 0.32.2 — correct local cache revalidation
|
||
|
||
- Fixed Web Server cache revalidation with `ETag` and `Last-Modified`, including requests using `no-cache` or `max-age=0`.
|
||
- A valid origin `304 Not Modified` can refresh the existing cached body; changed or no-longer-cacheable content is not incorrectly reused.
|
||
- Preserved client-side HEAD, conditional and Range behavior as well as transformed-response headers.
|
||
- No database, cache-format, API or Web Server setting changes.
|
||
|
||
## 0.32.1 — dashboard readability
|
||
|
||
- Restored the earlier Overview layout proportions and consistent spacing between dashboard cards.
|
||
- Improved compact font sizes and responsive layout at reduced UI zoom, without forcing large empty chart areas.
|
||
- Simplified Stream card help text and retained the existing visibility and saved Appearance settings.
|
||
|
||
## 0.32.0 — multi-backend TCP/UDP Streams
|
||
|
||
- Added Stream backend pools of up to **32 members**, with weights, enable/disable, draining, session caps and compatible single-upstream fallback.
|
||
- Added weighted Round Robin and Least Connections/Sessions balancing for Stream backends, with connections remaining associated with their selected backend.
|
||
- Added optional TCP connect and response-based UDP health checks with configurable intervals, timeouts and recovery/failure thresholds.
|
||
- Expanded per-backend Stream status and optional Prometheus metrics; the existing global Stream metrics switch remains in control.
|
||
- Added four optional Stream cards to Overview and improved their no-data and enabled/disabled presentation.
|
||
- Preserved the six-column desktop Overview and previous Stream configurations.
|
||
|
||
## 0.31.9 — Certificate API credentials
|
||
|
||
- Added **View settings**, **Edit settings** and **Regenerate token** for individual Certificate API credentials.
|
||
- Administrators can update certificate grants, comments and deployment permissions without rotating an existing token.
|
||
- Token regeneration invalidates the old secret immediately; the new token is shown only when generated, not returned by later settings reads.
|
||
- Added matching authenticated API operations while retaining certificate-scoped authorization and existing session security.
|
||
|
||
## 0.31.8 — Docker status and log explorer
|
||
|
||
- Changed an unobserved Docker agent startup state to **WAITING** rather than incorrectly reporting a failed connection; actual failures are shown after a check.
|
||
- Added server-side sorting in Stored Logs, including numeric and nested fields, before paginating matching results.
|
||
- Added consistent built-in HTML error/status pages for more response codes; custom error pages keep priority.
|
||
- Improved cache and GeoIP resource handling without changing saved configuration formats.
|
||
|
||
## 0.31.7 — rate limits and configuration history
|
||
|
||
- Added a **Settings → Rules & headers** workspace for the global User-Agent blocklist, custom headers and client-response rules.
|
||
- Added per-Vhost User-Agent request limits: up to **64 patterns**, each with its own rate, window and burst. Rules are optional; unmatched clients use existing limits.
|
||
- Improved configuration revision previews to show changed fields first, with full JSON comparison available separately.
|
||
- Fixed managed-update cleanup and documented retention of two installed releases plus three private stopped-service rollback backups.
|
||
- Improved preservation of eligible HOT cache entries to COLD storage during managed updates when COLD is enabled.
|
||
|
||
## 0.31.6 — HTTP/3 forwarding diagnostics
|
||
|
||
- Improved empty HTTP/3 GET/HEAD forwarding to HTTP/1.1 backends and handling of graceful HTTP/3 connection shutdown.
|
||
- Distinguished cancelled HTTP/3 requests from genuine HTTP 400 errors in stored diagnostics.
|
||
- Expanded interrupted-response diagnostics with phase, response status, transferred bytes and redacted failure context.
|
||
|
||
## 0.31.5 — Stored Logs and request filtering
|
||
|
||
- Improved Stored Logs on mobile with readable expandable records, configurable columns and repeated-value analysis for User-Agent, client IP and other parsed fields.
|
||
- Added consolidated viewing of a Vhost's active JSONL logs together with compressed rotations, while preserving each file's identity.
|
||
- Added optional global and per-Vhost **User-Agent blocklists**, disabled by default, using case-insensitive patterns.
|
||
- Improved HTTP/3 cancellation reporting and preserved HOT/COLD cache contents when only frontend HTTP/2 or HTTP/3 enablement changes.
|
||
- Improved panel asset-cache versioning and trusted-public-origin guidance for administrators using a reverse proxy.
|
||
|
||
## 0.31.4 — administration behind HTTPS proxies
|
||
|
||
- Added an explicit **administration public HTTPS origin** option for panels published behind a trusted reverse proxy.
|
||
- Corrected forwarded-protocol validation and automatically included the configured public hostname in the effective administration Host allowlist.
|
||
- Preserved strict Origin, Host, CSRF and trusted-proxy checks; the setting does not make untrusted forwarded headers acceptable.
|
||
|
||
## 0.31.3 — session and browser restoration
|
||
|
||
- Fixed duplicate panel session checks and repeated reload attempts after tab suspension or browser back/forward restoration.
|
||
- Added a recoverable startup/retry state and clearer invalid-Origin navigation errors while keeping cross-origin API requests blocked.
|
||
|
||
## 0.31.2 — updated runtime baseline
|
||
|
||
- Updated runtime, TLS, database, Swagger and monitoring dependencies.
|
||
- Raised the minimum Rust toolchain requirement to **1.99** for source builds, while preserving configuration and data-format compatibility.
|
||
|
||
## 0.31.1 — panel loading reliability
|
||
|
||
- Improved dashboard startup after mobile reloads and navigation through reverse proxies.
|
||
- Added versioned dashboard JavaScript/CSS assets to reduce problems caused by mixed browser/intermediary caches.
|
||
|
||
## 0.31.0 — selective cache purge and live monitoring
|
||
|
||
- Added optional, IP/CIDR-restricted public HTTP **`PURGE`** (exact URL) and **`BAN`** (URL prefix) controls. An empty allowlist keeps the feature off; requests remain subject to relevant validation and audit rules.
|
||
- Tightened Vhost/scheme isolation for cache invalidation and bounded background cache-maintenance work.
|
||
- Added configurable compression for administration HTML and assets, with gzip, Brotli and Zstd negotiation where supported.
|
||
- Added per-administrator live-refresh controls for Overview, Traffic/Cache and System information, including the option to stop certain automatic refreshes.
|
||
- Improved panel startup and separated compact live status updates from more expensive system information requests, preserving full status API compatibility.
|
||
|
||
## 0.30.1 — dashboard diagnostics
|
||
|
||
- Corrected HTTP/WebSocket protocol legend colors so charts follow the selected palette.
|
||
- Moved Python/Certbot and system diagnostics into **Settings → System information** with live OS/runtime details.
|
||
|
||
## 0.30.0 — backend health configuration
|
||
|
||
- Moved per-backend health-check editing into the Vhost **Health** tab with a selector for monitored backends.
|
||
- Kept independent backend health overrides when switching between members or temporarily disabling checks.
|
||
- Improved historical log processing and resource usage without changing saved Vhost, database or COLD cache formats.
|
||
|
||
## 0.29.7 — PHP-FPM safety, health checks and custom errors
|
||
|
||
- Added independent per-backend health-check enable switches and optional probe overrides, including the ability to disable active/passive checks for a selected backend.
|
||
- Added optional **HIT-only cache diagnostic headers** (`expose_only_hits`) at global or Vhost scope; non-HIT outcomes can remain unadvertised.
|
||
- Added warnings and practical guidance for PHP-FPM services sharing a pool with conflicting per-request PHP settings. Separate pools are recommended where settings differ.
|
||
- Expanded PHP-FPM profile help, `PATH_INFO` guidance and examples for applications such as WordPress and Roundcube.
|
||
- Added configurable application-error interception (`pages.intercept_statuses`) to serve internal, Vhost or global error pages while retaining the appropriate status code. Disabled for existing configurations unless enabled.
|
||
|
||
## 0.29.6 — compressed PHP responses
|
||
|
||
- Fixed truncated PHP-FPM responses when serving gzip, Brotli, Zstd or deflate content in Web Server mode.
|
||
- Improved error-file routing for PHP-FPM diagnostic output and service warnings, with fallback to console logs when writing fails.
|
||
|
||
## 0.29.5 — PHP PATH_INFO and Roundcube
|
||
|
||
- Fixed Roundcube `static.php/...` routes being incorrectly sent through the front-controller fallback, which could return HTML instead of CSS or JavaScript.
|
||
- Applied Web Server security and `.htaccess` restrictions to the resolved PHP script path, including when optional `PATH_INFO` is used.
|
||
|
||
## 0.29.4 — reusable PHP-FPM profiles
|
||
|
||
- Added named shared PHP-FPM profiles, manageable from the Web Server toolbar or a Web Service editor; services can attach/detach a profile without losing their local configuration.
|
||
- Extended Vhost cache, transformation and response policies to appropriate local Web Server file/PHP responses.
|
||
- Corrected FastCGI `HTTP_HOST` forwarding for valid HTTP/2 and HTTP/3 requests, supporting applications such as WordPress.
|
||
|
||
## 0.29.3 — internal error fallback
|
||
|
||
- Corrected internal error fallback for empty HTTP/2 and HTTP/3 GET/HEAD requests.
|
||
- Preserved the final status and response body of an internal fallback location, even when it returns its own error page.
|
||
- Improved warnings for missing internal fallback destinations.
|
||
|
||
## 0.29.2 — managed logs and PHP monitoring
|
||
|
||
- Added managed log rotation for Debian installation/update, including daily rotation and compressed history.
|
||
- Fixed Web Server routes incorrectly returning 503 when backend availability flags were unrelated to local file/PHP serving.
|
||
- Added validated `PHP_ADMIN_VALUE` support for trusted PHP-FPM use, and expanded Web Service Prometheus status, latency and concurrency measurements.
|
||
|
||
## 0.29.1 — internal locations, range delivery and PHP scripts
|
||
|
||
- Added internal-only named Custom locations for controlled error fallback, with selectable interception of common 4xx/5xx statuses and validation against routing loops.
|
||
- Added multipart HTTP `Range` delivery for up to **16 byte ranges** per request.
|
||
- Added optional PHP-FPM `PATH_INFO`, securely separating an existing script from its trailing request path.
|
||
- Preserved existing configuration and persistent cache compatibility.
|
||
|
||
## 0.29.0 — canonical hostnames and redirect rules
|
||
|
||
- Added easier management of domain aliases and **www/non-www canonical redirects**, including one-click permanent canonicalization and retention of the original request target.
|
||
- Added a Custom location **Redirect** action supporting permanent/temporary responses, full HTTP(S) destinations, optional capture-based rewriting and query preservation.
|
||
- Improved default HTTP health-check Host selection using the Vhost's first exact DNS name when no explicit override is set.
|
||
- Added narrowly scoped **force-cache targets** for configured URLs while continuing to respect response-side privacy exclusions such as `private`, `no-store` and `Set-Cookie`.
|
||
- Expanded Stored Logs to search permitted compressed log rotations, and improved maintenance/error-page and nested URL handling.
|
||
|
||
## 0.28.x — external certificates and GeoIP
|
||
|
||
| Version | Technical changes |
|
||
|---|---|
|
||
| **0.28.2** | Safer external PEM/key access, including POSIX ACLs and Certbot symlinks; certificate API keys now default to limited reload-only permissions and explicit certificate grants. |
|
||
| **0.28.1** | Support externally managed absolute certificate/key paths and hot reload after Certbot renewal; keep external key files outside RustProxy backups. |
|
||
| **0.28.0** | Add manual GeoIP downloads, flexible CSV/MMDB source URLs and checksum validation; improve active listener/protocol display and cache Via controls. |
|
||
|
||
## 0.27.x — compression and managed deployment
|
||
|
||
| Version | Technical changes |
|
||
|---|---|
|
||
| **0.27.3** | Protect ownership during backup restore; enable scheduled GeoIP updates; fix listener overrides and valid WebSocket upgrade framing. |
|
||
| **0.27.2** | Fix managed Certbot issue/renew invocation without requiring operators to delete existing private Python environments. |
|
||
| **0.27.1** | Add application-managed Python/Certbot installation with system fallback and clearer runtime errors; extend sortable host lists and first-admin help. |
|
||
| **0.27.0** | Enable eligible response compression with zstd, Brotli and gzip by default, with scoped Vhost/Web Service controls; preserve published Docker routes during temporary discovery failures. |
|
||
|
||
## 0.26.x — cache, logs and interface operations
|
||
|
||
| Version | Technical changes |
|
||
|---|---|
|
||
| **0.26.7** | Show HOT/COLD cache capacity and progress; improve HTTP `Age` diagnostics and safe compression behavior for eligible cached/static responses. |
|
||
| **0.26.6** | Store backend table preferences per administrator; correct combined IP/country ACL logic and clarify the ACL editor's allow/deny modes. |
|
||
| **0.26.5** | Align compact filters and streamline navigation from Streams into listener configuration; no configuration migration. |
|
||
| **0.26.4** | Add draft recovery for 404-host forms, improve Appearance layout editing and keep idle upstream connection recycling effective. |
|
||
| **0.26.3** | Apply display scale consistently across the administration panel, including dialogs and controls. |
|
||
| **0.26.2** | Add minimizable draft editing for Vhosts, Web Services, Redirects and Streams so unfinished forms survive page changes. |
|
||
| **0.26.1** | Extend persisted protocol error records with the affected Vhost when it can be identified safely. |
|
||
| **0.26.0** | Record malformed HTTP, TLS, H2/H3 and connection/protocol failures separately from normal HTTP responses; expand error-log inspection. |
|
||
|
||
## 0.25.x — Web Server and recovery
|
||
|
||
| Version | Technical changes |
|
||
|---|---|
|
||
| **0.25.7** | Add quick Vhost enable/disable and clearer active-state controls. |
|
||
| **0.25.6** | Show upstream connection age, reuse and recycle diagnostics in the backend panel. |
|
||
| **0.25.5** | Add configurable HTTP/1.1 upstream connection recycling by age/request count and expand connection telemetry. |
|
||
| **0.25.4** | Restore configuration from retained history as a validated new revision. |
|
||
| **0.25.3** | Add per-Vhost and per-location HTTP method allow/block policies and location-level access profiles. |
|
||
| **0.25.2** | Support password-encrypted full backups while the service is running, using a consistent configuration/database snapshot. |
|
||
| **0.25.1** | Reorganize Traffic into focused Overview, Clients, Requests and Delivery views; improve saved analytics. |
|
||
| **0.25.0** | Introduce reusable static Web Services with document roots, indexes and optional directory listing, integrated with Vhosts. |
|
||
|
||
## 0.24.x — monitoring, security and transport
|
||
|
||
| Version | Technical changes |
|
||
|---|---|
|
||
| **0.24.10** | Persist separate error-file logging settings and keep compatibility with existing logs. |
|
||
| **0.24.9** | Introduce encrypted Secret Store for managed credentials, including migration of ACME DNS secrets. |
|
||
| **0.24.8** | Expand Cache diagnostics with memory breakdowns and HOT/COLD occupancy. |
|
||
| **0.24.7** | Make response transformation memory and concurrency limits configurable. |
|
||
| **0.24.6** | Preserve selected HOT/COLD cache capacity presets across saves. |
|
||
| **0.24.5** | Fix empty HTTP/3 request forwarding and strengthen cache memory admission, transient limits and disabled-cache behavior. |
|
||
| **0.24.4** | Reduce excessive process memory usage on Linux without changing host-wide memory settings. |
|
||
| **0.24.3** | Extend per-certificate reload and multiple scoped certificate API keys; move H2 lifecycle controls to listeners. |
|
||
| **0.24.2** | Version-only update; no functional or configuration change. |
|
||
| **0.24.1** | Improve portable network/system metrics, runtime metadata and BSD-compatible CLI data-path discovery. |
|
||
| **0.24.0** | Add graceful downstream HTTP/2 connection retirement and separate lifetime/idle/drain controls; broaden BSD system statistics. |
|
||
|
||
## 0.23.x — certificates and dashboard diagnostics
|
||
|
||
| Version | Technical changes |
|
||
|---|---|
|
||
| **0.23.3** | Make external certificate deploy idempotent and self-reconciling; add opt-in legacy WebSocket compatibility. |
|
||
| **0.23.2** | Add configurable Cache/Transform chart history windows and fix live-log CLI connections to HTTPS administration. |
|
||
| **0.23.1** | Add live Cache and Transform activity charts with per-scope request and outcome rates. |
|
||
| **0.23.0** | Introduce restricted external certificate API keys with token hashing, certificate-specific permissions, revocation and authenticated deploy/reload; limit inactive H2 connections. |
|
||
|
||
## 0.22.x — cache controls and protocol handling
|
||
|
||
| Version | Technical changes |
|
||
|---|---|
|
||
| **0.22.3** | Support guarded cleartext H2 upgrade; add hot reload and external deploy for manual certificate IDs from CLI/API. |
|
||
| **0.22.2** | Add bounded safe-method failover retry, per-backend concurrency/capacity limits and detailed upstream failure diagnostics. |
|
||
| **0.22.1** | Simplify WebSocket transport selection and add focused active-tunnel, protocol and selective cache-invalidation controls. |
|
||
| **0.22.0** | Add request collapsing, supported cached range responses, safer stale-if-error rules, proactive refresh and selective cache PURGE/BAN. |
|
||
|
||
## 0.21.x–0.19.x — transformations and certificate workflows
|
||
|
||
| Version | Technical changes |
|
||
|---|---|
|
||
| **0.21.0** | Add a dedicated Transform workspace, savings/error counters and cache diagnostics for transformed representations. |
|
||
| **0.20.0** | Reorganize Certificates into Installed, Renewal and Generate; expose managed ACME job and Certbot diagnostics. |
|
||
| **0.19.4** | Improve presentation of idle and very small backend traffic rates. |
|
||
| **0.19.3** | Add a non-blocking release/update checker and simplify dashboard footer diagnostics. |
|
||
| **0.19.2** | Restore explicit per-backend protection/exception controls for deliberately targeting local administration listeners. |
|
||
| **0.19.1** | Separate HTTP and HTTPS cache identities to prevent accidental cross-scheme reuse. |
|
||
| **0.19.0** | Store Live Logs column preferences per administrator without rewriting proxy configuration. |
|
||
|
||
## 0.18.x — Docker discovery and UI
|
||
|
||
| Version | Technical changes |
|
||
|---|---|
|
||
| **0.18.8** | Correct the explicitly disabled backend TLS verification path while retaining separate destination protection. |
|
||
| **0.18.7** | Make Response Time History collapsible by default. |
|
||
| **0.18.6** | Add live network-interface throughput and process diagnostics. |
|
||
| **0.18.5** | Break down live request-rate charts by HTTP/1.1, HTTP/2 and HTTP/3. |
|
||
| **0.18.4** | Default new backend health checks to TCP and simplify Docker agent/service and Security editors. |
|
||
| **0.18.3** | Add Docker-vhost search/hide controls, agent-assigned certificates and per-agent inventory poll intervals. |
|
||
| **0.18.2** | Secure Docker agents with HTTPS certificate fingerprint pinning; add per-Docker-vhost backend health checks. |
|
||
| **0.18.1** | Support multiple Docker host addresses, selected published IPs, multiple agents and custom service aliases. |
|
||
| **0.18.0** | Introduce a separate authenticated Docker discovery agent, automatic service observations and optional generated Docker Vhosts. |
|
||
|
||
## 0.17.x–0.13.x — platform and routing improvements
|
||
|
||
| Version | Technical changes |
|
||
|---|---|
|
||
| **0.17.0** | Add Debian package/service assets, a Grafana dashboard, broader Prometheus metrics and local-response/404 hostname support. |
|
||
| **0.16.1** | Hide internal configuration revision numbers from normal save feedback while retaining conflict protection. |
|
||
| **0.16.0** | Keep unmatched paths on the main backend when custom locations exist; improve guarded self-admin routing, WebSocket/H3 and resource diagnostics. |
|
||
| **0.15.1** | Improve visual Custom-location and header-rule editors, previews and cache/process live charts. |
|
||
| **0.15.0** | Add Nginx-style path matching/rewrite options, visual header configuration and Nagios/Icinga check scripts. |
|
||
| **0.14.0** | Correct administration Host/Origin checks behind trusted HTTPS proxies and add HTTP/3 WebSocket transport support. |
|
||
| **0.13.2** | Fix signed-in dashboard refresh; improve managed-update cache handoff and retention of certificate renewal status. |
|
||
| **0.13.1** | Add configurable 7–30 day administrator sessions and explicit risk approval for backends pointing to local listeners. |
|
||
| **0.13.0** | Add first-class Redirect hosts and local redirects; establish the omitted backend `tls_verify: false` compatibility default. |
|
||
|
||
## 0.12.x–0.10.x — API, Streams and disk cache
|
||
|
||
| Version | Technical changes |
|
||
|---|---|
|
||
| **0.12.1** | Add revisioned per-section configuration API, cache retention across unrelated settings saves and configurable COLD demotion behavior. |
|
||
| **0.12.0** | Move TCP/UDP Streams into a dedicated editor with session, traffic and active/pending listener views. |
|
||
| **0.11.5** | Add guarded TCP/UDP forwarding, Debian 13 source bootstrap and stricter-but-compatible URL path handling. |
|
||
| **0.11.4** | Fix force-HTTPS validation; add visual ACL profiles and hide cache diagnostics when a Vhost disables cache. |
|
||
| **0.11.3** | Add per-Vhost upstream client-IP forwarding control and improve Vhost search and stored access logs. |
|
||
| **0.11.2** | Correct administration HTTP/2 authority validation and add per-Vhost `308` force-HTTPS redirects. |
|
||
| **0.11.1** | Add Nginx Proxy Manager import with dry-run/conflict detection and explicit API-based apply; improve managed update health checks. |
|
||
| **0.11.0** | Add reusable ACL profiles, wildcard domains and cumulative access enforcement. |
|
||
| **0.10.0** | Introduce optional persistent COLD cache, HOT/COLD metrics, capacity controls and structured-log output presets. |
|
||
|
||
## 0.9.x–0.7.x — administration and access
|
||
|
||
| Version | Technical changes |
|
||
|---|---|
|
||
| **0.9.0** | Add structured JSONL/Logstash/Loki access-log sinks, expanded Vhost cards, cache inspection and administration HTTPS. |
|
||
| **0.8.1** | Enable the shared RAM cache by default and improve conditional/cached static behavior; Vhost and privacy rules still apply. |
|
||
| **0.8.0** | Add static-cache extension defaults, per-Vhost rate limits and GeoIP country policies. |
|
||
| **0.7.3** | Add first-admin setup token before service start, safer remote-admin opt-in and managed default HTTP/HTTPS listeners. |
|
||
| **0.7.2** | Embed offline Swagger UI assets during the build and remove runtime asset download dependencies. |
|
||
| **0.7.1** | Protect sign-in and administration routes more strictly; add authenticated `/docs`, Swagger and visual location header editing. |
|
||
| **0.7.0** | Add automated ACME renewal, safe Linux install/update rollback, Basic Auth, graphical ACLs and Custom locations. |
|
||
|
||
## 0.6.x–0.0.x — initial proxy platform
|
||
|
||
| Version | Technical changes |
|
||
|---|---|
|
||
| **0.6.0** | Unify Vhost configuration, add HTTP-01 and Cloudflare/OVH DNS-01 ACME, and introduce protected Prometheus export. |
|
||
| **0.5.0** | Add cache inspection/purge dashboard and first HTTP/3/frontend controls. |
|
||
| **0.4.0** | Add validated forwarding identity, Tinyauth protection, named multi-address listeners and HTTP/3 (QUIC). |
|
||
| **0.3.0** | Add certificate inventory/PEM upload, per-Vhost cache overrides, error pages and richer request logs. |
|
||
| **0.2.0** | Add Vhosts with multiple backends, load balancing, health checks and path policies. |
|
||
| **0.1.0** | Add persistent listeners, shared RAM cache, streaming compression and operational dashboard. |
|
||
| **0.0.6** | Improve source-upgrade safety, HTTPS origins, TLS certificates and validated backend DNS. |
|
||
| **0.0.2** | Add administrator credentials/sessions/CSRF, audit and SQLite migration support. |
|
||
| **0.0.1** | Initial HTTP/1.1 reverse proxy with streaming, SQLite configuration, access log and basic panel. |
|