You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Rapid-development frameworks are great — until you need to customize a third-party module. Enterprise frameworks let you override anything, but demand months of learning.
Marko is a modular PHP 8.5+ framework where everything is a module: your app code, third-party packages, …even the framework. All integration areas follow the same structure and rules. Later modules always win, so your app layer cleanly overrides vendor without patches, forks, or hacks.
What makes Marko different
True modularity — Interface and implementation are always separate. Swap any driver (database, cache, mail, queue) without touching a line of application code.
Preferences — Remap any interface to your own implementation, framework-wide. One line of config replaces an entire class.
Plugins — Intercept any public method with before and after hooks. Modify inputs, transform outputs, or add behavior — all without inheritance.
PHP-native configuration — No XML. No YAML. Every route, binding, and plugin is defined in PHP, including full IDE autocompletion and ::class constants.
Attribute-driven — Routes, plugins, observers, layouts, commands, and more are declared with PHP attributes. Discovery is automatic.
Loud errors — No silent failures. When something goes wrong, Marko tells you exactly what happened, where, and how to fix it.
Watch the Introduction
Learn what Marko is, why it exists, and how it works in this short video overview.
Everything in Marko is a module. Modules are discovered automatically from three locations, loaded in priority order:
Location
Purpose
Priority
vendor/
Framework & third-party packages
Lowest
modules/
Locally installed third-party modules
Middle
app/
Your application code
Highest
Later modules always win. Your app/ modules can override controllers, templates, config, and DI bindings from any vendor package — without modifying vendor code.
Marko ships as composable packages — require only what you need. Every package follows an interface/implementation split, so you can swap drivers without changing application code.
Real-time community chat — dogfoods plugins, preferences, events, SSE, and the admin panel
Requirements
PHP 8.5+
Composer 2.x
Status
Marko is in active development. The architecture is stable and packages are fully functional, but APIs may evolve before the 1.0 release. We welcome early adopters and feedback.
Contributing
Marko is developed as a monorepo. All packages live under packages/ and are tested together.
# Clone the repository
git clone https://github.com/marko-php/marko.git
cd marko
# Install dependencies
composer install
# Run tests
./vendor/bin/pest --parallel
# Check code style
./vendor/bin/phpcs