---
title: "GitHub Pages vs Cloudflare Pages for Internal Docs: Which Should You Use in 2026?"
slug: /blog/github-pages-vs-cloudflare-pages-internal-docs
publishedAt: "2026-10-20"
updatedAt: "2026-10-20"
author: ott
description: "Which static host to use for internal documentation: GitHub Pages with Enterprise Cloud or Cloudflare Pages with Access. Plan gates, limits and prices checked on GitHub's and Cloudflare's own pages on 20 October 2026."
---

# GitHub Pages vs Cloudflare Pages for internal docs: which should you use?

> **TL;DR:** Pick by who must read the docs. Use GitHub Pages with private visibility when every reader can read the repository on GitHub and your organization pays for GitHub Enterprise Cloud. GitHub says private publishing requires Enterprise Cloud. If some readers have no GitHub account, use Cloudflare Pages with Cloudflare Access. Access is free up to 50 users and works with an email PIN or Google or Microsoft sign-in. Display (display.dev) is a third option for a small set of HTML or Markdown files that only your company reads, with no pipeline to run. Display is the docs workspace for agents and people.

Display is our product. This page says where it does not fit. We checked GitHub's and Cloudflare's documentation and pricing pages on 20 October 2026. Plans change. Open the linked page before you decide.

---

## Decision table

| Your situation                                                             | Pick                                    |
| -------------------------------------------------------------------------- | --------------------------------------- |
| All readers are on GitHub and you have Enterprise Cloud                    | GitHub Pages, private                   |
| Some readers have no GitHub account, and an engineer can set up Cloudflare | Cloudflare Pages + Access               |
| Fewer than 50 readers and a budget of $0                                   | Cloudflare Pages + Access               |
| The docs are public                                                        | Either. Both host static sites for free |
| A few HTML or Markdown files from agents, company only, no build step      | Display                                 |

---

## Side by side

|                                 | GitHub Pages                                                                                                                       | Cloudflare Pages                                                                                                          |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **Private access**              | Needs GitHub Enterprise Cloud. Only for project sites that publish from a private or internal repository that an organization owns | Cloudflare Access: email PIN or an identity provider, with an Allow policy                                                |
| **Who can read a private site** | People with read access to the repository. Sites on Enterprise Managed Users open only to enterprise members                       | People that your Access policy allows, with or without a Cloudflare account                                               |
| **Price for private access**    | GitHub Enterprise: $21 per user a month for the first 12 months, per the GitHub pricing page. Read the asterisk terms              | Access: $0 up to 50 users. Pay-as-you-go is $7 per user a month, billed annually                                          |
| **Without the paid plan**       | GitHub's pricing page lists Pages for public repositories on Free                                                                  | Pages is free. Preview and production URLs are public until you add Access                                                |
| **Deploy without Git**          | No. You publish from a repository, by branch or by a GitHub Actions workflow                                                       | Yes. Direct Upload with the Wrangler CLI or a dashboard upload. You cannot switch a Direct Upload project to Git later    |
| **Site size and file limits**   | Published site: 1 GB maximum. Source repository: 1 GB recommended. Bandwidth: 100 GB a month soft limit                            | Free plan: 20,000 files and 25 MiB for each file. A dashboard upload takes 1,000 files                                    |
| **Build limit**                 | 10 builds an hour (soft). No limit with a custom Actions workflow                                                                  | 500 builds a month on Free                                                                                                |
| **Terms of use**                | Not for an online business, e-commerce or commercial SaaS                                                                          | Read Cloudflare's terms                                                                                                   |
| **Protects previews**           | Not a separate concept                                                                                                             | The Pages setting covers previews only. The production `pages.dev` address and custom domains need their own Access setup |

---

## Setup for each

### GitHub Pages, private

1. Your organization must use GitHub Enterprise Cloud.
2. Publish the site from a private or internal repository that the organization owns. It must be a project site, not an organization site.
3. In the repository, open **Settings**, then **Pages**. Under **GitHub Pages**, choose the visibility.
4. Give readers read access to the repository.

Read GitHub's page on [changing the visibility of your Pages site](https://docs.github.com/en/pages/getting-started-with-github-pages/changing-the-visibility-of-your-github-pages-site).

### Cloudflare Pages with Access

1. Create the Pages project from Git, or use Direct Upload.
2. In Zero Trust, add a login method: **One-time PIN**, Google or Microsoft Entra ID. New Zero Trust organizations do not get One-time PIN automatically.
3. In the Pages project, open **Settings**, **General** and select **Enable access policy**. This step covers preview deployments only.
4. To protect the production `pages.dev` address, edit the Access application. Under **Public hostname**, delete the wildcard (`*`) in the **Subdomain** field. Then select **Enable access policy** again to protect previews.
5. For a custom domain, create a separate self-hosted Access application for that hostname. Without it, the login page shows but does not let visitors in.
6. Add an **Allow** policy with emails or an email domain.
7. Open each URL in a private window and make sure that it asks for a login.

Read the [Pages preview guide](https://developers.cloudflare.com/pages/configuration/preview-deployments/), the [Pages known issues](https://developers.cloudflare.com/pages/platform/known-issues/) and the [Access policy guide](https://developers.cloudflare.com/cloudflare-one/policies/access/).

### Display, for company-only docs

1. Connect your agent to Display and sign in. Cursor, Codex, Claude Code or any other agent can do it. The docs have a [setup guide for each agent](/docs/publish-with-agent).
2. Tell the agent: "Publish runbook.html to Display and share it with the company."
3. For a docs build in CI, an organization API key lets the pipeline publish the output file. Read [Publish from CI/CD](/docs/ci-cd).

Organization members sign in to open a Company page. On Free and Solo, they use an email one-time password (OTP). Pro (€49 a month) adds Google and Microsoft sign-in. Outside readers get an invitation by email and enter an OTP. Display serves one HTML or Markdown file for each artifact. Publishing a directory or a ZIP file is planned. Display does not run builds.

---

## When another option is better

- **Your docs are public.** Use GitHub Pages or Cloudflare Pages. Both are free, and both are good.
- **Your docs live in the repository and engineers review changes by pull request.** GitHub Pages keeps the docs next to the code.
- **You need edge logic, redirects or Workers.** Cloudflare Pages connects to the rest of Cloudflare.
- **You need many files in one site with a navigation tree.** Use a static host. Display serves one file for each link.

Display adds agent publishing, comments on the page and the same URL for every version. If you do not need them, a static host is enough.

---

## FAQ

### Can I make a GitHub Pages site private for free?

No. GitHub's documentation says private publishing requires GitHub Enterprise Cloud.

### Is Cloudflare Pages private by default?

No. Preview and production URLs are public until you add Cloudflare Access. The Pages "Enable access policy" setting covers previews only.

### How many users does Cloudflare Access allow for free?

Up to 50 on the Free plan. Above that, Cloudflare lists pay-as-you-go at $7 per user a month, billed annually. Checked 20 October 2026.

### Can people without a GitHub account read a private GitHub Pages site?

No. Readers need read access to the repository, so they need a GitHub account. Sites on Enterprise Managed Users open only to enterprise members.

### Can I deploy a docs site to Cloudflare Pages without Git?

Yes. Direct Upload takes a folder of built files. Wrangler takes up to 20,000 files, and a dashboard upload takes up to 1,000 files. Each file can be up to 25 MiB. Cloudflare says that you cannot switch a Direct Upload project to Git integration later.

### Where does Display fit?

Display fits documents for your company only, as HTML or Markdown files. It is not a static site host for a full docs tree.

### Does either host record who read a page?

GitHub's documentation says that GitHub logs the IP address of each Pages visitor for security. Cloudflare Access logs each login attempt with the user's email. Neither host gives a list of readers for each page. On Display Pro, viewer statistics include viewer identity.

**Related:**

- [GitHub Pages compared with Display](/github-pages-alternative)
- [Display compared with Cloudflare Access](/cloudflare-access-alternative)
- [Vercel Deployment Protection, Cloudflare Access or a Netlify password](/blog/vercel-deployment-protection-vs-cloudflare-access)
