In my guide to hosting WordPress for free on Vercel, WordPress never actually runs on Vercel. You build the site locally, export it to static HTML, and Vercel serves the files.
That works for brochure sites. But readers who tried it have asked me a different question: can I keep the WordPress admin online, on Vercel, and just log in and edit?
ServerlessWP says yes. It runs the real WordPress inside Vercel’s serverless functions, with the database stored as a SQLite file. So I deployed it, used it like a site owner would, and measured what happened.
Short answer (tested October 2026)
Yes, you can run real WordPress on Vercel, with PHP and the admin dashboard, using ServerlessWP. My deployment was live about 60 seconds after clicking Deploy. Publishing a post took under half a second, and admin pages loaded in about 0.4 seconds.
The trade-offs: you can’t install plugins from the dashboard, contact forms need a separate mail service, simultaneous saves can fail because the database is a single SQLite file, the first visit after about 20 quiet minutes took 8 seconds, and the free Vercel Blob plan includes 2,000 write operations a month.
Good for a low-traffic personal site. For a business site with several editors, a shop or busy forms, use ServerlessWP’s MySQL option or regular WordPress hosting.
What is ServerlessWP?
ServerlessWP is an open-source project that runs WordPress on serverless platforms (Vercel, Netlify or AWS Lambda) instead of an always-on server. On Vercel, each page request starts PHP in a function, loads WordPress, and returns the page.
There’s no MySQL server. The database is a SQLite file kept in Vercel Blob storage, and media uploads go to the same Blob store. Vercel lists it as an official template, and the project describes itself as experimental.
| Static export (my earlier guide) | ServerlessWP | |
|---|---|---|
| What runs on Vercel | Plain HTML files | WordPress itself (PHP 8.3) |
| WordPress admin online | No | Yes |
| Database | None on Vercel | SQLite file in Vercel Blob |
| Edit a post | Edit locally, re-export, push | Log in and edit |
How long does the setup take?
About a minute of waiting. The project’s README has a “Deploy with Vercel” button that does everything:
- Click the button and pick your GitHub account. It copies the project into a new private repository.
- Add the Blob store Vercel asks for (private access is the default; keep it).
- Leave the two pre-filled environment variables as they are and click Deploy.
- Open your new
.vercel.appaddress and run the normal WordPress installer.

The Deploy with Vercel button copies ServerlessWP into a new private repository in your GitHub account.
My deployment was live about 60 seconds after I clicked Deploy.
One thing went wrong on the first run, and it’s worth knowing about. Right after deployment, Vercel’s success page loads your site several times at once to make a preview. Those simultaneous requests all tried to create the database file, and the logs showed This blob already exists. I fixed it by giving the database a new file name (the SQLITE_BLOB_PATHNAME environment variable) and redeploying. After that, the installer opened normally.
What works
I tested the things a small business site owner does every week.
| Task | Result |
|---|---|
| Write and publish a post | Works. Saved in under half a second and visible on the site immediately |
| Upload an image | Works. Took about 2.4 seconds; WordPress generated the usual thumbnail sizes |
| Stay logged in | Works. Ten admin pages in a row, no logouts, about 0.4 seconds each |
| Redeploy the site | Posts and images survive, because the database and uploads live in Blob storage |
For a site where one person writes a few posts a month, the admin feels like normal WordPress.
What doesn’t work the way you expect
You can’t install plugins from the dashboard
There’s no Add New button on the Plugins screen. Instead, ServerlessWP shows a notice: “Direct plugin installation is not currently possible with serverless functions.” Open the install page directly and WordPress answers “Sorry, you are not allowed to access this page.” That’s deliberate: ServerlessWP’s wp-config.php sets DISALLOW_FILE_MODS, because anything written to the function’s disk disappears on the next deployment.
To add a plugin, you put its folder in the repository (wp/wp-content/plugins/), commit and push. Vercel redeploys automatically. I added Contact Form 7 this way, and it appeared in the plugin list about a minute after the push. Then you activate it in the dashboard as usual.

No Add New button: ServerlessWP explains that plugins go through the Git repository. Contact Form 7 here was added with a commit and push.
It works, but it means every plugin, theme and update goes through GitHub. If the person running the site has never used Git, that’s a real barrier.
Contact forms don’t send email
Contact Form 7 accepted my test submission, then returned “There was an error trying to send your message”. The serverless environment has no mail server for PHP to hand messages to. You need an SMTP plugin connected to a sending service (Postmark, Mailgun, Amazon SES and so on), installed through the repository like any other plugin. The sending domain also needs SPF and DKIM records, or the messages that do go out will land in spam; I covered that in why emails go to spam after a domain migration.

My test submission: the form works, the email does not.
On a business site this matters more than anything else on this list: a contact form that can’t deliver messages is a lost lead.
Simultaneous saves can fail
SQLite is a single file, and ServerlessWP saves the whole file back to Blob storage after a write. I tested this directly:
- 3 comments sent one after another: all 3 saved.
- 5 comments sent at the same moment: 4 saved, 1 failed with a server error.
Nothing was lost silently: the failed request reported its error. But it confirms the project’s own advice: SQLite is fine for light activity, and sites with several editors, busy forms, shops or memberships should use the MySQL option instead.
The first visit after a quiet period is slow
| Request | Time to first byte |
|---|---|
| First visit after ~20 minutes with no traffic | 8.0 seconds |
| Next visits | 0.9 to 1.3 seconds |
There’s no page cache by default (every visit runs PHP), and the function lives in Vercel’s Washington region unless you change it. A low-traffic site will regularly show its first visitor an 8-second wait.
Watch the free Blob limit
Every time WordPress writes to the database, the SQLite file is uploaded to Blob storage again, and each upload counts as an “advanced operation”. My 15 minutes of testing used 116 of them. The free plan includes 2,000 per month, and Vercel’s documentation says that when you go over, Blob storage stays unavailable until 30 days have passed. With the database in Blob storage, the site stops working until then.

Blob usage on the test project after about an hour of testing, including the screenshots for this post.
Should you use ServerlessWP?
| Your site | My take |
|---|---|
| Personal blog or portfolio, one editor, you’re comfortable with GitHub | Good fit. Free to run at low traffic, and the admin works |
| Business site with a contact form | Possible, but plan for SMTP setup, Git-based plugin installs and the slow first visit |
| Several editors, a shop, memberships, busy forms | Use the MySQL option, or regular WordPress hosting |
| You want “WordPress, but free” and never want to touch Git | Regular hosting will cost you less time |
ServerlessWP is the closest thing to real WordPress on Vercel, and for what it is, it works. The setup takes a minute. Running it as a business site takes more: a mail service, a Git workflow for plugins and updates, and an eye on usage limits.
If you’ve deployed ServerlessWP or a static WordPress site on Vercel and got stuck on forms, plugins or speed, get in touch on my blog. Tell me what your site needs to do and I’ll tell you which setup fits.



