Grav is intentionally designed with few requirements. You can easily run Grav on your local computer, as well as 99% of all Web hosting providers. If you have a pen handy, jot down the following Grav system requirements:
Web Server (Apache, Nginx, LiteSpeed, Lightly, IIS, etc.)
PHP 7.3.6 or higher
hmm... that's it really, (but please look at PHP requirements for a smooth experience)!
Grav is built with plain text files for your content. There is no database needed.
A PHP user cache such as APCu, Memcached, or Redis is highly recommended for optimal performance. Not to worry though, these are usually already part of your hosting package!
Grav is so simple and versatile that you don't even need a web server to run it. You can run it directly off the built-in PHP webserver, as long as you're running PHP 7.3.6 or later.
Testing with the built-in webservers is a useful way to check a Grav install and perform some brief development, but it is not recommended for a live site or even for advanced development tasks. We've outlined how in our Installation guide.
Even though technically you do not need a standalone web server, it is better to run one, even for local development. There are many great options available:
Even though most distributions of Apache come with everything needed, for the sake of completeness, here is a list of required Apache modules:
mod_ssl(if you wish to run Grav under SSL)
mod_mpm_itk_module(if you wish to run Grav under its own user account)
You should also ensure you have
AllowOverride All set in the
<VirtualHost> blocks so that the
.htaccess file processes correctly, and rewrite rules take effect.
Although IIS is considered a web server ready to run 'out-of-the-box', some changes need to be made.
To get Grav running on an IIS server, you need to install URL Rewrite. This can be accomplished using Microsoft Web Platform Installer from within IIS. You can also install URL Rewrite by going to iis.net.
Most hosting providers and even local LAMP setups have PHP pre-configured with everything you need for Grav to run 'out-of-the-box'. However, some Windows setups, and even Linux distributions local or on VPS (I'm looking at you Debian!) - ship with a very minimal PHP compile. Therefore, you may need to install or enable these PHP modules:
curl(client for URL handling used by GPM)
ctype(used by symfony/yaml/Inline)
dom(used by grav/admin newsfeed)
gd(a graphics library used to manipulate images)
json(used by Symfony/Composer/GPM)
mbstring(multibyte string support)
openssl(secure sockets library used by GPM)
session(used by toolbox)
simplexml(used by grav/admin newsfeed)
zipextension support (used by GPM)
openssl and (un)zip support you will need to find in the
php.ini file of your Linux distribution for lines like:
and remove the leading semicolon.
apcufor increased cache performance
opcachefor increased PHP performance
yamlPECL Yaml provides native yaml processing and can dramatically increase performance
xdebuguseful for debugging in a development environment
For Grav to function correctly, your web server needs to have the appropriate file permissions to write logs, caches, etc. When using either the CLI (Command Line Interface) or GPM (Grav Package Manager), the user running PHP from the command line also needs to have the appropriate permissions to modify files.
By default, Grav will install with
755 permissions for files and folders, respectively. Most hosting providers have configurations that ensure that a web server running PHP will allow you to create and modify files within your user account. This means that Grav runs out-of-the-box on the vast majority of hosting providers.
However, if you are running on a dedicated server or even your local environment, you may need to adjust permissions to ensure your user and your web server can modify files as needed. There are a couple of approaches you can take.
In a local development environment, you can usually configure your web server to run under your user profile. This way the web server will always allow you to create and modify files.
Change the group permissions on all files and folders so that the web server's group has write access to files and folders while keeping the standard permissions. This requires a few commands to make this work.
First, find out which user Apache runs with by running the following command:
ps aux | grep -v root | grep apache | cut -d\ -f1 | sort | uniq
Now, find out which group this user belongs to by running this command (note: adjust USERNAME with the apache username you found in the previous command)
GROUP to be the group your apache runs under, found in the previous command. [
chgrp -R GROUP . find . -type f | xargs chmod 664 find ./bin -type f | xargs chmod 775 find . -type d | xargs chmod 775 find . -type d | xargs chmod +s umask 0002
If you need to invoke superuser permissions, you would run
find … | sudo xargs chmod … instead.
Grav is developed using PhpStorm, which makes it the best IDE for Grav. However, it does not come for free.
PhpStorm is best suited for PHP developers, including people who write complicated Grav plugins. It offers automated code compilation for Grav (you just need to add Grav and any plugin you use into includes), and many other tools to aid with the code development. It has also good support for formatting twig, yaml, html, js, scss and tailwind.
Although you can get away with Notepad, Textedit, Vi, or whatever default text editor comes with your platform, we recommend using a good text editor with syntax highlighting to make things easier. Here are some recommended options:
Another option if you primarily work with just creating content, is to use a dedicated Markdown Editor. These often are very content-centric and usually provide a live-preview of your content rendered as HTML. There are literally hundreds of these, but some good options include:
Although there are many ways to deploy Grav, the simplest is to copy your local site to your hosting provider. The easiest way to accomplish this is with an FTP Client. There are many available, but some recommended ones include:
Found errors? Think you can improve this documentation? Simply click the Edit link at the top of the page, and then the icon on Github to make your changes.