{"id":13697840,"url":"https://github.com/snicco/snicco","last_synced_at":"2026-01-11T10:46:30.530Z","repository":{"id":38211483,"uuid":"434728529","full_name":"snicco/snicco","owner":"snicco","description":"Taking the pain out of enterprise WordPress development","archived":false,"fork":false,"pushed_at":"2024-09-07T14:26:21.000Z","size":24825,"stargazers_count":137,"open_issues_count":17,"forks_count":17,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-02T23:13:49.370Z","etag":null,"topics":["wordpress","wordpress-development"],"latest_commit_sha":null,"homepage":"https://snicco.io","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/snicco.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-03T20:43:04.000Z","updated_at":"2025-03-23T10:18:11.000Z","dependencies_parsed_at":"2024-04-27T13:57:43.200Z","dependency_job_id":"2e897bf2-5865-4e23-83e9-409932d5f2e4","html_url":"https://github.com/snicco/snicco","commit_stats":{"total_commits":1652,"total_committers":5,"mean_commits":330.4,"dds":"0.022397094430992692","last_synced_commit":"8ae5f56753fbd8afaddf4181d3228612f2fbbfa2"},"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snicco%2Fsnicco","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snicco%2Fsnicco/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snicco%2Fsnicco/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snicco%2Fsnicco/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snicco","download_url":"https://codeload.github.com/snicco/snicco/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248143862,"owners_count":21054838,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["wordpress","wordpress-development"],"created_at":"2024-08-02T18:01:03.713Z","updated_at":"2026-01-11T10:46:30.520Z","avatar_url":"https://github.com/snicco.png","language":"PHP","funding_links":[],"categories":["PHP"],"sub_categories":[],"readme":"# Snicco - Taking the pain out of enterprise WordPress development\n\n[![codecov](https://codecov.io/gh/snicco/snicco/branch/master/graph/badge.svg?token=4W8R6FZ948)](https://codecov.io/gh/snicco/snicco)\n[![Psalm Type-Coverage](https://shepherd.dev/github/snicco/snicco/coverage.svg?)](https://shepherd.dev/github/snicco/snicco)\n[![Psalm level](https://shepherd.dev/github/snicco/snicco/level.svg?)](https://psalm.dev/)\n[![PhpMetrics - Static Analysis](https://img.shields.io/badge/PhpMetrics-Static_Analysis-2ea44f)](https://snicco.github.io/snicco/phpmetrics/)\n![PHP-Versions](https://img.shields.io/badge/PHP-%5E7.4%7C%5E8.0%7C%5E8.1-blue)\n\nIn this\ndevelopment [monorepo](https://tomasvotruba.com/blog/2019/10/28/all-you-always-wanted-to-know-about-monorepo-but-were-afraid-to-ask/)\nyou'll find many independent packages that will help you to develop **testable**, **maintainable** and **PSR-compatible** enterprise\n**WordPress** projects faster than ever before.\n\nAll packages in this repo are specifically designed to be usable in distributed **WordPress** code and\nare [scopable](https://github.com/humbug/php-scoper) out of the box.\n\n## Table of contents\n\n1. [Repository Overview](#repository-overview)\n    1. [Component](#component)\n    2. [Bridge](#bridge)\n    3. [Middleware](#middleware)\n    4. [Bundle](#bundle)\n    5. [Testing](#testing)\n2. [Contributing](#contributing)\n3. [Changelog](#changelog)\n4. [Security](#security)\n5. [License](#license)\n6. [Credits](#credits)\n\n## Repository Overview\n\nYou can find all packages in the [`src/Snicco`](./src/Snicco) directory.\n\nHere is a brief overview of the repository:\n(hint: click the links to go to the dedicated documentation for each package)\n\n### Component\n\nThis directory contains completely decoupled PHP components that you can use in any WordPress (or any other PHP project)\n.\n\n- [BetterWPAPI](https://github.com/snicco/better-wp-api): A better way to interacts with **WordPress** core functions\n  in distributed **WordPress** packages.\n- [BetterWPCache](https://github.com/snicco/better-wp-cache): A PSR6/PSR16 implementation using\n  the [`WP_Object_Cache`](https://developer.wordpress.org/reference/classes/wp_object_cache/). Supports cache tagging.\n- [BetterWPCLI](https://github.com/snicco/better-wp-cli): The missing parts to the already awesome [WP-CLI](https://wp-cli.org/).\n- [BetterWPHooks](https://github.com/snicco/better-wp-hooks): The **WordPress** hook system redesign in 2022. (PSR-14\n  compliant)\n- [BetterWPMail](https://github.com/snicco/better-wp-mail): The long overdue upgrade to\n  the [`wp_mail`](https://developer.wordpress.org/reference/functions/wp_mail/) function.\n- [BetterWPDB](https://github.com/snicco/better-wpdb): Keeps you safe and sane when working with custom tables in\n  **WordPress**.\n- [EventDispatcher](https://github.com/snicco/event-dispatcher): A general purpose, PSR-14 compliant event-dispatcher\n  that powers [`snicco/better-wp-hooks`](https://github.com/snicco/better-wp-hooks).\n- [HttpRouting](https://github.com/snicco/http-routing): A blazing fast routing system and PSR7/PSR15 middleware\n  dispatcher based on fast-route. Especially build for usage in legacy software where you don't have 100% control over\n  the request-lifecycle.\n- [Kernel](https://github.com/snicco/kernel): A minimal and customizable application bootstrapper.\n- [Psr7ErrorHandler](https://github.com/snicco/psr7-error-handler): A powerful, PSR-7/PSR-3 compliant error-handler.\n- [Session](https://github.com/snicco/session): A custom session implementation for applications where `$_SESSION`\n  can't be used for various reasons.\n- [SignedURL](https://github.com/snicco/signed-url): A standalone package to generate and validate protected urls.\n- [StrArr](https://github.com/snicco/str-arr): A zero-dependency,type-safe and **psalm**-compatible implementation of\n  the\n  [illuminate/support](https://github.com/illuminate/support/blob/master/Str.php) string and array helpers.\n- [Templating](https://github.com/snicco/templating): A unified, immutable API for using and combining different\n  template engines.\n- [TestableClock](https://github.com/snicco/testable-clock): Helper classes for testing time-dependent code.\n\n### Bridge\n\nThis directory contains different implementations for interfaces defined in one of the components.\n\n- [Blade](https://github.com/snicco/blade-bridge): Provides a 100% tested, standalone implementation\n  of [illuminate/view](https://github.com/illuminate/view)\n  for [`snicco/templating`](https://github.com/snicco/templating).\n- [IlluminateContainer](https://github.com/snicco/illuminate-container-bridge): Provides an adapter\n  for [illuminate/container](https://github.com/illuminate/container) for the usage\n  with [`snicco/kernel`](https://github.com/snicco/kernel).\n- [Pimple](https://github.com/snicco/pimple-bridge): Provides an adapter\n  for [pimple/pimple](https://github.com/pimple/pimple) for the usage\n  with[`snicco/kernel`](https://github.com/snicco/kernel).\n- [Session-PSR16](https://github.com/snicco/session-psr16-bridge): Allows\n  using [`snicco/session`](https://github.com/snicco/session) with any PSR16 cache backend.\n- [SessionWP](https://github.com/snicco/session-wp-bridge): Allows\n  using  [`snicco/session`](https://github.com/snicco/session) with a custom table or the\n  [`WP_Object_Cache`](https://developer.wordpress.org/reference/classes/wp_object_cache/).\n- [SingedURL-PSR15](https://github.com/snicco/signed-url-psr15-bridge): Provides a PSR15 middleware\n  for [`snicco/signed-url`](https://github.com/snicco/signed-url).\n- [SingedURL-PSR16](https://github.com/snicco/signed-url-psr16-bridge): Allows using any PSR16 cache as a storage\n  for [`snicco/signed-url`](https://github.com/snicco/signed-url).\n\n### Middleware\n\nThis directory contains PSR15-Middleware that can be plugged into the `snicco/http-routing` component.\n\n- [DefaultHeaders](https://github.com/snicco/default-headers-middleware): Add custom headers to all outgoing\n  responses.\n- [HttpsOnly](https://github.com/snicco/https-only-middleware): Redirects HTTP =\u003e HTTPS for all requests\n- [MethodOverride](https://github.com/snicco/method-override-middleware): Allows treating form submissions\n  as `PUT|PATCH|DELETE` requests.\n- [Negotiation](https://github.com/snicco/negotiation-middleware): Performs content and language negotiation\n- [NoRobots](https://github.com/snicco/no-robots-middleware): Disallows search-engines to index the current request\n  path.\n- [Payload](https://github.com/snicco/payload-middleware): Transforms JSON (and other) data to plain PHP arrays.\n- [Redirect](https://github.com/snicco/redirect-middleware): Redirects requests to configured locations.\n- [ShareCookies](https://github.com/snicco/share-cookies-middleware): Transforms cookie objects into response headers.\n- [TrailingSlash](https://github.com/snicco/trailing-slash-middleware): Redirects `/foo/` to `/foo` or vice-versa.\n- [WPAuthOnly](https://github.com/snicco/wp-auth-only-middleware): Grants access only to authenticated **WordPress**\n  users.\n- [WPCapability](https://github.com/snicco/wp-capability-middleware): Grants access only to **WordPress** users with the\n  configured capability.\n- [WPGuestsOnly](https://github.com/snicco/wp-guests-only-middleware): Grants access only to guest **WordPress**\n  users.\n- [WPNonce](https://github.com/snicco/wp-nonce-middleware): Will solve all\n  your [WordPress Nonces](https://codex.wordpress.org/WordPress_Nonces) problems once and for all.\n\n### Bundle\n\nA `bundle` is a plugin for the [`snicco/kernel`](https://github.com/snicco/kernel) component and integrates one or\nmore [components](#component)\nor [bridges](#bridge) to provide out of the box functionality.\n\nWhile all components can absolutely be used without using the [`snicco/kernel`](https://github.com/snicco/kernel)\ncomponent, bundles makes usage and configuration effortless.\n\n- [BetterWPCacheBundle](https://github.com/snicco/better-wp-cache-bundle)\n- [BetterWPHooksBundle](https://github.com/snicco/better-wp-hooks-bundle)\n- [BetterWPMailBundle](https://github.com/snicco/better-wp-mail-bundle)\n- [BetterWPDBBundle](https://github.com/snicco/better-wpdb-bundle)\n- [BladeBundle](https://github.com/snicco/blade-bundle)\n- [DebugBundle](https://github.com/snicco/debug-bundle): Integrates [filp/whoops](https://github.com/filp/whoops)\n  with [`snicco/psr7-error-handler`](https://github.com/snicco/psr7-error-handler)\n- [EncryptionBundle](https://github.com/snicco/encryption-bundle): A tight integration with\n  the [defuse/php-encryption](https://github.com/defuse/php-encryption) library.\n- [HttpRoutingBundle](https://github.com/snicco/http-routing-bundle)\n- [SessionBundle](https://github.com/snicco/session-bundle):\n  Integrates [`snicco/session`](https://github.com/snicco/session)\n  , [`snicco/http-routing`](https://github.com/snicco/http-routing)\n  and [`snicco/session-wp-bridge`](https://github.com/snicco/session-wp-bridge)\n- [TemplatingBundle](https://github.com/snicco/templating-bundle)\n- [TestingBundle](https://github.com/snicco/testing-bundle): A full-stack testing framework for applications build\n  with [`snicco/kernel`](https://github.com/snicco/kernel) based\n  on [codeception/codeception](https://github.com/Codeception/Codeception)\n  and [lucatume/wp-browser](https://github.com/lucatume/wp-browser).\n\n### Testing\n\nThis directory contains testing utilities for [components](#component). These packages are only meant to be used as\ndevelopment dependencies.\n\n- [BetterWPMailTesting](https://github.com/snicco/better-wp-mail-testing): Provides a testable mail transport for\n  usage in tests.\n- [EventDispatcherTesting](https://github.com/snicco/better-wp-mail-testing): Provides a testable event dispatcher for\n  usage in tests.\n- [HttpRoutingTesting](https://github.com/snicco/http-routing-testing): Provides utilities to test your custom\n  Middleware.\n- [KernelTesting](https://github.com/snicco/kernel-testing): Contains a test case to test custom dependency-injection\n  adapters\n- [SessionTesting](https://github.com/snicco/session-testing): Contains test cases to test custom session drivers\n  for [`snicco/session`](https://github.com/snicco/session).\n- [SignedUrlTesting](https://github.com/snicco/signed-url-testing): Contains test cases to test custom storage\n  for [`snicco/signed-url`](https://github.com/snicco/signed-url).\n\n## Contributing\n\nWe've set up a separate document for our [contribution guidelines](CONTRIBUTING.md).\n\n## Changelog\n\n[Our changelog](CHANGELOG.md) is automatically generated using the wonderful **npm**\npackage [semantic-release](https://github.com/semantic-release/semantic-release).\n\n## Security\n\nPlease review our [security policy](SECURITY.md) on how to securely report vulnerabilities.\n\n## License\n\nThis project is licensed under the terms of the GNU LGPLv3 unless otherwise specified in the respective LICENSE.md file\nof each package. See [LICENSE.md](LICENSE.md)\n\n## Credits\n\nWe want to express our special gratitude to:\n\n- [@matthiasnoback](https://github.com/matthiasnoback): For his teachings\n  on [PHP package design](https://matthiasnoback.nl/book/principles-of-package-design/). It had a lot of influence on\n  how we set up this project.\n- [@TomasVotruba](https://github.com/TomasVotruba): For his teachings\n  on [managing a PHP monorepo](https://tomasvotruba.com/).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnicco%2Fsnicco","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsnicco%2Fsnicco","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnicco%2Fsnicco/lists"}