Version 0.10.0 (2025-12-04)

Added

  • Added cache debugging headers to HTTP responses:

    • X-Cache: MISS header on non-cached responses

    • X-Cache: HIT header on cached responses

    • Age header showing cache age in seconds for cached responses

  • Application dependency resolution with topological sorting to ensure correct initialization order

  • ApplicationSettingsMixin for standardized enable/disable functionality in application settings

  • autoload_dependencies parameter for ApplicationsRegistry.add() to automatically load declared dependencies

  • --strict CLI flag for enforcing strict configuration validation

  • Warning system for misconfigured applications (config exists for unloaded apps)

  • Two-pass configuration parsing to filter applications with enabled: false

  • harp-proxy system command group with config and services subcommands for system inspection:

    • harp-proxy system config displays the compiled configuration (replaces harp-proxy config)

    • harp-proxy system services shows all configured services with their dependencies, aliases, and configuration

  • Added normalized cache key generation for load balancing support:

    • Cache keys now exclude protocol, hostname, and port from URLs

    • Resources accessed via different backend servers share cache entries

    • Implemented via custom AsyncCacheTransport that normalizes URLs

    • Maintains full HTTP RFC compliance including Vary header support

  • Added integration test suites for http_cache application:

    • harp_apps/http_client/tests/with_http_cache/ - Integration tests verifying http_client with http_cache enabled

    • harp_apps/proxy/tests/with_http_cache/ - Integration tests verifying proxy with http_cache enabled

    • Tests verify proper cache behavior, backward compatibility, and isolation between endpoints

  • Added harp.DEBUG flag for enabling debug information output. Set via HARP_DEBUG or DEBUG environment variables. When enabled, error responses include full exception tracebacks. This should not be enabled in production environments as it may expose sensitive information.

Changed

  • BREAKING CHANGE: Removed enable_ui setting from DashboardSettings. Use enabled: false instead to disable the dashboard application entirely. The enabled field from ApplicationSettingsMixin now controls whether the dashboard app is loaded.

  • BREAKING CHANGE: Renamed harp-proxy config command to harp-proxy system config

    • The config command is now a subcommand under the system command group

    • Use harp-proxy system config instead of harp-proxy config

    • All existing options (--raw, --json, --unsecure) continue to work

BREAKING CHANGE: Migrated HTTP client caching from hishel 0.1.x to hishel 1.x with new architecture.

  • New ``http_cache`` application: Cache functionality has been moved to a dedicated http_cache application that depends on http_client. This provides better separation of concerns.

  • Package restructuring: All cache-related code moved from harp_apps.http_client.contrib.hishel.* to harp_apps.http_cache.* (flattened structure)

  • Configuration changes: Cache configuration moved from http_client.cache.* to http_cache.*

  • Updated documentation examples to use new hishel 1.x configuration (policy instead of controller)

  • Cache policy now uses hishel.SpecificationPolicy with CacheOptions instead of hishel.Controller

  • The following cache configuration parameters are no longer available:

    • allow_heuristics - Hishel 1.x strictly follows RFC 9111

    • cacheable_status_codes - Determined by RFC 9111 compliance

    • cacheable_methods → Use http_cache.policy service override with custom CacheOptions.supported_methods

    • allow_stale → Use http_cache.policy service override with custom CacheOptions.allow_stale

  • Cached data from hishel 0.1.x remains fully compatible and readable

  • Note: http_cache uses a temporary workaround in its on_bind event to configure http_client’s transport. This will be replaced with proper cross-app service overrides once issue #806 is implemented

  • If you’re using custom cache configuration, update your config:

    Old (hishel 0.1.x with http_client.cache):

    http_client:
      cache:
        enabled: true
        controller:
          type: hishel.Controller
          arguments:
            allow_stale: false
            cacheable_methods: [GET, HEAD]
    

    New (hishel 1.x with http_cache app):

    http_cache:
      enabled: true
      policy:
        type: hishel.SpecificationPolicy
        # Default CacheOptions are provided by services.yml
        # To customize, override the entire policy service
    
  • Cookiecutter template migrated from Poetry to UV (PEP 621, Python 3.13, hatchling), with enhanced Makefile, improved prompts, and automatic git initialization.

Removed

  • Removed the telemetry application that was sending anonymous usage statistics every 24 hours. This reduces network overhead and eliminates potential privacy concerns for users in regulated environments.

Fixed

  • Fixed application filtering when enabled: false is specified using Pydantic model instances. Previously, the configuration builder only recognized disabled applications when configuration was provided as a dict, not when passed as instantiated settings objects. This caused disabled applications to still be loaded and their services to be registered.

  • Fixed cache status tracking after hishel 1.x migration: proxy controller now reads X-Cache header to determine if response was cached, and stores cache age from Age header when available. Previously, cache status was never recorded because the old from_cache extension no longer exists in hishel 1.x.

  • Fixed test discovery incorrectly including misc/ directory worktree applications in test_all_applications_settings.py

  • Generated projects now properly isolate pytest tests and include correct startup instructions.