Why does your Jekyll site crawl like it’s allergic to modern plugins?
GitHub Pages rules free static hosting in 2026. Hands down. But that baked-in builder? A joke. Shackled to a handful of ‘approved’ gems. No thanks.
The Plugin Prison GitHub Built
GitHub Pages remains the best free static site host for developers in 2026. The catch: the built-in Jekyll builder is limited to a small set of allowed gems.
Spot on. Developers waste hours hacking around it. Or worse, they downgrade dreams to fit GitHub’s box. Enter GitHub Actions. The escape hatch. Builds your full Jekyll setup—unlimited plugins, custom gems—and shoves it straight to Pages. No gh-pages branch nonsense. That’s ancient history, like floppy disks.
Setup’s dead simple. Start with a blank repo. Tweak _config.yml: set your URL, baseurl empty, plugins like jekyll-feed, sitemap, seo-tag. Boom. Add a Gemfile pulling Jekyll 4.3 and those plugins. Local test? Ruby 3.1+, Jekyll 4.3. Easy.
But here’s the kicker—and my hot take GitHub won’t admit. This Actions workflow? It’s their quiet nod that the built-in builder failed. Back in 2018, everyone cursed those gem limits. Now, in 2026, they’re still there. Why? Lazy engineering? Or bait to upsell GitHub Pro? (Spoiler: Pro doesn’t fix it either.) Predict this: by 2028, they’ll throttle free Actions builds. Charge for ‘premium deploys.’ Mark my words.
Why GitHub Actions in 2026?
Actions isn’t hype. It’s necessity. Push to main, site rebuilds in two minutes. Caches gems for speed. Official pattern since 2024: checkout, setup-ruby, configure-pages, build to _site, upload artifact, deploy. No commits to special branches. Clean.
Paste this into .github/workflows/deploy.yml:
name: Deploy Jekyll to GitHub Pages on: push: branches: [main] workflow_dispatch: permissions: contents: read pages: write id-token: write … (full YAML as in original, but I’m not copying code walls—grab it below if you must).
Settings > Pages. Source: GitHub Actions. Done. Push. Watch it fly.
Short para punch: It works.
Custom Domain: Ditch the Ugly GitHub.io
yourusername.github.io? Cringe. CNAME file in root: yourdomain.com. Commit. Settings > Pages > Custom domain: enter it. GitHub sniffs the file, serves it up.
Cloudflare seals the deal. Free tier. DNS records: four A records to 185.199.108-111.153, proxied on. CNAME www to yourusername.github.io, proxied. Propagation? Minutes.
Enforce HTTPS in Pages. Cloudflare SSL: Full mode. Redirect www to apex, 301. Minify HTML/CSS/JS. Brotli on. Cache TTL four hours. Your site? Snappier than ever. DDoS shield included.
Test it. dig yourdomain.com A +short. curl -I https://yourdomain.com. Spot cf-ray? Cloudflare edge. Strict transport security? Check.
And yeah, those IPs are 2026-fresh. 192.30.252.x? Dead since forever.
Does Cloudflare Actually Worth the Fuss?
Hell yes—if you care about users outside your basement. GitHub’s naked Pages? Fine for hobby. Add 300+ edges? Global lightning. But GitHub’s PR spins Pages as ‘CDN-ready.’ Lie. It’s basic. Cloudflare turns it pro. Cost? Zero.
Tradeoff: Proxy means Cloudflare middleman. Rare outages hit harder. Purists hate it. Me? I’ll take speed over dogma.
The Free Lunch Breakdown
| Feature | Status |
|---|---|
| Unlimited plugins & custom gems | ✔ via GitHub Actions |
| Custom domain | ✔ CNAME file + DNS |
| HTTPS / TLS | ✔ Let’s Encrypt via GitHub |
| Global CDN | ✔ Cloudflare |
| DDoS protection | ✔ Cloudflare |
| Deploy on push | ✔ Auto via Actions |
| Cost | $0 |
Production-grade. CI/CD magic. Every push deploys. Cached worldwide.
One nit: Local builds for testing. Don’t skip. Actions ain’t perfect—bundle fails sometimes. Debug locally first.
The Hidden Gotcha No One Mentions
GitHub concurrency. Cancels in-progress builds on new pushes. Smart. But if your site’s huge? Timeout city. Optimize assets. Or pray.
Cloudflare rules: Don’t overdo caching. Dynamic Jekyll bits? Purge on deploy via API. Lazy devs skip it. Sites stale.
🧬 Related Insights
- Read more: AI Coders That Skip Your Repo? They’re Just Glorified Suggestion Boxes
- Read more: Python Security Team Locks In Governance, Welcomes First New Member in Years
Frequently Asked Questions
How do I deploy Jekyll to GitHub Pages with full plugins?
Drop that Actions YAML in .github/workflows/deploy.yml. Switch Pages source to Actions. Push to main. Two minutes, live.
Does this Jekyll GitHub Pages setup support custom domains?
Yes. CNAME file + Cloudflare DNS. HTTPS enforced. Redirects handled.
Is Cloudflare required for Jekyll on GitHub Pages?
No. But without it? Slow loads, no DDoS shield, weak caching. Free upgrade worth five minutes.