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

Open Graph Bundle Laravel Package

netgen/open-graph-bundle

Symfony bundle for adding Open Graph meta tags to your pages, so links shared on Facebook, Twitter, and other social networks display rich titles, descriptions, and images. Integrates with eZ Platform and Netgen templates.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit: poor — this is not a Laravel package. Despite the "PHP package" framing, netgen/open-graph-bundle is an eZ Publish legacy extension / eZ Platform (Symfony) bundle. It ships a Symfony Bundle class, semanticized config under ez_platform conventions, Twig templates, and — critically — depends on eZ's content model (Content, Location, ContentView, field type resolution) to decide which Open Graph values to emit. Laravel's equivalents (service providers, config/*.php, Blade, Eloquent) have no overlap. The genuinely reusable portion is a small value-object layer that assembles og:* meta tags — the part that is roughly 40–80 lines of Blade in a Laravel app.

Integration feasibility: not feasible as a dependency; feasible as a reference design. Dropping this into composer.json on a Laravel 10/11 project (PHP 8.1+) will fail or, worse, install and do nothing, since nothing boots the bundle outside a Symfony kernel. Even on Ibexa (the renamed eZ Platform), the package has not released since 2020-04-24 and targets an older Symfony/PHP generation. The realistic integration is a re-implementation: an HasOpenGraph interface on Eloquent models, a presenter that resolves og:title/description/image/url/type, and a Blade partial in the layout head.

Technical risk: high, and concentrated in licensing rather than code quality.

  • License: GPL-2.0 is strong copyleft. For a closed-source SaaS this is usually survivable, but for any distributed Laravel product (white-label, on-prem, marketplace app) it creates a disclosure obligation on the derivative work. Most commercial TPMs should treat this as disqualifying before evaluating anything else.
  • Abandonment: zero releases in ~5 years, 0 dependents, 14 stars. eZ Publish legacy is EOL and eZ Platform has been rebranded Ibexa with a different bundle/config surface. There is no maintainer to accept a patch.
  • Scope mismatch: the package solves eZ content-to-OG mapping. Our problem is Laravel model-to-OG mapping. We would inherit the license and the support burden while using none of the value.
  • Vendor lock-in of the wrong kind: adopting it signals an eZ/Ibexa architectural assumption to the team that isn't true of our stack.

Key questions for the requester:

  1. Is the target application actually Laravel, or is it an Ibexa/eZ estate being described loosely? The answer completely changes the recommendation.
  2. If Ibexa: which major version, and does the 2020 branch still install against it? Validate in a scratch environment before any commitment.
  3. Is the product distributed to third parties or hosted as a service? This determines whether GPL-2.0 is a blocker or a footnote.
  4. What is the actual requirement breadth — just og:title/description/image/url/type plus twitter:card, or per-locale, per-siteaccess, multi-image, and article-specific tags (article:published_time, article:author)? The narrow case costs a day to build; the broad case costs a week. Neither justifies a five-year-old GPL dependency.
  5. Who owns ongoing Open Graph correctness (image aspect ratios, absolute URL generation behind proxies, cache invalidation)? If the answer is "nobody," a vendored dependency is the wrong shape regardless.

Verdict: score of 0.25 is accurate. Use the repository as a specification of which tags matter and how eZ mapped fields to them; do not add it to the dependency graph.

Integration Approach

Stack fit: essentially zero on Laravel. The bundle's runtime assumptions are a Symfony kernel, eZ's repository API for content lookup, Twig for rendering, and YAML semantic config. A Laravel app has none of these. There is no shim worth writing — a compatibility layer would be more code than the feature.

Recommended path — build, don't adopt. Sequence:

  1. Tag specification (0.5 day). Enumerate required properties: og:title, og:description, og:image (+ og:image:width/height/alt), og:url, og:type, og:site_name, og:locale, and the Twitter card equivalents. Decide fallback behaviour per property (site default → model value → omit).
  2. Config + partial (0.5 day). config/open-graph.php holding site defaults and image render dimensions (1200×630); a resources/views/partials/open-graph.blade.php included in the base layout. Keep every value escaped and every URL absolute.
  3. Presenter + contract (1 day). An OpenGraphData value object and a HasOpenGraph interface (openGraphTitle(), openGraphDescription(), openGraphImage(), openGraphType()). Models opt in; a resolver in a middleware or view composer produces the payload. This mirrors what the Netgen bundle does for eZ content, without the eZ content model.
  4. Image handling (1–2 days). Generate or reuse a 1200×630 derivative via the existing storage/imaging pipeline; store the derived URL rather than computing on every render. This is where most real-world OG bugs live.
  5. Locale and multi-site (as needed). Map og:locale and absolute og:url per locale; ensure canonical URLs are proxy-aware (TrustProxies, URL::forceScheme).
  6. Verification. Facebook Sharing Debugger, LinkedIn Post Inspector, opengraph.xyz; add a feature test asserting the rendered head contains the expected tags for each opting-in model.

If the requester is on Ibexa, the sequencing inverts: first prove the 2020 branch installs against the current Ibexa major in a throwaway environment, then decide whether a fork is cheaper than a fresh bundle — because you will be maintaining whichever you pick.

Compatibility notes: PHP constraint in the 2020 release predates PHP 8.1; Symfony constraint predates 5.4/6.x. Modern Laravel (10/11) requires PHP 8.1+ and Symfony 6/7 components. Even if autoloading succeeded, behavioural compatibility is unverified and unsupported.

Migration/exit cost: near zero for the build path — it's our code, in our patterns, under our license. Adopting the bundle instead creates an exit cost the moment we need a tag it doesn't model, since we'd be patching a GPL fork with no upstream.

Operational Impact

Maintenance: the upstream is dormant — no release since April 2020, no dependents, a 14-star community. There is no realistic path to an upstream fix for a PHP 8 or Symfony 6 incompatibility; any patch becomes an internal GPL fork we own forever. By contrast, an in-house Blade partial is ~100 lines with a single owner and no external upgrade treadmill. GPL-2.0 also means any distribution of the product triggers source-availability obligations that legal will want documented.

Support: community-only, effectively none. No vendor, no SLA, no security advisory channel. For a component that renders into every page's <head>, that is an uncomfortable place to have no accountable owner. The in-house alternative routes support to our own on-call, which is at least a known quantity.

Scaling: the OG-tag computation itself is trivially cheap — string assembly on a request that already renders HTML. The real scaling surface is image derivatives (OG requires a specific aspect ratio, and generating 1200×630 renders on demand is a classic origin-thrash source) and cache correctness. Both concerns are identical whether we build or adopt, so they do not favour the dependency. Cache the rendered tag block per entity+locale and purge on content update; serve images from CDN.

Failure modes to plan for:

  • Silent degradation — missing or relative og:image URLs produce broken social previews with no error surfaced in the app. Mitigate with a scheduled crawl or a feature test over a sample of published entities.
  • Proxy/host misconfiguration — og:url and image URLs generated from http://localhost or an internal hostname. Mitigate with TrustProxies + forced scheme and an assertion in CI.
  • Cache poisoning across locales — a cached tag block served to the wrong locale. Key the cache on locale and site.
  • Stale derivatives — image updated, OG image URL unchanged. Version the derivative filename or purge explicitly.
  • Admin-side fatals — only applicable on the eZ path, where a missing field type or content-view override throws in the editor rather than the front end. Another reason not to take that path.
  • License exposure — discovered late in a distribution deal; expensive to unwind.

Ramp-up: for a Laravel engineer, the build path is under a day to first working tags and roughly a week to a polished, tested, multi-locale implementation — no new concepts, only Blade, config, and an interface. The adopt path requires eZ Platform domain knowledge (content model, content views, semantic config) that nobody on a Laravel team has, to operate a package that does less than the thing we'd write. That asymmetry is the whole argument: the dependency's only real asset is its opinion about which tags to emit, and that opinion is readable from the repository in an afternoon.

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.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core