gmx / gmx-skeleton
GMX Framework — skeleton application template
Package info
Type:project
pkg:composer/gmx/gmx-skeleton
Requires
- php: >=8.5
- ext-apcu: *
- ext-curl: *
- ext-dom: *
- ext-fileinfo: *
- ext-gd: *
- ext-gettext: *
- ext-iconv: *
- ext-igbinary: *
- ext-imagick: *
- ext-intl: *
- ext-json: *
- ext-libxml: *
- ext-mbstring: *
- ext-msgpack: *
- ext-openssl: *
- ext-pdo: *
- ext-redis: *
- ext-simplexml: *
- ext-sqlite3: *
- ext-xml: *
- ext-yaml: *
- gmx/gmx-php85: ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.64
- humbug/php-scoper: ^0.18.17
- phpbench/phpbench: ^1.3
- phpmd/phpmd: ^2.15
- phpstan/phpstan: ^1.12
- phpunit/phpunit: ^11.3
- squizlabs/php_codesniffer: ^3.10
README
Application skeleton for the GMX Framework — a high-performance PHP framework for building scalable web applications with a modular monolith architecture.
This repository is the recommended starting point for a new GMX project. It ships:
- the standard project layout (
apps/,config/,public_html/,bin/,var/) - pre-configured
composer.jsonwith the GMX package registry - environment configs for
dev/tests/stage/prod - web entrypoint (
public_html/v1/index.php) and CLI tool (bin/gmx) - an example module to copy from
Framework features, architecture and philosophy are described in the GMX Framework overview — this README only covers bootstrapping a project from the skeleton.
Requirements
- PHP 8.2+
- Redis 6.0+
- MySQL 8.0+ / MariaDB 10.5+
- Composer 2.0+
Quick Start
1. Create a project
git clone https://github.com/gmxphp/skeleton.git my-project cd my-project # start with a fresh git history rm -rf .git && git init
2. Install dependencies
composer install
The skeleton already includes the GMX composer registry. If you need to add it globally (e.g. for CI), run:
composer config repositories.gmx composer https://code.syn.st/api/packages/gmx/composer
3. Set your license key
Edit config/base.yml:
framework: apps: use_proxy_mode: true license: url: "http://license.gmx.run/v1/?key=LICENSE_KEY"
For licensing inquiries: sales@gm.st
4. Run
Use gmx-devstack — a ready-made Docker environment (PHP + Redis + MySQL) wired for this layout.
Project Structure
my-project/
├── 3rdparty/ # Global composer dependencies
├── apps/ # Your application modules live here
│ └── hello/ # Example module
│ ├── App.php # Module entry point
│ ├── manifest.yml # Declarative module config (routes, DI, events, tasks)
│ └── lib/ # Module code (controller/, service/, repository/, ...)
├── bin/
│ └── gmx # CLI: scheduler, workers, maintenance commands
├── config/ # Environment configuration
├── lib/ # Project-wide shared libraries
├── public_html/
│ └── v1/index.php # Web entrypoint (API v1)
├── tests/ # Test suites
└── var/ # Runtime data, gitignored (cache/, logs/, tmp/)
Each module is self-contained: its routes, DI, events, background tasks and config
are declared in its own manifest.yml. Modules never reference each other's code
directly — they communicate via ports, events and queues.
Your First Module
mkdir -p apps/hello/lib/controller
apps/hello/manifest.yml:
name: hello version: 1.0.0 description: My first module bootstrap: helloController: class: lib\controller\HelloController routes: - path: /hello method: GET handler: helloController.index id: hello
apps/hello/lib/controller/HelloController.php:
namespace hello\lib\controller; class HelloController { public function index(): array { return ['message' => 'Hello from my first GMX module!']; } }
curl http://localhost/v1/hello
Where to go next: services and repositories, manifest.yml reference
(events, tasks, middleware, DI) — see the
Architecture Guide.
Testing
./vendor/bin/phpunit # or: make comp test-unit
Module tests live next to the module (apps/<module>/tests/), project-wide
suites — in tests/. See the
Testing Guide.
Documentation
Security
For security issues, please email dev@gm.st instead of using the issue tracker.
License
GMX Framework is proprietary software owned by Grand Media LLC. The skeleton itself may be used as a template for projects built on a licensed copy of GMX. Licensing: sales@gm.st
© 2026 Grand Media LLC. All rights reserved.