What we believe
A list of values is worthless unless each line costs something. These do, and you can check them against the code.
A product should start, not be assembled
Software that needs four other programs before it does anything has moved its complexity onto you and called it flexibility. One binary, storage inside it, its own screens. Dependencies get added when they buy something real - a second gateway needs a shared database, so that is exactly when a database appears.
Never sell a security primitive
Two-factor, passkeys, TLS, the vault, the audit trail: those are in the free image, and they always will be. Selling them would be selling safety to the people least able to pay for it. What the paid edition carries is scale and organisation - several organisations, external directories, clustering - not the lock on your own front door.
An error is a place to be helpful
The worst moment in using a product is the refusal you do not understand. A message that names what was given, what is accepted and where to change it turns that moment into a fixed problem. It is not politeness, it is the highest return on a line of code we know.
Saying no is part of the job
There is no plugin system, no expression language to learn, and no second way to do a thing the product already does. Every predicate and every filter in the catalogue is one we can explain, test and answer for at three in the morning.
That costs us features people ask for, and it is the point: the gateway in front of your applications has to stay small enough that someone new to it can read a route and know what will happen.
Open source is a default, not a campaign
What is generic gets published and maintained, as open source. What is our product is source-available instead: a licence that lets you read it, run it, change it and ship it inside your own work - the Functional Source License - and that becomes plain Apache 2.0 two years after each release. The only thing it forbids is selling a competing gateway with it.