Version 1.0.0-beta.15
October 19, 2026
Added
googleFontsetting, and agoogleFontkey for each element, to use a Google Fonts family, asFrauncesorFraunces:700. Each family and weight is downloaded once intostorage/runtime/placard/fonts/. Without a weight, each element takes Inter's: Bold title, Medium label, Regular description and meta.- Utilities → Caches can clear the downloaded Google Fonts.
Changed
- A font that can't be drawn falls back to Inter and logs why, instead of failing the card. That covers a missing or unreadable
fontPath, a WOFF2 file on a server whose FreeType can't decode it, and a Google family that doesn't exist.
Version 1.0.0-beta.14
October 19, 2026
Added
- Card previews show a spinner while the image loads, on the same grey as the empty Custom Image placeholder, so a card that's still rendering no longer looks like a blank card.
Changed
- Requests for a card that isn't cached yet render it once. Others arriving meanwhile, like the burst of crawlers a newly shared entry draws, wait for that render instead of each running their own.
Security
- Card URLs only serve entries with a URL of their own. Nested entries and entries in sections without URLs now 404, as their content may not be shown publicly, and stepping through entry IDs could make the server render a card for every entry.
Version 1.0.0-beta.13
October 19, 2026
Added
- SEOmatic and SEOmate get each entry's share image (the Social Image field's choice, or the card) with nothing added to templates. SEOmatic gets it as the entry's SEO, Open Graph and X image. SEOmate gets it as
image,og:imageandtwitter:image, unless a template setsseomate.meta.imageitself.seoPluginsturns this off.
Changed
- With SEOmatic, the image replaces the one its section settings choose, as the README's snippet did. Templates using the snippet keep working, and it can be removed.
- Both plugins cache each page's tags. After updating, clear SEOmatic's or SEOmate's caches (Utilities → Caches) for pages to show the new image before their entries are next saved.
Fixed
- A card's URL now changes whenever the card does. Replacing a background image's file, moving its focal point, or a
DefineCardhandler or related entry changing the text changed the card but not its URL, so a CDN or crawler that had cached the URL kept the old card.
Version 1.0.0-beta.12
October 19, 2026
Security
- Background images from asset fields are only read if they're JPEG, PNG, GIF, WebP or AVIF. Others, including SVG, TIFF and BMP, are skipped with a logged warning and the card falls back to
imagePath. ImageMagick picks a reader from a file's contents, so an editor's upload could reach readers like SVG's.
Changed
- The README recommends a PNG logo.
Version 1.0.0-beta.11
October 19, 2026
Added
imagePathOpacitybackground setting, for theimagePathimage's opacity. Without it, a section'sopacityfor its image field also applied to the fallback image on entries with no image.
Fixed
- The Social Image field listed fields with a hidden label in the entry's layout as blank, such as blank → Photo. They now show the field's name.
Version 1.0.0-beta.10
October 18, 2026
Added
formatsetting, for the file format of served cards. The default,auto, saves cards with a background image as JPEG, several times smaller than PNG for photos, and others as PNG.jpegQualitysets their quality, 85 by default.- Placard's cached cards can be cleared from Utilities → Caches.
Changed
- When an entry's card re-renders, its older cached versions are deleted, so
storage/runtime/og-imagesno longer keeps a copy for every change to the entry or the config. Cards cached before this update stay until the cache is cleared. - Cached cards are kept per site, so a multi-site entry's cards don't overwrite each other.
Version 1.0.0-beta.9
October 18, 2026
Changed
- Background images keep their own transparency, and
opacityscales it, so a transparent PNG works as a pattern over the colour. Opaque images, such as photos, render as before. - The settings page's Preview only shows an entry dropdown when there's more than one entry to pick.
Version 1.0.0-beta.8
October 18, 2026
Added
layoutsetting, for the order elements are drawn in and how they're grouped.betweenspaces groups apart and keeps each together, so[['logoLabel'], ['title', 'description']]puts the logo and label at the top and the title and description at the bottom.logodraws the logo on a row of its own, andlogoLabelbeside the label, as before. Unset, cards draw as they did.meta.gap, now that meta can be moved from last position.alignfor each element and the logo, over the card'salign. A logo beside the label follows the label's.
Version 1.0.0-beta.7
October 16, 2026
Added
stylessetting, for named overrides editors choose between per entry. The Social Image field shows a Style dropdown when there are any, and its settings choose which it offers. Styles apply after section and entry type overrides, and the settings page previews each one.craft.placard.previewImageUrl(entry), asshareImageUrl()but with a card that also renders drafts for logged-in users, for CP templates like a field layout's Template element.
Changed
background.useShareImageuses the custom image or image field picked in the entry's Social Image field. With the card picked, or no field, it still uses the first image inimageFieldHandles.
Version 1.0.0-beta.6
October 15, 2026
Added
label,title,descriptionandmetaeach take an array of their settings:text,show,size,lineHeight,maxLines,uppercase,color,colorField,fontPathandgap. A string still sets the text, andfalsehides the element. InsectionsandentryTypes, an element's array changes only the keys it names.- Line height for each element, as a multiple of the size. It defaults to 1.02, as before, with the extra space now shared above and below each line, as in CSS.
maxLinesanduppercasefor the label, description and meta, which were fixed at 1, 2 and 1 lines and never uppercase.logo,backgroundandbordertake arrays of their settings in the same way, e.g.'border' => ['width' => [8, 0, 0, 0], 'color' => '#f5b400']. A single value sets the logo's path, the background's colour or the border's widths, and'logo' => falsehides the logo.
Deprecated
- The flat element, logo, background and border settings in config (
titleSize,showMeta,logoHeight,backgroundBlur,borderColorand the like). They still work, but use the arrays.useImageAsBackgroundisbackground.useShareImage. The properties stay on the settings model, forDefineCardEvent.
Version 1.0.0-beta.5
October 14, 2026
Added
imageFieldHandles,backgroundImageFieldand the*ColorFieldsettings take nested paths likeseo.seoImage, to read a field inside a Matrix or Content Block field. The first nested entry with a value is used.- The Social Image field lists asset fields inside the entry's Matrix and Content Block fields.
bordersetting, for border widths as one value or CSS-style per side, withborderColorandborderColorField. The text sits inside the border.
Fixed
- The logo is centred on the label's capitals rather than its line box, which sat the label low beside it.
Version 1.0.0-beta.4
October 14, 2026
Added
labelSize,descriptionSizeandmetaSizesettings, alongsidetitleSize.logoHeightsetting. The logo's width follows its proportions.logoPathcan be an SVG. It's drawn at the logo's size, so it stays sharp, on a transparent background.
Version 1.0.0-beta.3
October 14, 2026
Added
paddingsetting, for the inset around the text, as one value or CSS-style per side.gapsetting, for the space between elements.labelGap,titleGapanddescriptionGapsettings, for the space below one element.
Version 1.0.0-beta.2
October 14, 2026
Added
fontPathsetting, to set the font for every element at once. The per-element font settings override it.titleFontPathsetting.backgroundBlursetting.backgroundGrayscalesetting, replacingbackgroundGreyscale.backgroundBlendModesetting, to blend the background image with the canvas colour (multiply,screen,overlayand others).
Changed
craft.placard.shareImageUrl()accepts any value, returningdefault()for anything that isn't an entry.craft.placard.default()returns null whendefaultImagePathisn't set.
Deprecated
displayFontPath. UsetitleFontPath.backgroundGreyscale. UsebackgroundGrayscale.
Version 1.0.0-beta.1
October 13, 2026
Added
- Initial release.
- Social cards generated with Imagick, served from
/og/<entryId>.png. - Configured in
config/placard.php, with overrides per section and entry type. - Card text from object templates, and colours and background image from entry fields.
DefineCardevent to customise cards in PHP.- Social Image field, to choose per entry which image is shared, with a live preview.
craft.placardtemplate helpers.- Settings page preview and
php craft placard/previewconsole command.