Built by a Python dev who is tired of TypeScript-first AI tools

An IDE and Platform built
for Python developers.

You opened the laptop to ship a feature. Three hours later you’re rolling back a migration nobody asked for, re-pinning the package the LLM “helpfully” downgraded, and explaining (again) why dropping the users table is not a reasonable bug fix.

marpy is a Python-first AI coding IDE and development platform with rails on the parts that actually hurt — your database, your dependencies, your deploy. Same speed. None of the 4am cleanup.

marpy IDE editing a Python project with live preview

Specific disasters,
specifically prevented

Every AI tool can write a Flask route. The difference is what happens when your assistant gets cornered and decides the cleanest fix is something stupid. marpy intercepts the moves that hurt and quietly does the right thing instead.

guardrails.log — this week
14:02 pip install django==3.2.5
Stale version. Resolved current PyPI release (5.2.1) and indexed today’s docs so the assistant writes against the real API.
14:18 ALTER TABLE users DROP COLUMN email
Blocked. Destructive DDL on prod requires a manual confirmation click in the IDE.
14:33 echo "STRIPE_KEY=sk_live_…" >> .env
Refused. Secrets live in a managed vault and are injected at runtime, not written into repo files.
15:01 rm -rf /tmp/../etc/passwd
Refused. Project terminal is shell-wrapped to /project. Paths outside the tree never resolve.
15:22 ad-hoc ALTER TABLE posts ADD COLUMN slug
Rewritten as Alembic migration 008_add_slug_to_posts.py so the change is reviewable and reversible.
16:08 pip install pandas (no version pin)
Resolved to pandas==3.0.4 (current). Indexed 412 doc chunks in the background.
16:41 migration 009: DROP TABLE billing_events
Blocked at the migration gate. Suggested archive-table pattern instead.

Migration safety

Schema changes go through versioned Alembic migrations with pre/post hooks. DROP and destructive ALTER on prod are blocked at the gate. Out-of-band DDL gets rewritten as a reviewable migration file.

Package freshness

Every pip install is intercepted. marpy resolves the current PyPI version and indexes the package’s real docs in the background, so the assistant writes against the API your runtime actually has — not the one it half-remembers from training.

Sandbox + secrets

The project terminal is shell-wrapped to the project root, so a stray rm -rf can’t reach outside. Secrets live in a managed vault and are injected as env vars at runtime, never written to files the LLM can read.

The JavaScript-first tax,
and why you shouldn’t pay it

Most AI coding platforms were built for frontend workflows first. Python got added later, and it shows.

You can duct-tape Python into v0, Replit, or Lovable. It’ll look fine in the demo. Then one day the LLM gets cornered by a schema error and decides the cleanest fix is to drop your database and start fresh.
The challenge JS-first bolt-ons (v0/Replit) The marpy standard
Database migrations LLM hits a schema conflict, drops every table, starts over. You find out when users can’t log in. Alembic migrations, version-controlled and guarded. DROP TABLE in production gets blocked at the gate.
Data persistence Data lives in the container. Container restarts, data’s gone. Managed MariaDB with backups and point-in-time recovery.
Deployments Vibe-based “git push and pray” with no audit trail. Date-based tags like 202603061430 that trigger containerized builds and leave a readable history.
Secrets management Hardcoded keys in repos for bots, scripts, and ex-employees to discover. Managed secrets that never live in git and are injected at runtime.
Python as a citizen Second-class runtime bolted under a JS-centric control plane. Python-native stack where Flask, FastAPI, and Django are first-class.

From “it works on my laptop”
to “it works in production”

Four steps. No séance required.

01

Build and break things in the sandbox

You start in a browser IDE that is Python-first: virtualenvs, proper dependencies, real logs, not a toy REPL. Break things fast, fix them faster, and keep your local machine out of dependency hell.

02

Connect a database that won’t reset on you

LLM copilots love a clean slate. Hit a gnarly migration and their default move is to wipe everything and try again. marpy provisions managed MariaDB with versioned migrations and guardrails, so “drop all tables” is simply not an option.

03

Deploy via date-based tags

Forget the v1.2.7 fiction. marpy uses date-based tags like 202603061430 to trigger containerized builds and deployments. When someone asks what’s in production, you pull the deploy log—not a memory.

04

Zero-drama hosting

Like Vercel, but for your Python backend instead of another React landing page. We host your app, keep the processes healthy, and handle SSL, routing, and boring platform plumbing, so you can go ship something.

Deploy log

202603041015 Initial scaffold — Flask + MariaDB prod
202603051342 Add user auth + bcrypt prod
202603060830 004_add_posts_table prod
202603061430 Fix slug uniqueness constraint prod → live

Features, born from developer’s scars

These aren’t checkbox features. They’re the defaults we wish every platform had enforced on us five years ago.

Python First

Python is the core runtime, not an afterthought. We built marpy for Flask, FastAPI, and Django apps, not as a JS-centric control plane with a Python bolt-on.

The Emoji Rule

Everything is utf8mb4. Someone will sign up as 🚀🚀🚀, and your admin panel will either handle it gracefully or start throwing 500s at 2am. We prefer the first option.

The S3 Habit

Images and PDFs don’t belong in your database. Store a blob in MariaDB and your backup balloons, your restore time triples, and your DBA starts drinking earlier. marpy routes blobs to S3-style object storage and keeps your database fast.

The UTC Standard

All timestamps in UTC, always. The alternative is a daylight-saving bug where one hour of November 1st happens twice, every year, until someone files a ticket.

Observability

Structured logs, metrics, and alerts that tell you when the system is on fire—instead of waiting for a customer to email support.

AI with supervision

Use LLMs to scaffold code, not to freelance as your DBA. marpy keeps AI-generated changes fenced behind versioned migrations and deployment workflows.

Questions we’ve actually been asked

Answered without the usual runaround.

Is this just another “vibe-coding” tool?

No. Vibe-coding is letting an LLM both implement and judge your backend, then deploying whatever it wrote. marpy is built with an opinionated stack and a Python-first LLM IDE.

Why can’t I just keep my database in the container?

Containers are designed to be disposable. Keeping production data there is like storing your grandmother’s jewelry in a cardboard box on the sidewalk and hoping it doesn’t rain. marpy insists on managed databases with backups and point-in-time recovery.

I’m using v0 for my UI. Can I still use marpy?

Yes. Let v0 do what it’s good at—fast frontends and experiments. Point your API calls at marpy and let it handle the Python runtime, MariaDB connections, migrations, and back-end deployments.

What happens if marpy goes away?

It’s containers and normal Python. That’s it. If we ever get acqui-hired by a company whose logo has a cloud in it, don’t fret. You can deploy the same containers elsewhere. Your app isn’t glued to anything proprietary.

Who is this not for?

If you’re happy with local-only scripts, your entire backend is a couple of serverless functions behind a JS framework, or you don't appreciate the elegant simplicty of Python you probably don’t need marpy.

Your Python app isn’t a hobby.
Stop hosting it like one.

Stop polishing the toolchain. Get your Python app into production, learn something from real users.

or
Continue with GitHub

Already have an account? Log in