Core
The XP Framework is an all-purpose, object oriented PHP framework.
Install / Use
/learn @xp-framework/CoreREADME
XP Framework Core
This is the XP Framework's development checkout.
Installation
If you just want to use the XP Framework, grab a release using composer require xp-framework/core. If you wish to use this development checkout, clone this repository instead.
Runners
The entry point for software written in the XP Framework is not the PHP interpreter's CLI / web server API but either a command line runner or a specialized web entry point. These runners can be installed by using the following one-liner:
$ cd ~/bin
$ curl -sSL https://github.com/xp-runners/reference/releases/download/v9.2.0/setup-9.2.0.sh | sh
Using it
To use the the XP Framework development checkout, put the following in your ~/bin/xp.ini file:
use=/path/to/xp/core
Finally, start xp -v to see it working:
$ xp -v
XP 12.8.1-dev { PHP/8.5.2 & Zend/4.5.2 } @ Windows NT SURFACE 10.0 build 26200 (Windows 11) AMD64
Copyright (c) 2001-2026 the XP group
FileSystemCL<./src/main/php>
FileSystemCL<./src/test/php>
FileSystemCL<./src/main/resources>
FileSystemCL<./src/test/resources>
FileSystemCL<.>
Basic usage
The XP Framework runs scripts or classes.
Hello World
Save the following sourcecode to a file called ageindays.script.php:
<?php namespace examples;
use util\{Date, Dates};
use util\cmd\Console;
$span= Dates::diff(new Date($argv[1]), Date::now());
Console::writeLine('Hey, you are ', $span->getDays(), ' days old');
Now run it:
$ xp ageindays.script.php 1977-12-14
Hey, you are 16015 days old
Alternatively, you can put this code inside a class and give it a static main method. This way, you can use features like inheritance, trait inclusion etcetera. This time, save the code to a file called AgeInDays.class.php.
<?php
use util\{Date, Dates};
use util\cmd\Console;
class AgeInDays {
public static function main(array $args): int {
$span= Dates::diff(new Date($args[0]), Date::now());
Console::writeLine('Hey, you are ', $span->getDays(), ' days old');
return 0;
}
}
Note the arguments have shifted by one: If you want the class' name, simply use self::class!
$ xp AgeInDays 1977-12-14
Hey, you are 16015 days old
Contributing
To contribute, use the GitHub way - fork, hack, and submit a pull request! :octocat:
Enjoy!
Related Skills
node-connect
339.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
339.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.8kCommit, push, and open a PR

