oembed
A Craft CMS plugin that turns any pasted URL into a rich embed. Maintained since 2015 with 7K+ active downloads.
Embedding rich media in CMS content used to be a manual, fiddly process. Copy the embed code, paste it in the right place, hope it did not break the layout. I wanted to flip that around: paste a URL, get a preview, save the page, and have it work. The first version was a feasibility test for a client project. It worked, so we used it on every project after.
Overview
oembed is a Craft CMS plugin that takes a website URL and returns an iframe and/or rich page metadata from the source. It supports major services like YouTube, Vimeo, Twitter, Instagram, Google Maps, SoundCloud, MixCloud, blog articles, and many more. There are no buttons or popups to learn. Editors paste a URL into the field and it works. For developers, the same functionality is available through Twig functions and filters when more control is needed in templates.
Origins
The plugin started in 2015. The team I was on at the time was teaching every client the same workflow for embedding media, and every client found it just as awkward as the last. I had a hunch that if we let people paste any link and generated the required markup for them, the whole experience would change.
The first version was scoped narrowly: ship something on a single Craft CMS project for a client to see if it was feasible. It was. After that we used it on every project that came through.
After I left that company I kept maintaining the plugin on my own time. It has survived multiple major releases of Craft CMS, each one requiring updates to track API changes, plugin manifest formats, and shifting conventions in the ecosystem.
Features
- Paste and done. The field is the interaction. No popups or modals.
- Wide provider support. YouTube, Vimeo, Google Maps, Facebook, Twitter, GitHub, Flickr, Wikipedia, and any website that implements the oEmbed format.
- Inline preview. Editors see the embed inline while editing without switching into Live Preview. There is a setting to hide it by default if a project prefers that.
- Built-in caching. Resolved embeds are cached so repeated page loads do not hammer upstream providers.
- GraphQL support. Fields and types exposed through the Craft CMS GraphQL API so headless frontends can query embeds.
- Twig functions and filters. Use the full feature set in templates without creating a field. Useful for footers, dynamic blocks, or programmatic content.
- Broken-URL email notifications. When a previously working URL stops resolving, the plugin emails maintainers so it gets fixed before stakeholders see it on the live site.
- Automatic GDPR support for YouTube and Vimeo. Privacy-friendly embed variants are selected automatically, which removes the editor training that usually surrounds consent and tracking.
Endless data
Behind the field is a full oEmbed payload: images, embed codes, tags, feeds, author info, provider metadata, dimensions, and more. The Twig functions and filters expose all of it, so things like custom cards, structured data, social shares, or related-content blocks become a one-liner in templates.
Reach
The plugin has accumulated 7,000+ active downloads and is used in places I would never have guessed when I started it. I have been pulled into support threads by teams at companies whose names would surprise people, running their blogs, product catalogs, and internal tools on a stack you would not expect. I will not disclose them, but the range of teams using it has been the most rewarding part of maintaining the project.
Lessons Learned
Two things stand out from a decade of keeping this alive:
- API ergonomics decide adoption. Making the URL paste the entire UX, with no configuration or special syntax, is what made it spread inside teams. Editors did not need training.
- Long-term maintenance matters. Most plugins in this niche were abandoned within a couple of years. Continuing to ship updates across multiple Craft CMS major versions is what kept teams confident enough to install it years later.