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

Routmoute Sirene Bundle Laravel Package

routmoute/routmoute-sirene-bundle

A PHP bundle for working with French SIRENE business registry data. Look up companies by SIREN or SIRET, map INSEE records to usable objects, and integrate official enterprise information into your Symfony or PHP application.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. routmoute-sirene-bundle is a thin client for the French INSEE SIRENE API (SIREN/SIRET legal-entity and establishment lookups). Packages of this shape are low-footprint: a config block, an HTTP client wrapper, DTO mapping, and a framework service definition. That makes it easy to place behind an internal CompanyLookup interface — but also means it brings little architecturally we couldn't own ourselves in ~200 lines. The v1.1.1 change is a single PR updating a default API_URL, i.e. a configuration constant, not a feature or refactor.

Integration feasibility. Trivially installable; the concern is where it binds. The -bundle suffix strongly implies a Symfony Bundle (DI extension + services.yaml), not a Laravel package with a ServiceProvider and publishable config. The request frames this as a Laravel/PHP package; that framing is unverified and is the single biggest feasibility question. If it is Symfony-only, Laravel consumption means either (a) using the framework-agnostic core classes directly and writing our own binding, or (b) not using it at all.

Technical risk.

  • Single-maintainer, low-activity project (lucalbert, this being PR #3, v1.1.0 → v1.1.1). Bus factor of one; no evidence of CI or test coverage in the release notes.
  • Silent behavior change in a patch release. Bumping a default endpoint URL in a PATCH is only a non-breaking change if consumers have overridden it. If we haven't, a routine composer update silently redirects production traffic. That is a red flag on release discipline even if the fix itself is correct.
  • Upstream-driven breakage. The URL change is plausibly a response to INSEE's own API migration. If so, 1.1.0 was broken by default and this patch is a silent repair rather than an enhancement — meaning this package's health is coupled to a public French government API's deprecation schedule, which we do not control.

Key questions.

  1. Is there a Laravel ServiceProvider, or is this Symfony-only? What is the actual composer.json require block (framework packages, PHP constraint)?
  2. What is the old vs. new API_URL, and is it overridable via config / env in both?
  3. Does the package handle INSEE OAuth2 (client credentials, token refresh) or does it expect a pre-fetched bearer token from the caller?
  4. Is there CI, a test suite, and a tagged license? Any automated SIRENE contract test?
  5. What is the maintenance posture — are issues triaged, is there a stated support window, is there a v2 roadmap?

Integration Approach

Stack fit. Uncertain pending question 1. If Symfony-native, it fits a Symfony service cleanly and should be avoided in Laravel. In a Laravel codebase, the pragmatic path is to depend on the package only as a plain-PHP HTTP client (or skip it and write a ~1-file Guzzle client against the documented INSEE endpoints), then register it in our own AppServiceProvider behind our own interface. That keeps the vendor swappable and removes the framework-binding risk entirely.

Migration path. Greenfield: no migration, just pin ^1.1.1 explicitly — do not float ^1.1.0, which is the version that likely shipped the stale URL. Brownfield: treat v1.1.1 as a config change, not a code change. Diff the default URL, verify any published config file we own still points at a live endpoint, and re-run smoke tests against the INSEE sandbox before promoting.

Compatibility. Verify three things against our lockfile before committing: PHP constraint vs. our 8.x matrix, Guzzle/symfony/http-client version range vs. our existing HTTP stack, and PSR-18/PSR-17 conformance if we want to reuse our shared HTTP client (proxy, retries, telemetry). Any of these can turn a "small bundle" into a dependency-resolution fight.

Sequencing.

  1. Read composer.json — settle framework binding and PHP/dependency constraints.
  2. Spike in a scratch app: resolve the client, call the API with a sandbox INSEE key, confirm the new URL responds.
  3. Define an internal CompanyLookup port; wrap the vendor behind it.
  4. Move the endpoint + credentials into env/config we control; never rely on the package default.
  5. Add a contract test (connectivity + response-shape assertion) to CI so the next silent upstream change fails loudly.
  6. Roll to staging, then production behind a feature flag.

Operational Impact

Maintenance. Low ceremony, high vigilance. Expect near-zero upstream churn punctuated by emergency-adjacent patches like this one. Realistically we should budget for either owning a fork or accepting that we will re-verify the INSEE endpoint on every dependency refresh. Given the small code surface, vendoring the client ourselves is a defensible alternative within one sprint.

Support. No commercial support; GitHub issues only, on a repo with a single maintainer. We need an internal runbook covering INSEE auth failure, quota exhaustion, and — importantly — that SIRENE returns HTTP 404 for a non-existent SIREN rather than an empty result. That distinction drives user-facing behavior and is exactly the sort of thing that gets lost without a runbook.

Scaling. Throughput is bounded by INSEE's per-application rate limits, not by this package; the package itself is stateless and horizontally safe. A per-SIREN cache (Redis, TTL keyed to SIRENE's daily refresh) and a nightly bulk-diff job are effectively mandatory — synchronous per-request lookups will hit quota on any meaningful traffic. Treat this package as the transport, not the data strategy.

Failure modes. (1) Upstream endpoint or API-version change — precisely what v1.1.1 patches; (2) OAuth token expiry or credential rotation; (3) silent default-config drift during patch upgrades; (4) rate limiting under load spike; (5) data staleness if we cache too aggressively; (6) abandonment — no successor maintainer, no security patch path.

Ramp-up. A mid-level engineer integrates this in an afternoon. The real cost is domain literacy, not code: SIREN vs. SIRET, legal unit vs. establishment, diffusible / active-vs-closed states, and the INSEE nomenclature. Allocate the learning time to the domain model and the caching layer; the bundle itself will not be where the effort goes.

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.
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core