Package dedicated to workflows publishing digital garden on web

Hi roam-guys,

I first start a discussion based on my org-roam publishing needs on how-to section of this discourse (Advice on Roam workflow, how do you separate private and public part of your garden?), but after some reflexions and one enhancement issue open on github ( i think we could generalize the idea, starting from simple workflow to complex workflow for publishing digital garden on the web.

Lot of discussions about org / org-roam are note-taking-workflows or note-publishing-workflows discussions. As you know, there are probably more of these workflows than peoples on earth, so we don’t try to encapsulate all of them in this post.

I propose you to define some classic publishing note taking and note publishing workflow.

IMHO that could also help org beginer. It’s easier to start publishing note with a template in mind.

Like @jethro say, this is out of scope for org-roam core, and we probably need to create a specific org-roam-publish package.

Objectives of the package :

  • generate a template based on simple or complex use-case already defined
  • managing/preparing org-roam note for multiple front-end : ox-hugo, firn, etc.
  • use filter rules to select which org notes are published (or not) for which front end

Workflow :

  • simple workflows :
    • one db, one website, all notes
  • complex workflows :
    - one db, multiple website, filtering by taf and private/public note
    - multiple db, multiple website, filtering by tag and private/public note

Because i think it’s more easy to represent workflow using schema, i try to represent one of the complex publishing workflow in this schema. The svg is also shared, if you want to propose new things based on this first work.

Svg here :

In this workflow :

  • work & home could be defined by ROAM_TAGS context
  • we have private (gpg) and public not in HOME and WORK context
  • we have two publishing platform and three website
    • one website publish/contain only public note from WORK context
    • one website publish/contain only public note from HOME
    • one website publish/contain only private note from HOME

I think we could add one more level of filtering, because an user might want to publish only “note” marked as “ok-to-be-published” and not publish “draft”.


I guess I’ll describe my workflow a little here, just to give an idea of what’s already possible.

Some context:

  • I don’t encrypt my files, my private files are just kept out of version control and sync.
  • I use ox-hugo to publish my files. My public files have the necessary ox-hugo headers setup, based on the org-roam template. my private files do not, hence they should never get published.

The repo for my digital garden is at You can see the org files in the org folder, and the generated md files in the content folder. Using my custom Hugo theme, it is able to detect backlinks without org-roam. This is dependent on the ox-hugo generating relref links.


  1. My public files may link to private files. While the content may be private, the links do leak some info. Not a dealbreaker for me, but might be a dealbreaker for some.
  2. Severe duplication across org/md files. Ox-hugo was just really convenient.

My hope is that Org is able to produce static html/css without an intermediary. Org already has pretty good HTML export support. It just lacks a bunch of other things, like RSS and sitemaps.


Hiya! @reyman shared this post with me and I thought I’d share a bit about a project I’ve been building called Firn.

Soon after discovering Org-Roam I wanted a tool that could generate a site from it, so I built a static site generator built for Org mode. Firn tries to solve some of the problems that I needed, similarly mentioned around here, including how to make work a mixture of private and public files. Here’s how I do things.

  • I keep my wiki in a private repo.
  • Private files state in a private folder, that Roam is able to index and Firn is able to ignore.
  • Files can also be marked private in the in-buffer-setting using #+FIRN_PRIVATE.
  • Public files may also link to private files, but I’m ok with that happening.

Firn also solves the problem of being able to render what I want from an org file. It provides a site-map, a basic “template engine” which includes the abilities to target exact headings within a file to render. This works for me, as the large majority of my notes mix private and public content; for example, my file is for taking notes on learning french. The information that I want public is all under a headline called “notes”, which I call to render it in my layout.

Not sure if that’ll be of much use to anyone else, but that’s how things are working for now! I’ve got some things in the pipeline to build still, including site-wide tags that leverage org-roam tags as well as creating a link-graph / back links section based on the parsed org-files.


Thanks for replying @tees and @jethro, and sorry for the late answer due to hollidays.

We need the possibility to tag and collect “blogpost” anywhere in our digital garden for publication, like for example this tools made by karl-voit : , a tool cited in the critics of Zettel. workflow here :

I continue to list some ideas before sharing with you, but we already see on this forum that a possibility was to extend/adapt the org-publish existing tools to do some job between publishing engine (ox-hugo, firn, etc.)

Another idea that came to me was the possibility to publish part of garden (blog part) on fediverse (activityPub protocol) to easily cross publish and dissiminate words on any platform compatible with this protocol :, mastodon,, etc. It could be an interesting project.

1 Like

I like this idea too. I would like to combine my garden and stream into one space, and layering Fediverse or IndieWeb on top of org-roam could be the way to do it. I’ve toyed with Micropub before ( to publish to an IndieWeb-enabled stream from within Emacs.

1 Like

I was looking at Firn and it seems awesome!
From looking at the docs, I see that it basically creates a html website locally on your machine.
I am not an expert on this - so excuse my ignorance - I was wondering if there is an easy way to share this notes-website with other people. Is there a section in the docs showing how this sharing can be done?


There are no plans for adding deployment docs; but if you google “how to deploy a static site” or “how to deploy a jekyll” site you will likely find some useful documents. On the firn side of things, you will just need to run firn build and then you’ll be on your way. Good luck!

1 Like

Hi there, by coupling weblorg routing capacities (GitHub - emacs-love/weblorg: Static Site Generator for Emacs) and the great tool of alphapapa to filter content (org-ql), i’m thinking this is a the perfect tool to filter notes and contents to generate any website on top of org-roam : Using org-ql as powerfull filtering tool on top of org-roam to generate and publish any website · Issue #183 · alphapapa/org-ql · GitHub

Don’t hesitate to comment on issue.

1 Like

I’m very interested in this.

I saw the reply on the weblorg issue. Did you give it a try yet?

Are you on freenode or matrix?

Actually no tested, too much work on my job at this time, but i’m interested and i’m on matrix yup, you could find me on @reyman : matrix : org