fl ./my-notes # publish or sync (idempotent)fl list # list your sitesfl delete my-notes # delete a sitefl --name my-site ./dir # custom site name
Note:fl sync is deprecated — fl now creates or syncs automatically. --overwrite is also no longer needed for the same reason.
Why Go
The Node.js CLI required users to have Node.js v20+ installed, which added friction — especially for non-developers and AI agents. The Go binary has no runtime dependencies, starts faster, and is easier to install in scripts and CI pipelines.
The CLI docs have been updated with the new installation instructions and commands.
Published Flowershow sites have moved to clean subdomains on flowershow.me — your site is now at sitename-username.flowershow.me.
Every published Flowershow site now has its own subdomain on flowershow.me. Old URLs redirect automatically, so nothing breaks for your existing readers.
What changed
Before
After
my.flowershow.app/@johndoe/garden
garden-johndoe.flowershow.me
The new format for all sites is:
https://{sitename}-{username}.flowershow.me
Subdomains are assigned automatically at site creation and are not user-modifiable. Custom domains are unaffected.
Old URLs still work
Existing my.flowershow.app/@username/sitename links redirect to the new subdomain. No need to update anything — but it's a good time to share your new URL.
Image embeds, note embeds with rendered markdown, custom hex colors, and style fixes for Obsidian Canvas rendering.
Canvas rendering just got an upgrade!
Create in Obsidian
Draw on Canvas
Bloom on Flowershow
Share with the world
Customize
Custom styles
Creating the file
Create a new file named custom.css in the root of your repository (or the root directory of your site if you're publishing from a subfolder)
Add your CSS rules to customize colors, fonts, layouts, and more
Publish it along with your content.
Flowershow uses CSS cascade layers, so any rule you write in custom.css wins over the default theme without needing !important.
Start with the theme variables below for broad visual changes. When you need to
target a particular component or state, use the
semantic theme class reference, which
groups Flowershow's stable CSS hooks by the UI area that emits them.
Theme variables
Flowershow exposes CSS custom properties (variables) in :root.
You can override them in custom.css without touching app code.
The variables below are drawn from two source files in the Flowershow repository — browse them directly for the full picture:
:root{--color-code-bg:#fafafa;/* light mode */--color-code-bg-dark:#2f2f2f;/* dark mode */}
CTA button colors
The navbar call-to-action button is unstyled by default (inherits foreground tones). Override these to brand it:
:root{--color-cta-bg:/* defaults to --color-foreground-700 */--color-cta-bg-hover:/* defaults to --color-foreground-500 */--color-cta-text:/* defaults to #ffffff */;}
Used for sticky positioning of the navbar, sidebar, and TOC. Override if you change the navbar height or add a banner above it.
:root{--navbar-height:4rem;--subnav-height:3rem;/* mobile breadcrumb/sidebar toggle bar */}
Callout colors
Each callout type maps to one of these tokens. Override them to retheme all callouts of that category at once.
:root{--callout-note-color:oklch(0.6230.214259);/* blue */--callout-tip-color:oklch(0.7140.143215);/* cyan */--callout-success-color:oklch(0.7230.219142);/* green */--callout-warning-color:oklch(0.7050.19155);/* orange */--callout-danger-color:oklch(0.6270.25829);/* red */--callout-example-color:oklch(0.6270.265303);/* purple */--callout-quote-color:oklch(0.5540.014286);/* zinc */}
:root{--callout-warning-color:oklch(0.650.1880);/* amber instead of orange */}
Tip
Keep overrides in :root where possible. This gives you broad, consistent changes with less CSS.
Info
For a detailed guide including examples and step-by-step instructions, check out this blog post.
What's new
Image embeds – file nodes referencing images (.png, .jpg, .gif, .svg, .webp) now render the actual image inside the canvas node, with proper sizing and lazy loading
Note embeds with rendered markdown – file nodes pointing to .md files now display the note's rendered content (headings, lists, links, callouts, math, code highlighting) instead of just the filename
Rich text in text nodes – text nodes now render full markdown (GFM, wiki-links, callouts, math, syntax highlighting) instead of plain text
Custom hex colors – nodes and edges with custom hex color values (e.g. #ff6600) now render correctly, in addition to the 6 Obsidian color presets
Improved labels display – edge labels are now positioned correctly on edge lines and have background for better readability.
Your Flowershow sites can now serve an RSS feed, so readers can subscribe to your content in their favorite feed reader.
Flowershow now supports RSS feeds for published sites. Enable it with a single toggle in your dashboard settings and your site will serve a standard RSS 2.0 feed at /rss.xml.
How it works
Go to your site's Settings page in the dashboard
Toggle RSS Feed on
Your feed is live at https://your-site/rss.xml
Feed readers will auto-discover your feed thanks to a <link rel="alternate" type="application/rss+xml"> tag added to every page.
What's included in the feed
Only pages with a date field in their frontmatter are included – this means blog posts and other dated content appear in the feed, while documentation and landing pages are excluded.
Each feed item includes the page title, publication date, description, and author(s) when available in frontmatter.
Feed metadata
The feed title and description are pulled from your site's config.json. If no config is set, the feed title defaults to your project name.
Flowershow now renders Obsidian Canvas (.canvas) files as SVG diagrams, both as standalone pages and inline embeds in markdown.
Flowershow now supports Obsidian Canvas files. Canvas files (.canvas) are automatically rendered as visual SVG diagrams showing your nodes, connections, and colors – no configuration needed.
Create in Obsidian
Draw on Canvas
Bloom on Flowershow
Share with the world
What's supported
Standalone canvas pages – any .canvas file in your content gets its own page, e.g. Roadmap.canvas renders at /@user/project/Roadmap.canvas
Inline embeds – embed a canvas in any markdown page with ![[my-diagram.canvas]] or 
Obsidian color presets – all 6 node color presets are rendered
Edges – connections between nodes render as bezier curves, with support for edge colors and labels
Text cards, file nodes, and node labels
How it works
Canvas files follow the open JSON Canvas specification. When you sync your vault, Flowershow detects .canvas files, parses the JSON, and renders them as inline SVGs. The rendering is built on the @trbn/jsoncanvas TypeScript bindings, with SVG rendering adapted from rehype-jsoncanvas.
Current limitations
Canvas rendering is static – no zoom, pan, or interactivity yet. Text inside nodes is plain text without markdown formatting.Update: text nodes, image embeds, and note embeds now render with full markdown formatting – see the March 26 update.
The sidebar is now on for all new sites, has a slide-out drawer on mobile with breadcrumb navigation, and can be restricted to specific URL paths.
We've shipped three improvements to sidebar navigation that make Flowershow sites easier to explore out of the box — especially on mobile — and give you more control over where the sidebar appears.
Sidebar enabled by default
New Flowershow sites now render the sidebar without any configuration. Previously, enabling it required opting in via config.json. Existing sites are not affected — your current settings continue to work as before.
Redesigned mobile experience
On small screens, the sidebar previously shared space with the navbar in ways that made navigation cramped. It now gets its own dedicated slide-out drawer, toggled by a chevron icon in a breadcrumb bar that shows where you are in the site hierarchy. The breadcrumb updates as you navigate, so you always have context even when the sidebar is hidden.
Route-specific sidebar visibility
For sites that mix documentation with landing pages or blogs, you can now restrict the sidebar to specific URL prefixes using the sidebar.paths option in config.json:
{"sidebar":{"paths":["/docs","/guides"]}}
The sidebar will appear only on routes that start with one of these prefixes. Per-page opt-out via showSidebar: false in frontmatter continues to work as before.