Skip to content

Releases: mhyrzt/xrat

v0.5.3

11 Jun 18:38

Choose a tag to compare

xrat v0.5.3

GeoIP fixes

  • geoip: endpoint location is now derived from the server address instead of
    the proxy connection. Tested configs previously stored loopback_ipv4 because
    the real-delay stage read the local proxy address (127.0.0.1); the TUI table
    Country column showed - while the detail card showed loopback_ipv4.
  • TUI: placeholder locations are treated as missing geo, so existing
    poisoned rows self-heal from the config address off the critical path without
    affecting first-paint time.

Upgrade notes

  • No new database migrations in this release.
  • Re-run xrat test (or let the TUI re-enrich in the background) to replace any
    loopback_ipv4 locations stored by earlier versions with real geo.

Full Changelog: v0.5.2...v0.5.3

v0.5.2

11 Jun 18:05

Choose a tag to compare

xrat v0.5.2

TUI traffic dashboard

  • TUI: the traffic tab is now a widget dashboard with a live stats tab —
    total download/upload, current throughput, delay, and failed-request counts
    fed through a ring buffer and rendered with a sparkline.
  • TUI: engine-neutral traffic stats sources back the dashboard, plumbed for
    both engines (xray StatsService over gRPC, sing-box Clash API).

API request logging

  • Server: the HTTP API now records each request as a structured event.
  • TUI: a dedicated API logs tab (moved last) splits requests into method,
    path, and status columns; stats-poll self-traffic is hidden from the engine
    and API views everywhere.

Engine logs

  • TUI: sing-box engine log lines are parsed into structured time/level/feed/
    source/message columns with severity colors unified across engines.
  • TUI: the engine feed is deduped, access-log columns are filled, and the
    log card column header stays pinned while scrolling.
  • logs: xrat logs output now labels the feed origin.

View-only clears

  • TUI: view-only log and stats clears (C l, C s) wipe the visible buffer
    without deleting persisted records, kept distinct from the DB clear (C p).

Upgrade notes

  • No new database migrations in this release.

Full Changelog: v0.5.1...v0.5.2

v0.5.1

10 Jun 22:51

Choose a tag to compare

xrat v0.5.1

Performance

  • TUI: instant first paint. GeoIP location enrichment no longer blocks the
    initial frame — known locations render immediately from the database and
    missing ones fill in progressively in the background.
  • TUI: resolved host geo is now persisted in a database cache, so locations
    survive restarts and unresolvable or untested hosts stop re-resolving on every
    launch.
  • TUI: mutating actions (enable/disable/delete/purge/restore) no longer
    freeze the UI. The reload runs off the event loop, and single-config toggles
    patch the affected row in place instead of reloading everything.
  • TUI: dirty-flag rendering eliminates the constant idle redraw, and the
    engine version probe now runs asynchronously instead of delaying first paint.

Upgrade notes

  • This release adds one database migration (0020_add_geoip_cache) that creates
    the geoip_cache table. It is applied automatically on first run; no manual
    action is required.

Full Changelog: v0.5.0...v0.5.1

v0.5.0

10 Jun 20:26

Choose a tag to compare

xrat v0.5.0

Features

  • TUI: faster boot — GeoIP location enrichment now runs in parallel instead
    of serially, cutting startup latency on large config sets.
  • TUI: new page and jump scroll keys, and long log messages now wrap instead
    of being truncated.
  • Release: release notes are now sourced from .github/RELEASE_NOTE.md when
    present, so the GitHub release body is controlled instead of auto-generated
    from commits.

Fixes

  • Rotation: xrat rotate now no longer selects an untested or known-bad
    config. Manual rotation now requires a passing real-delay result and otherwise
    fails with a clear message pointing at xrat test / xrat scan.
  • Rotation: stopped persisting noisy per-candidate progress events as durable
    log rows; only bounded start/finish events and the test-run summary remain.
  • CLI: dropped the redundant invalid argument: prefix from error output, so
    messages read clearly (e.g. error: no active HTTP or SOCKS inbound; ...).

Upgrade notes

  • No schema or config changes. Manual rotation behavior is stricter: if no
    enabled config has a passing real-delay result, xrat rotate now now reports
    no eligible candidate instead of rotating to an arbitrary config. Run
    xrat test or xrat scan to populate results first.

v0.4.6

10 Jun 00:59

Choose a tag to compare

This release improves MMDB/GeoIP workflows, test-result visibility in the CLI and TUI, Docker/runtime packaging, desktop integration, and cross-platform command behavior.

Highlights

  • Renamed the geoip command namespace to mmdb for clearer GeoLite2 database management. Use xrat mmdb ... for downloads, updates, status, lookup, and backend inspection.
  • Added richer config list test metadata: ICMP, TCP, real-delay, download/upload throughput, endpoint country/location/ASN, failure details, and latest test timestamps are now threaded into list output where available.
  • Improved TUI config tables and detail/runtime cards so probe columns follow configured test stages, hide inactive metrics, show GeoIP metadata, clear stale values while tests are running, and use cleaner label formatting.
  • Improved Docker images by bundling both Xray and sing-box from upstream runtime images instead of relying on only inline Xray download behavior.
  • Improved Linux desktop integration so installed launchers/icons have stable taskbar identity and release/source installs no longer depend on fragile desktop icon symlink layouts.

CLI And Testing

  • xrat mmdb backend can print backend configuration as JSON.
  • MMDB download/update progress now shows the expanded source URL and has more stable multi-download progress rendering.
  • MMDB lookup now resolves hostnames before local lookup so domain endpoints can receive country/city/ASN enrichment.
  • xrat list config now exposes latest test fields in human/JSON output and conditionally shows metric columns from enabled test settings.
  • Test command output hides disabled metric columns instead of reserving empty columns for skipped stages.
  • Proxy shell handling and ICMP ping flags are more portable across Unix-like platforms.

TUI

  • Config table probe columns now align with the configured TUI/rotation test stages, so icmp + real-delay no longer shows TCP.
  • Config table/detail views can show ICMP, TCP, real-delay, download, upload, country, city/location, and ASN data when configured or available.
  • Running a TUI test batch clears stale test cells for targeted configs while fresh results are pending.
  • The TUI test bar displays the active configured stage label, such as icmp + real-delay.
  • Detail and runtime card labels no longer include trailing colons.

Install, Docker, And Docs

  • Release archives and install.sh restore desktop icons from the consolidated docs/src/media asset location.
  • Desktop installation now installs/copies desktop entries and icons in a way that avoids broken symlinks.
  • Docker documentation now documents exposed runtime ports and proxy usage more clearly.
  • Documentation media assets were consolidated under docs/src/media.
  • Backlog documents were reorganized under docs/backlog, with completed/stale notes removed.

Upgrade Notes

  • Replace xrat geoip ... commands with xrat mmdb ....
  • If you install desktop assets manually, use the updated release archive layout documented in the manual install guide.
  • Docker users can rely on the image including both Xray and sing-box runtime binaries.

Full Changelog: v0.4.5...v0.4.6

v0.4.5

08 Jun 01:53

Choose a tag to compare

Highlights

  • Fixed xrat rotate now so it can start an initial runtime when no runtime session is running.
  • Added a CLI fallback so updated clients can recover from older daemons that still return the old replacement-only error.

CLI

  • xrat rotate now no longer fails with no running runtime session to replace when no runtime is active.
  • First-run manual rotation now reports replaced no and old session - while showing the newly started config, session, and PID.
  • When no --config-id is provided for initial rotation startup, xrat selects the lowest enabled config.

Runtime

  • Runtime replacement results now distinguish between replacing an existing session and starting a new one.
  • Initial rotation startup records rotation transition metadata on the newly created runtime session.
  • Timer rotation attempts with no eligible configs now report rotation_no_candidate.

Internal

  • Added regression coverage for rotating with no running runtime session.
  • Updated IPC payloads to allow an absent old session ID.
  • Released package version 0.4.5.

Full Changelog: v0.4.4...v0.4.5

v0.4.4

07 Jun 23:19

Choose a tag to compare

Highlights

  • Enabled automatic proxy rotation by default in newly generated configs.
  • Polished the rotation CLI with clearer enable/disable commands and live manual-rotation progress.
  • Improved TUI clipboard feedback with transient chrome-bar status messages.
  • Tidied xrat event log formatting in both CLI and TUI views.

CLI

  • xrat rotate enable and xrat rotate disable replace the previous volatile rotation start/stop wording.
  • xrat rotate now now streams rotation-related events while candidate testing and replacement are running.
  • xrat rotate now --refresh continues to refresh URL-backed subscriptions before candidate selection.
  • Rotation enable/disable output now shows the config file path and the setting needed to persist the change.
  • xrat logs now uses wider, fixed-width event columns for cleaner table and follow-mode output.

TUI

  • Copying config URIs, subscription URLs, and API subscription URLs now shows success/failure in the chrome bar.
  • Clipboard handling now reuses a thread-local clipboard instance and reports unavailable/write-failure states clearly.
  • The xrat events log tab now aligns time, level, source, and kind columns more consistently.

Docs

  • Updated rotation, daemon, quickstart, deployment, error-code, and architecture docs for default auto-rotation behavior.
  • Updated example config files to include enabled runtime rotation defaults.

Internal

  • Added rotation bulk-test progress events so manual rotation can surface candidate-test progress.
  • Avoid duplicate daemon start event recording when an existing daemon socket is already reachable.
  • Released package version 0.4.4.

Full Changelog: v0.4.3...v0.4.4

v0.4.3

07 Jun 21:34

Choose a tag to compare

Highlights

  • Added a dedicated subscription refresh command: xrat update [SUBS_REF...].
  • Improved TUI background activity feedback for subscription refresh and runtime transitions.
  • Added Updated At visibility for xrat list subscriptions outputs.
  • Standardized TUI wording from Sources to Subscriptions.

CLI

  • New command: xrat update
    • Refresh all subscriptions when no refs are provided.
    • Refresh selected subscriptions by id/ref when refs are provided.
  • xrat list subscriptions now includes updated_at in tabular/script-friendly outputs.

TUI

  • Added live activity indicators while subscription refresh tasks are in flight.
  • Runtime panel now reflects transitional activity states with animated feedback.
  • Added transient bottom chrome-bar completion messages (auto-hide) for background task outcomes.
  • Renamed user-facing labels/prompts from Sources to Subscriptions for consistency.

Docs

  • Added CLI reference page for update.
  • Updated TUI/list/import docs to match new subscription naming and behavior.

Internal

  • Extracted reusable subscription update flow into shared app command logic used by both CLI and TUI.

Full Changelog: v0.4.2...v0.4.3

v0.4.2

07 Jun 16:09

Choose a tag to compare

Highlights

  • Added numbered TUI panel shortcuts for faster dashboard navigation.
  • Updated panel titles to show their matching shortcut numbers.
  • Refreshed TUI documentation for the new keyboard workflow.

TUI

  • Added 14 shortcuts to jump directly between dashboard panels.
  • Updated card titles to display n: shortcut indicators, making available navigation keys visible in the UI.
  • Improved focus handling so numbered shortcuts select the matching panel consistently.

Docs

  • Updated the TUI CLI reference with numbered panel navigation details.

Internal

  • Added parser/keymap and navigation test coverage for numbered TUI shortcuts.
  • Released package version 0.4.2.

Full Changelog: v0.4.1...v0.4.2

v0.4.1

07 Jun 15:55

Choose a tag to compare

v0.4.1

Highlights

  • Added dedicated proxy toggles:
    • xrat proxy shell toggle for shell environment proxy variables.
    • xrat proxy desktop toggle for GNOME desktop proxy settings, with manual proxy mode by default and optional PAC mode via --pac.
  • Added xratui installer shortcut so installed builds can launch the TUI directly with xratui.
  • Made config/subscription CLI output ref-first by hiding internal database IDs in user-facing outputs.

Proxy

  • Moved shell proxy toggling from xrat proxy toggle to xrat proxy shell toggle.
  • Added desktop proxy toggling for GNOME via gsettings.
  • Simplified xrat proxy info so it shows active local endpoints only, without environment variables or toggle hints.
  • Hardened PAC output:
    • Uses concrete loopback proxy destinations instead of 0.0.0.0.
    • Removes DIRECT fallback when a proxy is active.
    • Normalizes hostnames before matching.
    • Resolves hostnames before private IPv4 checks and handles DNS resolution failures safely.

CLI Output

  • list, show, test, status, rotate, and import summaries now prefer stable refs over internal config/subscription database IDs.
  • Machine-readable outputs for config/subscription data now omit internal IDs where refs are the public identifier.
  • Numeric IDs remain accepted as command input for compatibility.

Install & Docs

  • install.sh now installs an xratui shortcut next to the xrat binary.
  • Installer quick start now shows xrat connect <ref>, xrat proxy shell toggle, xrat proxy desktop toggle, and xratui.
  • Updated CLI, proxy, TUI, quickstart, runtime, rotate, and testing docs for ref-first commands and new proxy behavior.