If your site doesn't work, please read this section.
- To fix, you need to apply this change and this change to your script. Or you can create a new version of the script using the form in Step 2.
- Notion is a growing product. Their engineers make changes. Those changes may impact Fruition. When that happens, I rely on the amazing open-source community to figure out the solution. So please file an issue if your site doesn't work.
- As I've noted below, this is a self-managed solution. I can't promise it will work forever. If you need 100% uptime, I'd recommend paid alternatives like Super.
Features: custom domains, pretty URLs, dark mode, custom font, custom Javascript
Use cases: perfect for your portfolio, blog, job posting, landing page, or business site
Benefits: completely free, no coding required, no lock-in, open source
Downsides: self-managed solution, needs ~10 minutes to setup
Hello! My name is Stephen, a huge Notion fan and a software engineer. I decided to combine the two and build something cool for the Notion community.
The result is Fruition. With Fruition, you can build and customize your website using Notion pages. It supports custom domains, dark mode, Google Fonts, SEO, and script injection. The coolest feature is pretty URLs. Click this link β Showcase, address bar should say
fruitionsite.com/showcase
.Today, I'm sharing with you how to do it for free, with no coding knowledge required.
If you want a fully managed solution, you should use sites like Super. If you'd like to DIY and save some money like hundreds of people have done, follow along. It will take 10 minutes. I promise it will be easier than setting up a WordPress site.
Get Started
Prefer video instead? Watch this step-by-step tutorial created by Dimitris Kamaritis.
On a high level, we are utilizing Cloudflare Workers to rewrite traffic. The solution is inspired by this script (thank you Mayne!), and I added my own features like pretty links.
Step 0: Prerequisite
- Enable Public Access on your desired pages through Notion's Share menu, and Allow Search Engines (optional).
- Purchase your desired domain with a registrar like Namecheap, or use your existing domain or subdomain.
Step 1: Set up your Cloudflare account (5 mins)
- Sign up for an account: https://dash.cloudflare.com/sign-up

- Enter your custom domain name. If you would like to use a subdomain, you should still enter your root domain name here.

- Select the Free plan

- If you don't have any A records imported, add one with your root domain as the Name and
1.1.1.1
as the Content. Otherwise, click Continue on the DNS Record page. - If you are using a subdomain, add one with your subdomain as the Name and
1.1.1.1
as the Content.

- Copy the 2 nameservers, which end with
.ns.cloudflare.com

- Paste the nameservers in the domain setting page at your registrar (Namecheap in my case). Make sure you save the setting.

- Wait for a minute, then click Done, check nameservers

- Select Flexible SSL/TLS encryption mode

Β
- Turn on Always Use HTTPS, Auto Minify, and Brotli (all 3 optional but recommended)

- Select Done

- You should see this screen. If Cloudflare hasn't detected your site, click Re-check your site, and refresh the page.

- Select the Workers page (one of the blue boxes) and then click Manage Workers

- Choose any available subdomain for your worker (it doesn't really matter what you pick)

- Click Set Up and then click Confirm

- Choose the Free plan
- If your site gets a lot of visitors, you can change to the paid Unlimited plan later.

- Verify your email if you haven't, then go back to the Manage Workers page (see #12)

- Click Create a Worker

Step 2: Customize and generate the script (2 mins)
Step 3: Paste the script in Cloudflare (1 min)
- Delete the existing code, and paste the code you copied

- Click Save and Deploy

- After saving, click on your site name on the top of the page

- Go to the Workers page and select Add Route

- Type
yourdomain.com/*
(orsubdomain.yourdomain.com/*
if you would like to use a subdomain, or*yourdomain.com/*
if you would like to enable other all subdomains like www) as the Route and select the Worker you just created

- Hit save, and you're done! You can now visit your site. π

- Shoot me an email to be featured in the Showcase. I'd love to see some cool sites.
- I'd appreciate it if you link Fruition from your website so more people know about it.
Love from Our Users
Hundreds of people have used Fruition. Hear what some have to say.
Wow, just wow. Thank you so much for releasing Fruition - it is an absolute beauty to work with! I especially love the front end to auto-generate the Cloudflare worker script. - Conrad Lin on Product Hunt
+1 for Fruition. Free and pretty easy to setup with step by step instructions. ππ» - Tim Jeffries on Notion Facebook Group
This is probably the easiest-to-manage website ever. Just open Notion, change stuff, done. - Chris Coyier on CSS-Tricks
Kudos to you for releasing this. Particularly the clean URLs. - Zee Kane via email
It works flawlessly and it's very easy to set up. I have officially switched from the WordPress pain and it feels liberating. - Remgriff Maximus on Reddit
It was so easy to set up a custom domain for my Notion site with Fruition. I tried doing it on my own previously but got stuck since I am not a coder. - Vivek Raju via email
holy crap. this is 99% of what i have been looking for. - Steve Klabnik via Twitter
Fruition makes Notion pages much prettier with custom domains. Itβs a lot like a starter version of Super, and itβs open-source and free to use. - Product Hunt Newsletter
This is incredibly awesome. I just want this project not to die. That's all. Thank you so much. - Nitesh Manav on Product Hunt
I tried it out this week and was so impressed by how simple it was to get started. Give it a try! - Notion Experts Newsletter
Making our website in Notion was a breeze with Fruition. It's not often that something is so well documented and works at the first try. Thanks a million! - Bram Hilgersom via email
Fruition is incredibly sleek. Hell of a job, good work! - AJ Adams via email
This is some next level wizardry. - Pilotboi on Reddit
Β
That's the main thing I was missing, custom slugs, so if I want to change my system at some point, no links would ever break! - Edgaras Benediktavicius on Github
This is by far the best way to add custom domains to your Notion pages and even a solution for creating multi-page websites. - Dimitris Kamaritis on YouTube
I've been beta-ing this product for a few days, and it works flawlessly. - Matt Green on Product Hunt
such. a. useful. tool. THANK YOU. - Devan Sood on Twitter
This is brilliant, took me about 15 minutes to set up and Iβm not very techie. Clear and easy to follow step by step instructions. - Tracy Algar on Reddit
If you love Notion and always wanted to use custom domains with it, you'd normally have to pay upwards of $50/year. Now you can do it for free. - David Miranda on Twitter
Fruition checks EVERY box for trends Iβm excited about. - Chris Sperandio via Twitter
I've been tempted to migrate my personal site over to Notion (with a URL redirect), but this is significantly better. Especially like the pretty URL slugs. - Dan Smolkin on Reddit
If you want to set up a quick blog/website, Notion + Fruition is by far the easiest way to go. - DK on Twitter
Got this working in less than 10 mins. Amazing work! - Daniyal Javed Khan on Notion Facebook Group
It saved us so much time to develop something to show others from scratch. Such a godsend, just really wanted to show my appreciation π - Shawn Cheng via email
You made a really great guide and the auto-generated script was amazing. - Nathan Brucher via email
woah this is super cool! - David Jiang
Built a site with Fruition? Shoot me an email to be featured in the Showcase.
Showcase

Fruition
landing page

UX Hunting Kit
community resource

Power Up Your Motivation
community resource

Co-x3 Community Toolbox
community resource

Soundtrack for Running
guide

Remake the Web
landing page

Nicholas Grenie
personal site

Design Tips
guide

Brad Johnson
personal site

Aaron Wang
personal site

Vivek Raju
personal site

GigLoft Brand Guidelines
guide

My GigLoft Experience
landing page

community resource

Alberto Arenaza
personal site

Andres Urena
personal site

Remgriff.ro
personal site

Me Faltan DΓas de Vacaciones
personal site

guide

landing page

Leadership AdvantEdge VIP Access
guide

Biblioteca pΓΊblica
community resource

ExploreHere
landing page

Office Status
community resource

Harsh Moolani
personal site

Shayon Pal
personal site

The Pirate Code
guide

Road to Ramen
personal site

Covid-19 Resources
community resource

AJ Adams
personal site

Susan Lin
personal site

Product & Design Resources
community resource

Infinikey Pastel PBT
landing page

DSA Magic Girl
landing page

Lee Bridges
personal site

The Open Creative Alliance
landing page

Benoit Cotte
personal site

Lennon Cheng
personal site

Roam Reality
personal site

Ryan Yao
personal site

Mia Moore
personal site

JD Maresco
personal site

SamadliCom
personal site

TIL in Mobile
guide

MevOps
guide

Nathaniel Ong
personal site

KeySpanish
landing page

EmpathyCircles Membership
landing page

Virtual Mojito
community resource

Notion Recipes
community resource

Dan Lardi
personal site

CiarΓ‘n Hanrahan
personal site

William Liu
personal site

Akhil Draksharapu
personal site

Param Pardasani
personal site

Teresa Fong
personal site

BLM Guide
community resource

Pham Inspired
personal site

Prateek Keshari
personal site

Chun Yin San
personal site

Isha Singh
personal site

Nathan Brucher
personal site

John Montgomery
personal site

Davan Feng
personal site

Sahil Vohra
personal site

Inventorium
landing page

Thomas Pun
personal site

Ashley Ward
personal site

Fair Engine
landing page

Javier Fuentes IbÑñez
personal site

Zaki Gulamani
personal site

IxD Patterns
guide

My Time Closet
landing page

instela.fm
guide

Dilara Ararat Canata
personal site

Ujesh Krishnan
personal site

How To Launch
guide

Simon Heuschkel
personal site

Lucas Schutz
personal site

Free the MCAT
guide

LΓvia Carvalho
personal site

Liam Herbst
personal site

Tanya Zack
personal site

Eduardo Cachucho
personal site

HistΓ³ria
landing page

Maurice Gerhardt
personal site

Caleb Rockstone
personal site

Martijn Kreek
personal site

Bae Jeong-Tae
personal site

Pongsakorn Wechakarn
personal site

David Hahn
personal site

Yiqun Fang
personal site

Cody Morrow
personal site

Noslen Azevedo Junior
personal site

DamiΓ‘n Vial Loiseau
personal site

Archie Edwards
personal site

Handi Sugihartian
personal site

Jinah Choi
personal site

Latinly
landing page

Todo Notion
community resource

Book of Shadows
guide

Thomas Lam
personal site

Prepared Obsolescence
personal site

Should Wang
personal site

The Delta Agent
personal site

Eivarain
personal site

Ranah Malberg
personal site

PeerWriting session
community resource

MΓriam GonzΓ‘lez
personal site

Sam Checa
personal site

Dans les bois | Philip π³
personal site

Jeremy Parker
personal site

Seaplanes Illustration
personal site

Firdaus Puzi
personal site

Harry van den Bergh
personal site

Fin Duggan
personal site

Particularly Dangerous Situation Podcast
landing page

Weekly No Code
landing page

Melissa Greu
personal site

Nick Robinson
personal site

Matteo Negri
personal site

ProdUX
guide

Directory of Substack Newsletters
community resource

Bronson Chang
personal site

Friendly Docs
guide

Kimba
landing page

Luiza Fabiani Medeiros
personal site

Patrick Perini
personal site

Overwatch Guide
guide

Mauricio Quezada
personal site

Aisha Malik
personal site

Sergio JimΓ©nez
personal site

Anirudh Basak
personal site

Pham Diem Hang
personal site

Gin Gardu
personal site

Liza Gardu
personal site

A Style Apart
community resource

GrΓ©goire Charles
personal site

Biocompass
landing page

Chandra Ramanujan
personal site

Carlos Montenegro
personal site

Sanjeev Kumar
personal site

Hunter Heston
personal site

CryptoAdvisor.Club
landing page

Ferran PΓ©rez
personal site

Alejandro Rodriguez
personal site

AndrΓ© Ferreira
personal site

Chris Grieser
personal site

Ping Insights
landing page

Amy Rogers
personal site

Vagas UX
landing page

Antonio Yu
personal site

Reza Arkan
personal site

Project Vector
community resource

Mihir Kulkarni
personal site

Shocks
landing page

Information Design Patterns
community resource

mar.sounds
personal site

Artistry of Awakening
landing page

Teaper
personal site

Learning Day
landing page

PG Gonni
personal site

React Notes
community resource

Sisi Florensia
personal site

Notionology
landing page

Kartik Narayanan
personal site

Greg Yeutter
personal site

Ryan Gum
personal site

Plant trees by drawing
landing page

Turbo Thinh
personal site

Startup Services
community resource

Florent Isidore
personal site

Niko Rekhviashvili
personal site

Tefy Belleza
personal site

Magistri
landing page

Serafino Risiglione
personal site

Crash Help & Support
guide

Pitch This Job
guide

WikiProp
guide

Product Bible
community resource

Ruth Tsang
personal site

Founded by Monzonauts
community resource

Finder Ninja
community resource

What Steve Did
personal site

Ricky Truong
personal site

Who is on etut?
community resource

Novita L. Tanaya
personal site

Yi Hui Chan
personal site

Angad Srivastava
personal site

Marketgoo Operating System
guide

Hugh Yu
personal site

Ruslan Khasanshin
personal site

321Jump
landing page

Mauricio Wolff
personal site

Szonja Odrovics
personal site

Max Yampolsky
personal site

Josephine Tse
personal site

Hanbaek
landing page

Amy Johnson Cook
personal site

Rosina Pissaco
personal site

Hanyi Wang
personal site

Letters from Quarantine
landing page

Ritchie Wong
personal site

The Prose Train
landing page
FAQs
Is Fruition completely free?
- Yes. It took me a weekend to put this together, and thereβs no ongoing cost. So Iβm more than happy to publish it for free and help out the awesome Notion community.
- You do need to pay your domain registrar for the domain.
- If you get a lot of page views, you also need to pay for Cloudflare Workers which starts at $5/month.
My site doesn't work. Please help.
- Please look for similar issues or file a new one on Github.
- I do not have the bandwidth to provide support.
How did you come up with the idea?
- I didn't. Full credit to sites like Super for inspiring me to do this and developers like Mayne for making their work public.
- I just combined good ideas, improved them a little, and made them digestible. Everything is a remix.
How is Fruition different from Super, HostingPotion, or HostNotion?
- Fruition is free and open source, while Super, HostingPotion, or HostNotion are fully managed. That means I can't help you if Cloudflare goes down. I also can't promise this script will work forever due to reasons outside my control (e.g. Notion changes code that impacts Fruition).
- One feature only Fruition has is pretty URL slugs.
How do I use a subdomain?
- Most steps are the same. The only differences are 1) in step 1.4, add an A record with your subdomain, 2) in step 2, enter your subdomain in the form, 3) in step 3.5, use your subdomain as the route.
How do I make www. work on my domain?
- On step 3.5, add to star in front of the domain route. For example, from fruitionsite.com/* to *fruitionsite.com/*
Why does the URL flash when I first load the site?
- Good eye! It is an artifact of how custom URL slugs is implemented. As far as I know, there isn't a way around it. If you find one after reading the code, let me know!
Where's the code?
- Here's the Github repo.
Is it affiliated with Notion?
- No. But we sure β€οΈ Notion.
How can I help? Can I donate?
- Thank you for the offer. Iβm lucky to be in a position to provide Fruition completely for free, and I intend to keep it that way. I encourage you to donate to your favorite charity.
- The only thing Iβd ask you is to link back to Fruition on your site, so your readers know about this great resource.