PHPackages                             grrr-amsterdam/simply-static-deploy - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [File &amp; Storage](/categories/file-storage)
4. /
5. grrr-amsterdam/simply-static-deploy

AbandonedArchivedWordpress-plugin[File &amp; Storage](/categories/file-storage)

grrr-amsterdam/simply-static-deploy
===================================

Deploy static WordPress sites easily to an AWS S3 bucket

v2.3.0(3y ago)6610.9k11[9 issues](https://github.com/grrr-amsterdam/simply-static-deploy/issues)[4 PRs](https://github.com/grrr-amsterdam/simply-static-deploy/pulls)1BSD-3-ClausePHPPHP &gt;=7.1

Since Dec 6Pushed 2y ago3 watchersCompare

[ Source](https://github.com/grrr-amsterdam/simply-static-deploy)[ Packagist](https://packagist.org/packages/grrr-amsterdam/simply-static-deploy)[ Docs](https://github.com/grrr-amsterdam/simply-static-deploy/)[ RSS](/packages/grrr-amsterdam-simply-static-deploy/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (3)Versions (34)Used By (1)

Simply Static Deploy
====================

[](#simply-static-deploy)

### This repository is archived

[](#this-repository-is-archived)

❗️ GRRR no longer maintains this plugin.

We recommend using the Pro plan of the [Simply Static](https://simplystatic.com/) plugin. When we started this plugin, it fixed the lack of a deployment feature in Simply Static. Since then, the plugin has been updated, and the Pro plan offers exactly what we were missing.
GRRR has contributed code and features to the Simply Static plugin, and we're happy to see it grow.
We suggest taking a look, it's well worth the investment.

Thanks to everyone who has taken an interest in this plugin!
If you've enjoyed using this plugin or were inspired by it in any way, maybe you'd like to follow our blog, where we write about our work and the things we learn along the way: [grrr.tech](https://grrr.tech/).

---

### Deploy static sites easily to an AWS S3 bucket

[](#deploy-static-sites-easily-to-an-aws-s3-bucket)

- Utilizes the excellent [Simply Static](https://wordpress.org/plugins/simply-static/) plugin for static site generation.
- Adds deployment to S3-compatible storage (AWS S3, DigitalOcean Spaces, ...).
- Adds optional CloudFront CDN invalidation step.
- Steps can be triggered via a simple user interface or programmatically.
- Ability to generate and deploy a single page including recursive option
- Customizable using hooks and actions.

### Developed with ❤️ by [GRRR](https://grrr.nl)

[](#developed-with-️-by-grrr)

- GRRR is a [B Corp](https://grrr.nl/en/b-corp/)
- GRRR has a [tech blog](https://grrr.tech/)
- GRRR is [hiring](https://grrr.nl/en/jobs/)
- [@GRRRTech](https://twitter.com/grrrtech) tweets

#### Generate and deploy user interface

[](#generate-and-deploy-user-interface)

[![Screenshot of Simply Static Deploy plugin interface for WordPress](https://user-images.githubusercontent.com/1799286/107524304-e9c22700-6bb5-11eb-8df1-1ded03b16df0.png)](https://user-images.githubusercontent.com/1799286/107524304-e9c22700-6bb5-11eb-8df1-1ded03b16df0.png)

#### Single page/post deploy user interface

[](#single-pagepost-deploy-user-interface)

[![Screenshot of plugin interface for deploying a single page](https://user-images.githubusercontent.com/884784/177352714-9b42b8b2-33dc-4f99-adf1-572cc9cf6ebb.png)](https://user-images.githubusercontent.com/884784/177352714-9b42b8b2-33dc-4f99-adf1-572cc9cf6ebb.png)

Minimum requirements
--------------------

[](#minimum-requirements)

This plugin requires:

- A minimum PHP version of **7.1**.
- An installed and activated version of the [Simply Static plugin](https://wordpress.org/plugins/simply-static/).

Installation
------------

[](#installation)

This plugin needs to be installed using [Composer](https://getcomposer.org/).

Make sure you have the right installer paths configured in your `composer.json`. This has to be done before requiring the package:

```
"extra": {
  "installer-paths": {
    "wp-content/plugins/{$name}/": ["type:wordpress-plugin"]
  }
}
```

Install via Composer:

```
$ composer require grrr-amsterdam/simply-static-deploy
```

If you're not using Composer in your project yet, make sure to require the [Composer autoloader](https://getcomposer.org/doc/01-basic-usage.md#autoloading). A good place would be in your `wp-config.php`:

```
/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'vendor/autoload.php'; # ‹— add this
require_once ABSPATH . 'wp-settings.php';
```

Usage
-----

[](#usage)

First define `SIMPLY_STATIC_DEPLOY_CONFIG` in your WordPress configuration:

```
define('SIMPLY_STATIC_DEPLOY_CONFIG', [
    'aws' => [
        'key' => '...', # AWS access key
        'secret' => '...', # AWS secret key
        'region' => '...', # AWS region
        'bucket' => '...', # S3 bucket
        'bucket_acl' => '...', # S3 bucket ACL (optional, defaults to `public-read`)
        'distribution' => '...', # CloudFront distribution ID (optional, step is skipped when empty)
        'endpoint' => '...', # For usage with providers other than AWS (optional)
    ],
    'url' => '...', # Website url (used for displaying url after deploy is finished)
]);
```

Then configure the Simply Static plugin via the admin interface. The most important setting to get right is:

- `Delivery Method`: set to `Local Directory` (files are synced to S3, zip won't work)

Other settings which you should pay attention to:

- `Additional URLs`: add any URL the plugin is unable to find
- `Additional Files and Directories`: add additional directories (for example front-end assets)
- `URLs to Exclude`: for example the uploads folder (but only when you're offloading uploads at runtime)

If everything is configured correctly, hit `Generate & Deploy` in the `Deploy` tab.

Documentation
-------------

[](#documentation)

### Features

[](#features)

#### Single post deploy

[](#single-post-deploy)

Pages/posts come with single deploy button, so that a single page can be generated and deployed, see single page/post deploy user interface.

#### Single recursive deploy

[](#single-recursive-deploy)

A single post or page deploy can also be done recursively by checking the recursive option, see checkbox in single page/post deploy user interface. When 'recursive' has been checked all pages/posts that containt the url of the current page/post will be generated and deployed as well.

### Available filters and actions

[](#available-filters-and-actions)

Available filters to modify settings and data passed to the plugin:

- [Adjust additional files](#adjust-additional-files)
- [Adjust additional files for Single deploy](#adjust-additional-files-for-single-deploy)
- [Adjust additional URLs](#adjust-additional-urls)
- Recursive excludable

Available actions to invoke or act upon:

- [Handle errors](#handle-errors)
- [Completed static deploy job](#completed-static-deploy-job)
- [Modify generated files](#modify-generated-files)
- [Schedule deploys](#schedule-deploys)

#### Filters

[](#filters)

##### Adjust additional files

[](#adjust-additional-files)

Modify entries from the 'Additional Files and Directories' option. By default all paths are temporarily resolved to absolute paths via [realpath](https://www.php.net/manual/en/function.realpath.php), to ensure symbolic links are resolved. An array of unmodified files from the options is passed as an argument.

```
add_filter('simply_static_deploy_additional_files', function (array $files) {
    # Modify files, and possibly resolve paths with `realpath`.
    return $files;
});
```

Note: during generation of the static site, the `additional_files` setting is updated. It is restored when finished.

##### Adjust additional files for Single deploy

[](#adjust-additional-files-for-single-deploy)

When doing a single deploy only the given page/post will be generated, including the files given in the Simply Static 'Additional files' setting. You can change these additional files for single deploys via the `simply_static_deploy_single_additional_files` filter. It takes two arguments: the first one is an array of filenames, the second one is the Simply Static Options instance.

#### Adjust additional URLs

[](#adjust-additional-urls)

Modify entries from the 'Additional URLs' option. This can be useful to add pages that can't be found by Simply Static (not in the sitemap, are excluded by a password, have `noindex`, etc...). An array of unmodified URLs from the options is passed as an argument.

```
add_filter('simply_static_deploy_additional_urls', function (array $urls) {
    # Modify urls, for example by adding missing pages.
    return $urls;
});
```

Note: during generation of the static site, the `additional_urls` setting is updated. It is restored when finished.

#### Modify Recursive excludable

[](#modify-recursive-excludable)

This filter adds the option to customize the excludable url setting. This can be useful when for instance you want to ignore exclusions when an url contains the recursive parent url.

```
add_filter('simply_static_deploy_recursive_excludable', function (
    $excludable,
    string $staticPageUrl,
    string $recursiveUrl
) {
    # Modify excludable url logic, for example ignore excludeable url setting when current page contains the recursiveUrl
    return $excludable;
});
```

#### Actions

[](#actions)

##### Handle errors

[](#handle-errors)

Called from the plugin, and receives a `WP_Error` object explaining the error. You can decide how to handle the error, for instance by logging it with a service of choice.

```
add_action('simply_static_deploy_error', function (\WP_Error $error) {
    # Handle the error.
});
```

##### Completed static deploy job

[](#completed-static-deploy-job)

This will be triggered after all deploy tasks are finished. The first and only argument you will get in the callback function is the Simply Static options instance.

```
add_action('simply_static_deploy_complete' , function (\Simply_Static\Options $options) {
    // Finished static deploy job.
});

```

##### Modify generated files

[](#modify-generated-files)

Called when Simply Static is done generating the static site. This allows you to modify the generated files before they're being deployed. The static site directory is passed as an argument.

```
add_action('simply_static_deploy_modify_generated_files', function (
    string $directory
) {
    # Modify generated files, like renaming or moving them.
});
```

##### Schedule deploys

[](#schedule-deploys)

Schedule a deploy event.

Arguments:

- **Time**: should be a simple time string, it is automatically converted to a UNIX timestamp in the configured WordPress timezone.
- **Interval**: accepted values are `hourly`, `twicedaily` and `daily`. Can be extended via [cron\_schedules](https://developer.wordpress.org/reference/hooks/cron_schedules).

```
do_action('simply_static_deploy_schedule', '12:00', 'daily');
```

Note: it is important that [WP-Cron](https://developer.wordpress.org/plugins/cron/) is called regularly. You could do so by disabling the default WP-Cron mechanism and switch to calling it via a dedicated [cronjob](https://en.wikipedia.org/wiki/Cronjob).

To disable the default WP–Cron (which is normally called when a user visits pages), add the following to your WordPress configuration:

```
define('DISABLE_WP_CRON', true);
```

Create a cronjob calling the WordPres WP-Cron. Setting it to *every 5 minutes* would be a good default. For example via `crontab -e` on a Linux machine:

```
*/5 * * * * curl https://example.com/wp/wp-cron.php?doing-cron > /dev/null 2>&1
```

### Common issues

[](#common-issues)

```
Fatal error: Uncaught Error: Class 'Grrr\SimplyStaticDeploy\SimplyStaticDeploy' not found

```

Check the [installation instructions](#installation), and require the Composer autoloader in your project.

###  Health Score

38

—

LowBetter than 85% of packages

Maintenance17

Infrequent updates — may be unmaintained

Popularity36

Limited adoption so far

Community23

Small or concentrated contributor base

Maturity64

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~48 days

Recently: every ~64 days

Total

24

Last Release

1231d ago

Major Versions

v0.2.1 → v1.0.02020-04-16

v1.0.0 → v2.0.02020-10-12

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/803176?v=4)[Harmen Janssen](/maintainers/harmenjanssen)[@harmenjanssen](https://github.com/harmenjanssen)

![](https://www.gravatar.com/avatar/cf6699e100eaa1b3fb2389b044e2365fb73add031d3e91ecf6cf4507c99643a5?d=identicon)[RamiroGrrr](/maintainers/RamiroGrrr)

![](https://www.gravatar.com/avatar/7de8ebea764ce6d1b0c5c3213211ffaf33d44975d5258fc2dc3330b570489638?d=identicon)[schoenkaft](/maintainers/schoenkaft)

---

Top Contributors

[![HammenWS](https://avatars.githubusercontent.com/u/1799286?v=4)](https://github.com/HammenWS "HammenWS (61 commits)")[![schoenkaft](https://avatars.githubusercontent.com/u/1607628?v=4)](https://github.com/schoenkaft "schoenkaft (61 commits)")[![harmenjanssen](https://avatars.githubusercontent.com/u/803176?v=4)](https://github.com/harmenjanssen "harmenjanssen (21 commits)")[![qmeister](https://avatars.githubusercontent.com/u/884784?v=4)](https://github.com/qmeister "qmeister (10 commits)")[![martijngastkemper](https://avatars.githubusercontent.com/u/250662?v=4)](https://github.com/martijngastkemper "martijngastkemper (4 commits)")[![elreydetoda](https://avatars.githubusercontent.com/u/10230166?v=4)](https://github.com/elreydetoda "elreydetoda (1 commits)")

---

Tags

awsaws-s3cloudfronts3s3-buckets3-websitestatic-sitestatic-site-generatorwordpresswordpress-pluginwordpresss3awscloudfrontstatic-site-generatorstatic-site

### Embed Badge

![Health badge](/badges/grrr-amsterdam-simply-static-deploy/health.svg)

```
[![Health](https://phpackages.com/badges/grrr-amsterdam-simply-static-deploy/health.svg)](https://phpackages.com/packages/grrr-amsterdam-simply-static-deploy)
```

###  Alternatives

[league/flysystem-aws-s3-v3

AWS S3 filesystem adapter for Flysystem.

1.6k263.6M790](/packages/league-flysystem-aws-s3-v3)[aws/aws-sdk-php-laravel

A simple Laravel 9/10/11/12/13 service provider for including the AWS SDK for PHP.

1.7k35.6M75](/packages/aws-aws-sdk-php-laravel)[humanmade/s3-uploads

WordPress plugin to store uploads on S3

2.1k2.4M9](/packages/humanmade-s3-uploads)[aws/aws-sdk-php-zf2

Zend Framework 2 Module that allows easy integration the AWS SDK for PHP

104997.5k5](/packages/aws-aws-sdk-php-zf2)[deliciousbrains/wp-amazon-s3-and-cloudfront

Automatically copies media uploads to a storage provider's bucket for delivery. Optionally configure a CDN for even faster delivery.

310213.3k1](/packages/deliciousbrains-wp-amazon-s3-and-cloudfront)[vinelab/cdn

Content Delivery Network (CDN) Package for Laravel

217240.8k1](/packages/vinelab-cdn)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
