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”.

1 Like

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.