Publish Obsidian notes as a website with Quartz 5, and keep the private ones private
A seven-step Quartz 5 setup for publishing an Obsidian vault to GitHub Pages for free, built around what the docs say about drafts, attachments and public repositories.
Nihar Rout · · Updated · 9 min read · 34 views
You can publish Obsidian notes as a website for free with Quartz 5 and GitHub Pages: copy your vault into a Quartz project, preview it on your machine, then push it to a repository that builds the site. The setup is seven steps. The part that decides whether it is safe is not the install but which files leave your computer, and that is covered below.
Why Quartz 5 and not the tutorial you found
Guides written before Quartz 5 describe Quartz 4 setups. Quartz 5 changes the configuration format from TypeScript files to a single YAML file, moves most built-in features into separately installed community plugins, and lowercases every generated URL. A Quartz 4 walkthrough that has you edit a TypeScript config no longer matches what the current documentation (pages dated September 20, 2026) tells you to do.
The alternative is Obsidian's own hosted service. According to the Obsidian Publish page, it costs $8 USD per site per month billed annually, or $10 per site per month billed monthly, and includes hosting up to 4GB. Quartz plus GitHub Pages on a public repository carries no fee, but you take on Git, Node and a build step. In our view that trade is worth it if you already use Git, and not worth it if the idea of a terminal puts you off.
If you use Obsidian as your main notes app, this guide is for you. Upfynd lists 145 tools in Notes & Knowledge and 189 in Writing & Publishing as of October 2026; this guide covers one route from the first category into the second.
What you need before you start
- Node.js 22 or later. The installation guide states that Quartz requires Node.js 22 or later; check yours with node -v.
- A GitHub account and Git. The Quartz repository is set up as a template, so you create your own copy in one click.
- A vault you have looked through. Read the privacy section below before step 3, not after.
On cost and limits, the GitHub Pages limits page says Pages is available in public repositories on GitHub Free, and in private repositories only on GitHub Pro, Team and the Enterprise plans. It also lists a recommended 1 GB limit for the source repository, a 1 GB maximum for the published site, and a soft bandwidth limit of 100 GB per month. The same page says Pages "is not intended for or allowed to be used as a free web-hosting service to run your online business, e-commerce site, or any other website that is primarily directed at either facilitating commercial transactions or providing commercial software as a service (SaaS)." A personal notes site is not that, but if yours sells something, read the terms first.
Publish Obsidian notes as a website in seven steps
Run these in a terminal. The commands come from the Quartz 5 installation guide and hosting guide, read on October 25, 2026.
- Create your repository from the template. On the Quartz GitHub page, choose Use this template, then Create a new repository. Name it (the guide suggests names like notes or garden), choose public or private, then clone it and move into the folder.
- Install dependencies with npm i.
- Run the setup wizard with npx quartz create. The wizard offers four templates (default, obsidian, ttrpg and blog); choose obsidian, and it skips the link-resolution question. For the content strategy choose copy, which copies files from an existing folder such as your vault and leaves the original untouched (the other options are new and symlink). Enter the base URL without https://; the guide's example is mysite.github.io/quartz.
- Install the plugins the template references: npx quartz plugin install --from-config.
- Preview locally with npx quartz build --serve and open http://localhost:8080. Fix broken links and stray notes here, not after publishing.
- Add the deploy workflow. Create the file .github/workflows/deploy.yml at the root of your repository using the workflow shown in the hosting guide (the guide writes the path as quartz/.github/workflows/deploy.yml, where quartz is the name of the cloned folder; GitHub reads workflows from the repository root, so we read that as a path inside your project). Then open Settings, then Pages, and under Source choose GitHub Actions. The guide's workflow runs on pushes to the v5 branch, so confirm your default branch is called v5.
- Push. Run npx quartz sync --no-pull the first time, which the guide says commits your content and pushes everything to your repository, and plain npx quartz sync afterward. The site appears at your-name.github.io/repository-name once the workflow finishes.
If something is not updating, the hosting guide's own first suggestion is that you forgot to push your changes to GitHub.
Keep private notes out of the site, and out of the repository
This is the step to slow down on, and the Quartz documentation is direct about it. By default Quartz uses a plugin called RemoveDrafts, which drops any note with draft: true in its frontmatter. Everything else in the content folder is published. If you would rather opt in, the ExplicitPublish plugin filters out all notes except those with publish: true.
Two details matter for an Obsidian vault.
First, the documentation warns that "regardless of the filter plugin used, all non-markdown files will be emitted and available publically in the final build," and lists images, voice recordings and PDFs as examples. A note marked draft does not stop the screenshot embedded in it from being published.
Second, filtering only affects the built site. The same page warns that marking something private "will only prevent a page from being included in the final built site," and that if your GitHub repository is public, you should also add ignores to the .gitignore of your Quartz. That matters because the sync command in step 7 commits your content and pushes everything, so a vault copied into the content folder travels with it.
| What | Built into the site? | In a public repo? |
|---|---|---|
| Note with draft: true (default filter) | No | Yes, as plain Markdown |
| Note without publish: true, with ExplicitPublish on | No | Yes, as plain Markdown |
| Image, PDF or audio file in the content folder | Yes, whatever the filter | Yes |
| Folder listed in ignorePatterns | Excluded from parsing | Yes, unless also in .gitignore |
Switch to opt-in publishing
In the default configuration file on the v5 branch (read on October 25, 2026), the remove-draft plugin is enabled, the explicit-publish plugin is listed but disabled, and ignorePatterns contains private, templates and .obsidian. To publish only what you mark, set remove-draft to enabled: false and explicit-publish to enabled: true in quartz.config.yaml, then add publish: true to each note you want live.
In our view opt-in is the safer default for a vault that grew for years before you thought about publishing it. A forgotten note stays unpublished by default instead of going live unless you remembered to mark it.
Check what the build produced
After npx quartz build, the output folder is public (the hosting guide gives public as the build output directory). Open it and look for anything you do not recognize, especially attachments. In our view this is the most direct check of what a visitor could download.
Password-protecting a page is not the same as hiding it
Quartz has an EncryptedPages plugin. Its documentation says it encrypts page content at build time using AES-256-GCM, with passwords set per page in frontmatter, and that by default encrypted pages still appear in the graph, explorer, search, RSS and sitemap, so visitors can see that the page exists and its title. Because the password sits in the note's frontmatter, in our reading a public repository would expose both the password and the plain text. For genuinely private notes, keep them out of the repository.
Can I publish only some Obsidian notes?
Yes: use ExplicitPublish as above, or keep the shareable notes in their own folder and point the copy step at that folder instead of the whole vault. In our view the second option is the stronger one, because the private notes never enter the repository at all.
Is GitHub Pages free for private repositories?
Not on the Free plan. The GitHub Pages limits page says Pages works in public repositories with GitHub Free, and in private repositories with Pro, Team and Enterprise plans. The Quartz hosting guide also covers Cloudflare Pages, Netlify, Vercel and GitLab Pages; we did not check their private-repository rules, so read each host's current terms. Cloudflare is listed on Upfynd.
How do I migrate from Quartz 4 to Quartz 5?
The migration guide gives this order: copy your content folder somewhere outside the repository first, because switching branches replaces your working files; add the official repository as an upstream remote and fetch the v5 branch; check out a local v5 branch, run npm i and push it; then run npx quartz create, choose copy as the strategy and point it at your backup; finally run npx quartz plugin install --from-config. Your old branch is kept.
Expect URLs to change. The guide says Quartz 5 lowercases and hyphenates all generated URLs, so My Notes/Hello World.md becomes /my-notes/hello-world, and uppercase v4 URLs would otherwise return 404. The AliasRedirects plugin, enabled by default, generates redirects from the old paths. One caveat from the hosting guide: on GitHub Pages, trailing slashes on non-folder paths do not redirect, which can break existing links, and it suggests Cloudflare Pages if that matters to you.
When Quartz is the wrong choice
- You do not want Git or Node in your routine. Obsidian Publish is the hosted route, at the price quoted above.
- You need access control. A static site on public hosting is public.
- Your vault is full of client or personal material and you cannot audit it. Start a new folder and move notes in deliberately.
What to do next
Create the repository from the template today and stop after step 5. Browse the local preview and the public folder before you add the workflow file, because nothing has left your machine until you push. If you are still choosing between note-taking apps, the Notes & Knowledge category lists the alternatives, and if you build a notes or publishing tool yourself, you can list it on Upfynd for free.
This guide describes the Quartz and GitHub documents as we read them on October 25, 2026. Documentation, plans and terms change, so check the current pages before you rely on them. It is not legal advice; if real money or client data rests on what you publish, read the current terms of your host and take advice.
Frequently asked questions
How do I publish Obsidian notes as a website for free?
Use Quartz 5 with GitHub Pages. Create a repository from the Quartz template, run the setup wizard with the obsidian template and the copy strategy, preview with a local build, add the documented deploy workflow, and push with the sync command. GitHub Pages on the Free plan serves public repositories.
Can I publish only some Obsidian notes?
Yes. Quartz removes notes marked draft: true by default, and its ExplicitPublish plugin instead publishes only notes marked publish: true. Filters affect the built site only, so a public repository still holds the unpublished notes unless you keep them out of the content folder or ignore them.
Does Quartz publish my attachments and images?
Yes. The Quartz documentation warns that regardless of the filter plugin used, all non-markdown files are emitted and publicly available in the final build, including images, voice recordings and PDFs. Check the public output folder after building to see what a visitor could download.
Is GitHub Pages free for private repositories?
Not on the Free plan. GitHub's documentation says Pages is available for public repositories with GitHub Free, and for public and private repositories with Pro, Team, Enterprise Cloud and Enterprise Server. If your notes must stay out of public view, check the access rules of the plan and host you choose first.
How much does Obsidian Publish cost?
According to the Obsidian Publish page on October 25, 2026, it costs $8 USD per site per month billed annually, or $10 per site per month billed monthly, and includes hosting up to 4GB. Prices change, so check the page before you buy.
How do I migrate from Quartz 4 to Quartz 5?
Copy your content folder outside the repository, fetch the v5 branch from the official repository, push it to yours, run the create wizard with the copy strategy pointed at your backup, then install plugins from the config. Quartz 5 lowercases URLs, and the AliasRedirects plugin adds redirects from old paths.
Products in this article
About the author
Nihar Rout
CEO & Co-founder