{"id":35790438,"url":"https://github.com/mailpoet/mailpoet","last_synced_at":"2026-02-24T14:12:01.297Z","repository":{"id":34771211,"uuid":"38753514","full_name":"mailpoet/mailpoet","owner":"mailpoet","description":"A free newsletter plugin for WordPress","archived":false,"fork":false,"pushed_at":"2026-02-16T23:34:17.000Z","size":241520,"stargazers_count":153,"open_issues_count":32,"forks_count":73,"subscribers_count":11,"default_branch":"trunk","last_synced_at":"2026-02-17T05:41:37.063Z","etag":null,"topics":["emails","mailpoet","newsletters","wordpress","wordpress-plugin"],"latest_commit_sha":null,"homepage":"https://wordpress.org/plugins/mailpoet/","language":"PHP","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mailpoet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-07-08T12:47:37.000Z","updated_at":"2026-02-16T11:04:56.000Z","dependencies_parsed_at":"2024-01-22T12:55:50.266Z","dependency_job_id":"c251f418-0f25-4d92-b870-c19410fb62d2","html_url":"https://github.com/mailpoet/mailpoet","commit_stats":null,"previous_names":[],"tags_count":567,"template":false,"template_full_name":null,"purl":"pkg:github/mailpoet/mailpoet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailpoet%2Fmailpoet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailpoet%2Fmailpoet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailpoet%2Fmailpoet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailpoet%2Fmailpoet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mailpoet","download_url":"https://codeload.github.com/mailpoet/mailpoet/tar.gz/refs/heads/trunk","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailpoet%2Fmailpoet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29546746,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T13:00:00.370Z","status":"ssl_error","status_checked_at":"2026-02-17T12:57:14.072Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emails","mailpoet","newsletters","wordpress","wordpress-plugin"],"created_at":"2026-01-07T08:11:26.853Z","updated_at":"2026-02-17T14:01:06.002Z","avatar_url":"https://github.com/mailpoet.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Table of Contents\n\n1. [MailPoet](#mailpoet)\n2. [Initial setup](#initial-setup)\n   1. [Additional dependencies](#additional-dependencies)\n3. [Xdebug](#xdebug)\n   1. [PhpStorm setup](#phpstorm-setup)\n   2. [Xdebug develop mode](#xdebug-develop-mode)\n   3. [Xdebug for integration tests](#xdebug-for-integration-tests)\n4. [Local development](#local-development)\n   1. [NFS volume sharing for Mac](#nfs-volume-sharing-for-mac)\n   2. [Husky hooks](#husky-hooks)\n5. [Docker](#docker)\n   1. [Commands](#commands)\n   2. [Available PHP versions](#available-php-versions)\n   3. [Disabling the Tracy panel](#disabling-the-tracy-panel)\n   4. [Running individual tests](#running-individual-tests)\n6. [Code Formatting](#code-formatting)\n7. [TODO](#todo)\n\n## MailPoet\n\nThe **MailPoet** plugin monorepo.\n\nIf you have **any questions or need help or support**, please see the [Support](SUPPORT.md) document.\n\nTo use our Docker-based development environment (recommended), continue with the steps below.\nIf you'd like to use the plugin code directly, see details in [the plugin's readme](mailpoet/README.md).\n\n## Initial setup\n\n1. Run `./do setup` to pull everything and install necessary dependencies.\n2. Add secrets to `.env` files in `mailpoet` and `mailpoet-premium` directories. Go to the Secret Store and look for \"MailPoet: plugin .env\"\n3. Run `./do start` to start the stack.\n4. Go to http://localhost:8888 to see the dashboard of the dev environment.\n\n### Additional dependencies\n\nEven though it's possible to run everything using Docker, in the development workflow,\nit may be faster and more convenient to run some tasks outside the container. Therefore,\nthe following tools are recommended:\n\n1. **PHP** as per `composer.json` requirements.\n2. **Node.js**, as specified by `.nvmrc`. For automatic management use [nvm](https://github.com/nvm-sh/nvm), [FNM](https://github.com/Schniz/fnm), or [Volta](https://github.com/volta-cli/volta).\n3. **pnpm**, as specified in `package.json`. For automatic setup enable [Corepack](https://nodejs.org/docs/latest-v17.x/api/corepack.html) using `corepack enable`.\n\n## Xdebug\n\n### PhpStorm setup\n\nIn `Languages \u0026 Preferences \u003e PHP \u003e Servers` set path mappings:\n\n```shell\nwordpress        -\u003e /var/www/html\nmailpoet         -\u003e /var/www/html/wp-content/plugins/mailpoet\nmailpoet-premium -\u003e /var/www/html/wp-content/plugins/mailpoet-premium\n```\n\nFor PHP 8 and XDebug 3 we support **browser debugging extension**.\nYou can choose extension by your browser in [JetBrains documentation](https://www.jetbrains.com/help/phpstorm/browser-debugging-extensions.html).\n\nTo use XDebug inside the **cron**, you need to pass a URL argument `\u0026XDEBUG_TRIGGER=yes`\n[in the cron request](https://github.com/mailpoet/mailpoet/blob/bf7bd6d2d9090ed6ec7b8b575bb7d6b08e663a52/lib/Cron/CronHelper.php#L155-L166).\nAlternatively, you can add `XDEBUG_TRIGGER: yes` to the `wordpress` service in `docker-compose.yml` and restart it (which will run XDebug also for all other requests).\n\n### Xdebug develop mode\n\n[Xdebug develop mode](https://xdebug.org/docs/develop) is disabled by default because it causes performance issues due to conflicts with the DI container.\n\nIt can be enabled when needed using the `XDEBUG_MODE` environment variable. For example, it is possible to enable it by adding the following to `docker-compose.override.yml`:\n\n```\nenvironment:\n    XDEBUG_MODE: debug, develop\n```\n\n### Xdebug for integration tests\n\n- In Languages \u0026 Preferences \u003e PHP \u003e Servers create a new sever named `MailPoetTest`, set the host to `localhost` and port to `80` and set following path mappings:\n\n```shell\nwordpress        -\u003e /wp-core\nmailpoet         -\u003e /wp-core/wp-content/plugins/mailpoet\nmailpoet-premium -\u003e /wp-core/wp-content/plugins/mailpoet-premium\nmailpoet/vendor/bin/codecept -\u003e /project/vendor/bin/codecept\nmailpoet/vendor/bin/wp -\u003e /usr/local/bin/wp\n```\n\n- Add `XDEBUG_TRIGGER: 1` environment to `tests_env/docker/docker-compose.yml` -\u003e codeception service to start triggering Xdebug\n- Make PHPStorm listen to connections by clicking on the phone icon\n\n## Local development\n\n### NFS volume sharing for Mac\n\nNFS volumes can bring more stability and performance on Docker for Mac. To setup NFS volume sharing run:\n\n```shell\nsudo sh dev/mac-nfs-setup.sh\n```\n\nThen create a Docker Compose override file with NFS settings and restart containers:\n\n```shell\ncp docker-compose.override.macos-sample.yml docker-compose.override.yml\n\ndocker compose down -v --remove-orphans\ndocker compose up -d\n```\n\n**NOTE:** If you are on MacOS Catalina or newer, make sure to put the repository\noutside your `Documents` folder, otherwise you may run into [file permission issues](https://objekt.click/2019/11/docker-the-problem-with-macos-catalina/).\n\n### Husky hooks\n\nWe use [Husky](https://github.com/typicode/husky) to run automated checks in pre-commit hooks.\n\nIn case you're using [NVM](https://github.com/nvm-sh/nvm) for Node version management you may\nneed to create or update your `~/.huskyrc` file with:\n\n```sh\n# This loads nvm.sh and sets the correct PATH before running the hooks:\nexport NVM_DIR=\"$HOME/.nvm\"\n[ -s \"$NVM_DIR/nvm.sh\" ] \u0026\u0026 \\. \"$NVM_DIR/nvm.sh\"\n```\n\nWithout it, you may experience errors in some Git clients.\n\n## Docker\n\n### Commands\n\nThe `./do` script define aliases for most of the commands you will need while working on plugins:\n\n```shell\n./do setup                           Setup the environment.\n./do start                           Start the docker containers.\n./do stop                            Stop the docker containers.\n./do ssh [--test]                    Run an interactive bash shell inside the plugin directory.\n./do run [--test] \u003ccommand\u003e          Run a custom bash command in the wordpress container.\n./do acceptance [--premium]          Run acceptance tests.\n./do build [--premium]               Builds a .zip for the plugin.\n./do templates                       Generates templates classes and assets.\n./do [--test] [--premium] \u003ccommand\u003e  Run './do \u003ccommand\u003e' inside the plugin directory.\n\nOptions:\n   --test     Run the command using the 'test_wordpress' service.\n   --premium  Run the command inside the premium plugin.\n```\n\nYou can access this help in your command line running `./do` without parameters.\n\n### Available PHP versions\n\nTo switch the environment to a different PHP version:\n\n1. Check https://github.com/mailpoet/mailpoet/tree/trunk/dev for a list of available PHP versions. Each directory starting with `php` corresponds to a available version.\n2. Configure the `wordpress` service in `docker-compose.override.yml` to build from the desired PHP version Dockerfile (replace {PHP_VERSION} with the name of the directory that corresponds to the version that you want to use):\n\n   ```yaml\n   wordpress:\n     build:\n       context: .\n       dockerfile: dev/{PHP_VERSION}/Dockerfile\n   ```\n\n3. Run `docker compose build wordpress`.\n4. Start the stack with `./do start`.\n\nTo switch back to the default PHP version remove what was added in 2) and, run `docker compose build wordpress` for application container and `docker compose build test_wordpress` for tests container,\nand start the stack using `./do start`.\n\n### Disabling the Tracy panel\n\nTo disable the Tracy panel, add the following to `docker-compose.override.yml`:\n\n```yaml\nservices:\n  wordpress:\n    environment:\n      MAILPOET_DISABLE_TRACY_PANEL: 1\n```\n\n### Running individual tests\n\nIt's recommended to run tests in Docker. Free plugin tests can be run using --test flag (`./do --test`). However, to run a premium test, you need to ssh into test container (`./do ssh --test`) and run tests there.\n\n#### Integration test in the free plugin\n\n```shell\n./do --test test:integration --skip-deps --file=tests/integration/WP/EmojiTest.php\n```\n\n#### Acceptance test in the free plugin\n\n```shell\n./do --test test:acceptance --skip-deps --file=tests/acceptance/Misc/MailpoetMenuCest.php\n```\n\n#### Unit/integration test in the premium plugin\n\n```shell\n./do ssh --test # to enter the container\ncd ../mailpoet-premium # switch to premium plugin directory\n./do test:unit --file=tests/unit/Config/EnvTest.php\n```\n\n#### Acceptance test in the premium plugin\n\n```shell\ncd ./mailpoet-premium # switch to premium plugin directory on your local machine\n./do test:acceptance --skip-deps --file tests/acceptance/PremiumCheckCest.php\n```\n\n## Code Formatting\n\nWe use [Prettier](https://prettier.io/) to ensure consistent code formatting across the project.\n\n### Quick Commands\n\n```bash\n./do qa:prettier-write    # Format all files\n./do qa:prettier-check    # Check if files are properly formatted\n```\n\n## TODO\n\n- [ ] Install WooCommerce\n- [ ] Install Members\n- [ ] Install other useful plugins by default\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmailpoet%2Fmailpoet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmailpoet%2Fmailpoet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmailpoet%2Fmailpoet/lists"}