Hosts and business sites
What each free host allows, including the rules for business and commercial sites.
Goodfellow sites are static files, so they can be hosted anywhere that serves files (see Host anywhere); the setup files Goodfellow writes are for the five hosts below, which have free plans.
Free plans have limits worth knowing about. These are the hosts' rules, not Goodfellow's, and they change, so check the links before deciding. Last checked in October 2026.
Which to choose
We recommend keeping the site on GitLab and publishing it with GitLab Pages, whatever the site is for. The setup page starts with that.
- Editors sign in with GitLab straight away. Sign in with GitHub needs a sign-in service someone runs; without one, GitHub editors paste a token.
- No other account: GitLab Pages publishes business sites and private projects for free, where on GitHub those need Cloudflare Pages and an account there.
- Scheduled changes go live on time, where on GitHub they go live within the hour (Scheduling).
Its limits:
- 400 build minutes a month, shared by every project in the account or group. A publish or an update takes a few minutes, the site is rebuilt overnight only when something changed, and a publish made while the site is still building cancels that build, so that's enough for most sites, but a busy one, or several sites in one group, can run out, and then nothing is published until the next month. Such a site can keep its files on GitLab and be built by Cloudflare Pages instead.
- Up to 5 people in a private group or account.
- New accounts may be asked to verify a phone number or card before GitLab runs their first build.
- Editors' sign-in reaches every project they can change, where GitHub's sign-in service gives a token for the site's repository alone, so keep editors' GitLab accounts to the sites they edit.
GitHub suits a site whose editors already use GitHub, or one with a developer who prefers it, and Bitbucket one whose organization already keeps its work there.
| On the free plan | GitHub Free | GitLab Free | Bitbucket Free |
|---|---|---|---|
| Free static hosting | GitHub Pages, public repositories only; or Cloudflare Pages or Netlify, public or private | GitLab Pages, Cloudflare Pages or Netlify, public or private | Vercel only, for non-commercial sites |
| Editors | Unlimited collaborators | Up to 5 users in a private group or account; unlimited if public | Up to 5 users in a workspace |
| Build minutes | Unlimited for public repositories, 2,000 a month for private | 400 a month (or build on Cloudflare Pages or Vercel instead) | 50 a month for Pipelines (Vercel builds the site itself) |
| Sign-in | Personal access token (fine-grained, or classic for collaborators), or Sign in with GitHub with a sign-in service you run | One-click sign-in (OAuth) or personal access token | One-click sign-in (OAuth, about two hours at a time), repository access token or Atlassian API token |
Bitbucket
Sites stored on Bitbucket Cloud are built and put online by Vercel: Bitbucket's own static websites have one address for each workspace and no domains of their own, and Cloudflare Pages doesn't build from Bitbucket. Bitbucket's free plan (Bitbucket plans):
- Up to 5 users in a workspace, each with their own Atlassian account.
- 50 build minutes a month for Bitbucket Pipelines, which run the nightly check for updates, plugins' tasks and writing
package-lock.jsonwhen a plugin is installed. Vercel builds the site itself, so publishing uses none. The nightly check takes about a minute when nothing changed, so it fits. Scheduled changes only ask Vercel to rebuild, at their time, which takes seconds. - Vercel's free plan is for non-commercial sites (see below), so a business site on Bitbucket needs Vercel's paid plan.
The setup page doesn't offer Bitbucket; make the site with npm create goodfellow@latest -- --bitbucket your-workspace/your-site (Put it online).
Cloudflare Pages
Cloudflare Pages builds sites from repositories on GitHub and GitLab, public or private. Its free plan's limits (Pages limits):
- 500 builds a month, one at a time, each up to 20 minutes. Each publish, overnight rebuild and scheduled change that comes due is one build; the site is rebuilt overnight only when something changed.
- 20,000 files, each up to 25 MiB.
- 2,000 redirects in the
_redirectsfile the build writes, two for each old address, so about 1,000 old addresses; past that, the build says so, and the pages it writes at old addresses handle the rest. - Domains: a subdomain, such as
www.example.org, can keep its DNS where it is, with a CNAME record; the domain itself, such asexample.org, has to use Cloudflare's nameservers, or redirect to the subdomain through your registrar or a redirect service. See Custom domains.
Cloudflare can't build on a schedule, so the site's nightly check, which installs updates and rebuilds it only when something changed, and its hourly check for scheduled changes run on GitHub Actions or GitLab CI, and ask Cloudflare to rebuild the site through its deploy hook. On a private GitHub repository, the hourly check uses about 720 of the free plan's 2,000 minutes a month; delete .github/workflows/scheduled.yml to have scheduled changes go live with the nightly rebuild instead.
Netlify
Netlify builds sites from repositories on GitHub and GitLab, public or private. Its free plan, for accounts made since September 4, 2025, counts everything in credits: 300 a month, a hard limit (Netlify pricing):
- 15 credits for each production deploy, which every publish, overnight rebuild and scheduled change that comes due is, so about 20 a month if the site used nothing else. Failed deploys, and builds Netlify skips, such as drafts', cost nothing.
- 20 credits for each GB visitors download, and 2 for each 10,000 requests.
- When the credits run out, every site on the account is paused until the next month, and visitors see "Site not available". Free plans can't buy more.
So a free Netlify site suits one that's published a few times a week, not one edited every day: keep changes in a draft and publish them together, which is one deploy. Accounts made before September 4, 2025 keep Netlify's older limits, counted in build minutes and bandwidth instead.
Netlify, like Cloudflare, can't build on a schedule, so the site's nightly check and its hourly check for scheduled changes run on GitHub Actions or GitLab CI, and ask Netlify to rebuild the site through its build hook. An admin address works on Netlify, as on GitLab Pages: Netlify can't send rules for one address, so the script every page starts with is what keeps the site's pages from it.
Business and commercial sites
- GitHub Pages isn't for running an online business, a shop, or any site mainly for selling things or software as a service (GitHub Pages limits). It also shouldn't handle passwords or card numbers.
- Vercel's free Hobby plan is for personal, non-commercial use only. Vercel counts a site as commercial if anyone involved in making it gains financially, including a developer paid to build or update it, and if it takes payments, advertises products or services for sale, or shows ads. Asking for donations is allowed (Vercel fair use guidelines).
- GitLab Pages: we haven't found a rule against business sites on GitLab's free plan, so it's a free option to use for one. Check GitLab's terms for your own case.
- Netlify: we haven't found a rule against business sites in Netlify's terms or its subscription agreement either, but its free plan's credits limit how often the site can be published (see Netlify).
- Cloudflare Pages: we haven't found a rule against business sites on Cloudflare's free plan either, so it's the free option for a business site kept on GitHub, private or not. Its terms ask free plans to serve video and other large files through one of its paid services (Cloudflare's terms), so put videos on YouTube or Vimeo and show them with the Video block; the media library says so on a Cloudflare site with uploaded videos.
GitHub sign-in for several editors
GitHub doesn't let collaborators on someone else's personal repository use fine-grained tokens, so put the repository in a free GitHub organization and add editors as members; otherwise collaborators need a classic token. Sign in with GitHub, through a sign-in service you run, works for every editor. See Editors and sign-in.