Skip to content
● Grav 2.2 is out: 2x faster cold starts and 96% less memory on big sites. Read the announcement →
Downloads

Everything Grav

Download Grav

Grav Core is the base package with core functionality and a few essential starting pages. Grav Core + Admin also includes the Administration Panel plugin. Both are easy to get started with — check out our Basic Tutorial and Guide to the Administration Panel.

STABLE · v2.2.11 · updated 12 hours ago

Latest stable release

Production-ready. The version we recommend for every new site and every upgrade of an existing one.

Get Started

1

Quick installation

  1. Download either the Grav Core or Grav Core + Admin2 plugin installation package.
  2. Extract the zip file into your webroot.
  3. Point your browser at your local webserver: http://yoursite.com
2

How to install the Admin2 plugin

If you have not already installed the admin plugin, you can do so easily with GPM:

$

This will install the admin plugin plus its dependencies (api & login). After this is complete, point your browser to your Grav installation and you will be prompted to create a new admin user.

Changelog

v2.2.11 Latest 12 hours ago
    • A licence key saved with a stray space in the product slug or the key itself (lightbox-gallery, for example) now works for installs and updates. Spaces are trimmed when a key is saved, and keys already saved that way are read correctly
    • An image pasted into the editor as inline data (a data: image) now shows on the frontend. Grav was turning the + characters in the image data into spaces, which also affected image paths with a + in them such as a+b.png getgrav/grav-premium-issues#628
v2.2.10 4 days ago
    • With images.watermark.watermark_all on, every image now gets the watermark, not only images with a resize or other action. A 1x image made from an @2x file and a framed image are stamped once, and retina alternatives are kept. Thanks @HawkForge #4359 #4360
    • A remote CSS or JS file in the asset pipeline (a CDN stylesheet, for example) now gives up after 5 seconds if its server doesn't answer (set with the new assets.pipeline_remote_timeout option in system.yaml), instead of holding the page until PHP's max_execution_time ends it with a 503. When a remote file can't be downloaded, its group is not cached: that request renders each file as its own tag, and the next request tries the download again
v2.2.9 6 days ago
    • Adding an environment folder such as user/env/<host>/ no longer creates a new security key for that host, which broke forms and sessions signed with the old one. The key stays in user/config, and a copy an earlier version put in an environment folder is moved there
    • A plugin or theme zipped from inside its own folder, or a zip made on macOS with a __MACOSX folder, now installs with bin/gpm direct-install and the admin's install-from-zip instead of failing with "Not a valid Grav package". Thanks @wakqasahmed #2688 #4357
    • Sites on PHP-FPM pools that disable getmypid() (a common hardening) no longer fail when the page index is rebuilt: its temporary database file is named with a random string instead of the process id. The scheduler's whoami() also checks for get_current_user() before calling it
v2.2.8 1 week ago
    • Plugins can react when an image is loaded with the new onImageMediumReset event, for example to queue a watermark or other action on every image from its own metadata
    • Setting only watermark_all for images in system.yaml no longer removes the watermark image, position and scale settings, and the watermark settings can now be edited in the Admin under Images
v2.2.7 1 week ago
    • The scheduler log no longer gets two lines written every minute when no job was due; runs that do work still log their full detail. Thanks @onetrev #4355
    • The compiled config, blueprints and languages caches are written to a temporary file and moved into place, and a damaged one is rebuilt, so a request arriving while the cache is being rewritten no longer fails with a blank error page. Thanks @omega8cc #4356
    • The scheduler's run summary in scheduler.log counted each successful job twice
v2.2.6 2 weeks ago
    • With the logs or cache folder moved by GRAV_LOG_PATH or GRAV_CACHE_PATH, the cache and backup jobs write their output to the moved logs folder, a job's output: can be a log:// path, and bin/grav cache-cleanup and the GPM permission check find the moved cache folder. Thanks @onetrev #4344
    • Scheduler history files older than the retention_days setting are now deleted, instead of collecting forever #4344
v2.2.11 Latest 12 hours ago
    • A licence key saved with a stray space in the product slug or the key itself (lightbox-gallery, for example) now works for installs and updates. Spaces are trimmed when a key is saved, and keys already saved that way are read correctly
    • An image pasted into the editor as inline data (a data: image) now shows on the frontend. Grav was turning the + characters in the image data into spaces, which also affected image paths with a + in them such as a+b.png getgrav/grav-premium-issues#628
v2.2.10 4 days ago
    • With images.watermark.watermark_all on, every image now gets the watermark, not only images with a resize or other action. A 1x image made from an @2x file and a framed image are stamped once, and retina alternatives are kept. Thanks @HawkForge #4359 #4360
    • A remote CSS or JS file in the asset pipeline (a CDN stylesheet, for example) now gives up after 5 seconds if its server doesn't answer (set with the new assets.pipeline_remote_timeout option in system.yaml), instead of holding the page until PHP's max_execution_time ends it with a 503. When a remote file can't be downloaded, its group is not cached: that request renders each file as its own tag, and the next request tries the download again
v2.2.9 6 days ago
    • Adding an environment folder such as user/env/<host>/ no longer creates a new security key for that host, which broke forms and sessions signed with the old one. The key stays in user/config, and a copy an earlier version put in an environment folder is moved there
    • A plugin or theme zipped from inside its own folder, or a zip made on macOS with a __MACOSX folder, now installs with bin/gpm direct-install and the admin's install-from-zip instead of failing with "Not a valid Grav package". Thanks @wakqasahmed #2688 #4357
    • Sites on PHP-FPM pools that disable getmypid() (a common hardening) no longer fail when the page index is rebuilt: its temporary database file is named with a random string instead of the process id. The scheduler's whoami() also checks for get_current_user() before calling it
v2.2.8 1 week ago
    • Plugins can react when an image is loaded with the new onImageMediumReset event, for example to queue a watermark or other action on every image from its own metadata
    • Setting only watermark_all for images in system.yaml no longer removes the watermark image, position and scale settings, and the watermark settings can now be edited in the Admin under Images
v2.2.7 1 week ago
    • The scheduler log no longer gets two lines written every minute when no job was due; runs that do work still log their full detail. Thanks @onetrev #4355
    • The compiled config, blueprints and languages caches are written to a temporary file and moved into place, and a damaged one is rebuilt, so a request arriving while the cache is being rewritten no longer fails with a blank error page. Thanks @omega8cc #4356
    • The scheduler's run summary in scheduler.log counted each successful job twice
v2.2.6 2 weeks ago
    • With the logs or cache folder moved by GRAV_LOG_PATH or GRAV_CACHE_PATH, the cache and backup jobs write their output to the moved logs folder, a job's output: can be a log:// path, and bin/grav cache-cleanup and the GPM permission check find the moved cache folder. Thanks @onetrev #4344
    • Scheduler history files older than the retention_days setting are now deleted, instead of collecting forever #4344