______ ______ ______ __ __ ______ __ __ ______ ______ __ __
/\ ___\/\ __ \ /\ __ \ /\ '-./ \ /\ ___\ /\ \ __\ \ /\ __ \ /\ __ \ /\ \/ /_
\ \ __\\ \ __< \ \ __ \\ \ \._/\ \\ \ __\ \ \ \| \\ \\ \ \/\ \\ \ __< \ \ _ \
\ \_\/ \ \_\ \_\\ \_\ \_\\ \_\/\ \_\\ \_____\\ \__/_.__\\ \_____\\ \_\ \_\\ \_\ \_\
\/_/ \/_/\/_/ \/_/\/_/ \/_/ \/_/ \/_____/ \/_/ \/_/ \/_____/ \/_/\/_/ \/_/\/_/
Titon is a modular web framework built on Hack that runs in HHVM. It is written with simplicity and efficiency in mind, with enough room for extensibility and abstraction. The framework takes advantage of Hack's strict mode, type system, generics, collections, and more. It also integrates the wonderful PSRs from PHP-FIG for increased interoperability with external PHP code bases and libraries.
Looking for more information? Find us in #titon on FreeNode.
Upcoming features and release plan.
- February
- Kernel package - Application foundation [COMPLETE]
- March
- Console package - Command line tools [IN PROGRESS]
- Cleaned up unit tests [IN PROGRESS]
- April
- MVC package - Model-view-controller application
- G11N package - Internationalization and localization
- May - June
- CommandBus package - Command bus layer
- DB package - Database abstraction layer
- July
- Model package - Object relational mapper and active record for DB entities
- Beta release
- August
- Session package - Custom session handler
- September
- Queue package - Queue, job, and worker services
- October
- Mail package - Emailing layer
- November
- Auth package - Authentication and authorization
- December
- ACL package - Access control lists
- January
- ADR package - Action-domain-responder application
- 0.1.0 release
Documentation is currently in the works, but in the mean time, check out the following articles.
Titon is accepting any knowledgable PHP developers looking to get their feet wet in Hack. Chat with us over in #titon for more information.
Titon comes packaged with a Vagrant box and a handful of Python scripts to ease the testing process. Boot up the Vagrant instance with vagrant up
and SSH into the box with vagrant ssh
. Once in Vagrant, you can run the following command to run tests.
/vagrant/bin/run-tests
Or run tests for a single file or folder.
/vagrant/bin/run-tests --path=Titon/Common
Or filter tests based on class or method name.
/vagrant/bin/run-tests --filter=methodName
For the most part, Titon strives to be strict mode only. This can be very challenging, but with Hack's built-in type checker, it couldn't be easier. Simply run the following command to check for strict issues.
/vagrant/bin/type-check
Or type check a specific folder.
/vagrant/bin/type-check --path=Titon/Utility
When filtering down by path, multiple errors will still arise like "Was expecting a class", "Unbound name", "Unbound global constant", "This is not a container, this is an object of type X", etc. The main cause of this issue is that the type checker is ran in a sub-folder, and not the root, so all those classes are not in scope. This should not be an issue if the type checker is ran in the source root.