The charter
Six core principles
These govern what goes into the framework and how it is shaped. They are design constraints, not marketing — when a change conflicts with one, the change is wrong until argued otherwise.
Human First
Code should be obvious to a human.
TetherPHP must prioritise readable, understandable code. Developers should be able to open an unfamiliar project and quickly understand what it does and where things belong. No cleverness for cleverness' sake.
Agent Ready
Everything a human can understand, an agent should be able to understand.
TetherPHP's architecture, conventions and tooling are deliberately designed for AI agents. Predictable naming, explicit dependencies, consistent structure and machine-readable context make it easy for an agent to navigate and modify an application safely.
Explicit Over Magic
If something matters, make it visible.
TetherPHP puts the wiring where you can see it. You should be able to trace a request from route to response by reading the code in front of you, without holding framework behaviour in your head to follow it.
- Request
- Route
- Action
- Domain
- Responder
- Response
One Obvious Way
There should be one obvious way to do things.
TetherPHP is opinionated: one clear convention rather than several ways to reach the same result. Adding a second way to do something means removing the first. That keeps the number of things to hold in mind small, for developers and agents alike.
Small & Composable
The core should do less, but do it well.
The core provides the fundamental building blocks of an application, and stops there. Database layers, validation, templating and queues compose in as packages rather than shipping in the middle. Small core. Strong foundations.
Tools Are Part of the Framework
The framework should help you understand the application, not just run it.
TetherPHP's CLI and developer tooling are first-class. Commands such as make:action, test, inspect, explain and context help developers and agents understand, build and maintain an application. The framework isn't just the runtime — the tooling is part of the developer experience.