PHPackages                             kanopi/saplings - 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. [Framework](/categories/framework)
4. /
5. kanopi/saplings

ActiveDrupal-recipe[Framework](/categories/framework)

kanopi/saplings
===============

Modern Drupal starter recipe.

3.0.2(7mo ago)18511↓100%1[2 issues](https://github.com/kanopi/saplings/issues)GPL-2.0-or-later

Since Feb 12Pushed 7mo ago14 watchersCompare

[ Source](https://github.com/kanopi/saplings)[ Packagist](https://packagist.org/packages/kanopi/saplings)[ RSS](/packages/kanopi-saplings/feed)WikiDiscussions 3.x Synced today

READMEChangelog (10)Dependencies (7)Versions (23)Used By (0)

[![saplings](https://private-user-images.githubusercontent.com/5177009/302044935-a6377e32-deb2-49d8-873a-f3dd5a36fa7c.svg?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzQ0MTM3NDAsIm5iZiI6MTc3NDQxMzQ0MCwicGF0aCI6Ii81MTc3MDA5LzMwMjA0NDkzNS1hNjM3N2UzMi1kZWIyLTQ5ZDgtODczYS1mM2RkNWEzNmZhN2Muc3ZnP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDMyNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAzMjVUMDQzNzIwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MDkzZWQ1NWNmMmUwMTMxN2JmZWMyMWFlMWM5YTZjNzVjODM3YjBiYzFkNDVlYTkwMGU4ZmU3MjYzYWRlMDA0OSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.ScunaoWfzsucyyyg04CiG87thNfloAHUbGFN_YB50Vc)](https://private-user-images.githubusercontent.com/5177009/302044935-a6377e32-deb2-49d8-873a-f3dd5a36fa7c.svg?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzQ0MTM3NDAsIm5iZiI6MTc3NDQxMzQ0MCwicGF0aCI6Ii81MTc3MDA5LzMwMjA0NDkzNS1hNjM3N2UzMi1kZWIyLTQ5ZDgtODczYS1mM2RkNWEzNmZhN2Muc3ZnP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDMyNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAzMjVUMDQzNzIwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MDkzZWQ1NWNmMmUwMTMxN2JmZWMyMWFlMWM5YTZjNzVjODM3YjBiYzFkNDVlYTkwMGU4ZmU3MjYzYWRlMDA0OSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.ScunaoWfzsucyyyg04CiG87thNfloAHUbGFN_YB50Vc)

Saplings - Drupal Build Starter Recipe
======================================

[](#saplings---drupal-build-starter-recipe)

This recipe is designed to help start a highly configured Drupal project.

Rather than one large Recipe that tries to do everything, we've broken it up into multiple sub-recipes. This recipe installs them all, but you can also install the sub-recipes on their own.

- [kanopi/gin-admin-experience](https://github.com/kanopi/gin-admin-experience)
- [kanopi/saplings-base](https://github.com/kanopi/saplings-base)
- [kanopi/saplings-editorial](https://github.com/kanopi/saplings-editorial)
- [kanopi/saplings-launch](https://github.com/kanopi/saplings-launch)
- [kanopi/saplings-tests](https://github.com/kanopi/saplings-tests) \[Cypress\]
- [kanopi/saplings-content-types](https://github.com/kanopi/saplings-content-types)
    - [kanopi/saplings-content-base](https://github.com/kanopi/saplings-content-base)
    - [kanopi/saplings-component-types](https://github.com/kanopi/saplings-component-types)
        - [kanopi/saplings-component-base](https://github.com/kanopi/saplings-component-base)
            - [kanopi/saplings\_paragraphs](https://github.com/kanopi/saplings_paragraphs) \[Module\]
    - [kanopi/saplings-media](https://github.com/kanopi/saplings-media)
        - [kanopi/imagemagick-configuration](https://github.com/kanopi/imagemagick-configuration)
    - [kanopi/saplings-theme](https://github.com/kanopi/saplings-theme)
        - [kanopi/saplings\_child](https://github.com/kanopi/saplings_child) \[Theme\]
    - [kanopi/saplings\_custom](https://github.com/kanopi/saplings_custom) \[Module\]

---

[![Saplings ERD](https://private-user-images.githubusercontent.com/5177009/312098593-3b348086-bfcd-427e-adf5-c6bcd1fc2cc7.svg?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzQ0MTM3NDAsIm5iZiI6MTc3NDQxMzQ0MCwicGF0aCI6Ii81MTc3MDA5LzMxMjA5ODU5My0zYjM0ODA4Ni1iZmNkLTQyN2UtYWRmNS1jNmJjZDFmYzJjYzcuc3ZnP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDMyNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAzMjVUMDQzNzIwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MTQwYzk1MGJmOTkyMTVkZjdhODI5NzVkNDk2MTUwZDRiMWRhZDBhYjRmNTg5OTlkOWFlNGFkNzY5OGU2ZDJjYyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.xYOjuOprgbj_72Wr4SJRkT4TsIZY9sK1n3nO5OQdeLM)](https://private-user-images.githubusercontent.com/5177009/312098593-3b348086-bfcd-427e-adf5-c6bcd1fc2cc7.svg?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzQ0MTM3NDAsIm5iZiI6MTc3NDQxMzQ0MCwicGF0aCI6Ii81MTc3MDA5LzMxMjA5ODU5My0zYjM0ODA4Ni1iZmNkLTQyN2UtYWRmNS1jNmJjZDFmYzJjYzcuc3ZnP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDMyNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAzMjVUMDQzNzIwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MTQwYzk1MGJmOTkyMTVkZjdhODI5NzVkNDk2MTUwZDRiMWRhZDBhYjRmNTg5OTlkOWFlNGFkNzY5OGU2ZDJjYyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.xYOjuOprgbj_72Wr4SJRkT4TsIZY9sK1n3nO5OQdeLM)

---

Requiring and Applying this recipe
----------------------------------

[](#requiring-and-applying-this-recipe)

Apply a recipe to Drupal installed with a minimal profile. See [below](#setting-up-a-quick-testing-environment)is you want to set up a quick testing environment.

- Follow the instructions in [kanopi/drupal-starter](https://github.com/kanopi/drupal-starter)to start a new project as it is configured for recipes and tooling needed.
- Run `fin composer require kanopi/saplings:^1` to require this repository.
- Run `fin recipe-apply ../recipes/saplings` to apply this recipe.
- Run the following command to unpack the dependencies from all kanopi/saplings recipes to the site project's composer.json file.

```
fin recipe-unpack kanopi/saplings && fin recipe-unpack kanopi/gin-admin-experience && fin recipe-unpack kanopi/saplings-base && fin recipe-unpack kanopi/saplings-editorial && fin recipe-unpack kanopi/saplings-launch && fin recipe-unpack kanopi/saplings-content-types && fin recipe-unpack kanopi/saplings-component-types && fin recipe-unpack kanopi/saplings-component-base && fin recipe-unpack kanopi/saplings-content-base && fin recipe-unpack kanopi/saplings-media && fin recipe-unpack kanopi/imagemagick-configuration && fin recipe-unpack kanopi/saplings-theme && fin recipe-unpack kanopi/saplings-editorial && fin recipe-unpack kanopi/saplings-content-base-header && fin recipe-unpack kanopi/saplings-content-base-seo && fin recipe-unpack kanopi/saplings-events && fin recipe-unpack drupal/events && fin recipe-unpack drupal/events_calendar && fin recipe-unpack drupal/events_locations && fin recipe-unpack kanopi/imagemagick-configuration && fin recipe-unpack drupal/locations && fin recipe-unpack kanopi/saplings-full-html-editor && fin recipe-unpack drupal/tour_core

```

- Export configuration.

You can then remove the recipe once it has been applied and unpacked as the configuration is now in your Drupal, and the dependencies are in your composer.

- `fin composer remove kanopi/saplings`
- Export configuration.

---

Roadmap
-------

[](#roadmap)

### Phase 1

[](#phase-1)

Feature complete.

### Phase 2

[](#phase-2)

- Break Page and Post Content types into their own recipes.
- Additional components as needed.
- [kanopi/saplings-ai](https://github.com/kanopi/saplings-ai) - \[WIP\] Helpful AI functionality for content creators.
- [kanopi/saplings-person](https://github.com/kanopi/saplings-person) - \[WIP\] Creates a Person content type and related configuration.
- [kanopi/saplings-events](https://github.com/kanopi/saplings-events) - \[WIP\] Configuration for Saplings Events
- [kanopi/saplings-demo-events](https://github.com/kanopi/saplings-demo-events)

- \[WIP\] Demo content for Saplings Events

- [kanopi/solr-search-pantheon-recipe](https://github.com/kanopi/solr-search-pantheon-recipe)
    - The goal is to configure Solr for Pantheon on a site that isn't going to use saplings.

### Phase 3

[](#phase-3)

Investigate extending Drupal CMS' recipes.

### Other Kanopi Recipes:

[](#other-kanopi-recipes)

- [kanopi/saplings-domain](https://github.com/kanopi/saplings-domain) - Installs and configures Domain modules.
- [kanopi/saplings-demo-content](https://github.com/kanopi/saplings-demo-content)
    - Demo content for Saplings.
- [kanopi/saplings-solr](https://github.com/kanopi/saplings-solr) - Configures a back-end and front-end Solr search customized for Saplings on Pantheon.
- [kanopi/password-policy-90-days](https://packagist.org/packages/kanopi/password-policy-90-days)
    - Installs and configures Password Policy and sets a 90 day expiration default.
- [kanopi/remote-video-youtube-lite](https://packagist.org/packages/kanopi/remote-video-youtube-lite)
    - Configures Remote Video Media entity to use Lite YouTube Embed.

### Other Saplings related modules

[](#other-saplings-related-modules)

- [kanopi/saplings\_navbar](https://github.com/kanopi/saplings_navbar) - Creates a navbar pattern for Saplings that allows the parent to be a link and then have a dropdown indicator to access child menu items.

---

Contributing/Testing
--------------------

[](#contributingtesting)

We'd love your help with testing, ideation, and development.

### Setting up a quick testing environment

[](#setting-up-a-quick-testing-environment)

Decide on a name for your testing environment. In this example, I will use `kanland`.

- Checkout kanopi/drupal-starter into it's own repo.
- `git clone git@github.com:kanopi/drupal-starter.git kanland && cd kanland`
- Open /.docksal/docksal.env in your editor.
- Update row 28 `hostingsite="kanland"` and save.
- Run `fin init`
- The build will fail with the following message as we haven't installed Drupal yet. `Error: Class "Drupal\user\Entity\User" not found`
- Run `fin drush si minimal -y && fin drush uli` to install Drupal and log in.
- Click on the one-time-login to verify the minimal install happened.
- Require this repository: `fin composer require kanopi/saplings:^1`
- Apply the recipe: `fin recipe-apply saplings`

To reset after you have done some testing:

- Run `fin init`
- The build will fail with the following message as we haven't installed Drupal yet. `Error: Class "Drupal\user\Entity\User" not found`
- Run `fin drush si minimal -y && fin drush uli` to install Drupal and log in.

### Requiring recipes

[](#requiring-recipes)

Use composer the require the recipes needed. We currently host on our packagist.

### Applying and Unpacking recipes in Drupal

[](#applying-and-unpacking-recipes-in-drupal)

To apply contrib/composer installed recipes, run the following commands:

`fin recipe-apply recipe-name`

Each recipe can have composer dependencies. "Unpacking" takes these dependencies from the recipe and applies them to the project's composer.json file.

To unpack contrib/composer installed recipes, run the following commands:

`fin recipe-unpack recipe-name`

Dependencies
------------

[](#dependencies)

See chart and list in [/docs/dependencies.md](/docs/dependencies.md)

###  Health Score

40

—

FairBetter than 88% of packages

Maintenance60

Regular maintenance activity

Popularity23

Limited adoption so far

Community19

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 90.8% of commits — single point of failure

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 ~25 days

Total

22

Last Release

230d ago

Major Versions

1.0.0-beta.10 → 2.0.0-beta.22025-02-24

1.0.0-beta.11 → 2.0.0-beta2025-04-18

2.0.0-beta.5 → 3.0.22025-08-06

### Community

Maintainers

![](https://www.gravatar.com/avatar/bf9dca5c46910be861bb00920034637b5a36a1f6277413be6817a50a1ce6fc74?d=identicon)[kanopi\_studios](/maintainers/kanopi_studios)

---

Top Contributors

[![thejimbirch](https://avatars.githubusercontent.com/u/5177009?v=4)](https://github.com/thejimbirch "thejimbirch (148 commits)")[![sofiashendi](https://avatars.githubusercontent.com/u/118862935?v=4)](https://github.com/sofiashendi "sofiashendi (6 commits)")[![echechulina](https://avatars.githubusercontent.com/u/59713012?v=4)](https://github.com/echechulina "echechulina (2 commits)")[![kmurphychi247](https://avatars.githubusercontent.com/u/82771690?v=4)](https://github.com/kmurphychi247 "kmurphychi247 (2 commits)")[![Stockfoot](https://avatars.githubusercontent.com/u/36280534?v=4)](https://github.com/Stockfoot "Stockfoot (2 commits)")[![kanopicode](https://avatars.githubusercontent.com/u/17830393?v=4)](https://github.com/kanopicode "kanopicode (1 commits)")[![taylorwillskanopi](https://avatars.githubusercontent.com/u/129998156?v=4)](https://github.com/taylorwillskanopi "taylorwillskanopi (1 commits)")[![stevector](https://avatars.githubusercontent.com/u/211029?v=4)](https://github.com/stevector "stevector (1 commits)")

---

Tags

archbeedo-not-archivedrupal-recipeinternal-toolsaplings

### Embed Badge

![Health badge](/badges/kanopi-saplings/health.svg)

```
[![Health](https://phpackages.com/badges/kanopi-saplings/health.svg)](https://phpackages.com/packages/kanopi-saplings)
```

###  Alternatives

[drupal/core-recommended

Locked core dependencies; require this project INSTEAD OF drupal/core.

6938.6M296](/packages/drupal-core-recommended)[goalgorilla/open_social

Open Social is a distribution for building social communities and intranets.

193457.5k](/packages/goalgorilla-open-social)[localgovdrupal/localgov

LocalGovDrupal distribution

97109.9k2](/packages/localgovdrupal-localgov)[wire-drupal/wire

Dynamic interfaces for Drupal.

331.5k](/packages/wire-drupal-wire)

PHPackages © 2026

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