Install

Works with Drupal: ^10.3 || ^11 || ^12

Using Composer to manage Drupal site dependencies

Alternative installation files

Download tar.gz 142.18 KB
MD5: 0039a19fb77cb7b2c1790d57ba855961
SHA-1: c0360121e4bc74f6a5fcd16516dbc9ba62834e57
SHA-256: 1da8642f8858aa12b8edae79649dcdea0229a32deb256f0cadcf1aa34b920c30
Download zip 252.36 KB
MD5: 0a1bc78834f99db8741dab4d767d6500
SHA-1: e4e603ad754a551de7d3bab30ade39aab3016507
SHA-256: d69fdf0e87bd36e5d9358b8049d69781a7317f4f6998720beda1ac9166bff00b

Release notes

First beta of Live feed. This release adds Drupal 12 support and fixes the bugs found in a code review of the alpha.

Upgrading from 1.0.0-alpha1

  • Run drush updb and drush cr. Hook implementations moved to classes and services changed, so a cache rebuild is required.
  • API change: PATCH requests to the editor endpoint must now carry the changed value of the update as it was loaded. Requests without it are rejected (400). The bundled editor already does this; only custom clients are affected.

Drupal 12

  • All modules declare ^10.3 || ^11 || ^12 (#3632856). Hooks are object-oriented hook classes, with #[LegacyHook] wrappers for Drupal 10.3 and 11.0.
  • Tokens work on Drupal 12, which no longer loads livefeed.tokens.inc.
  • A live blog without an introduction renders on Drupal 12, whose component validation rejected the empty intro prop.
  • Tested on 12.0.0-beta2 with the core module, livefeed_block and livefeed_eca. The Canvas, Pusher and Tool API integrations depend on contrib modules that have no Drupal 12 release yet.

Readers and polling

  • An update set back to draft disappears for readers, by polling and by push.
  • Polling no longer skips an update saved while a poll was running.
  • Push refreshes bypass browser and CDN caches, are no longer dropped during a poll, and updates deleted while waiting behind the new updates button are not inserted.
  • A reader that fell far behind (more than 100 changes, for example a tab that slept for hours) reloads the page instead of fetching the whole live blog. It never skips changes.
  • "Load older updates" no longer skips updates that share their publication time with the oldest update shown, and no longer shows when a pinned update completes the first page.
  • Reader endpoints are not offered to shared caches when the response is personal (a message or cookie). Older pages of a live blog that is live expire as fast as polling, so caches cannot bring back deleted updates.
  • Polling and paging no longer replace each other's dynamic page cache entry. Each switch logged a PHP warning.
  • The reader count requires access to the live blog.

Editors

  • Two editors saving the same update at the same moment no longer overwrite each other: the second one gets the conflict message.
  • Editing an update no longer moves its publication time back by up to 59 seconds. Publishing a draft places it at the top unless a time is entered.
  • Pinning a draft no longer unpins the published pinned update.
  • The publication time is a date and time field. An invalid time is reported instead of being ignored or causing a server error.
  • A double click on Publish no longer publishes the update twice.
  • The ECA "Create post" action no longer escapes token values twice.

Media cleanup

  • Deleting a live blog deletes its updates.
  • Media uploaded for updates are deleted once nothing uses them, and their files become temporary for file cron. Media from the media library and media used elsewhere are kept.
  • Known limitation: media embedded in formatted text elsewhere on the site are not detected and are deleted with the update.

Known issues before a stable release

See TODO.md in the repository. The most important one: a live blog has no unpublished state, so a live blog that is being prepared can be read by anyone with "View livefeeds", which anonymous users get on install.

Created by: immoreel
Created on: 13 Nov 2026 at 21:35 UTC
Last updated: 13 Nov 2026 at 21:35 UTC
Bug fixes

Other releases