Skip to content
Meimo Cloud

Platform

What’s running, down to the detail.

Everything on this page exists in the console today, backed by the infrastructure it describes. Where something has a limit or is not finished, this page says so.

Applications

Source in, container out — or an honest refusal.

Upload a directory with the CLI, push to a linked GitHub branch, or point at a prebuilt image. The detector reads the files you shipped; it never guesses a start command.

Runtimes the detector builds, and the evidence each needs
DockerfileDockerfile at the root — used exactly as written
Next.jsnext in dependencies; standalone output when configured
Next.js (static export)output: "export" — served by Nginx
Static site (Vite)vite plus a build script
Static site (Create React App)react-scripts plus a build script
Node.js servicea start script that is not a dev server
Python (ASGI via uvicorn)FastAPI or uvicorn and a top-level app
Python (WSGI via gunicorn)Flask or gunicorn and a top-level app
Static siteindex.html at the root, nothing to build
Your Node version, not ours
Node 18, 20 or 22, chosen from engines.node or .nvmrc. A version with no image is refused rather than built on the wrong runtime.
Refused by name
Development servers (next dev, vite, nodemon…), Bun and Deno projects, monorepo roots and Django without a Dockerfile are stopped with a message that names what triggered the refusal.
Environment variables
Secret values are masked, never written into an image layer, injected only at runtime, and every reveal is recorded in the audit log with the key — never the value.
Contained by default
Each container runs with memory, CPU and process limits, no-new-privileges, and on its project's network only.
Operate it
Runtime logs from the running container, stop and restart, a configurable health-check path, and a permanent hostname under apps.meimocloud.com.
Custom domains
Attach verified domains to an application; see Domains & SSL.

Deployments

Every deploy is a record you can inspect and return to.

Each deployment carries its status, the detected runtime, its image and its build log, so what shipped — and why it failed — is never a guess.

  • PENDING
  • BUILDING
  • DEPLOYING
  • SUCCESS
  • FAILED
  • ROLLED_BACK
Readiness gate
Success means the container is running, has not restarted, and its port accepted a connection from the ingress — optionally on your health-check path. What the gate proved is written into the build log.
One at a time
An application has at most one deployment in flight. A second request is refused with a clear message instead of racing the first.
Roll back
Re-run an earlier deployment's exact image — no rebuild, just a container replacement. Images from recent deployments are kept on the host for this.
Nothing left hanging
A reaper closes out deployments that stopped making progress, so a crashed worker cannot leave one building forever.

Databases

A dedicated engine per database.

Never a shared, multi-tenant server: each instance is its own container with its own volume, on the project's network and nowhere else.

  • PostgreSQL
  • MySQL
  • MariaDB
  • Redis
  • MongoDB
Credentials sealed at rest
Generated per instance and encrypted with AES-256-GCM; decrypted server-side only when the platform has to act on the instance.
Reachable only from the project
No host port is published. Your applications reach the instance over the project network; other projects have no route to it.
Lifecycle
Start and stop an instance, view its connection details, and reset its password from the console.
Metered while running
Instance hours count the time an instance is actually running, reconstructed from recorded status changes.

Storage

Object storage where files skip the API.

Buckets live on an S3-compatible object store. Uploads and downloads use presigned URLs, so bytes travel directly between the client and storage.

Private or public-read
Buckets are private by default. A public bucket gets a read-only policy for its objects — nothing more.
Presigned upload and download
Signed URLs for a single object, valid for between one minute and one day, for browser or server use.
Browse objects
List a bucket's objects page by page from the console.
Metered by real bytes
Storage is measured in GB-months from a scan of the objects actually stored.

Domains & SSL

Proof first, then a real certificate.

A domain has to prove ownership before anything is issued, and DNS has to point at the platform before a certificate challenge is ever attempted.

  1. 01

    Verify

    Publish the TXT record the console gives you.

  2. 02

    Point

    Resolve the hostname to the platform's address.

  3. 03

    Issue

    Let's Encrypt certificate issued, expiry tracked, renewed automatically.

Edge caching, honestly scoped
Optional Nginx caching and compression per domain, with a configurable TTL, purge, and hit metrics. It runs on the platform host — a cache in one region, not a multi-region CDN.
Application hostnames
Every application also gets a permanent name under apps.meimocloud.com, covered by a wildcard certificate — no setup required.

Platform services

Services your application calls.

Enabled per project from the console's marketplace and metered where they do real work.

Email
Verified sending domains with DKIM signing, delivered direct to the recipient's mail server, with a per-organization hourly quota.
Identity
OAuth 2.0 clients for your own applications, with client secrets stored only as hashes.
IoT
A device registry where each device authenticates with its own bearer token and reports telemetry.

AI, Maps, SMS and Push have screens in the console, but no provider is connected to them yet. Requests to them are recorded as not configured rather than faked.

Teams & access

Real multi-tenancy, enforced in the database.

Organizations own billing, members and projects. Every organization's data is isolated by Postgres row-level security, not only filtered in application code.

  • Owner
  • Administrator
  • Developer
  • Billing
  • Support
  • Read-only
Six roles, one matrix
Each role maps to a fixed set of permissions, checked on every request against the membership as it is now — a revoked role stops working immediately.
Project membership
Owners and administrators reach every project. Everyone else needs a membership on that specific project.
No self-promotion
Only an owner can grant or change the owner role, nobody can change their own role, and an organization always keeps at least one owner.
Environments
Projects are marked development, testing or production, so the environment is visible wherever the project is.

Audit log

Know what happened, and who did it.

Deployments, resource changes, membership and role changes and billing events are written to an audit log in the same transaction as the change itself.

Scoped and filterable
Audit history is isolated per organization and browsable per project, filtered by category: auth, access, billing, resources, deployments and platform services.
Retained
Entries are kept for 400 days by default, then swept by a daily retention job.

CLI & API

Reference: the meimo CLI and API tokens.

The CLI signs in with an API token created in the console under Account → API Tokens. Progress goes to stderr and results to stdout, so meimo deploy > url.txt captures just the URL.

shell
meimo loginmeimo projects listmeimo project use <project-slug>meimo deploy
CLI commands
meimo loginSign in with an API token from the console
meimo whoamiShow the signed-in account and the token's scopes
meimo projects listProjects in the current organization
meimo project use <slug>Select a project for this directory
meimo apps listApplications in the current project
meimo deploy [path]Upload, build and deploy a directory
meimo statusCurrent application and last deployment
meimo logsRuntime logs from the running container
meimo logs --buildBuild log for the most recent deployment
CLI options
--app <name|id>Application to act on
--port <number>Port the container listens on (overrides detection)
--yesCreate a missing application without asking
--filesPrint every file that will be uploaded
--verboseStream the full build log while deploying
--stdinRead the token for meimo login from standard input (CI)
Files the CLI reads and writes
~/.meimo/config.jsonYour API token, mode 0600. Never commit or share.
./.meimo/config.jsonSelected organization, project and application ids. No secrets — safe to commit.
./.meimoignoreExtra upload exclusions in .gitignore syntax. node_modules, .git, .env and .env.* are never uploaded.
API token scopes
readAny read request. Implied by every other scope; a read token never mutates.
deployChanges to applications: uploads, builds, deployments and settings.
storageChanges to buckets and objects.
writeEvery other change — databases, domains, projects and services.
Scopes narrow, roles still apply
A token can do only what both its scopes and your role allow. No token can create another token, reach the operator surface, or reveal a secret environment variable.
Built to be found and revoked
Tokens begin with meimo_pat_ for secret scanners, can expire, are stored only as a hash, and are revoked from the console.
shell
curl -H "Authorization: Bearer $MEIMO_TOKEN" \  https://api.meimocloud.com/api/v1/me# the signed-in account, and this token's name and scopes

Billing

Per organization, from what is actually used.

Choose pay-as-you-go or a monthly subscription per organization. Usage is computed from real signals — running intervals, stored bytes, bytes served, messages sent.

Put something real on the internet today.

Create an organization, set up billing, open a project, and run meimo deploy. The first URL is a few minutes away.