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

Symfony Distributed Architecture Admin Laravel Package

giudicelli/symfony-distributed-architecture-admin

Symfony bundle offering a centralized admin interface for distributed architectures. Manage services, nodes, and components from one place, with Symfony integration to simplify monitoring, configuration, control, and day-to-day operations across distributed systems.

View on GitHub
Deep Wiki
Context7

Getting Started

Read this first: it is not a Laravel package. giudicelli/symfony-distributed-architecture-admin is a Symfony-oriented repository (bundle/app skeleton for administering a distributed/microservice architecture). It will not be auto-discovered by Laravel, it does not ship a LaravelServiceProvider, and its runtime assumptions (Symfony Kernel, DI container, routing/security config, possibly Messenger) do not map onto Laravel's container or HTTP kernel. Composer may install it, but "install" is not "integrate."

Minimal steps for a Laravel developer:

  1. Verify what it actually is before touching composer require. Open the repo and read, in this order:
    • composer.json — type (symfony-bundle, project, or library?), require (Symfony major version, PHP constraint), autoload PSR-4 roots.
    • README.md — is this a reusable bundle or a demo/seed app?
    • src/ and config/ — is there a DependencyInjection/*Extension.php, a *Bundle.php, routing YAML, security config?
    • tests/ — presence/absence tells you how much you can trust behavior.
  2. Decide the mode of use. For a Laravel codebase there are only two honest options:
    • Reference architecture (most likely correct): read it, steal the patterns, do not install it.
    • Sidecar service (only if the repo is genuinely a runnable app): run it as its own Symfony process and talk to it over HTTP/queues. Never embed it in a Laravel app.
  3. First use case worth pursuing: use it as a template for an internal admin surface that aggregates state across services — e.g. a read-only dashboard that fans out to your Laravel APIs and shows health/queue/job state per service. Build that surface in Laravel (routes + Blade/Inertia + a small HTTP client layer); use the repo only to sanity-check the shape of the domain model and endpoints.

If you are on a mixed stack and actually run Symfony somewhere, the first real step is: register the bundle in config/bundles.php, import its routing, and confirm the DI extension loads — in that order.

Implementation Patterns

Pattern 1 — Pattern extraction, not dependency. Treat the repo as a specification. For each concern it addresses (service registry, cross-service health checks, admin authz, command/query fan-out), re-implement idiomatically in Laravel:

  • Symfony service/DI wiring → Laravel service provider + bind/singleton + config files.
  • Symfony routing YAML → routes/*.php, Route::prefix('admin')->middleware([...]).
  • Symfony security voters → Laravel Gates/Policies.
  • Messenger/transport → Laravel queues (dispatch, Bus::batch) or an HTTP client to the owning service.
  • Admin UI → Blade + Livewire/Inertia; keep it server-rendered and read-mostly.

Pattern 2 — Sidecar with a thin client. If the repo is a runnable Symfony app:

// config/services.php
'service_admin' => [
    'base_url' => env('SERVICE_ADMIN_URL'),
    'token'    => env('SERVICE_ADMIN_TOKEN'),
    'timeout'  => 5,
],
// A small, boring client — one class, explicit endpoints
final class ServiceAdminClient
{
    public function __construct(private readonly Http $http) {}

    public function services(): array
    {
        return $this->http->baseUrl(config('services.service_admin.base_url'))
            ->withToken(config('services.service_admin.token'))
            ->acceptJson()
            ->timeout(config('services.service_admin.timeout'))
            ->get('/api/services')
            ->throw()
            ->json('data', []);
    }
}

Wrap it behind an interface, cache the read endpoints (Cache::remember(..., 15)), and never let admin-panel latency become your app's latency.

Pattern 3 — Contract-first integration. Whatever the repo exposes, write a Laravel-side DTO + validation layer for the responses. Do not pass raw arrays into views. Distributed admin surfaces rot fast when the upstream schema shifts silently; a DTO gives you one place to break.

Pattern 4 — Degrade, don't fail. Every panel widget should be independently timeout-guarded and independently failing. One dead microservice must render an error card, not a 500 on the whole admin page. Use Http::pool or concurrent requests if the panel fans out to many services.

Pattern 5 — Auth boundary. Admin endpoints are privileged. If you consume a sidecar, the token belongs in config/services.php + .env, never in a controller. If you re-implement, gate everything behind a dedicated admin middleware group and an explicit permission (Gate::define('admin.view-services', ...)).

Gotchas and Tips

  • 0 stars / 0 dependents / unmaintained is the headline risk. There is no support channel, no security advisory history, and no guarantee it runs against your PHP/Symfony versions. Pin to a commit SHA, read every file you install, and assume you own maintenance from day one.
  • Do not let composer require into a Laravel app casually. Composer will happily add Symfony packages; the breakage appears later when autoloaded classes reference a Symfony container or an interface Laravel doesn't implement. Install in a throwaway directory first and inspect the tree with composer show --tree.
  • Package type mismatch is the most common failure. If composer.json has "type": "project", it is not installable as a library at all — it is a seed app to be cloned. Check type before require.
  • type: symfony-bundle does not mean "Laravel compatible." Symfony's Flex recipe auto-configuration is invisible to Laravel; nothing registers itself.
  • Name vs. content drift. Repos with this naming style are frequently a personal experiment or a renamed/abandoned scaffold. Confirm the src/ matches the README's claims; a one-file repo behind that title is a red flag.
  • Debugging without Symfony bin/console. No debug:container, no debug:router. Your debugging surface is composer.json, autoload, and static reading. grep -rn "class .*Bundle" and grep -rn "Extension" map the wiring quickly.
  • Extension points are unlikely to be stable. Interfaces in low-traction bundles change without deprecation. If you must depend on one, wrap it in your own thin adapter so a fork/swap is a single-file change.
  • Timeouts are non-negotiable. Admin panels that aggregate distributed services are exactly where cascading latency shows up. Default Http::timeout(5) and add a per-widget circuit breaker (Cache::put("svc:{$name}:down", true, 30)).
  • Logging and correlation IDs. Inject a request ID in the Laravel client and require the upstream to echo it. Distributed admin panels are undebuggable without it.
  • If you fork it to extract patterns, don't fork the whole thing. Copy the domain model and endpoint shape into a fresh Laravel module; don't carry Symfony config semantics into Laravel where nobody on the team expects them.
  • Licensing check. Before copying code (as opposed to reading it), confirm a license file exists and is compatible. Many zero-star personal repos ship without one.
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.
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route