ezsystems/share-buttons-bundle
Symfony bundle that adds social share buttons (Facebook Like/Recommend, Twitter, LinkedIn, Google+, Xing) to applications, including eZ Publish 5.x and eZ Platform. Install via Composer, enable in the kernel, and configure providers per siteaccess in config.yml with default or custom templates.
Architecture fit. The first thing to flag is a category mismatch: despite the "Laravel/PHP package" framing, ezsystems/share-buttons-bundle is a Symfony bundle, not a Laravel package. It has no ServiceProvider, no publishable config/assets, no facade, and no Laravel-style package discovery. It is registered by manually adding new EzSystems\ShareButtonsBundle\EzSystemsShareButtonsBundle() to AppKernel.php — an entry point that has not existed in Symfony since 4.4 and never existed in Laravel. Its configuration model (ez_share_buttons.system.<siteaccess>) is derived from eZ Publish/eZ Platform's siteaccess concept, which only makes sense inside an eZ-based Symfony application. For a Laravel codebase, architectural fit is effectively zero; for a legacy Symfony 2.x/3.x or eZ Platform application, it fits the conventions of that era but not modern ones.
Integration feasibility. Composer installation would succeed only inside a permissive legacy dependency tree. The bundle targets Symfony ≥2.6 with PHP 5.x-era constraints, and its default template instructs the integrator to use the {% stylesheets %} Assetic tag — an extension removed in Symfony 4.0. So even on a Symfony 3.x app, the documented asset path is already on a deprecation cliff. There are zero dependent repositories and five stars, meaning there is no observable production usage to borrow an integration pattern from; we would be the first integrator in years.
Technical risk. High and mostly non-technical in nature:
NOASSERTION is not a license. eZ Systems historically shipped under GPL-2.0, which for a PHP application can carry copyleft implications for distribution. This requires legal review before any code enters the tree — a multi-day gate on a component whose functional value is a few dozen lines of Twig.Key questions for the requester.
NOASSERTION dependency, and is GPL-2.0 acceptable for our distribution model?Recommendation: do not adopt. The functional scope is small enough to reimplement natively (a Blade component or Twig partial plus a config array), which removes the licensing question, the framework-version risk, and the abandonment risk simultaneously.
Stack fit. Two viable paths, and they should be chosen explicitly rather than by default:
<x-share-buttons>) or a small view composer, a config/share-buttons.php file listing enabled providers and URL templates, and a publishable CSS asset. Estimated effort: half a day to one day including tests. This preserves the only real value the bundle offers (a curated provider list and URL-encoding logic) while discarding the Symfony packaging.{% stylesheets %} block with asset() calls, pin the PHP/Symfony constraints, and own it. Budget a maintenance line item rather than assuming upstream fixes.Migration path. There is no upgrade path through this package. Because it is archived and pre-Symfony-4, it is a dead end: adopting it now guarantees a removal task at the next framework upgrade. The lower-risk sequence is to skip adoption entirely and build the replacement first, so no migration debt is created. If a stakeholder insists on the package for a legacy app, scope it as an explicitly temporary shim with a removal ticket filed at the same time.
Compatibility. Assume the following and verify before committing: Symfony 2.6–3.4 range, PHP 5.5–7.x, Assetic templating, eZ siteaccess configuration semantics. It is not compatible with Symfony 5/6/7, PHP 8.x, Symfony Flex, or Laravel of any version. Provider URL schemes are also frozen at 2018: several networks have since deprecated or changed their share endpoints and share-count APIs (notably Facebook's share-count endpoint and Twitter's transition to X), so even the working parts may produce broken links or blank counters.
Sequencing.
NOASSERTION — run in parallel, not as a gate on design.Do not sequence this behind a framework upgrade; it is small enough to be a standalone ticket and should not become a dependency of a larger migration.
Maintenance. Effectively infinite and entirely ours. Upstream is archived, so "maintenance" means owning a fork or owning an in-house replacement. The bundle's surface area is small (templates, a provider list, URL builders), which caps the effort — but it also means the maintenance cost is disproportionate to the value delivered. A native reimplementation of comparable size is easier to maintain than a vendored fork, because it lives in our conventions and our test suite.
Support. None. The repository is read-only; issues cannot be filed, patches cannot be upstreamed, and there is no maintainer to escalate a security report to. Any incident response is internal, with a cold-start cost because nobody on the team will have prior familiarity with the code. This is the dominant operational risk: an unmaintained dependency with no CVE channel is a standing audit finding.
Scaling. Server-side cost is negligible — rendering is static HTML plus provider URLs, so it caches and horizontal-scales like any other template fragment. The real scaling considerations are client-side and third-party: outbound requests to provider CDNs and share-count endpoints, provider rate limiting, and the risk that a blocked or slow provider script degrades page performance or layout. If share counts are ever computed server-side (the bundle does not do this, but stakeholders often assume it does), you inherit a cache-invalidation problem and third-party latency on the critical path. Keep counts client-side or omit them.
Failure modes. Ranked by likelihood:
0. No upstream fix will arrive, and there is no alerting by default.Ramp-up. Near zero technically — any Symfony or Laravel developer reads this codebase in under an hour, and the Twig/Blade work is junior-level. The non-obvious ramp-up is around eZ siteaccess configuration for the Symfony path, and around consent/CSP policy for either path. Net: cheap to learn, expensive to own — the classic profile of a package that should be replaced by a small piece of first-party code.
How can I help you explore Laravel packages today?