Skip to content

Releases: RaijuMounun/intqual

Release Notes: v1.3.0

Choose a tag to compare

@RaijuMounun RaijuMounun released this 19 Jul 16:56

Release Notes: v1.3.0

Features & Architectural Improvements

  • Privileged Worker Process Architecture for Traceroute:
    The Traceroute functionality has been fundamentally redesigned to adhere to the Principle of Least Privilege. Raw socket network operations that require root access have been isolated into a dedicated, short-lived worker process. You no longer need to run the entire intqual application as root to perform accurate traceroutes.
  • Event-Driven JSONL IPC Streaming:
    The communication bridge between the parent TUI and the worker process is now fully asynchronous. The worker streams telemetry data continuously using JSON Lines (JSONL), drastically reducing latency and providing real-time, incremental rendering on the UI without blocking the main event loop.
  • Asynchronous DNS Resolution:
    DNS lookups have been explicitly decoupled from the privileged network layer. The worker process now only yields raw IP data, while the parent process offloads DNS resolution to concurrent Tokio background tasks.

Bug Fixes & Stability

  • TUI Artifact Prevention on Sudo Prompts:
    Resolved an issue where invoking sudo during raw TUI mode would permanently corrupt terminal layouts. The application now gracefully detaches the alternate screen, issues a synchronous sudo -v challenge to securely prompt for credentials (if necessary), and flawlessly resumes the UI state.
  • Enhanced IPC Error Handling:
    Introduced the IpcError variant to strictly trap and escalate communication breakdowns. Silent failures in inter-process data exchange are eliminated; tokio::process spawn failures, serde_json parse errors, and non-zero OS exit codes are now proactively caught and rendered onto the UI dashboard.
  • General Code Health:
    Resolved static analysis warnings across the intqual-core and CLI crates, collapsing redundant conditionals for a cleaner abstract syntax tree.

Full Changelog: v1.2.0...v1.3.0

Release Notes (v1.2.0)

Choose a tag to compare

@RaijuMounun RaijuMounun released this 19 Jul 14:23

What's New

Features

Traceroute: Implemented asynchronous reverse DNS resolution for hop hostnames to improve network tracing performance. (210bc3e)
Improvements & Refactoring

Bandwidth UI: Enhanced the speed test user interface by implementing flexbox centering for better responsiveness across different screen sizes. (5da62a0)

Distribution & Maintenance

Builds: Addressed distribution issues, specifically resolving build stability for Homebrew. (ab4628e)
CI/CD: Updated the GitHub Actions release workflow (release.yml) for improved deployment pipelines. (b54e8ac)
Arch Linux: Updated the PKGBUILD configuration for optimal package generation. (0ec0885)
Dependencies: Updated Cargo.lock to ensure up-to-date and secure dependencies. (93fa5d2, 8788f16)

Full Changelog: v1.1.0...v1.2.0

Release v1.1.0: The Great Decoupling

Choose a tag to compare

@RaijuMounun RaijuMounun released this 17 Jul 15:30

Release v1.1.0: The Great Decoupling

This release introduces a major architectural milestone for the project. The internal architecture has been entirely rewritten to separate the monolithic structure into a fully decoupled workspace.

This release sets the foundation for future extensibility and provides significantly richer telemetry data for network diagnostics.

Major Architectural Changes (The Great Decoupling)

  • Introduction of intqual-core: The monolithic application has been split into a Cargo Workspace. The core network intelligence engine, diagnostic probes, and business logic are now completely isolated in the intqual-core library.
  • Standalone Engine Usage: Developers can now import intqual-core into their own Rust applications to leverage highly concurrent ICMP, TCP, and Traceroute engines without bringing in any CLI/UI overhead.
  • Strict Encapsulation: The CLI is now a "Thin Client" that interacts with the engine purely through TelemetryEvent data contracts, enforcing strict thread-safety and robust data flow.

Enhanced Diagnostic Precision

  • ICMP Error Telemetry: Previously, detailed ICMP error fields were intercepted but swallowed by the engine. Now, raw ICMP type and code variables from TimeExceeded and DestinationUnreachable packets are extracted and surfaced directly to the UI.
  • Richer Traceroute Hops: Traceroute hops now include a dedicated icmp_error field. When a route fails or drops packets, precise, low-level OS/Network error codes are provided instead of silent timeouts, enabling much faster root-cause analysis.

Performance & Quality Improvements

  • Memory Optimization: Eliminated redundant heap allocations (Arc<String>) inside the high-frequency probe loops (e.g., TracerouteProbe), reducing reference-counting overhead and improving CPU cache locality.
  • Zero Technical Debt: Conducted a thorough codebase audit, resolving all hidden dead_code warnings and YAGNI violations. The engine now compiles with strict zero-warnings policies (-D warnings).
  • CI/CD Upgrades: Release pipelines have been updated to seamlessly handle multi-crate publishing (intqual-core followed by intqual).

For Developers

To use the new core engine in your own Rust project:

[dependencies]
intqual-core = "1.1.0"

Full Changelog: v1.0.9...v1.1.0

Release Notes 1.0.9

Choose a tag to compare

@RaijuMounun RaijuMounun released this 16 Jul 20:48

Full Changelog: v1.0.8...v1.0.9

Intqual v1.0.9 Release Notes

This release focuses on performance improvements, memory and state management optimizations, and resolving structural anti-patterns across the codebase. Additionally, it introduces the "Great Decoupling" design specification, which lays the groundwork for future architectural enhancements.

Performance Improvements

  • UI Optimization: Eliminated redundant heap allocations within the render loop, significantly improving interface fluidity and overall performance.

Refactoring

  • Engine: Identified and resolved various state and performance anti-patterns within the core engine.
  • Network: Addressed multiple anti-patterns related to concurrency, memory, and state management in the network layer, resulting in a more stable and efficient network package.

Documentation

  • Design Specifications: Added a comprehensive architectural design document (great decoupling design spec) that outlines the strategy for separating the core library from the user interface.

Maintenance and Chores

  • Updated the PKGBUILD configuration.
  • Updated Cargo.lock dependencies.

# Intqual Release Notes (v1.0.8)

Choose a tag to compare

@RaijuMounun RaijuMounun released this 12 Jul 22:39

This release introduces massive performance and stability improvements by transitioning the network engine's core to a true asynchronous I/O architecture. Furthermore, it brings enterprise-grade enhancements to bandwidth testing and UI responsiveness.

🚀 New Features & Enhancements

  • Bandwidth Engine Modernization: Replaced the custom raw TCP/TLS socket implementation with reqwest (rustls-tls) for enhanced stability, better cross-platform support, and native HTTP connection pooling.
  • Zero-Copy Upload Stream: Implemented a zero-copy (bytes::Bytes::from_static) approach during upload tests, eliminating the need to clone 2MB payloads into memory. This drastically reduces CPU overhead and memory footprint.
  • Time-Boxed Streaming: Transitioned from fixed-size file downloads to 10-second time-boxed continuous streaming, yielding highly accurate bandwidth saturation measurements.
  • Real-Time UI Progress Tracking: Integrated an O(1) byte counter directly into the upload stream to provide smooth, real-time UI updates, eliminating chunky visual jumps.
  • Enterprise Traceroute: Upgraded the traceroute algorithm to send 3 ICMP packets per TTL instead of one. The UI now calculates and displays the Average RTT (Round Trip Time).
  • Mock Engine (Simulation Mode): Introduced a --mock CLI flag and a MockEngine implementation to generate simulated network data for isolated, offline UI testing.

🛠️ Architecture & Performance

  • True Non-Blocking Async I/O (ICMP): Resolved OS-level thread blocking within ICMP sockets. Implemented tokio::io::unix::AsyncFd for zero-cost async polling on Unix platforms and added a spawn_blocking fallback for Windows to prevent Tokio event loop starvation.
  • Dependency Inversion (UI & Engine): Decoupled the UI from the network engine by introducing a NetworkEngine trait, heavily abstracting core probing operations.
  • UI Deadlock Resolution: Completely asynchronousized Crossterm's blocking keyboard read mechanism using tokio::select! and EventStream.
  • Lock Optimization (RwLock): Replaced Mutex with RwLock for UI state management. This allows the UI to render concurrently while the network engine updates data in the background, significantly reducing FPS drops and eliminating rendering deadlocks.

🐛 Bug Fixes & UX Improvements

  • Rate Limit & Ban Handling: Fixed crashes caused by network bans (e.g., Cloudflare HTTP 429). Added ProbeError::RateLimited and ensured engine workers execute a graceful shutdown.
  • Flash & Return Bug Fixed: The application no longer abruptly returns to the main screen upon bandwidth test failure (e.g., internet disconnection). The error screen now remains locked until explicitly dismissed by the user.
  • Persistent Test Results: Restored the functionality where the last bandwidth speed test results persist on the main dashboard (LatencyDashboardWidget) after returning from the test screen.
  • State Leak & Jitter Fixes: Cleared stale datasets when switching views and resolved a race condition in the Jitter deviation calculation.

🧹 Housekeeping & Chores

  • Resolved project-wide cargo clippy warnings by adopting idiomatic let-chains and collapsing redundant logic.
  • Added a Makefile to standardize the local build workflow.
  • Updated PKGBUILD for Linux packaging.

Full Changelog: v1.0.7...v1.0.8

Release Notes (v1.0.7)

Choose a tag to compare

@RaijuMounun RaijuMounun released this 08 Jul 14:12

What's New in v1.0.7

This release introduces the highly anticipated Traceroute feature, deeply integrated into the TUI with a robust, unprivileged-first architectural design and cross-platform parsing parity.

Features

Interactive Traceroute TUI Widget: Added a new plug-and-play widget to visualize network hops in real-time. Simply press t while on the Ping dashboard to trace the active target, and press Esc to instantly resume the ping engine.
Dedicated RAW Sockets (Linux): Migrated Traceroute from DGRAM to Type::RAW sockets. This bypasses Linux kernel restrictions that silently drop Type 11 (Time Exceeded) ICMP packets and mask identifiers, ensuring 100% accurate hop detection.
Unprivileged Ping Retained: Thanks to the "Dedicated RAW" architecture, the core Ping engine remains strictly unprivileged. Root (sudo) is only required when explicitly executing a Traceroute.

Resilience & Fail-Fast Mechanisms

"CoreEngine Never Dies" Principle: Resolved a critical UI freeze issue. Fatal socket errors (e.g., PermissionDenied when running Traceroute without sudo) are no longer swallowed as timeouts.
Graceful UI Error Recovery: If a privilege error occurs, the orchestrator gracefully halts the probe and displays a red Bento Grid ErrorWidget. The app does not crash; users can press Esc to dismiss the error and safely resume the Ping loop.

Under the Hood

Cross-Platform Parsing Parity: Implemented dynamic IPv4 Header Stripping based on Internet Header Length (IHL). This replaces the static byte offsets in the Windows implementation, unifying the ICMP packet parser across Linux and Windows.
Deep Telemetry Tracing: Injected aggressive tracing::debug! and tracing::warn! hooks deep within the ICMP payload decoding logic to aid in dropped-packet analysis and future network debugging.
Manual ICMP Checksums: Added custom ICMP checksum calculation logic specifically for RAW sockets since the OS no longer computes it automatically.

Full Changelog: v1.0.6...v1.0.7

Release Notes (v1.0.6)

Choose a tag to compare

@RaijuMounun RaijuMounun released this 06 Jul 19:29

In this major architectural release, we have completely overhauled the core engine and the UI rendering pipeline of intqual. Guided by strict adherence to S.O.L.I.D. principles, this release establishes a highly robust, extensible, and fault-tolerant "plug-and-play" architecture.

Key Features & Architectural Improvements

Structural Refactoring (S.O.L.I.D. Enforcement)

  • Decoupled Widget Architecture (OCP): The Terminal User Interface (TUI) rendering loop (draw_ui) has been completely redesigned. The monolithic 400-line procedural drawing logic was dismantled and replaced with an intelligent AppWidget Trait. Existing visualizations are now securely isolated into LatencyDashboardWidget (preserving the unified ICMP/TCP comparative UX) and BandwidthWidget. The system is now fully "Open for Extension, Closed for Modification."
  • Asynchronous Contract Discipline (LSP): Addressed a critical violation in the NetworkProbe trait implementations (PingProbe and TcpProbe). We have eliminated detached, fire-and-forget tokio::spawn background threads. Network futures are now strictly, synchronously awaited within the event loops, ensuring thread determinism and preventing silent task abandonment.

Error Handling Overhaul

  • Eliminated Silent Failures: Deep networking errors and runtime thread panics (e.g., from spawn_blocking) are no longer swallowed by detached tasks. Instead, fatal socket layer exceptions properly bubble up to the CoreEngine. The application now accurately logs hardware or permission-based systemic failures rather than appearing visually unresponsive.

UI / UX Enhancements

  • Telemetry streams for Ping and TCP layers are now consistently and efficiently managed by our new state-driven active widget orchestrator, reducing memory footprint and compositor overhead.

Roadmap

Tip

Next Milestone: Traceroute Integration
In the upcoming release, we will leverage our newly established Plug-and-Play Widget architecture to introduce a highly requested feature: Traceroute Analysis.
By utilizing the abstract AppWidget framework, TracerouteWidget will be seamlessly integrated into the dashboard as a standalone analysis tool, without requiring a single line of modification to the core UI rendering loop.


Included Commits:

  • 8279d9b: refactor(core): enforce SOLID principles for network probes and TUI rendering
  • a712ce7: refactor(core): overhaul error handling and prevent silent probe failures
  • 32a88ad: refactor(core): decouple network probes and redesign UI telemetry merging

Full Changelog: v1.0.5...v1.0.6

Release Notes (v1.0.3)

Choose a tag to compare

@RaijuMounun RaijuMounun released this 04 Jul 13:52

This release introduces significant performance improvements and major architectural upgrades to the network engine, alongside a more robust and responsive user interface. The standout feature of this release is the fully redesigned, concurrent, and time-bounded bandwidth testing module.

Features

  • Advanced Bandwidth Diagnostic Module: Introduced a comprehensive, multi-phase download and upload bandwidth testing suite.
  • Concurrent Worker Pool Architecture: Upgraded the download bandwidth test to utilize a fan-out/fan-in architecture. It now spawns 8 concurrent TCP streams, effectively saturating the network link and completely bypassing TCP Slow Start bottlenecks.
  • Time-Bounded Upload Tests: Implemented a real O(1) memory complexity upload stream that dynamically adapts to strict duration limits.
  • Enhanced UI Integration:
    • Added a contextual panel swap mechanism specifically for the bandwidth diagnostic mode.
    • Implemented anti-jank animations and a clean Bento Grid layout to ensure a fluid experience during heavy network loads.
    • Wired the s key shortcut to seamlessly trigger non-blocking bandwidth tests.

Refactoring & Performance

  • Type Safety & Observability: Implemented strict typestates, strongly-typed errors, and integrated the tracing crate for vastly improved systemic observability.
  • Decoupled Architecture: Fully decoupled the user interface from the underlying bandwidth test logic, fixing critical edge cases where network errors were previously swallowed.
  • State Management & Robustness: Improved network engine robustness and UI state management. Introduced a pause/resume command channel pattern to the CoreEngine.
  • Resource Optimization: Eliminated zombie async tasks and significantly reduced UI heap churn to prevent memory leaks over long sessions.
  • Telemetry Improvements: Introduced Abstract Data Types (ADTs) for multi-telemetry streams and adopted an atomic reporter pattern for accurate and lock-free speed calculations.

Bug Fixes

  • Reverted the Cloudflare bandwidth payload size back to a safe 50MB limit to prevent HTTP 403 Forbidden errors during extended testing.
  • Added application log files (intqual.log) to .gitignore to keep the repository clean.

CI/CD & Infrastructure

  • Fixed release branch naming conventions in automated workflows.
  • Resolved issues related to the crates.io publish pipeline.

Cross-Platform ICMP Architecture Overhaul

Choose a tag to compare

@RaijuMounun RaijuMounun released this 25 Jun 14:19

This release brings a major structural overhaul to how we handle ICMP probes across different operating systems.

Previously, CoreEngine was tightly coupled with socket2 and managed the specifics of both Unix and Windows socket behaviors internally. This led to unnecessary complexity, especially regarding checksum handling.

We’ve now decoupled the OS-specific implementations using the Strategy Pattern and conditional compilation (#[cfg]). CoreEngine is now completely isolated from the underlying socket logic and interacts solely with a new IcmpProvider trait.

What's Changed

  • Unix/macOS (DGRAM Sockets): We now rely on the OS to handle checksum calculations natively, removing manual byte manipulation and ensuring better compatibility with unprivileged execution.
  • Windows (RAW Sockets): Windows maintains its requirement for manual checksum calculation prior to sending, but this logic is now cleanly isolated in its own module.
  • Zero-Cost Abstraction: The DefaultIcmpProvider resolves at compile-time, meaning these architectural improvements introduce zero runtime overhead.
  • Cleaner Core: CoreEngine has been stripped of direct socket2 dependencies, making the main measurement loop significantly easier to read and maintain.

Note: There are no changes to the NetworkMetrics struct or the UI channel logic. Existing error states and behaviors remain consistent.

Intqual v1.0.1 - DevOps & Automation Release

Choose a tag to compare

@RaijuMounun RaijuMounun released this 24 Jun 00:30

Implemented fully automated CI/CD pipelines for Windows (Winget), macOS (Homebrew), and Linux release assets.