Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Exchange Rates Laravel Package

ashallendesign/laravel-exchange-rates

A Laravel package for fetching live exchange rates and converting between currencies. It offers a clean, cache-friendly API with multiple drivers, historical rate support, validation rules for currency codes, and built-in caching, making currency conversion easy to add to any Laravel app.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

  • Architecture fit: Unchanged. A thin Laravel wrapper around the exchangeratesapi.io HTTP API, exposing config, a service provider, and likely a facade/DI binding. It fits Laravel applications that need spot FX rates, conversion, and historical rates without building an HTTP client from scratch. It is not a self-contained rate engine — it depends entirely on a third-party SaaS API for data and availability. v7.11.0 introduces no API-surface or behavioural changes; the architecture and vendor coupling are exactly as previously assessed.
  • Integration feasibility: Still low initial effort, but the platform floor has moved. v7.11.0 drops PHP 8.0 and 8.1, so the package now requires PHP 8.2+ (confirm the exact constraint in composer.json, since the release notes state only what was dropped). Applications still on PHP 8.0/8.1 must either pin ^7.10 or upgrade the runtime before adopting this release. Installation, config publishing, API key provisioning, and wrapping the client behind an internal FX service are otherwise unchanged.
  • Technical risk:
    • Vendor dependency (unchanged, still dominant): API pricing, quotas, base-currency restrictions, TLS availability, and terms are controlled by exchangeratesapi.io, not the package. Free tiers are commonly limited to EUR base and low monthly request counts.
    • Platform-compatibility risk (new this release): Dropping PHP 8.0/8.1 in a 7.x minor is normal Laravel-ecosystem practice but is a breaking change for consumers. Any CI matrix, base Docker image, or shared runtime pinned to 8.0/8.1 will fail composer update against v7.11.0. Treat it as breaking and gate the upgrade accordingly.
    • Ecosystem validation (marginally improved): 489 stars and Dependents: 0 on Packagist still mean limited downstream production evidence, but three maintainer-authored PRs, CI extended to PHP 8.5, and proactive Laravel 13 support are meaningful signals of active maintenance and forward compatibility.
    • Maintainer concentration (unchanged): All three PRs are from the single maintainer. Bus-factor and upgrade-lag risk persist, though this release is direct evidence against lag specifically.
    • Financial accuracy (unchanged): Rate precision, rounding, timestamp semantics, and historical consistency must still be validated before any billing, invoicing, or ledger use.
    • Data licensing (unchanged): Confirm that cached and displayed rates comply with the API provider’s terms.
  • Key questions:
    • What is the exact PHP constraint in v7.11.0 (^8.2?) and the full Laravel support matrix — which majors are still supported alongside Laravel 13, and which were dropped?
    • Does Laravel 13 support require a corresponding framework bump that forces an application upgrade, or is the supported range wide enough for the current app version?
    • Is there a documented policy that PHP-version drops ship only in majors, or should consumers expect them in minors and pin defensively?
    • Does the package provide caching, retry, timeout, and typed exception handling, or must those be added around it?
    • Which API plans and currencies are supported, and what are the quota, SLA, and historical-depth limits?
    • What is the test coverage, and are HTTP calls mocked in the package’s own tests?
    • Can the package be swapped for another provider without changing domain code?
    • What is the data freshness and timestamp contract for rates used in financial calculations?

Integration Approach

  • Stack fit: Good fit for Laravel monoliths and modular Laravel services on PHP 8.2+ using Composer, service providers, facades, and the HTTP client — now including forward compatibility with Laravel 13. Less suitable for non-Laravel PHP services or polyglot architectures without an adapter layer, and unavailable to any service still on PHP 8.0/8.1.
  • Migration path: Unchanged in shape. Replace direct Guzzle/Http:: calls or hardcoded rate tables with an internal ExchangeRateService interface, and implement it using this package as the first adapter. This preserves the option to switch to exchangerate.host, OpenExchangeRates, or a treasury feed later. Migrate in this order: non-critical reporting first, then pricing display, then billing only after reconciliation. Add a prerequisite step: reconcile the runtime PHP version before any of this work begins.
  • Compatibility: Verify Composer constraints against the application’s PHP and Laravel versions, cache driver, queue worker, and HTTP client configuration. Specifically for v7.11.0: confirm the PHP floor (8.2), confirm the app’s Laravel major is inside the newly declared supported range, and confirm the CI/test matrix and production base image are on supported runtimes. If the app cannot move off PHP 8.0/8.1 in this cycle, pin ^7.10 deliberately and record the pin as technical debt with a review date.
  • Sequencing:
    1. Runtime audit: inventory PHP versions across CI, containers, and production; confirm 8.2+ everywhere required.
    2. Spike in a non-production environment with a paid or trial API key.
    3. Define the internal FX interface and error semantics before adopting the package.
    4. Store the API key in a secrets manager and separate credentials by environment.
    5. Add a caching layer with explicit TTLs per use case: spot display, daily close, historical lookups.
    6. Add scheduled refresh and persistence for rates used in reporting or billing.
    7. Build contract tests with mocked HTTP responses and failure cases.
    8. Run shadow mode against existing rate sources before cutover.
    9. Add monitoring, quota alerts, and a fallback policy.

Operational Impact

  • Maintenance: The routine is unchanged — Composer updates, Laravel major-version compatibility checks, upstream API schema monitoring — but this release confirms the package tracks new Laravel majors and PHP runtimes promptly, which lowers the upgrade-lag risk previously flagged. The trade-off is that runtime floors move in minor releases, so consumers should pin versions, read changelogs before composer update, and budget for periodic PHP runtime upgrades alongside framework upgrades. A recent release date plus PHP 8.5 CI coverage is positive; a possible fork remains a contingency, not a plan.
  • Support: Community support via GitHub issues only; no commercial SLA. Internal ownership is still required. Document the API provider account owner, key rotation, plan limits, and escalation path. Add the minimum PHP version to the internal dependency register so runtime upgrades are planned rather than discovered during a routine composer update.
  • Scaling: Unchanged and bounded by the API plan, not by Laravel. Per-request calls will exhaust quotas quickly. Use Redis or database caching, precompute rates on a schedule, batch conversions, and queue non-interactive refreshes. For high-traffic checkout or pricing paths, serve rates from local storage and treat the API as a refresh source, not a synchronous dependency.
  • Failure modes: All previously identified modes persist — API outage, quota exhaustion, invalid or expired key, unsupported base currency, provider schema change, HTTP-to-HTTPS restrictions on free plans, timeout, stale cache, and rounding/precision drift. New this release: dependency-resolution failure on PHP 8.0/8.1, which surfaces at build time rather than runtime. Each needs a defined behavior: serve last-known rate with a timestamp, fail closed for billing, or degrade gracefully for display. Rate-limit responses should trigger backoff, not retries in a tight loop.
  • Ramp-up: Low for Laravel developers on a supported runtime — hours to a working integration. Medium for finance-aware engineers — days to validate rate semantics, timestamp handling, precision, and reconciliation. Add a short but real cost for the runtime upgrade if the estate is behind on PHP; that work is a prerequisite, not part of the package integration. The larger cost remains operational: caching policy, fallback behavior, monitoring, and ownership. Allocate time for a runbook and a small proof-of-concept against the chosen API plan before committing.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib