Guide

How to host a website for free

What free hosting really gives you, where every provider draws the line, and how to tell whether free is the right answer for your project.

Ben Johnson · last checked 2026-08-02 · 6 min read

TL;DR

Free hosting is real and it works — for learning, portfolios, prototypes and small personal sites. It is genuinely unsuitable for anything commercial, anything that must send email, and anything where an hour of downtime costs you money. The limit you will hit first is concurrent PHP processes, not disk space.

If you are not sure what hosting even is yet, start with what web hosting does.

How to host a website for free

We run a free hosting tier, so read this with the scepticism it deserves. Then check every claim against any other free host’s own documentation — you’ll find the shape is the same everywhere, because the constraints come from the economics, not from any particular company’s generosity.

Why free hosting exists at all

A free hosting account costs the provider very little: a dormant site consumes almost no CPU or memory, and most free accounts are abandoned within a week. The real costs are abuse handling and support, not servers.

So the model works like this: free accounts are an acquisition channel. A small percentage of users outgrow the free tier and upgrade, and that pays for everyone else. This is worth understanding because it tells you exactly where the limits will be — they’re set precisely where a serious site starts to feel them, and nowhere else.

It also tells you what to be suspicious of. A free host with no paid tier has to make money some other way: injected advertising, sold analytics, or nothing at all, in which case it will disappear. Ask what the business model is. If there isn’t one, don’t put anything you care about on it.

The three limits that actually bind

Providers advertise disk space because it sounds generous. Disk space is almost never the constraint.

1. Concurrent processes — the real ceiling

This is how many PHP requests your account may run at the same time. Free plans typically allow around ten.

The arithmetic matters. If each page takes 2 seconds to generate and you have 10 process slots, you can serve about 5 requests per second. The 11th simultaneous visitor gets a 508 error.

An uncached WordPress site is slow enough that this happens at genuinely modest traffic. With full-page caching turned on, most requests never invoke PHP at all, and the same account comfortably serves far more. This single setting moves the ceiling more than any upgrade will, which is why it’s the first thing to do rather than the last.

2. Inodes — the file count limit

Every host caps the number of files you may store, typically around 30,000 on a free plan, usually more prominently than they cap gigabytes.

It exists to stop people using hosting as a file dump, and 30,000 files is far more than a normal site needs — until you install a plugin that generates six thumbnail sizes per image, or leave a cache directory unpruned. If you get a disk-full warning while apparently using very little space, this is why.

3. Outbound email — usually blocked entirely

Nearly every free host blocks outbound SMTP. mail() silently fails, and contact forms appear to work while sending nothing.

This isn’t stinginess. Free hosting attracts spammers, and a provider whose IP ranges land on blocklists ruins the service for every legitimate user on them. Blocking port 25 outright is the only defence that scales.

The workaround is straightforward, better than SMTP anyway, and free:

// Any transactional email API works over HTTPS, which is not blocked.
$ch = curl_init('https://api.resend.com/emails');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . getenv('RESEND_API_KEY'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'from'    => '[email protected]',
        'to'      => '[email protected]',
        'subject' => 'Contact form',
        'text'    => $message,
    ]),
]);
$response = curl_exec($ch);

Resend, SendGrid, Mailgun and Postmark all have free tiers in the region of 100 emails a day, which is more than most small sites send. Deliverability is also considerably better than sending from shared hosting.

What else is usually missing

Feature On free hosting Why
SSH access No Shell access on a free account is an abuse vector with no upside
Cron jobs Rarely Scheduled tasks across thousands of dormant accounts are expensive
Backups No Assume your data is not backed up and take your own
Uptime guarantee No There is no SLA on something you didn’t pay for
Node / Python / Ruby No Free shared hosting is PHP; persistent processes don’t fit the model
Staging environments No
Inactivity deletion Common Accounts unused for 30–60 days get removed

That last row deserves attention. Most free hosts delete accounts that show no login and no traffic for a month or two, and it’s how the economics work. If your site is genuinely dormant, log in occasionally or keep a local copy.

Free vs cheap paid

The relevant comparison is rarely free against expensive. It’s free against $3 a month.

Free ~$3/mo shared
Concurrent processes ~10 20–40
Outbound email Blocked Usually included
Cron No Yes
Backups No Usually daily
Support Community forum Ticket system
Uptime commitment None Typically 99.9%
Inactivity deletion Yes No

If your site makes money, or if an outage costs you a customer, $3 a month is not a meaningful expense and you should stop reading here.

Free is the right answer when the site is a portfolio, a class assignment, a prototype, a hobby project, or anything where you’re still finding out whether it matters. Those are legitimate, extremely common cases, and paying for them is a waste.

How to tell you’ve outgrown it

Not by feel — by symptom:

  • You see 508 errors after enabling caching, fixing slow queries and blocking scrapers. That’s real concurrent traffic and configuration will not fix it.
  • You need email to arrive reliably and an HTTP API isn’t enough.
  • You need cron, SSH, or a runtime that isn’t PHP.
  • Downtime has started costing you something.
  • You’re spending more time working around limits than building.

That last one is the honest signal. Free hosting is a good deal when it’s invisible. When you’re actively fighting it, the time you’re spending is worth more than the upgrade.

Choosing a free host

Ask these five questions:

  1. What’s the business model? A paid tier means the free tier is an acquisition channel and is likely to persist. No paid tier means you’re the product or the service is temporary.
  2. What are the actual limits? Concurrent processes, inodes, and email — not the advertised “unlimited” disk.
  3. Is there advertising injected into your pages? Some free hosts insert their own ads into your HTML. Check before uploading.
  4. Can you export everything? Files over FTP and a database dump, on demand. If not, you’re locked in.
  5. What’s the inactivity policy? How long before an unused account is deleted?

Any host that won’t answer these plainly in its own documentation has told you something useful.

Where free hosting makes sense for you

If you want to follow along, a free CWP account gives you PHP, MySQL, FTP and a subdomain in about a minute, with no card. The limits above are ours, published in full.

The step-by-step process is the same as the main guide — upload to the web root, create a database if you need one, point your domain, enable HTTPS.