Files
RustProxy/ROADMAP.md
T
2026-10-15 13:00:44 +02:00

47 KiB
Raw Blame History

RustProxy roadmap

0.33.3 - Adjustable Overview card widths and cross-type ordering

  • Apply Appearance theme highlighting and corner radius to sidebar navigation, including mobile layout and accessible contrast on light themes; keep menu colors independent of the chart palette.

  • Test navigation colors in Chromium across 4 themes and 8 chart palettes (invariance within each theme), 5 corner settings, hover, mobile and RTL.

  • Keep the visual layout editor readable at 320-1920px with stable three/two/one-column previews, wrapping controls and no horizontal overflow; leave actual dashboard widths and free ordering unchanged.

  • Stretch plotted SVG history across the actual card width when resizing, including dynamic network-interface plots, without stretching donut charts.

  • Allow widths of 2, 3, 4, 6 and 12/12 columns in inline and visual editors; keep the smallest text/sparkline cards expandable and add a 4-chart desktop row.

  • Allow free card placement across former size groups, including at the top of Overview, and reduce unused row gaps with CSS dense packing.

  • Preserve legacy grouped layouts until edited, retain saved hidden/order preferences, and support cancel, save, modal preview and reset.

  • Add browser coverage for real move/size clicks and responsive layouts.

0.33.2 - Shared progressbar visual settings

  • Apply Appearance corner rounding to native Cache progressbars and custom Overview, WWW and traffic bars with matching track/fill shapes.
  • Apply the chosen chart color palette to Cache progressbars and other progress fills; retain theme-aware tracks, without new API/status work.
  • Unify the System Load RAM meter with other Overview progressbars, retaining the 5px height and accessible percentage updates.
  • Verify live CSS changes with Chromium across corners, chart palettes, light/dark themes and mobile/desktop viewport widths.

0.33.1 - Factory dashboard preset and inline live preview

  • Ship the operator-supplied default ordering, hidden cards and compact density in one shared Rust/UI JSON preset; use 600 as the first-use history sample default.
  • Keep all existing explicitly saved preferences and restore the factory preset only for new accounts or an explicit dashboard reset.
  • Honor unsaved inline hide/show changes while backend and Stream status refresh; preserve the draft across unrelated preference updates.

0.33.0 - Web Server observability (implementation complete; live acceptance pending)

  • Add one Overview 60/120/300/600 history selector on the connection-status header row, with temporary changes and explicit browser-persistent choice. Use the same source stream and leave the Cache and Transform selectors independent.
  • Match the Web Server metric method visibility to ResponseKind (no private_interfaces warning).
  • Align donut totals beside the ring, preserving the legend and compact tile heights.
  • Add opt-in Web Server Overview cards, with all new metrics hidden by default and per-service drilldown.
  • Extend Web Server/PHP diagnostics and bounded Prometheus metric families without untrusted labels or additional request-path database calls.
  • Extend the packaged Grafana operations dashboard with Web Server/PHP panels and per-service filters.

0.32.8 - Overview action alignment (runtime acceptance pending)

  • Convert bounded cache RAM/queue/disk, file descriptor, HTTP protocol share and backend capacity cards into meter/progress-bar visuals, with clear unknown-limit behavior.
  • Replace cache hit ratio sparklines with compact HIT/MISS donut visualizations and legends.
  • Add large transformation/compression four-series live charts and Polish/English labels, preserving existing status sampling and layout/editor preferences.
  • Add deterministic UI metric tests and Chromium responsive-layout regression checks.
  • Replace mobile three-column Overview actions with natural wrapping: keep the heading at left, actions to the right, without shrinking buttons.
  • Remove redundant button-only classes and outdated small-screen overrides while preserving existing common button variants, layout controls and editor handlers.

0.32.7 development follow-up: Appearance and H2-close diagnostics

  • Use common button sizing for Overview quick actions and Appearance visual editor/show-all; preserve the normal and compact global button styles.
  • Strengthen the distinction between Dashboard density levels for tiles, charts and non-table panels without changing grid gutters or preferences.
  • Lower only correlated graceful H2 close terminal diagnostics to TRACE; keep 502/access details and uncorrelated cancellations as errors.
  • Verify the UI sizes with a simulated Chromium browser at desktop and phone widths.

0.32.7 - Mobile Overview and upstream protocol visibility (runtime acceptance pending)

  • Share counter-rate pause/resume handling between Cache, Transform, Overview, backend, Stream and Vhost plots. Retain historical points after backgrounding, skip suspended intervals and restart normal samples after one fresh counter baseline, with no new polling.
  • Development follow-up: preserve Network diagnostic chart DOM through periodic refresh and fix descendant CSS selector minification.
  • Feed Process CPU/RSS and per-interface network charts from the cached background OS sampler through live status (default 3 s). Leave slow Process details on system_info_seconds and retain valid 2-s saved preferences; do not add per-request probes. Group upstream badges with other Vhost badges and match their corner radius while preserving observed protocol colors.
  • On phone-size Overview, remove the nested Network interface chart scroll region, while retaining chart SVG/text nodes on ordinary live updates.

0.32.6

  • Reinstate two small Overview cards per row across phone-size widths.
  • Apply global corner styles to additional vhost/entity panel surfaces.
  • Avoid reparenting already-ordered Overview nodes; retain natural touch scroll and stable values/row boundaries during live updates.
  • Include last HTTP protocol observed from real proxy upstream responses in the authenticated status and each Vhost's per-backend badge. Show unknown when no fresh observation exists instead of guessing Auto's ALPN outcome.
  • Add simulated mobile Chromium and mocked status UI regressions plus a Rust unit regression for protocol-version observation.

0.32.5 - Dynamic DNS client ACLs (runtime acceptance pending)

  • Preserve CIDR/IP rules and introduce allow-only FQDNs for client ACLs.
  • Add bounded A/AAAA periodic resolver, immutable cache, expiration and immediate refresh on published configuration changes.
  • Add DNS/DDNS editor selector, PL/EN guidance and source/regression tests.

0.32.4 - Upstream Host/authority parity and Overview gutters (runtime acceptance pending)

  • Remove preserve_host H1-only validation and the Auto/H2 UI forced-uncheck.
  • Align outgoing H2 authority with selected Host while keeping the origin DNS, ACL, TCP destination, TLS SNI and certificate verification independent.
  • Update HTTPS-by-IP guidance; preserve opt-in diagnostic H1 preset.
  • Make Overview small-to-large row gutter consistent across density modes.
  • Add protocol/authority and UI/source contracts; preserve WebSocket isolation.

0.32.3 - Backward-compatible upstream modes and Overview Cards registry (runtime acceptance pending)

  • Replace ragged custom Overview masonry with symmetric CSS Grid rows grouped by widget footprint. Equal-height peers, traditional gaps, responsive columns and live-content growth are verified in Chromium. Block dragging remains supported inside its size group; group boundaries prevent visually inconsistent mixing. Registry (62), preferences and version stay unchanged.

  • Snap manually rearranged Overview columns to common pixel-aligned coordinates and align the bottoms of a tall panel and its stacked short neighbors where bounded distribution allows. Keep factory rows, saved widget IDs/visibility, spacing controls and narrow-screen layout unchanged. Verify with a Chromium fixture, including dynamic height, density and zoom.

  • Remove numeric/chart type badges from the Settings → Appearance Overview list, retaining them in the actual visual editor; keep right-aligned controls.

  • Open Appearance first unless Settings has a remembered last tab; honor explicit URL tabs and legacy configuration/logging links.

  • Decouple roundness from the color palette through a backward-compatible, account-scoped five-preset global corner_style. Keep original corners as the default for all four themes; restore coral/green logo marks in Ultra Dark.

  • Preserve original symmetric and density-aware Overview rows for the default configuration. When blocks are manually reordered on desktop, keep the same column widths/gutters while allowing multiple natural-height charts to stack next to tall diagnostics; use CSS-layout-pixel row spans for zoom safety and fall back to classic rows on narrow canvases.

  • Exclude the RustProxy logo from global corner style overrides. Keep unlocked Overview × Hide and arrow controls consistent under all five presets, without changing color themes or account data.

  • Add 6 small and 7 large opt-in time-series views (62 registered blocks total), reusing existing status updates, bounded samples and version 0.32.3. Place block metadata before right-anchored editing controls.

  • Preserve legacy http2: HTTPS ALPN H2/H1 fallback; HTTP H2C. Add a separate explicit h2 mode requiring H2 over TLS / H2C over plaintext. Retain H1/Auto and isolate WebSocket clients.

  • Retain one safe Auto ALPN negotiation before the first request, without H1 retry after a potentially executed operation.

  • Establish a shared JSON registry for Overview IDs/metadata, server validation, ordered visibility settings and compatibility with unknown saved widget IDs.

  • Add fourteen opt-in HTTP origin monitoring cards, including request-rate, capacity, 5xx, timeout, network errors, retries, queue pressure and client-pool recycling; reuse existing status counters without extra polling. Retain the original 16 and existing account preferences.

  • Add an authenticated Overview modal for draggable visual card ordering, keyboard move, hide/show catalog, draft cancel and a single preferences PUT for Save. Keep existing Appearance controls and defaults.

  • Add opt-in AMOLED Ultra dark and muted Warm cream palettes with translated selectors, login-cache support, server-side preference validation and high-contrast palette checks. Preserve current dark/light themes, default and schema version.

  • Let administrators hide/remove visible Overview blocks directly while unlocked, including panels and tables; recover them from a compact hidden-block shelf in the same draft and persist visibility only after Save.

  • Add a direct Overview Unlock layout mode: drag actual blocks by dedicated grips, move with arrows, cancel without persisting, and save+lock in one request. Classify and label all 49 blocks by display type, including mixed number+chart cards, with a hidden-block type filter.

  • Expand to a shared 49-block Overview grid (30 prior widgets, 12 new opt-in charts and seven original full-size sections). Add visual default-layout preview, confirmed reset and account preference compatibility without new metrics probes or API routes.

  • Verify ALPN is already negotiated on connection establishment, then reused by Hyper per-backend pooling. Retain age/request-count generation rotation and new-connection negotiation rather than introduce a global H2/H1 cache or unsafe protocol-retry probe.

  • Present all four modes with clear HTTPS ALPN versus h2c semantics, keeping persisted http2 records valid with unchanged meaning.

  • Add source/JS checks and Rust tests for strict ALPN, old TLS H1 fallback, H2C, WebSocket isolation and widget preferences.

  • Resolve the 0.32.2 HTTPS http2 compatibility regression with a new serialized strict h2 mode rather than a silent migration.

0.32.2 - Web Server conditional cache revalidation (runtime acceptance pending)

  • Reuse local Web Server ETag / Last-Modified revalidation candidates for forced browser refresh and stale/freshness-constrained requests, keeping hit counts and cache bodies on 304.
  • Preserve client conditional semantics, HEAD, range, response policy and transformed representations; invalidate superseded objects.
  • Add Rust regression cases and source-only checks.

0.32.1 - Dashboard Overview typography and tile height (runtime acceptance pending)

  • Restore content-driven heights for desktop Overview tiles (six columns) seen in 0.31.9, removing 0.32.0's fixed-height whitespace at 90% scale.
  • Increase compact Dashboard headings, values and secondary descriptions, including the fixed-size Payload legend. Align tile gaps with the same --ui-gap as other dashboard blocks for all dashboard density settings.
  • Keep opt-in Streams, all responsive breakpoints and chart legends visible inline. Add layout-regression checks. No proxy or persistence changes. Rust/Cargo and authenticated-UI runtime acceptance are still outstanding.

0.32.0 - Stream backend pools and opt-in Dashboard cards (runtime acceptance pending)

  • Extend legacy TCP/UDP upstream with an optional validated backend pool, Round Robin/Least Sessions, session pinning, and bounded concurrency.
  • Add bounded TCP Connect / verified UDP Probe health monitoring with rise/fall hysteresis.
  • Add opt-in, bounded backend metrics and reuse the existing Prometheus stream gate and API status.
  • Add four translated opt-in Dashboard cards through existing Appearance preferences and common status refresh.

0.31.9 - Certificate API credential management (runtime acceptance pending)

  • Inspect individual saved Certificate API credential metadata without reading its bearer secret.
  • Edit comment, explicit certificate allowlist and deploy grant independently of token rotation.
  • Regenerate only a selected credential's token while keeping Key ID, comment and grants, invalidating the old secret and showing the replacement only once.
  • Preserve existing scopes, administrator-only access, audit trail, schema 9 and backwards-compatible creation/revocation endpoints.
  • Compile and execute Rust regression tests with Rust 1.99+; verify end-to-end panel flows on a real server before production acceptance.

0.31.8 - Stored Logs sorting, built-in pages and allocation reduction (runtime acceptance pending)

  • Consolidate 28 numbered Rust test fragments into seven large tests.rs files; exempt test sources from the 500-line production limit and remove obsolete fragment paths.
  • Sort Stored Logs across the bounded server-side scan before pagination, including dynamic columns and durable account preferences.
  • Complete the built-in status response pages in the existing visual style, including 200 OK.
  • Pack GeoIP IPv6 records and remove unused CSV Vec capacity without changing lookup results.
  • Add bounded zero-copy transformed-cache fill where exclusive ownership and exact allocation capacity are available.
  • Correct Docker VHosts post-restart pending/failed status, first-read synchronization and TLS pin indicator, without changing poll/TLS/SQLite protocols.

0.31.7 - UA-specific throttling and managed update housekeeping (runtime acceptance pending)

  • Group global UA blocking, headers and response controls in a tabbed Settings page.
  • Add per-vhost UA rate-limit overrides with separate bounded counters.
  • Show leaf-level revision diffs, with optional full JSON comparison dialog.
  • Space apart listener protocol buttons and collapse ACL attachments by default.
  • Fix release retention path deletion; preserve two releases; limit Cargo cleanup to expired incremental state.
  • Verify update marker and forced HOT→COLD shutdown code path, and add completion logging.
  • Compile and test with Rust/Cargo; run real update/rollback and browser/UI tests on a controlled host.

0.31.6 - H3 iOS navigation hardening (runtime acceptance pending)

  • Finish live Safari/Chrome iPhone logo-navigation and repeated-refresh acceptance over H3 after Rust compilation.
  • Collect matching http3_* diagnostic records and navigation/asset response records; verify the new top-level GET is not interrupted when old SSE/API streams cancel.

0.31.5 - User-Agent blocking and consolidated log analysis

  • Add bounded global and per-vhost User-Agent blocklists and enforce them before upstream contact.
  • Add one-click copy for Traffic values used during investigation.
  • Add repeated-value aggregation for arbitrary parsed Stored Logs fields.
  • Consolidate active and rotated gzip per-vhost logs into one logical source on demand.
  • Update OpenAPI, translations, documentation and Rust-independent regression checks.

0.31.4 - Administration-only public HTTPS Origin with one-field configuration

  • Add explicit HTTPS administration.public_origin and restrict its use to trusted reverse-proxy peers for panel requests.
  • Derive the pinned DNS hostname for the effective Host allowlist without duplicating it in saved allowed_hosts.
  • Keep additional allowed DNS hostnames in an advanced panel field and remove redundant legacy duplicates on edit/save.
  • Preserve strict Origin, CSRF, trusted proxy, forwarded Host and HTTPS-first header checks and the opt-in self-admin session-cookie boundary.
  • Add panel settings UI, translations, API schema, Rust source regressions and Node simulations without changing public proxy forwarding.

0.31.3 - Mobile session recovery and Origin diagnostics

  • Reproduce the overlapping resume-session checks, reload-loop marker reset and early SSE restart using the 0.31.2 source in a deterministic JavaScript simulation.
  • Coalesce page visibility/BFCache session verification, defer background requests until revalidated and offer a visible retry on failure without weakening Origin enforcement.
  • Display a safe 403 HTML message for invalid-Origin dashboard navigation and provide credential-redacted rejection diagnostics.

0.31.2 - Dependency updates

  • Prepare stable dependency-family and code API migrations, preserving existing wire/configuration/SQLite formats.

0.31.1 - Mobile panel loading stability

  • Load dashboard modules as one ordered JavaScript resource and wait for document/module readiness before session initialization.
  • Version dashboard JS/CSS requests; show a recoverable startup error on missing modules.

0.31.0 - Panel refresh orchestration

  • Centralize authenticated polling with source IDs, view lifecycle, hidden-tab pause, abort, in-flight protection and cleanup.
  • Separate compact live telemetry from infrequent cached system diagnostics; allow per-client SSE pacing and reconnect-only fallback.
  • Add per-account refresh preferences, reset/manual actions, language packs, endpoint contracts and regression tests.

0.30.1 - Protocol legend and system information

  • Color the H1/H2/H3 legend dots consistently with their themed chart strokes.
  • Remove ACME/Python runtime details from About and provide a read-only System information settings tab.
  • Read available ACME Python/pip/Certbot version metadata and OS/hardware/process details with existing libraries, without subprocesses for information gathering or new configuration fields.

0.30.0 - Per-backend Health editor and logging resource review

  • Provide an intuitive Health-tab backend selector restricted to monitored members, with independently editable TCP/HTTP policies.
  • Deduplicate file/Logstash JSONL serialization; cap Stored Logs directory scan retention during enumeration; review long-lived queues and other memory-heavy facilities.
  • Preserve vhost wire schema, SQLite schema 9 and Cold Cache format 3.

0.29.7 - Backend health scoping, PHP-FPM isolation and HIT-only cache diagnostics

  • Support per-backend active/passive health monitoring disablement and independent health-check settings.
  • Expose optional global and vhost-level cache HIT-only diagnostic headers.
  • Identify unsafe PHP-FPM shared-socket directive differences and document dedicated pool migration for Roundcube/WordPress.
  • Preserve existing settings and schema 9/Cold format 3.

0.29.6 - FastCGI compression EOF and diagnostic routing

  • Fuse FastCGI response streams so compressors may safely probe the end of a PHP-FPM response multiple times.
  • Route WARN/ERROR diagnostics and panic-hook events to the configured error file, or stderr when the file is disabled/unavailable.
  • Add source tests for repeated EOF polling, gzip output, and live error-log settings changes.
  • Retain schema 9, Cold Cache format 3 and 0.29.x saved-configuration compatibility.

0.29.5 - Roundcube PHP PATH_INFO routing

  • Resolve PHP PATH_INFO on an existing script before try_files falls back to the front controller, while preserving normal URL and script security checks.
  • Verify FastCGI parameters from an actual mock PHP-FPM exchange in Rust integration tests when Cargo is available.
  • Retain schema 9, Cold Cache format 3 and all previous PHP-FPM profile UI and vhost-cache behavior.

0.29.4 - Shared PHP-FPM profiles and local Web Server processing

Current direction: 0.29.3 -> 0.29.4

  • Add reusable PHP-FPM profiles attachable to individual Web Services, keeping their local settings on detach.
  • Apply RustProxy cache and response transformations for Web Server files and PHP-FPM responses.
  • Supply FastCGI HTTP_HOST from request authority for HTTP/2 and HTTP/3 WordPress requests.
  • Add source/UI regression coverage for new configuration and response behavior.
  • Keep SQLite schema 9 and Cold Cache format 3 unchanged.

0.29.3 - HTTP/2 and HTTP/3 internal fallback stabilization

Current direction: 0.29.2 -> 0.29.3

  • Allow empty GET/HEAD bodies with unknown length hints to enter the internal error fallback path.
  • Preserve the final internal fallback response, including the fallback backend's HTML on HTTP 404.
  • Add Rust regression tests for fallback dispatch, request-body safety and error-page precedence.
  • Preserve SQLite schema 9 and Cold Cache format 3 without configuration migrations.

0.29.2 - PHP-FPM operator controls and observability

  • Add bounded, operator-only PHP_ADMIN_VALUE INI overrides per Web Service.
  • Show admin overrides in the Web Service UI/API, reusing existing location-to-service routing.
  • Track PHP responses by status class, response-header latency and free concurrency slots in Prometheus.

0.29.1 - Internal error routing, multipart ranges and PHP PATH_INFO

Current direction: 0.29.0 -> 0.29.1

  • Add configurable internal error fallbacks for the main vhost source and Custom locations.
  • Preserve original method, URI, query string and request context during internal fallback dispatch.
  • Reject fallback cycles at validation time and cap runtime fallback depth.
  • Intercept configured errors before final response/cache handling and run the target through normal route processing.
  • Add bounded Prometheus counters for triggered, successful and failed error fallbacks.
  • Support fixed fallback status codes 403/404/500/502/503/504.
  • Add streaming multipart byte-range responses with a bounded range count.
  • Add opt-in secure PHP PATH_INFO splitting for PHP-FPM.
  • Keep SQLite schema 9 and Cold Cache format 3 unchanged.

0.29.0 - Redirect, health-host, forced-cache and rotated-log controls

Current direction: 0.28.2 -> 0.29.0

  • Add one-checkbox canonical www/non-www redirects per vhost.
  • Add first-class Custom location redirects with capture-based rewrite targets and query preservation.
  • Default HTTP health-check Host to the first exact vhost hostname while keeping the manual field as an override.
  • Add explicit per-vhost forced-cache targets with response privacy protections retained.
  • Read bounded logrotate gzip rotations in Stored Logs.
  • Verify local/static HTML pages can intentionally return statuses such as 503.
  • Preserve valid nested URL query parameters while retaining ambiguous-backslash rejection.
  • Keep SQLite schema 9 and Cold Cache format 3 unchanged.

0.28.2 - External certificate hardening and least-privilege reload API

Current direction: 0.28.1 -> 0.28.2

  • Accept POSIX ACL-based read access for external certificate keys without requiring one exact chmod value.
  • Reject unsafe world-readable private keys, group/world-writable external PEMs and untrusted/writable external-path parent directories.
  • Validate both configured Certbot live/ paths and their resolved archive/ targets while keeping hot reload behavior.
  • Scope Certificate API credentials to explicit certificate IDs, default new tokens to reload-only, block global reload for tokens and make deploy an explicit permission.
  • Migrate existing Certificate API credentials to reload-only compatibility grants and move SQLite to schema 9.
  • Document read-only systemd access plus POSIX ACL examples for /etc/letsencrypt and /etc/ssl in English and Polish.
  • Keep the saved proxy configuration format and COLD format 3 unchanged.

0.28.1 - External certificate paths and certificate-source clarity

Current direction: 0.28.0 -> 0.28.1

  • Allow manual certificate entries to reference an absolute external certificate path and absolute external private-key path.
  • Resolve Certbot-style live/ symlinks on every reload while preserving bounded PEM parsing, regular-file checks and private-key permission checks.
  • Keep targeted certificate reload revision-stable so renewal wrappers can call POST /api/certificates/{certificate_id}/reload after renewing external files.
  • Preserve managed <data-dir>/certs filenames and reject mixed managed/external pairs.
  • Exclude external certificate material from RustProxy backups while retaining the configured absolute paths.
  • Clarify certificate-source, storage and path expectations in English/Polish UI text and operator documentation.
  • Keep SQLite schema 8 and COLD format 3 unchanged.

0.28.0 - GeoIP control, listener clarity and cache policy refinement

Current direction: 0.27.3 -> 0.28.0

  • Add on-demand GeoIP refresh through the authenticated administration UI and reuse the automatic updater pipeline.
  • Hot-swap validated GeoIP databases so subsequent country ACL/rate-limit/logging lookups use the new data without a process restart.
  • Use direct GeoIP file URLs with optional per-file SHA-256 verification and support either separate IPv4/IPv6 CSV ranges or one native MaxMind MMDB database.
  • Present active listeners as readable HTTP/HTTPS endpoint cards with explicit H3/UDP state.
  • Add configurable Via: RustProxy cache response metadata while preserving upstream Via values.
  • Preserve cache objects across bypass and response-only diagnostic/Via setting changes.
  • Separate vhost Security header-rule Delete controls from the Operation selector.
  • Keep SQLite schema 8 and COLD format 3 unchanged.

0.27.3 - HTTP/3 cache parity and bounded memory retention

Current direction: 0.27.2 -> 0.27.3

  • Make body-less HEAD cache eligibility consistent between HTTP/2 and HTTP/3.
  • Reduce persistent COLD-index RAM while preserving the existing on-disk cache format and cache behavior.
  • Reclaim expired rate-limit client buckets and avoid duplicating the vhost name for every tracked IP.
  • Confirm downstream compression remains streaming and does not retain complete response bodies in memory.
  • Exclude rebuildable managed Certbot Python environments from backups.
  • Document DEB/RPM and OPNsense repositories as the official installation paths; keep Debian source builds optional.
  • Separate application-coupled scripts from QA/dev/audit tooling and external platform integrations while preserving all entry points.
  • Keep SQLite schema 8 and saved configuration compatibility with 0.27.2.

0.27.2 - Managed ACME renewal repair

Current direction: 0.27.1 -> 0.27.2

  • Make the managed Certbot runtime independent of pip console-script shebang relocation.
  • Reuse existing 0.27.1 acme-python environments without operator cleanup.
  • Preserve the system Certbot fallback and schema/config compatibility.

0.27.1 - Portable certificate runtime and list sorting

Current direction: 0.27.0 -> 0.27.1

  • Show complete default and standard-service setup-token commands during first-administrator onboarding.
  • Initialize the Certbot Python environment under the RustProxy data directory with app-owned venv/pip state and a local virtualenv bootstrap when stdlib venv is unavailable.
  • Fall back to distribution Certbot binaries when usable and report missing Python/pip or setup failures in the Certificates panel.
  • Add account-scoped column + direction sorting for vhosts, Docker vhosts, redirects, 404 hosts and streams; keep Redirects/404 toolbar placement identical to Vhosts.
  • Use the installed production binary in the Certbot hook example and expose official source/package repository links plus Python/pip/Certbot runtime state in application information.
  • Keep SQLite schema 8 and additive/defaulted administrator-preference compatibility.

0.27.0 - Compression policy and persistent Docker publications

Current direction: 0.26.7 -> 0.27.0

  • Enable zstd/Brotli/gzip downstream compression by default, keep deflate opt-in, honor client q-values and use deterministic zstd -> br -> gzip -> deflate tie priority.
  • Allow authenticated/cookie/private/no-store responses to compress while retaining explicit no-transform/range/SSE/upgrade/existing-encoding exclusions.
  • Add inherited dynamic-compression overrides and per-scope codec filters for ordinary vhosts and Web Server services under the global codec ceiling; keep Docker publications intentionally simple with one Compression on/off checkbox using the global codec set.
  • Default fresh installations to Server: RustProxy without rewriting existing saved policies.
  • Remove Debian package-build metadata from this source tree; packaging is maintained separately at rustproxy.linuxiarz.pl.
  • Keep published Docker hostnames materialized while a service is missing, return 503 until it returns, and reuse last-known inventory during temporary agent communication failures.
  • Render cache occupancy progress fill consistently across Chromium/WebKit and Firefox.
  • Keep SQLite schema 8 and additive/defaulted saved configuration compatibility with 0.26.x.

0.26.7 - Cache occupancy and backend rotation continuity

Current direction: 0.26.6 -> 0.26.7

  • Show HOT/COLD cache occupancy progress against configured entry and byte limits on /cache.
  • Preserve compatible upstream client generations across unrelated runtime snapshot rebuilds so rotation age/counters remain continuous.
  • Keep request-count and age-based backend client recycling covered by tests and visible diagnostics.
  • Refresh container documentation and include all supported Certbot DNS plugins in the shipped OCI image.
  • Review current installation/cache/backend lifecycle documentation for stale behavior statements.
  • Keep existing 0.26.6 custom Age rules loadable while isolating response-side Age overrides from cache freshness/storage semantics.
  • Keep SQLite schema 8 and saved proxy configuration compatibility with 0.26.6.

0.26.6 - Access-policy composition and administration fixes

Current direction: 0.26.5 -> 0.26.6

  • Keep backend table visible columns, sort key and sort direction synchronized with account-scoped user preferences.
  • Clear the certificate-issuance form after the ACME issuance job succeeds while preserving non-secret values after failed jobs.
  • Document the sibling Python modules required by scripts/migration/migrate_npm.py and fix the container helper example.
  • Treat explicit IP allows and allow-only countries as alternative allow sources inside one ACL policy scope, with explicit denies taking precedence and separate scopes remaining cumulative.
  • Keep SQLite schema 8 and saved proxy configuration compatibility with 0.26.5.

0.26.5 - Scaled controls and listener navigation

Current direction: 0.26.4 -> 0.26.5

  • Keep compact toolbar selects and inputs on the same interface-scaled control height.
  • Reuse the interface-scale field variables for ordinary form controls so inputs/selects resize consistently with the UI scale setting.
  • Route the Streams Add TCP/UDP listener shortcut to Settings -> Listeners instead of opening a Stream editor.
  • Keep SQLite schema 8 and saved proxy configuration compatibility with 0.26.4.

0.26.4 - Administration consistency and backend rotation reliability

Current direction: 0.26.3 -> 0.26.4

  • Add 404-host forms to the session-only draft workflow.
  • Complete Polish translations for the Button style appearance setting.
  • Align toolbar search/filter input height with the active button style.
  • Reuse the vhost Enabled control styling in 404 hosts, Redirects and Streams.
  • Replace the Overview-card checkbox list with compact visibility/reorder tiles.
  • Run age-based backend client recycling independently of request arrival.
  • Keep SQLite schema 8 and saved proxy configuration compatibility with 0.26.3.

0.26.3 - Administration appearance and draft workflow polish

Current direction: 0.26.2 -> 0.26.3

  • Make interface scaling global across navigation, workspace, dialogs, overlays and the draft dock; extend the range to 70-125% and make form-control sizing respond more visibly across that range.
  • Make Overview telemetry cards denser without changing responsive breakpoints.
  • Expand chart themes to eight full-palette presets affecting colors, surfaces, grid and line treatment.
  • Restyle the draft dock as a square-corner RustProxy panel without rounded/glass styling.
  • Add a collapse-to-bar state and per-draft age indicator to the session-only draft dock.
  • Add Settings search without rebuilding forms, preserving unsaved values while categories are filtered.
  • Add chart-style palette previews beside the eight chart presets.
  • Add independent Normal/Compact/Ultra table-log density and Overview dashboard density preferences.
  • Add per-account Overview card visibility and ordering controls.
  • Add per-section Appearance resets plus a full Appearance reset while keeping unrelated account preferences intact.
  • Add an account-scoped Normal/Compact button-style selector, with Compact matching the smaller source-style control dimensions independently from global scale, including generated vhost actions and modal tabs.
  • Retain sticky Settings category navigation and unsaved-category indicators.
  • Keep SQLite schema 8 and saved proxy configuration compatibility with 0.26.2.

0.26.2 - Unified logs search and dynamic fields

Completed direction: 0.26.1 -> 0.26.2

  • Add independent in-session editor drafts for Web Server, Vhosts, Redirects and Streams, with minimize/restore/discard actions in a bottom-right dock.

  • Consolidate theme/language/display controls under Settings -> Appearance, replace density modes with an interface-scale slider and persist appearance choices in administrator preferences.

  • Add 12/24-hour timestamp formatting, chart presentation presets and a denser expanded Stored Logs record view.

  • Merge Stored Logs and Live Logs into one top-bar Logs menu.

  • Replace fixed Stored Logs filters with one bounded field-query syntax supporting AND, negation, quotes, wildcards and numeric comparisons.

  • Discover selectable Stored Logs columns from parsed record fields and keep arbitrary safe field choices in account preferences.

  • Parse the built-in RAW error-log line format into basic structured fields while retaining the raw record.

  • Remove the configured-file inventory/source selector from the Logs workspace and keep bounded all-source scanning by default.

  • Move Stored Logs column configuration to the table toolbar and use arrow symbols for backend sort direction.

0.26.1 - Vhost-aware protocol diagnostics and Logs Explorer UX

Current direction: 0.26.0 -> 0.26.1

  • Attribute persistent protocol errors through one shared vhost resolver using routed vhost, authority/Host and SNI in that order.
  • Keep unresolved traffic in _unmatched.jsonl and keep low-level protocol errors out of Live Logs.
  • Add bounded protocol diagnostic identity fields for Stored Logs filtering and inspection.
  • Add selectable Stored Logs columns, sticky headers, highlighted selection and inline details.
  • Hide configured-file inventory by default and repair mapped client-IP/search behavior.
  • Preserve schema 8 and the existing saved proxy configuration format.

0.26.0 - Persistent protocol diagnostics and stored-log explorer

Completed direction: 0.25.7 -> 0.26.0

  • Persist malformed HTTP, TLS/QUIC handshake failures, HTTP/2/HTTP/3 protocol failures, invalid h2c attempts and connection-limit rejects through the existing bounded logging sink.
  • Keep low-level protocol failures out of the Live Logs memory ring so hostile scans cannot displace ordinary live request history.
  • Add a local read-only Logs explorer with bounded server-side filtering and pagination over configured access/error files.
  • Prevent arbitrary-path browsing and symlink following; enumerate only paths derived from active RustProxy logging configuration.
  • Add /logs dashboard navigation plus a Logging-settings launcher while retaining the existing Live Logs dialog unchanged.
  • Keep schema 8 and configuration compatibility with 0.25.7.

0.25.7 - Vhost operations and backend observability

Current direction: 0.25.6 -> 0.25.7

  • Add a fast vhost enable/disable action to the vhost cards using the existing revisioned save path.
  • Add backend-table search, sorting and account-scoped persisted column visibility preferences to the main dashboard.
  • Style scrollbars for dark and light dashboard themes.
  • Export retry and upstream-client lifecycle metrics for ordinary and Docker backends.
  • Add Grafana panels for backend client generation, age, retry activity and rotations.
  • Make the vhost editor Enabled control visually distinct from ordinary settings.

0.25.6 - Backend memory diagnostics visibility

Current direction: 0.25.5 -> 0.25.6

  • Show upstream client generation, current-generation request count, generation age and total rotations in the main Backends diagnostics table.
  • Reuse the existing /api/events status snapshot refresh path; do not add a second diagnostics polling loop.
  • Keep the 0.25.5 client-generation recycling defaults and configuration compatibility unchanged.

0.25.5 - Traffic country consistency and Revision History styling

Current direction: 0.25.4 -> 0.25.5

  • Use trusted CF-IPCountry when verified Cloudflare client-IP mode is active, with local GeoIP fallback for missing/invalid country headers.
  • Keep country analytics, retained country logging and country policy evaluation on the same verified country source.
  • Align the Revision History dialog with the shared square-corner modal styling and remove duplicated history-only dialog CSS.
  • Add Cloudflare-country trust regression coverage and release/source-contract checks.
  • Extend Prometheus with a live Traffic analytics collector, fixed-cardinality User-Agent/method/source families, country/top-route views and built-in Web Server inventory/source metrics.
  • Extend the bundled Grafana dashboard with a Traffic vhost filter, Web Server request rate, countries, User-Agent families, serving sources, methods, status classes, cache outcomes, capture-state gauges and configured routes.
  • Bound backend Hyper client lifetime with configurable request/age recycling and an upstream HTTP/1 buffer ceiling so sustained traffic can release pool/TLS high-water allocations without a vhost save.

0.25.4 - Configuration history restore

Current direction: 0.25.3 -> 0.25.4

  • Restore an older retained configuration through the normal validation and hot-publish path.
  • Save restore as a new revision without deleting or rewinding existing history.
  • Require current-revision CAS plus administrator session/CSRF and audit restore source/new revision.
  • Add restore action and confirmation to the existing revision-history modal.

0.25.3 - Request policy, correlation and configuration history

Current direction: 0.25.2 -> 0.25.3

  • Add per-vhost HTTP method allow/block policy.
  • Add per-location HTTP method policy, reusable ACL profile, inline IP ACL and country allow/block policy.
  • Enforce host and location policies before upstream selection/connection.
  • Generate one SHA-256 request ID per exchange and forward it unchanged to the backend as X-Request-ID.
  • Persist bounded manual-configuration revision history in SQLite schema 8.
  • Add a calendar/day revision-history modal with change preview in the existing dashboard style.

0.25.2 - Live backup and resumed-session hardening

Current direction: 0.25.1 -> 0.25.2

  • Allow encrypted full-backup creation while RustProxy owns the data-directory process lock.
  • Snapshot SQLite consistently and stage durable files before archive encryption.
  • Preserve only validated relative symlinks that resolve inside the staged data tree, including Certbot live -> archive links.
  • Keep restore offline, validated, staged and atomically activated.
  • Recover transient invalid-origin state in restored/resumed admin tabs with a one-shot same-origin reload, without weakening server Host/Origin/CSRF checks.

0.25.1 - Traffic UX and source modularization

Current direction: 0.25.0 -> 0.25.1

  • Split Traffic into Overview, Clients, Requests and Delivery sub-tabs.
  • Chart every bounded Traffic dimension with donut or horizontal bar visualizations suited to the data shape.
  • Keep every Rust source file at or below 500 lines and keep unit tests outside implementation files.
  • Split oversized dashboard source bundles and the Docker Agent into bounded source modules while preserving behavior and URLs.
  • Guard the Web Server split against dangling attributes and missing htaccess, server_protocol and anyhow::Context imports.

0.25.0 - Web Server foundation

Current direction: 0.24.10 -> 0.25.0

  • Add independent reusable Web Service configuration with name, document root, index list and directory-listing switch.
  • Add Web Service CRUD through the dashboard/API and persist it through the existing revisioned configuration store.
  • Add Reverse Proxy / Web Server source selection to vhost fallback and custom locations without storing Web Server filesystem settings in vhosts.
  • Allow one Web Service to be referenced by multiple vhosts and one vhost to mix Web Server and Reverse Proxy locations.
  • Add GET, HEAD, MIME, Content-Length, streaming, index lookup, directory slash redirect and optional directory listing.
  • Add repeatable per-request directory listing, per-directory index-before-listing behavior, Web Service MIME overrides/default MIME and a default static Cache-Control policy.
  • Organize Web Service editing into General, Routing, MIME, Cache & headers, Delivery, PHP-FPM and Security tabs.
  • Add Web Service try_files, internal/redirect regex rewrites, ordered per-extension/MIME Cache-Control rules, fixed response headers, precompressed .br/.gz delivery and forced-download extensions.
  • Add bounded FastCGI/PHP-FPM execution over Unix sockets or loopback TCP with index.php/front-controller routing and no source fallback on upstream failure; expose advanced bounded limits, Authorization forwarding, custom FastCGI parameters and controlled PHP_VALUE overrides with in-panel syntax documentation.
  • Add explicit symlink policy: deny by default, with Linux-only inside-root following for static files; PHP-FPM remains restricted to deny.
  • Add a bounded .htaccess compatibility layer for common Apache migration rules, including rewrite conditions/rules, directory index/listing, MIME, headers, Expires and PHP AddHandler integration, with a dashboard documentation modal and fail-closed security-sensitive directives.
  • Add one-shot Web Service presets for Static, SPA, PHP generic, WordPress, Drupal, Laravel, Symfony, Joomla, PrestaShop and Downloads, with optional deterministic hardening for common exploit probes/sensitive paths and fingerprint-header stripping.
  • Expose vhost-wide request/active/error/EWMA/traffic metrics for Web Server-only vhosts and fix custom logging mappings for route/cache/transform effective fields.
  • Add bounded per-vhost Traffic analytics, User-Agent logging and opt-in country/GeoIP logging with top-dimension views, effective-client-IP rankings and donut charts for the main dimensions.
  • Keep Web Service dashboard rendering stable when configuration loads before the deferred Web Server UI module and use the existing generic/custom 403 error-page pipeline when directory listing is disabled.
  • Add automatic allocator release and idle HOT-cache waterline trimming so sustained traffic does not require a vhost save/reload to return reclaimable RSS.
  • Add metadata-based ETag/Last-Modified, conditional 304, single Range/If-Range, 206 and 416.
  • Enforce decoded-path validation and document-root confinement; Unix traversal uses openat + O_NOFOLLOW and does not serve symlinks.
  • Keep Web Server inside the existing routing, ACL/auth, custom-header/error-page/security and H1/H2/H3 response pipeline; do not create separate routing/error/cache subsystems.
  • Add unit/source-contract coverage, OpenAPI/UI language coverage and Web Server documentation.
  • Clean README/Docs/CHANGELOG/ROADMAP material, add a canonical docs index, authenticated Markdown Reader, 0.25 specification audit and open-work TODO.
  • Run compiler-enabled ./dev.sh fmt, ./dev.sh check, ./dev.sh test plus live H1/H2/H3/static-file acceptance on the release host.

Web Server follow-up

Future Web Server work must retain the 0.25 split between reusable Web Service configuration and vhost/location source selection.

  • Multipart byte ranges if operational demand justifies them.
  • Named locations without introducing a second URL router.
  • Opt-in PHP PATH_INFO script/path splitting with an unambiguous confinement rule.
  • Race-resistant filesystem confinement for non-Unix targets before enabling local file serving there.
  • Real PHP-FPM release-host acceptance over Unix socket and loopback TCP.

See docs/TODO.md for unresolved work and release acceptance, and docs/ROADMAP_HISTORY.md for completed historical milestones.