Content Revision History
Screenshots
How to install
From the store: install it like any other module, then enable it on the sites that need it in Administration > Modules.
From a jar: deploy through Administration > Modules > Upload a module, or through the provisioning API.
FAQ
Using it
Four steps, all in the editor UI.
1. Turn history on for a page
Open the page in Content Editor and enable Public revision history. Nothing is captured for a page until you do this, which is deliberate: a site with thousands of pages should not accumulate snapshots for all of them.
2. Add the revision list to the page
Drop the Revision history component wherever the list should appear, usually near the foot of the page. It renders nothing until the first revision is recorded, so you can place it before you have anything to show.
Two options on the component:
- Heading shown above the revision list - optional; the default is "Revision history".
- Start with the revision list collapsed - on by default. Visitors see one line they can expand. The revisions stay in the page either way, so collapsing hides them from view but not from search engines or screen readers.
3. Publish the page
Publishing is what captures a snapshot: the module renders the page exactly as a visitor sees it, converts it to Markdown and stores it. This happens in the background, so publishing is no slower than usual.
Publishing again with no change to the text stores nothing new. Snapshots are deduplicated on content, not on how often you publish, so routine republishing costs nothing.
4. Record a revision
A snapshot on its own is not shown to anyone. What visitors see is a Revision you author inside the Revision history component:
- Version label: free text - 1.2, March 2026, Effective 1 April. Whatever convention the page needs.
- Revision date: the date the change became visible, not the date you drafted it.
- What changed: rich text, shown to visitors. This is the part people actually read.
- Change type: Editorial, Substantive or Correction. Editorial means wording only; Substantive means the meaning changed; Correction fixes an error in an earlier revision.
Publish the revision and it appears in the list.
Only revisions you write are shown. Snapshots are captured on every publication, but the public list contains exactly the entries you chose to author. That is what lets a run of typo fixes sit between two milestones without cluttering the history: comparing the two milestones shows the whole difference, and the intermediate publications stay invisible.
What visitors get
A dated list of revisions, newest first, each with its label and your description of what changed. Selecting any two and pressing Compare opens a side-by-side view of the page text as it stood at each point, with the changed words highlighted.
Comparison works between any two revisions, not just consecutive ones, which is the question people usually have: what changed between the version I read in March and today?
Pages the public cannot read
By default the module captures pages anonymously, so a page a visitor cannot open is never captured and its history stays empty. To give restricted pages a history, name an account for the module to render as - see Who capture renders as below, and read the limitation stated there before enabling it.
MIT License
Copyright (c) 2026 - present Florent BOURASSÉ
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.