Skip to content

Releases: element-hq/element-web

v1.12.11-rc.1

17 Feb 15:27
v1.12.11-rc.1

Choose a tag to compare

v1.12.11-rc.1 Pre-release
Pre-release

🦖 Deprecations

  • Remove UIFeature.BulkUnverifiedSessionsReminder setting (#31943). Contributed by @andybalaam.
  • Remove unused function to auto-rageshake when key backup is not set up (#31942). Contributed by @andybalaam.

✨ Features

  • Room list: update the visuals in order to have better contrast (#32421). Contributed by @florianduros.
  • Set history visibility to "invited" for DMs and new non-public rooms when creating a room (#31974). Contributed by @langleyd.
  • Remove server acl status/summaries from timeline (#32461). Contributed by @langleyd.
  • Update globalBlacklistUnverifiedDevices on setting change (#31983). Contributed by @kaylendog.
  • Add badge for history visibiltity to room info panel (#31927). Contributed by @richvdh.

🐛 Bug Fixes

  • Default useOnlyCurrentProfiles to true (#32524). Contributed by @dbkr.
  • Keep custom theme active after reload (#32506). Contributed by @florianduros.
  • Update font format from 'ttf' to 'truetype' (#32493). Contributed by @all-yall.
  • Fix videos on Firefox (#32497). Contributed by @p1gp1g.
  • Use a dedicated FAQ/help entry for key storage. (#32480). Contributed by @mxandreas.
  • Avoid showing two chat timelines side by side after a call (#32484). Contributed by @robintown.
  • Update screenshot for reactive display name disambiguation (#32431). Contributed by @aditya-cherukuru.
  • Fix Status Bar being unreadable when the user overrides the default OS light/dark theme. (#32442). Contributed by @Half-Shot.
  • fix: Remove state_key: null from Seshat search results (#31524). Contributed by @shinaoka.
  • Fix user pill deserialisation (#31947). Contributed by @t3chguy.

v1.12.11-rc.0

11 Feb 15:12
v1.12.11-rc.0

Choose a tag to compare

v1.12.11-rc.0 Pre-release
Pre-release

🦖 Deprecations

  • Remove UIFeature.BulkUnverifiedSessionsReminder setting (#31943). Contributed by @andybalaam.
  • Remove unused function to auto-rageshake when key backup is not set up (#31942). Contributed by @andybalaam.

✨ Features

  • Update globalBlacklistUnverifiedDevices on setting change (#31983). Contributed by @kaylendog.
  • Add badge for history visibiltity to room info panel (#31927). Contributed by @richvdh.

🐛 Bug Fixes

  • Fix Status Bar being unreadable when the user overrides the default OS light/dark theme. (#32442). Contributed by @Half-Shot.
  • fix: Remove state_key: null from Seshat search results (#31524). Contributed by @shinaoka.
  • Fix user pill deserialisation (#31947). Contributed by @t3chguy.

v1.12.10

10 Feb 16:03
v1.12.10

Choose a tag to compare

✨ Features

  • Support additional_creators in /upgraderoom (MSC4289) (#31934). Contributed by @andybalaam.
  • Update room header icon for world_readable rooms (#31915). Contributed by @richvdh.
  • Show an icon in the room header for shared history (#31879). Contributed by @richvdh.
  • Remove "history may be shared" banner. (#31881). Contributed by @kaylendog.
  • Allow dismissing 'Key storage out of sync' temporarily (#31455). Contributed by @andybalaam.
  • Add resolutions entry for matrix-widget-api to package.json (#31851). Contributed by @toger5.
  • Improve visibility under contrast control mode (#31847). Contributed by @t3chguy.
  • Unread Sorting - Add option for sorting in OptionsMenuView (#31754). Contributed by @MidhunSureshR.
  • Unread sorting - Implement sorter and use it in the room list store (#31723). Contributed by @MidhunSureshR.
  • Allow Element Call widgets to receive sticky events (#31843). Contributed by @robintown.
  • Improve icon rendering accessibility (#31791). Contributed by @t3chguy.
  • Add message preview toggle to room list header option (#31821). Contributed by @florianduros.

🐛 Bug Fixes

  • [Backport staging] Fix room list not being cleared (#32438). Contributed by @RiotRobot.
  • Fix failure to update room info panel on joinrule change (#31938). Contributed by @richvdh.
  • Throttle space notification state calculation (#31922). Contributed by @dbkr.
  • Fix emoji verification responsive layout (#31899). Contributed by @t3chguy.
  • Add patch for linkify to fix doctype handling (#31900). Contributed by @dbkr.
  • Fix rooms with no messages appearing at the top of the room list (#31798). Contributed by @MidhunSureshR.
  • Fix room list menu flashes when menu is closed (#31868). Contributed by @florianduros.
  • Message preview toggle is inverted in room list header (#31865). Contributed by @florianduros.
  • Fix duplicate toasts appearing for the same call if two events appear. (#31693). Contributed by @Half-Shot.
  • Fix ability to send rageshake during session restore failure (#31848). Contributed by @t3chguy.
  • Fix mis-alignment of Threads right panel title (#31849). Contributed by @t3chguy.
  • Unset buttons does not include color inherit (#31801). Contributed by @Philldomd.

v1.12.10-rc.0

03 Feb 13:26
v1.12.10-rc.0

Choose a tag to compare

v1.12.10-rc.0 Pre-release
Pre-release

✨ Features

  • Support additional_creators in /upgraderoom (MSC4289) (#31934). Contributed by @andybalaam.
  • Update room header icon for world_readable rooms (#31915). Contributed by @richvdh.
  • Show an icon in the room header for shared history (#31879). Contributed by @richvdh.
  • Remove "history may be shared" banner. (#31881). Contributed by @kaylendog.
  • Allow dismissing 'Key storage out of sync' temporarily (#31455). Contributed by @andybalaam.
  • Add resolutions entry for matrix-widget-api to package.json (#31851). Contributed by @toger5.
  • Improve visibility under contrast control mode (#31847). Contributed by @t3chguy.
  • Unread Sorting - Add option for sorting in OptionsMenuView (#31754). Contributed by @MidhunSureshR.
  • Unread sorting - Implement sorter and use it in the room list store (#31723). Contributed by @MidhunSureshR.
  • Allow Element Call widgets to receive sticky events (#31843). Contributed by @robintown.
  • Improve icon rendering accessibility (#31791). Contributed by @t3chguy.
  • Add message preview toggle to room list header option (#31821). Contributed by @florianduros.

🐛 Bug Fixes

  • Fix failure to update room info panel on joinrule change (#31938). Contributed by @richvdh.
  • Throttle space notification state calculation (#31922). Contributed by @dbkr.
  • Fix emoji verification responsive layout (#31899). Contributed by @t3chguy.
  • Add patch for linkify to fix doctype handling (#31900). Contributed by @dbkr.
  • Fix rooms with no messages appearing at the top of the room list (#31798). Contributed by @MidhunSureshR.
  • Fix room list menu flashes when menu is closed (#31868). Contributed by @florianduros.
  • Message preview toggle is inverted in room list header (#31865). Contributed by @florianduros.
  • Fix duplicate toasts appearing for the same call if two events appear. (#31693). Contributed by @Half-Shot.
  • Fix ability to send rageshake during session restore failure (#31848). Contributed by @t3chguy.
  • Fix mis-alignment of Threads right panel title (#31849). Contributed by @t3chguy.
  • Unset buttons does not include color inherit (#31801). Contributed by @Philldomd.

v1.12.9

27 Jan 12:51
v1.12.9

Choose a tag to compare

✨ Features

  • Allow local log downloads when a rageshake URL is not configured. (#31716). Contributed by @Half-Shot.
  • Improve icon rendering accessibility (#31776). Contributed by @t3chguy.
  • Show "Bob shared this message" on messages shared via MSC4268 (#31684). Contributed by @richvdh.
  • Update the way we render icons for accessibility (#31731). Contributed by @t3chguy.
  • Switch from css masks to rendering svg (#31681). Contributed by @t3chguy.
  • Support for stable MSC4191 account management action parameter (#31701). Contributed by @hughns.
  • Support for stable m.oauth UIA stage from MSC4312 (#31704). Contributed by @hughns.
  • Switch to Compound icons to replace old icons (#31667). Contributed by @t3chguy.
  • Switch from svg masks to svg rendering in more places (#31652). Contributed by @t3chguy.
  • Switch from svg masks to svg rendering in more places (#31650). Contributed by @t3chguy.
  • Update notification icons using Compound icons (#31671). Contributed by @t3chguy.
  • Memoise ListView context (#31668). Contributed by @t3chguy.
  • Switch emoji picker to use emoji for header icons (#31645). Contributed by @t3chguy.
  • Replace icons with Compound alternatives (#31642). Contributed by @t3chguy.

🐛 Bug Fixes

  • Fix avatar decorations in thread activity centre not being atop avatar (#31789). Contributed by @t3chguy.
  • Fix room settings roles tab getting confused if power level change fails (#31768). Contributed by @t3chguy.
  • Custom themes now import highlights in css (#31758). Contributed by @Philldomd.
  • Use correct translation for url preview settings (#31740). Contributed by @florianduros.
  • Fix error shown if accepting a 3pid invite (#31735). Contributed by @dbkr.
  • Ensure correct focus configuration for Element Call before allowing users to call. (#31490). Contributed by @Half-Shot.
  • Fix emoji font in emoji picker header buttons (#31679). Contributed by @t3chguy.
  • fix flaky test by waiting for chat panel before counting messages (#31633). Contributed by @BillCarsonFr.

v1.12.9-rc.1

20 Jan 14:20
v1.12.9-rc.1

Choose a tag to compare

v1.12.9-rc.1 Pre-release
Pre-release

✨ Features

  • Allow local log downloads when a rageshake URL is not configured. (#31716). Contributed by @Half-Shot.
  • Improve icon rendering accessibility (#31776). Contributed by @t3chguy.
  • Show "Bob shared this message" on messages shared via MSC4268 (#31684). Contributed by @richvdh.
  • Update the way we render icons for accessibility (#31731). Contributed by @t3chguy.
  • Switch from css masks to rendering svg (#31681). Contributed by @t3chguy.
  • Support for stable MSC4191 account management action parameter (#31701). Contributed by @hughns.
  • Support for stable m.oauth UIA stage from MSC4312 (#31704). Contributed by @hughns.
  • Switch to Compound icons to replace old icons (#31667). Contributed by @t3chguy.
  • Switch from svg masks to svg rendering in more places (#31652). Contributed by @t3chguy.
  • Switch from svg masks to svg rendering in more places (#31650). Contributed by @t3chguy.
  • Update notification icons using Compound icons (#31671). Contributed by @t3chguy.
  • Memoise ListView context (#31668). Contributed by @t3chguy.
  • Switch emoji picker to use emoji for header icons (#31645). Contributed by @t3chguy.
  • Replace icons with Compound alternatives (#31642). Contributed by @t3chguy.

🐛 Bug Fixes

  • Fix avatar decorations in thread activity centre not being atop avatar (#31789). Contributed by @t3chguy.
  • Fix room settings roles tab getting confused if power level change fails (#31768). Contributed by @t3chguy.
  • Custom themes now import highlights in css (#31758). Contributed by @Philldomd.
  • Use correct translation for url preview settings (#31740). Contributed by @florianduros.
  • Fix error shown if accepting a 3pid invite (#31735). Contributed by @dbkr.
  • Ensure correct focus configuration for Element Call before allowing users to call. (#31490). Contributed by @Half-Shot.
  • Fix emoji font in emoji picker header buttons (#31679). Contributed by @t3chguy.
  • fix flaky test by waiting for chat panel before counting messages (#31633). Contributed by @BillCarsonFr.

v1.12.9-rc.0

20 Jan 14:04
v1.12.9-rc.0

Choose a tag to compare

v1.12.9-rc.0 Pre-release
Pre-release

✨ Features

  • Allow local log downloads when a rageshake URL is not configured. (#31716). Contributed by @Half-Shot.
  • Improve icon rendering accessibility (#31776). Contributed by @t3chguy.
  • Show "Bob shared this message" on messages shared via MSC4268 (#31684). Contributed by @richvdh.
  • Update the way we render icons for accessibility (#31731). Contributed by @t3chguy.
  • Switch from css masks to rendering svg (#31681). Contributed by @t3chguy.
  • Support for stable MSC4191 account management action parameter (#31701). Contributed by @hughns.
  • Support for stable m.oauth UIA stage from MSC4312 (#31704). Contributed by @hughns.
  • Switch to Compound icons to replace old icons (#31667). Contributed by @t3chguy.
  • Switch from svg masks to svg rendering in more places (#31652). Contributed by @t3chguy.
  • Switch from svg masks to svg rendering in more places (#31650). Contributed by @t3chguy.
  • Update notification icons using Compound icons (#31671). Contributed by @t3chguy.
  • Memoise ListView context (#31668). Contributed by @t3chguy.
  • Switch emoji picker to use emoji for header icons (#31645). Contributed by @t3chguy.
  • Replace icons with Compound alternatives (#31642). Contributed by @t3chguy.

🐛 Bug Fixes

  • Fix avatar decorations in thread activity centre not being atop avatar (#31789). Contributed by @t3chguy.
  • Fix room settings roles tab getting confused if power level change fails (#31768). Contributed by @t3chguy.
  • Custom themes now import highlights in css (#31758). Contributed by @Philldomd.
  • Use correct translation for url preview settings (#31740). Contributed by @florianduros.
  • Fix error shown if accepting a 3pid invite (#31735). Contributed by @dbkr.
  • Ensure correct focus configuration for Element Call before allowing users to call. (#31490). Contributed by @Half-Shot.
  • Fix emoji font in emoji picker header buttons (#31679). Contributed by @t3chguy.
  • fix flaky test by waiting for chat panel before counting messages (#31633). Contributed by @BillCarsonFr.

v1.12.8

13 Jan 14:49
v1.12.8

Choose a tag to compare

🦖 Deprecations

  • Remove element_call.participant_limit config and associated code. (#31638). Contributed by @Half-Shot.

✨ Features

  • Switch to rendering svg icons rather than masking them (#31557). Contributed by @t3chguy.
  • Update history visibility UX (#31635). Contributed by @langleyd.
  • Show correct call icon for joining a call. (#31489). Contributed by @Half-Shot.
  • Update StopGapWidgetDriver to support sticky events (#31205). Contributed by @Half-Shot.
  • Remove release announcements for new sounds & room list (#31544). Contributed by @t3chguy.
  • Add button to restore from backup into /devtools (#31581). Contributed by @mxandreas.
  • Switch to non-solid compound icons for room settings & composer (#31561). Contributed by @t3chguy.
  • Support encrypted state events MSC4362 (#31513). Contributed by @andybalaam.
  • Update prop type & documentation for HistoryVisibleBanner and VM. (#31545). Contributed by @kaylendog.
  • Switch to Compound icons in more places (#31560). Contributed by @t3chguy.
  • Switch to rendering svg icons rather than masking them (#31550). Contributed by @t3chguy.
  • Make AccessibleButton contrast control compatible (#31308). Contributed by @t3chguy.
  • Switch to compound-design-tokens for platform icons (#31543). Contributed by @t3chguy.
  • Switch to rendering svg icons rather than masking them (#31531). Contributed by @t3chguy.
  • Switch to rendering svg icons rather than css masking (#31517). Contributed by @t3chguy.
  • Auto approve matrix rtc member event (m.rtc.member) (sticky events) (#31452). Contributed by @toger5.
  • Size Autocomplete relative to the RoomView height rather than the viewport height (#31425). Contributed by @langleyd.
  • Implement UI for history visibility acknowledgement. (#31156). Contributed by @kaylendog.
  • Export disposing hook from package (#31498). Contributed by @MidhunSureshR.
  • Change header-panel-bg-hover to use var(--cpd-color-bg-action-secondary-hovered) for better custom theming (#31457). Contributed by @th0mcat.
  • Improve icon rendering in iconized context menu (#31458). Contributed by @t3chguy.

🐛 Bug Fixes

  • [Backport staging] Fix space settings visibility tab crashing (#31705). Contributed by @RiotRobot.
  • Fix expand/collapse reply preview not showing in some cases (#31639). Contributed by @t3chguy.
  • Fix bundled font or custom font not applied after theme switch (#31591). Contributed by @florianduros.
  • Add ol override CSS for markdown-body (#31618). Contributed by @niamu.
  • Fix reaction left margin in timeline card (#31625). Contributed by @t3chguy.
  • Open right panel timeline when jumping to event with maximised widget (#31626). Contributed by @t3chguy.
  • Fix Compound Link elements not having an underline. (#31583). Contributed by @Half-Shot.
  • Recalculate mentions metadata of forwarded messages based on message body (#31193). Contributed by @twassman.
  • Fix Room Preview Card Layout (#31611). Contributed by @germain-gg.
  • Fix: WidgetMessaging not properly closed causing side effects and bugs (#31598). Contributed by @BillCarsonFr.
  • Handle cross-signing keys missing locally and/or from secret storage (#31367). Contributed by @uhoreg.
  • fix: Allow wrapping in Banner component. (#31532). Contributed by @kaylendog.
  • Update algorithm for history visible banner. (#31577). Contributed by @kaylendog.
  • Fix styling issue when using EW modules (#31533). Contributed by @florianduros.
  • Prevent history visible banner from displaying in threads. (#31535). Contributed by @kaylendog.
  • Make the feedback icon be the right color in dark theme (#31527). Contributed by @robintown.

v1.12.8-rc.0

06 Jan 14:14
v1.12.8-rc.0

Choose a tag to compare

v1.12.8-rc.0 Pre-release
Pre-release

🦖 Deprecations

  • Remove element_call.participant_limit config and associated code. (#31638). Contributed by @Half-Shot.

✨ Features

  • Switch to rendering svg icons rather than masking them (#31557). Contributed by @t3chguy.
  • Update history visibility UX (#31635). Contributed by @langleyd.
  • Show correct call icon for joining a call. (#31489). Contributed by @Half-Shot.
  • Update StopGapWidgetDriver to support sticky events (#31205). Contributed by @Half-Shot.
  • Remove release announcements for new sounds & room list (#31544). Contributed by @t3chguy.
  • Add button to restore from backup into /devtools (#31581). Contributed by @mxandreas.
  • Switch to non-solid compound icons for room settings & composer (#31561). Contributed by @t3chguy.
  • Support encrypted state events MSC4362 (#31513). Contributed by @andybalaam.
  • Update prop type & documentation for HistoryVisibleBanner and VM. (#31545). Contributed by @kaylendog.
  • Switch to Compound icons in more places (#31560). Contributed by @t3chguy.
  • Switch to rendering svg icons rather than masking them (#31550). Contributed by @t3chguy.
  • Make AccessibleButton contrast control compatible (#31308). Contributed by @t3chguy.
  • Switch to compound-design-tokens for platform icons (#31543). Contributed by @t3chguy.
  • Switch to rendering svg icons rather than masking them (#31531). Contributed by @t3chguy.
  • Switch to rendering svg icons rather than css masking (#31517). Contributed by @t3chguy.
  • Auto approve matrix rtc member event (m.rtc.member) (sticky events) (#31452). Contributed by @toger5.
  • Size Autocomplete relative to the RoomView height rather than the viewport height (#31425). Contributed by @langleyd.
  • Implement UI for history visibility acknowledgement. (#31156). Contributed by @kaylendog.
  • Export disposing hook from package (#31498). Contributed by @MidhunSureshR.
  • Change header-panel-bg-hover to use var(--cpd-color-bg-action-secondary-hovered) for better custom theming (#31457). Contributed by @th0mcat.
  • Improve icon rendering in iconized context menu (#31458). Contributed by @t3chguy.

🐛 Bug Fixes

  • Fix expand/collapse reply preview not showing in some cases (#31639). Contributed by @t3chguy.
  • Fix bundled font or custom font not applied after theme switch (#31591). Contributed by @florianduros.
  • Add ol override CSS for markdown-body (#31618). Contributed by @niamu.
  • Fix reaction left margin in timeline card (#31625). Contributed by @t3chguy.
  • Open right panel timeline when jumping to event with maximised widget (#31626). Contributed by @t3chguy.
  • Fix Compound Link elements not having an underline. (#31583). Contributed by @Half-Shot.
  • Recalculate mentions metadata of forwarded messages based on message body (#31193). Contributed by @twassman.
  • Fix Room Preview Card Layout (#31611). Contributed by @germain-gg.
  • Fix: WidgetMessaging not properly closed causing side effects and bugs (#31598). Contributed by @BillCarsonFr.
  • Handle cross-signing keys missing locally and/or from secret storage (#31367). Contributed by @uhoreg.
  • fix: Allow wrapping in Banner component. (#31532). Contributed by @kaylendog.
  • Update algorithm for history visible banner. (#31577). Contributed by @kaylendog.
  • Fix styling issue when using EW modules (#31533). Contributed by @florianduros.
  • Prevent history visible banner from displaying in threads. (#31535). Contributed by @kaylendog.
  • Make the feedback icon be the right color in dark theme (#31527). Contributed by @robintown.

v1.12.7

16 Dec 14:51
v1.12.7

Choose a tag to compare

✨ Features

  • Replace legacy icons with compound (#31424). Contributed by @t3chguy.
  • Update polls UX to match EX Mobile and improve accessibility (#31245). Contributed by @langleyd.
  • Add option to enable read receipt and marker when user interact with UI (#31353). Contributed by @florianduros.
  • Introduce a hook to auto dispose view models (#31178). Contributed by @MidhunSureshR.
  • Update settings toggles to use consistent design across app. (#30169). Contributed by @Half-Shot.
  • Add ability to the room view to hide widgets (#31400). Contributed by @langleyd.
  • call: Pass the echo cancellation and noise suppression settings to EC (#31317). Contributed by @BillCarsonFr.
  • Tweak rendering of icons for a11y (#31358). Contributed by @t3chguy.
  • Implement new renderNotificationDecoration from module API (#31389). Contributed by @MidhunSureshR.
  • Replace more icons with compound (#31381). Contributed by @t3chguy.
  • Replace more icons with compound (#31378). Contributed by @t3chguy.
  • <Banner/>: Hide Dismiss button if onClose handler is not provided. (#31362). Contributed by @kaylendog.
  • Replace batch of legacy icons with compound design tokens (#31360). Contributed by @t3chguy.
  • MSC4380: Invite blocking (#31268). Contributed by @richvdh.
  • Tweak rendering of icons for accessibility (#31346). Contributed by @t3chguy.
  • Implement a shared Banner component. (#31266). Contributed by @kaylendog.
  • Allow the Login screen to use the dark theme (#31293). Contributed by @richvdh.

🐛 Bug Fixes

  • [Backport staging] Amend e2e normal icon from lock-solid to info (#31559). Contributed by @t3chguy.
  • [Backport staging] Fix CSS specificity causing icon issues in e2e verification (#31548). Contributed by @RiotRobot.
  • [Backport staging] Fix e2e icons in CompleteSecurity & SetupEncryptionBody (#31522). Contributed by @RiotRobot.
  • [Backport staging] Remove an extra paragraph in advanced room settings (#31511). Contributed by @RiotRobot.
  • [Backport staging] Don't show the key storage out of sync toast when backup disabled (#31507). Contributed by @RiotRobot.
  • Fix composer button visibility in contrast colour mode (#31255). Contributed by @t3chguy.
  • Ensure correct room version is used and permissions are appropriately sert when creating rooms (#31464). Contributed by @Half-Shot.
  • Fix e2e icon rendering (#31454). Contributed by @t3chguy.
  • EventIndexer: ensure we add initial checkpoints when the db is first opened (#31448). Contributed by @richvdh.
  • Fix /join <alias> command failing due to race condition (#31433). Contributed by @MidhunSureshR.
  • MessageEventIndexDialog: distinguish indexed rooms (#31436). Contributed by @richvdh.
  • Move EditInPlace out of Form (Fixes: reloading EW on EC url update) (#31434). Contributed by @toger5.
  • Fixes issue where cursor would jump to the beginning of the input field after converting Japanese text and pressing Tab (#31432). Contributed by @shinaoka.
  • Fix widgets getting stuck in loading states (#31314). Contributed by @robintown.
  • Room list: fix room options remaining on room item after mouse leaving (#31414). Contributed by @florianduros.
  • Make RoomList.showMessagePreview configurable by config.json (#31419). Contributed by @florianduros.
  • Fix bug which caused app not to load correctly when force_verification is enabled (#31265). Contributed by @richvdh.
  • Room list: display the menu option on the room list item when clicked/opened (#31380). Contributed by @florianduros.
  • Fix handling of SVGs (#31359). Contributed by @t3chguy.
  • Fix word wrapping in expanded left panel buttons (#31377). Contributed by @t3chguy.
  • Fix aspect ratio on error view background (#31361). Contributed by @t3chguy.
  • Fix failure to request persistent storage perms (#31299). Contributed by @richvdh.
  • Fix calls sometimes not knowing that they're presented (#31313). Contributed by @robintown.