Databases
Your data belongs
beside your app.
Five engines, provisioned into the same private project as the applications that read them. Your app reaches its database by name on a network the internet is not on — no public endpoint to lock down, no connection string to carry around, and no second bill.
PostgreSQL
:5432 · backups available
Name
Plan
DATABASE_URL added to web
written in as a secret · app redeploying
Engines
Five, on every tier
Relational, document and key-value. The tier sets the size, never the engine.
Network
Private to your project
Reached by name from your own containers. Public access is off until you turn it on.
Billing
Hourly, one balance
The same prepaid credit as your apps and your model calls. Free while stopped.
Engines
Pick the one your application already speaks
Every engine is available on every tier, so the decision is about the workload rather than about what a plan unlocks. Each runs as its own service in your project, on its standard port.
PostgreSQL
:5432The default choice, and the one most stacks assume.
MySQL
:3306For applications and frameworks that expect it.
MariaDB
:3306A drop-in for MySQL, on its own release line.
MongoDB
:27017Document storage where a schema would be in the way.
Redis
:6379Caching, queues, sessions and rate limits.
No engine tax
The smallest tier runs any of the five. Nothing here is reserved for a larger plan.
Adjacency
The part a hosted database somewhere else cannot do
A database you rent elsewhere is reached over the public internet, which makes its address, its firewall and its credential your problem to hold. Here the database is provisioned into the project your applications already run in, so there is nothing in between to secure.
-
Reached by hostname. Your app connects to the database by its name on the project network, the way it would a service in the same compose file.
-
No public endpoint by default. There is no address on the internet to find, scan or brute-force, because one was never created.
-
Opening it is deliberate. Publishing a database on a port takes an admin, a typed confirmation, and leaves an entry in your audit log. It is not a checkbox anyone can pass on the way to something else.
-
A stable address if you do open it. A published database answers on a hostname of its own, so the connection string you distribute survives the database being moved or the port being closed and reopened.
// Written in as a secret when the database is created.// Nothing to paste, and nothing to rotate by hand.const pool = new Pool({ connectionString: process.env.DATABASE_URL,});// primary.<your-project> — a name on your own network,// not a host on the public internet.connected
What you get
Managed means we hold the parts you would rather not
Private before it is anything else
A new database has no route in from the internet. It answers on your project's own network and nowhere else, which is the state it stays in unless an admin deliberately changes it.
The credential is written, not handed over
Maxlayer puts the connection string into the applications that need it as a secret and redeploys them. Nobody pastes a password into a dashboard field, and there is no copy of it in a chat log.
Billed by the hour, from one balance
The same prepaid credit your applications and model calls draw from. It meters while the database runs, stops at the monthly price, and costs nothing while stopped.
Backups are a switch, not a project
On or off per database. Maxlayer owns the storage, the schedule and the retention, so there is no bucket to create and no credential of yours to guard.
Backups
One switch, and the storage is ours
Turn backups on for a database and Maxlayer takes the dump on a schedule and keeps it in storage we own and pay for. There is no bucket for you to create, no key for you to guard, and no schedule for you to invent. While a database's backups are on it bills at 130% of its plan — the surcharge runs through the same meter as the plan itself.
Turning backups off stops the schedule and leaves the dumps in place. They are recovery copies, and deleting them because a switch moved would remove the one thing the feature exists for.
What it costs
A database is a container, and it bills like one
Seven tiers, each with its CPU, memory and storage, priced from their own catalogue rather than as a markup on the application plans — a database wants memory where a web process wants CPU. It meters by the hour against your prepaid balance and stops at the monthly price, so a full month never costs more than the figure on the tier.
Metered
By the hour while it runs, from the same credit as your apps and model calls. One balance, one top-up.
Capped
At the tier’s monthly price. A month is paid off after 28 days and the rest of it is not charged.
Stopped
Costs nothing. A stopped database keeps its data and its connection string and draws no credit.
Backed up
130% of the plan while the switch is on, hourly rate and monthly cap alike.
Alongside
The rest of the platform is already here
The app that reads it
Connect a repository or a container image and Maxlayer builds it, runs it and keeps it online — in the project your database is already in.
The models it feeds
Chat, embeddings, images and video on an OpenAI-compatible endpoint, on the same organization key and the same prepaid balance.
Give your app a database it reaches by name
Create one in your project, and the connection string is written into the apps that need it. Hourly from the same balance, private until you decide otherwise, nothing to cancel.
- GitHub + GitLab
- Container images
- OpenAI-compatible AI
- Pay as you run