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
fruitionsite.com

UX Hunting Kit
community resource
uxhuntingk.it

Power Up Your Motivation
community resource
powerup.conradlin.com

Co-x3 Community Toolbox
community resource
notion.conradlin.com

Soundtrack for Running
guide
soundtrack.run

Remake the Web
landing page
info.remaketheweb.com

Nicholas Grenie
personal site
nicolasgrenie.com

Design Tips
guide
designtips.today

Brad Johnson
personal site
bradyj.me

Aaron Wang
personal site
aarontwang.us

Vivek Raju
personal site
vivekraju.in

GigLoft Brand Guidelines
guide
brand.gigloft.com

My GigLoft Experience
landing page
my.gigloft.com

DataCol
community resource
datacol.com.mx

Alberto Arenaza
personal site
albertoarenaza.com

Andres Urena
personal site
andresurena.com

Remgriff.ro
personal site
remgriff.ro

Me Faltan Días de Vacaciones
personal site
mefaltandiasdevacaciones.com

David's Public Notion
guide
notion.garciadavid.net

webmachines
landing page
webmachines.space

Leadership AdvantEdge VIP Access
guide
advantedge.online

Biblioteca pública
community resource
biblioteca.poligonoboletin.cl

ExploreHere
landing page
explorehere.org

Office Status
community resource
officestatus.fyi

Harsh Moolani
personal site
harshmoolani.com

Shayon Pal
personal site
shayonpal.com

The Pirate Code
guide
thepiratecode.xyz

Road to Ramen
personal site
roadtoramen.com

Covid-19 Resources
community resource
covid-resource.com

AJ Adams
personal site
ajada.ms

Susan Lin
personal site
mintlodi.ca

Product & Design Resources
community resource
resources.remotejobs.center

Infinikey Pastel PBT
landing page
pastel-pbt.club

DSA Magic Girl
landing page
dsa-magic-girl.com

Lee Bridges
personal site
leebridges.com

The Open Creative Alliance
landing page
opencreativealliance.com

Benoit Cotte
personal site
benoitcotte.com

Lennon Cheng
personal site
lennonzf.me

Roam Reality
personal site
shyrz.ch

Ryan Yao
personal site
ryanyao.me

Mia Moore
personal site
miamoore.net

JD Maresco
personal site
jd.mares.co

SamadliCom
personal site
samadli.com

TIL in Mobile
guide
til.michaeltigas.com.au

MevOps
guide
mevops.co

Nathaniel Ong
personal site
nathanielong.com

KeySpanish
landing page
keyspanish.com

EmpathyCircles Membership
landing page
empathycircles.co

Virtual Mojito
community resource
virtualmojito.com

Notion Recipes
community resource
notionrecipes.com

Dan Lardi
personal site
danlardi.com

Ciarán Hanrahan
personal site
portfolio.ciaran.design

William Liu
personal site
willliu.com

Akhil Draksharapu
personal site
meet2akhil.com

Param Pardasani
personal site
parampardasani.com

Teresa Fong
personal site
teresafong.com

BLM Guide
community resource
blmg.org

Pham Inspired
personal site
phaminspired.com

Prateek Keshari
personal site
prateekkeshari.com

Chun Yin San
personal site
chunyinsan.com

Isha Singh
personal site
ishasingh.co.uk

Nathan Brucher
personal site
nathanbrucher.com

John Montgomery
personal site
blog.johnmontgomery.tech

Davan Feng
personal site
dfeng.co

Sahil Vohra
personal site
iamsahilvhora.com

Inventorium
landing page
art.tonysaad.com

Thomas Pun
personal site
bio.pun.io

Ashley Ward
personal site
ashleywrote.com

Fair Engine
landing page
fairengine.com

Javier Fuentes Ibáñez
personal site
javierfuentes.me

Zaki Gulamani
personal site
zakigulamani.com

IxD Patterns
guide
patterns.pabli.co

My Time Closet
landing page
mytimecloset.xyz

instela.fm
guide
radyo.thedewil.com

Dilara Ararat Canata
personal site
dilaracanata.com.tr

Ujesh Krishnan
personal site
ujeshkrishnan.com

How To Launch
guide
howtolaunch.fyi

Simon Heuschkel
personal site
heuschkelsimon.com

Lucas Schutz
personal site
lsschutz.com

Free the MCAT
guide
freethemcat.com

Lívia Carvalho
personal site
liviacarvalho.com

Liam Herbst
personal site
liamherbst.com

Tanya Zack
personal site
tanyazack.com

Eduardo Cachucho
personal site
eduardocachucho.com

História
landing page
efrcdesign.com

Maurice Gerhardt
personal site
mgcodes.one

Caleb Rockstone
personal site
calebrockstone.com

Martijn Kreek
personal site
hypomnemata.nl

Bae Jeong-Tae
personal site
jeongtae.xyz

Pongsakorn Wechakarn
personal site
blog.peachiia.com

David Hahn
personal site
davidhahn.net

Yiqun Fang
personal site
yiqunfang.xyz

Cody Morrow
personal site
codymorrow.co

Noslen Azevedo Junior
personal site
noslen.org

Damián Vial Loiseau
personal site
damianvial.com

Archie Edwards
personal site
archieedwards.com

Handi Sugihartian
personal site
handisugihartian.com

Jinah Choi
personal site
jinahchoi.com

Latinly
landing page
latinly.ga

Todo Notion
community resource
todonotion.com

Book of Shadows
guide
grimoire.ackl.me

Thomas Lam
personal site
thomaslam.me

Prepared Obsolescence
personal site
chinsley.com

Should Wang
personal site
shouldwang.com

The Delta Agent
personal site
thedeltaagent.com

Eivarain
personal site
eivarain.art

Ranah Malberg
personal site
ranahmalberg.com

PeerWriting session
community resource
peerwriting.org

Míriam González
personal site
miriamgonzalez.dev

Sam Checa
personal site
samcheca.design

Dans les bois | Philip 🌳
personal site
philipb.cc

Jeremy Parker
personal site
jeremyparker.blog

Seaplanes Illustration
personal site
seaplanes.world

Firdaus Puzi
personal site
frdspuzi.com

Harry van den Bergh
personal site
hvandenbergh.com

Fin Duggan
personal site
finduggan.com

Particularly Dangerous Situation Podcast
landing page
pdspodcast.net

Weekly No Code
landing page
weeklynocode.com

Melissa Greu
personal site
melissagreu.com

Nick Robinson
personal site
nickrobinson.us

Matteo Negri
personal site
matteonegri.eu

ProdUX
guide
produx.site

Directory of Substack Newsletters
community resource
atsubstack.com

Bronson Chang
personal site
bronsonchang.com

Friendly Docs
guide
docs.friendly.is

Kimba
landing page
hellokimba.com

Luiza Fabiani Medeiros
personal site
luizafabsm.com

Patrick Perini
personal site
pcperini.com

Overwatch Guide
guide
overwatch-guide.com

Mauricio Quezada
personal site
mauricioquezada.me

Aisha Malik
personal site
aisha-malik.com

Sergio Jiménez
personal site
sergiojimenezgil.com

Anirudh Basak
personal site
anirudhabasak.com

Pham Diem Hang
personal site
createdbyhang.com

Gin Gardu
personal site
gingardu.com

Liza Gardu
personal site
lizagardu.com

A Style Apart
community resource
astyleapart.com

Grégoire Charles
personal site
gregcha.com

Biocompass
landing page
biocompass.io

Chandra Ramanujan
personal site
chandra.fun

Carlos Montenegro
personal site
carlosmontenegro.nl

Sanjeev Kumar
personal site
sanjeevrangasamy.com

Hunter Heston
personal site
hunterheston.com

CryptoAdvisor.Club
landing page
cryptoadvisor.club

Ferran Pérez
personal site
ferranperez.online

Alejandro Rodriguez
personal site
alejandrorodriguezramos.me

André Ferreira
personal site
andrecnf.com

Chris Grieser
personal site
chris-grieser.de

Ping Insights
landing page
pinginsights.nz

Amy Rogers
personal site
amyrogers.design

Vagas UX
landing page
vagasux.com.br

Antonio Yu
personal site
antonioyu.com

Reza Arkan
personal site
rezaarkan.com

Project Vector
community resource
projectvector.online

Mihir Kulkarni
personal site
mihirk.me

Shocks
landing page
shocks.bio

Information Design Patterns
community resource
informationdesignpatterns.xyz

mar.sounds
personal site
mar-sounds.com

Artistry of Awakening
landing page
artistryofawakening.com

Teaper
personal site
teaper.dev

Learning Day
landing page
learningday.community

PG Gonni
personal site
pgonni.me

React Notes
community resource
reactnotes.com

Sisi Florensia
personal site
sisiflorensia.work

Notionology
landing page
notionology.com

Kartik Narayanan
personal site
yellowsubmarine.xyz

Greg Yeutter
personal site
gregyeutter.com

Ryan Gum
personal site
ryangum.com

Plant trees by drawing
landing page
trees.theiosapp.com

Turbo Thinh
personal site
turbothinh.com

Startup Services
community resource
startupservices.io

Florent Isidore
personal site
florentisidore.com

Niko Rekhviashvili
personal site
niko.work

Tefy Belleza
personal site
tefybelleza.com

Magistri
landing page
magistri.club

Serafino Risiglione
personal site
serrisi.it

Crash Help & Support
guide
crash.help

Pitch This Job
guide
pitchthisjob.com

WikiProp
guide
wikiprop.org

Product Bible
community resource
productbible.io

Ruth Tsang
personal site
ruthtsang.com

Founded by Monzonauts
community resource
monzonauts.com

Finder Ninja
community resource
finder.ninja

What Steve Did
personal site
whatstevedid.com

Ricky Truong
personal site
rickietruong.com

Who is on etut?
community resource
etut.app

Novita L. Tanaya
personal site
noobbaebae.com

Yi Hui Chan
personal site
yihuichan.com

Angad Srivastava
personal site
angadsri.com

Marketgoo Operating System
guide
chuletonbased.life

Hugh Yu
personal site
hughyu.com

Ruslan Khasanshin
personal site
hu553in.xyz

321Jump
landing page
321jump.us

Mauricio Wolff
personal site
mauriciowolff.me

Szonja Odrovics
personal site
szonja.odrovics.com

Max Yampolsky
personal site
yampolskymax.com

Josephine Tse
personal site
josephinetse.com

Hanbaek
landing page
hanbaek.co

Amy Johnson Cook
personal site
ajohnsoncook.com

Rosina Pissaco
personal site
rosinapissaco.com

Hanyi Wang
personal site
hanyiwang.site

Letters from Quarantine
landing page
lettersfromquarantine.xyz

Ritchie Wong
personal site
ritchiewong.xyz

The Prose Train
landing page
theprosetrain.com
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.