Thank you for your interest in contributing to MikoPBX! This guide will help you get started.
This project follows the Contributor Covenant v2.1. By participating, you are expected to uphold this code.
- Report bugs — file an issue with steps to reproduce
- Suggest features — start a topic on forum.mikopbx.com
- Submit code — fix bugs or implement features via pull requests
- Translate — help localize the interface on Weblate
- Write documentation — improve the docs
- PHP 8.4 with Phalcon 5.9 extension
- Composer
- Node.js (for JavaScript transpilation)
- Docker (for running MikoPBX locally)
# Clone the repository
git clone https://github.com/mikopbx/Core.git
cd Core
# Install PHP dependencies
composer install
# Run code quality checks
vendor/bin/phpstan analyse --configuration=phpstan.neon
vendor/bin/phpcs --standard=PSR12 src/The easiest way to run MikoPBX for development is via Docker. Your local src/ directory is automatically synchronized to the container.
- PSR-12 coding style
- PSR-4 autoloading
- PHP 8.4 — use modern features (typed properties, enums, match expressions, named arguments)
- Run
vendor/bin/phpcs --standard=PSR12before submitting - Run
vendor/bin/phpstan analysefor static analysis
- ES6+ syntax (classes, arrow functions, template literals, destructuring)
- Airbnb style guide
- Transpiled to ES5 via Babel for browser compatibility
- Write clear, concise commit messages
- Use conventional prefixes:
fix:,feat:,refactor:,docs:,test:,chore: - Reference issues where applicable:
fix(extensions): handle empty name (#123)
- Fork the repository and create a branch from
develop - Make changes — keep PRs focused on a single concern
- Test — ensure existing tests pass and add tests for new functionality
- Lint — run code quality checks
- Submit — open a PR against
developwith a clear description
- All CI checks must pass (PHPStan, phpcs, composer audit)
- New features should include tests
- Breaking changes must be documented
- Keep changes minimal and focused
src/
├── AdminCabinet/ # Web UI controllers, views, forms
├── Common/ # Shared models, translations, DI providers
├── Core/ # Asterisk configs, system utilities, workers
├── Modules/ # Module framework base classes
├── PBXCoreREST/ # REST API controllers and processors
└── Service/ # Service layer components
To add new functionality, consider building a module instead of modifying the core. See the ModuleTemplate repository for a starting point.
Interface translations are managed through Weblate. Do not edit translation files in src/Common/Messages/ directly — changes will be overwritten by Weblate sync.
- Forum — questions about development and usage
- Telegram Chat — real-time help from the community
By contributing, you agree that your contributions will be licensed under the GPL-3.0 License.