awcodes/matinee
Matinée is an OEmbed and video field for Filament panels and form builders. It stores video data as JSON, supports YouTube and Vimeo out of the box, allows custom providers, and can force a preview to display.
Build vs. buy on the "embed a video" feature. Matinee collapses a deceptively fiddly feature — URL parsing, provider detection, embed URL construction, aspect-ratio storage, responsive vs. fixed rendering — into a single form field. A PM can price this as a half-day integration against an estimated 3–5 days of in-house build plus ongoing provider-maintenance cost. For most roadmaps, that's a clear buy.
Scoping CMS/admin authoring surfaces. Any feature where an editor references external video — blog posts, product pages, landing pages, course lessons, help-center articles — becomes a one-column, one-field change rather than a media-pipeline project. This directly affects how you estimate content features in a quarter.
Roadmap sequencing around an admin upgrade. The 3.x line spans Filament 4 and 5 from a single version, which materially de-risks a future Filament major upgrade. That is a roadmap input, not just a technical nicety: it means adopting Matinee now does not create a migration cliff at your next admin framework bump.
Deferring the "media library" decision. Matinee is an authoring-time URL field, not a media library. Choosing it lets you ship video embeds without committing to the bigger, more expensive decision (asset storage, transcoding, CDN, DAM vendor). It keeps that door open rather than pre-empting it.
Sizing front-end work in parallel. The stored JSON payload is documented and stable, so front-end implementation can be scoped purely against a known contract while back-end admin work proceeds — a scheduling advantage on small teams.
Roadmap signals it does not support. It won't answer questions about video hosting, transcoding, analytics, playback performance, captions/transcripts, or accessibility compliance for video. Any of those on the roadmap require a different, larger decision.
Adopt when all of the following hold:
@source glob. This is a mandatory prerequisite, not a footnote — sequence it as its own task or the integration stalls at the styling step.Look elsewhere when:
nocookie option exists for YouTube, but broader privacy/consent workflows are your build.Two scenario sizes worth distinguishing up front: a greenfield column is roughly a half-day, no backfill, no cutover. Existing video data in another format is a materially different project — budget a backfill/mapping exercise and validate that the JSON schema is treated as a stable contract before committing.
For executives (one paragraph): Matinee is a small, MIT-licensed Filament form field that lets editors embed YouTube and Vimeo videos by pasting a URL. It replaces an estimated few days of in-house build with roughly half a day of integration, and it deliberately does not commit us to a media-library vendor — it keeps that larger decision open. The trade-off is that it's a single-maintainer open-source package with a small user base, so we treat updates as reviewed changes rather than automatic ones, and we accept that if the maintainer steps away we may fork it (cheap, given the license). It's a well-scoped, low-blast-radius dependency: it touches the admin surface and one database column, not our public runtime.
For engineering (the asks): Confirm the admin is on Filament 4/5 before we commit. Sequence the custom theme + @source glob as an explicit prerequisite — it is the most common place this integration stalls. Add one nullable JSON column with an array/json cast. Pin our PHP floor and review patch releases as diffs. Confirm two things with the maintainer before we build against the JSON schema: whether it's a public contract with a migration path, and what happens when a stored provider is later removed from config — hard failure or graceful degradation. Plan the front-end against the documented payload and the <x-matinee::embed> component, knowing we can swap in our own markup at any time without touching stored data.
The honest framing: this is a good buy for a narrow, well-understood need with a clearly bounded blast radius — and a poor fit for anything that smells like a media library. Say so plainly now; it prevents the most expensive version of this decision later.
How can I help you explore Laravel packages today?