Skip to main content

ChurchCRM System Requirements

ChurchCRM needs three things: PHP 8.4 or 8.5, MySQL 8.4 or MariaDB 10.11 (or newer), and a web server that can rewrite URLs. Apache is the tested server. The Docker image already includes the right PHP.

Windows, including XAMPP, is not a supported system. You may try it. See Windows and XAMPP for what does not work and why we do not help with it.

If something is missing, setup shows a message, and the same check runs again each time a page loads.

Prerequisites are validated at every page load, so if the hosting environment is changed to an incomplete / unsupported model, a notification will appear.

Validation occurs in the getApplicationPrerequisites() function.

Authoritative Requirements Table​

ComponentMinimum VersionRecommendedNotes
PHP8.48.4 or 8.5Required for all core functionality
Web serverApache 2.4 with mod_rewriteApache 2.4+The official Docker images bundle Apache 2.4 + PHP 8.4. nginx is not tested. FrankenPHP exists only as an unsupported example in docker/ — no image is published and CI does not build it
MySQL8.48.4+Or MariaDB 10.11+. The long-term-support (LTS) release
MariaDB10.1110.11+Alternative to MySQL. The long-term-support (LTS) release
PHP memory_limit256MB512MB+1GB+ for larger congregations
Storage500MB1GB+Depends on attachments and data size

Detailed Prerequisites​

PHP 8.4 or Higher​

Status: REQUIRED

ChurchCRM requires PHP 8.4 or higher as the absolute minimum. This requirement is enforced in the application and verified at every page load.

Installation:

  • Shared Hosting (cPanel): Select PHP 8.4 or higher from your hosting control panel
  • Self-Hosted Linux: Follow the steps at Self-Hosted on Rocky Linux

Tested Versions: The application is tested and verified to work with the following PHP versions:

  • PHP 8.4 (minimum supported)
  • PHP 8.5 (safe to run)

For a complete list of tested versions and configurations, see the GitHub Actions CI workflow.

Required PHP Extensions​

Setup checks these on every page load via getApplicationPrerequisites():

  • PHP 8.4+
  • PCRE with UTF-8 (preg_match with the /u flag)
  • mbstring
  • Phar
  • session
  • XML
  • iconv
  • URL rewriting (Apache mod_rewrite, nginx, or LiteSpeed)
  • GD (image create, resample, and PNG)
  • fileinfo
  • cURL
  • gettext
  • ZipArchive (php-zip)
  • mysqli

Composer also requires these PHP extensions: bcmath, PDO, filter, and zlib.

exif, soap, sodium, and intl are not required.

Web Server​

Apache 2.4+ with mod_rewrite

ChurchCRM currently requires Apache's mod_rewrite module for URL routing. While we'd like to deprecate this requirement, it still exists. If you know mod_rewrite is loaded and working on your Apache setup, it is SAFE to ignore this prerequisite during setup.

nginx: not tested, and not a substitute for the Apache rules. ChurchCRM does not read .htaccess on nginx. Each Slim app has its own index.php, and a request for that directory has to reach that file. One location / that sends everything to the root index.php drops /session/begin and the other module URLs.

These directories are separate apps: setup, session, api, v2, admin, finance, kiosk, plugins, external, people, groups, event, fundraiser, ministries, and portal. Include/, cli/, logs/, and tmp_attach/ must not be served. Person and family photos under Images/ must not be served as files.

An unsupported example that encodes those rules is docker/examples/nginx/default.conf. When a new directory with its own index.php is added, that file has to gain a matching location. Use Apache, or the official Docker image, unless you can maintain this yourself. A bare directory URL such as /setup has to redirect to /setup/. Without the slash, setup returns a JSON 404.

Database Server​

MySQL 8.4+ or MariaDB 10.11+

ChurchCRM supports MySQL 8.4 or higher and MariaDB 10.11 or higher: the long-term-support releases that still receive security fixes. Older versions are end of life and are not tested. These versions give you:

  • Modern schema features and compatibility
  • UTF-8mb4 character set support
  • Improved performance and reliability
  • Support for JSON and modern SQL features

Database must support:

  • UTF-8mb4 character set
  • InnoDB storage engine
  • Foreign key constraints

File System Permissions​

These write permissions are validated during setup and at every page load via the getFilesystemPrerequisites() function.

Include/Config Directory​

Path: Include/ directory (contains Config.php)
Permission Required: Writable
Purpose: Store application configuration during setup
Typical Permission: 755 or 775
User: Must be writable by PHP process owner (www-data, apache, or similar)

Images Directory​

Path: Images/ directory
Permission Required: Writable (recursively)
Purpose: Store user uploads and generated images
Typical Permission: 755 or 775
User: Must be writable by PHP process owner
Subdirectories That Must Be Writable:

  • Images/Family/ - Family profile pictures and documents
  • Images/Person/ - Person profile pictures and photos

Temporary Directory​

Path: System temporary directory (usually /tmp on Linux)
Permission Required: Writable
Purpose: PHP session storage, file uploads, temporary operations
Configuration: Controlled by php.ini session settings
Note: Ensure PHP's temporary directory is not mounted as noexec

Character Set and Localization​

PCRE with UTF-8 Support​

Regular expression support with Unicode handling (usually built-in to modern PHP)

UTF-8 Locale Support​

System should support UTF-8 locales for proper text handling

Memory and Performance​

PHP Memory Limit​

  • Minimum: 256MB
  • Recommended: 512MB or higher
  • Larger congregations may need 1GB+

Configuration: memory_limit in php.ini

PHP Max Execution Time​

  • Minimum: 30 seconds
  • Recommended: 60+ seconds for data imports
  • Large reports may need higher values

Configuration: max_execution_time in php.ini

Hosting Environment Considerations​

File Uploads​

Must be enabled and configured:

  • file_uploads = On
  • upload_max_filesize - recommend 10MB+
  • post_max_size - should match or exceed upload_max_filesize

Can't find what you need? Ask in Discord, or open an issue on the ChurchCRM repository.