Skip to content
● Grav 2.2.19 and 1.7.53.8 are out with security fixes found by Anthropic's OSS Scanner: update your sites. Read more →
Premium / Revisions Pro
Premium Plugin · v4.0.0

Revisions Pro

Transform your Grav CMS into a professional content management powerhouse with Revisions Pro, offering comprehensive version control for pages and configurations with a modern, unified interface. Track every change, compare versions visually, and restore content with confidence using this revision system that integrates seamlessly into your admin workflow.

Grav 1.7+
Documentation

Everything you need. Nothing you don’t.

Over 7 distinct features and integrations, out of the box.

01
⭐ New - Page Trash Support - Soft-delete pages to a trash bin for easy recovery, with automatic cleanup of old trashed items.
02
Universal Version Control - Track changes across pages, system configurations, and plugin settings with automatic revision creation on every save.
03
Visual Diff Viewer - Compare any two versions side-by-side with syntax highlighting, showing exactly what was added, removed, or modified.
04
One-Click Restoration - Restore any previous version instantly with automatic backup of the current state, ensuring you never lose important changes.
05
Smart Storage Management - Configurable retention policies with automatic cleanup, revision limits per resource, and scheduled maintenance tasks.
06
Multi-Language Support - Full support for multi-language sites with proper tracking of language-specific content revisions.
07
CLI Integration - Powerful command-line tools for maintenance, cleanup, and automation with cron job support for enterprise deployments.
Modern Revision Interface

Modern Revision Interface

Access your revision history through a sleek sliding panel that appears consistently across all content types. The dark-themed UI provides comfortable viewing with responsive design for all devices. View timestamps, authors, file sizes, and perform actions like compare, restore, or delete with custom-styled dialogs.

See exactly what changed between any two versions with our advanced diff viewer. Syntax highlighting for YAML, Markdown, and other formats makes changes crystal clear. Green highlights show additions, red shows deletions, and the side-by-side view makes reviewing changes effortless.

Frequently Asked Questions

The most commonly asked questions about the Revisions Pro plugin

What types of content can be tracked?

Revisions Pro tracks changes to pages (content and frontmatter), system/site configurations, plugin configurations, and theme configurations. Each type can be individually enabled or disabled based on your needs.

How are revisions stored?

Revisions are stored as timestamped files alongside your original content (e.g., page.md.20240130-143022.rev). This approach ensures revisions travel with your content and respect environment-specific paths for configurations.

Can I limit the number of revisions kept?

Yes! Set max_revisions_per_page to automatically limit revisions per resource. When the limit is reached, the oldest revisions are automatically deleted. You can also set age-based cleanup to remove revisions older than a specified number of days.

Does this work with Grav's caching system?

Yes, Revisions Pro is fully compatible with Grav's caching system. The revision tracking happens during the save process and doesn't interfere with page caching or performance.

How do I set up automatic cleanup?

Enable auto_cleanup in the configuration and ensure Grav's scheduler is running via cron. The plugin will automatically clean up old revisions daily at 3 AM. You can also run cleanup manually using the CLI command: bin/plugin revisions-pro cleanup.

Can I restore a revision from months ago?

Yes, as long as the revision hasn't been cleaned up based on your retention policies. When you restore a revision, the current version is automatically backed up first, so you can always undo the restoration if needed.

Does it track who made changes?

Yes! Each revision records the user who made the change, along with the timestamp and file size. This information is displayed in the revision history panel for complete audit trails.

How do I access revisions for different languages?

The plugin automatically detects and properly handles multi-language content. When viewing a page in a specific language through the admin, you'll see only the revisions for that language version. The system correctly handles both default language files (with or without language extension) and language-specific files.

Revisions Pro Changelog

v4.0.0

5 days ago

    • Revisions Pro 4.0 needs Grav 2.2.15 or later, API 1.1.3 or later and Admin 2 2.2.3 or later. Sites still on Grav 1.7 should stay on Revisions Pro 3.0.
    • New Page Revision Storage option. storage: data keeps page revisions in user/data/revisions instead of next to each page file, filed under a permanent id Grav writes into each page folder (.page-id), so a page's history follows it when its folder is renamed, reordered, moved in Admin 2 or moved with git or FTP, and survives the page being deleted. The default, storage: page, keeps revisions next to the page files as before.
    • Deleting one translation of a page in Admin 2 now keeps it in the trash, listed as "German translation of Pricing" next to deleted pages, and restoring it puts the file back into the page, even if the page's folder was renamed or moved since. In storage: data the translation's history stays listed after the delete, ending with a revision marked Deleted.
    • Pages deleted in Admin 2, one at a time or several at once, now go into the trash. Restoring one in storage: data brings its history back with it.
    • Trash page in Admin 2: a Trash item at the bottom of the sidebar, above Settings, with a live count, lists everything in the trash, whole pages and single translations, with restore, permanent delete and Empty trash, filters for pages, translations and language, and a search by title, address or file. The trash button in the Revision History panel stays as a shortcut and shows the same list.
    • Preview an item in the trash without restoring it, on the Trash page and in the Revision History panel's trash view: a deleted translation shows its file, a deleted page shows every language file it held (default language first, with a language switcher), its media with image thumbnails and its child pages. Each file shows its first 200 KB, with a note when it is longer, and the preview can restore the item.
    • The page title of a deleted translation in the trash links to the page in the editor, opened in the deleted language, so you see the page the translation belonged to and can create the translation again. The link follows the page if its folder was renamed or moved since, and isn't shown when the page is gone or you can't read it.
    • Undo a delete: right after deleting a page or a translation in Admin 2, the toast has an Undo button that restores it from the trash, and the delete confirmation says the page can be restored from Trash instead of "This cannot be undone".
    • New bin/plugin revisions-pro page-ids command gives every page folder its id, and with --migrate moves existing page revisions out of the page folders into user/data, keeping their dates. Running it again changes nothing.
    • With storage: data, page folders hold no revision files, so a site that commits user/ to git (or syncs it) no longer picks up a .rev file on every save. Ignore /data/revisions and commit the .page-id files.
    • Restoring a page revision in storage: data first keeps the current content as a revision, and the history marks restored and deleted revisions.
    • A copy of a page starts its own history instead of sharing the original's.
    • Restoring a deleted page refuses with a clear message when another page now uses its address or the folder it was in is gone, instead of overwriting or recreating anything.
    • A restored page's child pages get their page ids back, so their histories reconnect too.
    • A delete in Admin 2 that can't keep the page in the trash is stopped, with an error, instead of deleting the page with nothing kept. A delete that fails after it was kept leaves no trash item and no "Deleted" revision behind.
    • Two saves of one page at the same moment no longer lose each other's history entry, and two deletes or restores at once no longer lose an item from the trash list.
    • The trash list, its count and Empty Trash only take in the items the signed-in user could restore.
    • In the revisions panel the Empty Trash button sits in the trash view's header, out of the bottom corner where a site's floating buttons could cover it, and its dialogs can be used with a keyboard and a screen reader.
    • [security] Restoring a page from the trash to a custom location accepted a folder name such as ../../config, which could write, and with Overwrite delete, folders outside user/pages. Folder names, slugs and parent routes are now single names, the target must be inside the pages folder, and trash item ids are checked.
    • [security] Images, videos, PDFs and other media in a deleted page kept in the trash could be downloaded directly from the site by anyone who knew or guessed the address of the trash item, because Grav lets the web server hand out media files under user/data. Files in the trash are now stored with a .trashed ending, so the web server refuses them, and restoring puts the original names back. Items already in the trash are renamed the first time the trash is opened or listed.
    • [security] Revision and trash endpoints now check the same permissions as the API's pages and config endpoints, including a page's own permissions frontmatter. Before, any signed-in user could list revisions, api.pages.read was enough to read the raw content of configuration revisions, and editors with api.pages.write could not restore revisions at all. Configuration revisions now need api.config.read to list and api.config.write to view or restore.
    • Revision dates in the Admin 2 panel show in your own time zone. They were the server's time read as yours, so a revision saved at 11:57 AM could show as 5:57 PM.
    • Restoring a translation, or a revision, writes into the page's current file for that language, so a page whose template changed since (default to item), or whose default language moved between default.md and default.en.md, no longer ends up with two files for one language.
    • The daily cleanup also removes old configuration revisions on a site where no page revision was ever saved to the old revisions index (any storage: data site); it used to stop without removing anything there.
    • Languages with a region, such as en-us, pt-br or es-us, are now recognised everywhere, so revisions of those pages list, compare and restore correctly.
    • Restoring a revision of a translation writes that translation's file, instead of possibly the page in the site's default language.

v3.0.4

3 weeks ago

    • Restoring a configuration revision saved in Admin 2 now puts back only what that file held, instead of copying every setting into it, which could make an environment's settings hide later changes to the main configuration.
    • Comparing a configuration revision with the current version in Admin 2 no longer shows every default setting as a change.
    • Saving configuration without changing anything no longer adds a duplicate revision when an environment folder exists.
    • In Admin 2 the revisions panel now lists, compares and restores the revisions of the environment picked in the environment selector (with API plugin 1.0.50 or later).

v3.0.3

2 months ago

    • Installing or updating on Grav 2 no longer fails on a dependency that cannot exist there. The plugin still asked for the Grav 1.7 admin plugin, so bin/gpm install stopped with a PHP error, and the Plugins page reported a failed update. On the testing release channel it could go further and install the old admin plugin alongside Admin 2 getgrav/grav-premium-issues#618

v3.0.2

3 months ago

    • Fixed "No valid authentication credentials provided" errors in the admin revisions panel on some hosting setups.

v3.0.1

6 months ago

    • Fixed 500 error on the revisions diff endpoint caused by a missing required argument when constructing the diff engine.

v3.0.0

6 months ago

    • New Grav 2.0 + API + Admin 2.0 support

v2.0.0

1 year ago

    • Added recoverable Trash workspace for deleted pages, including restore/overwrite workflows and configurable retention.
    • Introduced toolbar trash badge and dedicated panel for listing, restoring, and purging deleted pages.
    • Extended configuration/translation options to manage trash retention limits and disable the feature when not needed.

v1.0.0

1 year ago

    • Initial Release...