Changelog

This page tracks what we ship in Flowershow.

  1. Publish from Claude and ChatGPT (beta)

    Add the Flowershow connector to Claude or ChatGPT, ask it to publish, and get a live link. Nothing to install, no account needed.

    You can now publish straight from a chat in the Claude and ChatGPT apps. Add https://flowershow.app/api/mcp as a connector once, then ask your AI to "publish this". You get a live link in seconds. See Publish from Claude and ChatGPT.

    • Nothing to install, no account: each new site gets a …-anon.flowershow.me link and a claim link. Claim it to keep the site; otherwise it expires after 7 days.
    • Change it as you go: ask for edits in the same conversation and they go live at the same address.
    • Markdown, HTML and images: one page or a small site, up to 50 files and about 3 MB per publish. For bigger sites, use the fl CLI.

    This is a beta. The connector can't sign in to your account yet, so make your changes first, then claim the site. Tell us how it goes on Discord.

    In coding agents such as Claude Code, Codex and Cursor, keep using the Flowershow skill. The Publish with AI page now shows both paths.

  2. Publish without an account

    Run fl --anon to put a folder online with no signup, then claim it to keep it.

    You can now publish with fl --anon ./folder and no account. You get a live link straight away, and a claim link to keep the site. Handy for trying Flowershow, and for AI agents that can't log in for you. See Publish without an account.

    • Live in seconds: the site gets a random …-anon.flowershow.me URL.
    • Claim it to keep it: anonymous sites expire after 7 days. Open the claim link, sign in or sign up, and confirm to move the site into your account. After that, publishing the same folder while logged in (from the machine that published it, which keeps its link in .flowershow) updates your claimed site.
    • Re-run to update: running fl --anon on the same folder updates the same URL.
    • Limits: 200 files and 50 MB per site.

    Also

    • Set FLOWERSHOW_TOKEN to a personal access token to use fl without fl login, for CI and cloud agents. See Environment token.
    • Agents using the updated Flowershow skill can offer --anon when you just want a link now.

    Fixes

    • Expired anonymous sites stop being served immediately, not only after cleanup.
    • Anonymous sites are marked noindex, so search engines don't index them.

    Requires fl 2.5.0 or later. Upgrade with the steps in Upgrade.

  3. Publish with AI

    Go from your AI session to a live website. A new Publish with AI page, an updated Flowershow skill, per-agent install guides and a safer fl CLI.

    Whatever you're working on with Claude, ChatGPT, Codex or Cursor, you can now just ask it to publish: one page or a whole site, live in seconds. See Publish with AI.

    • Updated Flowershow skill: your agent installs and logs in to fl for you, publishes HTML as-is alongside Markdown, checks for site-name clashes before a first publish, and can convert .docx, .pptx and .pdf files to Markdown before publishing. Update it with npx skills add flowershow/skills --global.
    • Install guides for every agent: Claude Code, Codex, Cursor, the Claude apps and ChatGPT, with or without Node.js. See Supported agents.
    • Easier CLI install: set FL_INSTALL_DIR to install fl without sudo, handy for agents and CI. See CLI docs.

    Fixes in fl 2.4.0

    • Publishing a new folder no longer silently overwrites an existing site with the same name. fl now asks first, and --yes refuses rather than overwriting. Pass --overwrite when you mean it. See Name collisions.
    • fl now exits non-zero on every failure, and fl whoami exits 1 when you're logged out, so scripts and agents can tell when something went wrong.
  4. Publish HTML, not just Markdown

    HTML pages publish as-is with their CSS, JavaScript and data, side by side with Markdown. New guides cover what you can publish and how.

    Put Markdown, HTML, data, images and Obsidian Canvas files in one folder and publish it as one site. Markdown gets your theme and navigation; HTML is served exactly as written, so the report or dashboard you built keeps its own styles and scripts.

    • Supported file types: what each file becomes, the URL it gets (.html URLs keep their extension) and publish limits. See Supported file types.
    • Publishing HTML guide: standalone HTML sites, and HTML inside Markdown pages. See Publishing HTML.
    • Host more kinds of files: ebooks (.epub), Office and OpenDocument files, calendar invites (.ics), archives, data files (.parquet, .jsonl, .sqlite, Jupyter notebooks) and map files (.gpx, .kml) now have their own URL, so you can link to them for readers to download.

    Fixes

    • .flac, .ogv, .m4v, .aac and .opus embeds (![[clip.ogv]]) now play.
    • Updated CSS, JavaScript and images now show up right after you republish, instead of being cached for several minutes. Deleted files stop loading too. Works with every publishing method, including older CLI versions.
    • The Obsidian Canvas docs now give the right URL for canvas pages (no .canvas extension).
  5. Tags support

    Tag your notes in frontmatter or inline with

    Flowershow now supports Obsidian-style tags. Tag any page and we'll build browsable tag pages for your whole site — no configuration needed.

    Two ways to tag. Declare tags in frontmatter, inline in the body, or both — they're combined into a single tag set for the page:

    ---
    tags: [book, book/fiction]
    ---
    
    Reading notes on my favourite #book and #book/fiction titles.
    

    Tag pages. Visit /tags for an index of every tag on your site with page counts, and /tags/{tag} for a listing of every page carrying a tag. Tags are hierarchical, so book also surfaces book/fiction, and matching is case-insensitive.

    Rendered pills. Inline #tags render as clickable pills, and frontmatter tags appear as a row of pills at the top of the page — each linking to its tag page.

    Now in Bases. file.tags and file.hasTag() in Obsidian Bases now include inline #tags from the body, not just frontmatter tags.

    Optional. If you use #tags just to organize your notes, set showTags: false (in your dashboard settings or config.json) to keep them off your published site — inline tags render as plain text and the tag pages go away.

    Learn more in the Tags reference.

  6. Built-in changelog pages

    Put dated Markdown files in a changelog/ folder, or keep a single CHANGELOG.md, and Flowershow renders a full timeline with no components or config.

    Your changelog now looks like one out of the box. Add a changelog/ folder of dated Markdown files and Flowershow renders it as a timeline at /changelog: newest first, with the date and authors beside each entry, then its title, summary, optional image and full content. This page is built with it.

    • One file per entry. For example changelog/2026-09-19-my-release.md, with title, date, description, authors, image and an optional version in the frontmatter. If you leave out date, it is read from the date at the start of the file name.
    • A page for every entry. Each entry also gets its own URL, with a link back to the changelog and links to the previous and next entries.
    • Authors and pages. Authors are looked up in your people/ folder, the same way as blog posts. The timeline shows 10 entries per page, with ?page=2 and so on for older ones.
    • Your README is the intro. Any text in changelog/README.md appears above the timeline. With no README you still get a "Changelog" page.
    • Fits your theme. Colours and fonts come from your theme, and it works with all the official themes. To adjust spacing or the date marker, set the --changelog-* CSS variables.
    assets/changelog-entry-page

    Any other folder can be a changelog too: add layout: changelog to its README.md, for example for a releases/ folder. To keep a changelog folder as ordinary pages, give its README.md a different layout, such as layout: default.

    Prefer a single CHANGELOG.md? It renders as the same timeline: each version gets its own entry with its date, a link you can share (/CHANGELOG#1.2.0), and a Compare link when the heading has one. Keep a Changelog, Changesets, release-please and date-based headings all work without any configuration, and the file is also available at /changelog. To render another file the same way, add layout: changelog to its frontmatter.

    If your changelog page used a <List> component, remove it: the timeline replaces it. See the changelog docs for the full reference.

  7. Obsidian Bases: tag & link filters, date math, and more file properties

    Bases queries now support tag and link filters, date + duration arithmetic, and more file properties — plus an empty query now returns your whole vault.

    We've closed several gaps in our Obsidian Bases support, so more of your existing queries now render on your published site exactly as they do in Obsidian.

    Query the whole vault by default. A Bases block with no filters now returns every page on your site, matching Obsidian's default — instead of an empty result.

    Tag and link filters. You can now filter on tags and links:

    filters:
      or:
        - file.hasTag("book")
        - file.hasLink("Reading List")
    

    file.hasTag() matches nested frontmatter tags too — hasTag("book") also matches book/fiction.

    Date + duration arithmetic. Formulas can now add and subtract durations from dates:

    formulas:
      deadline: '(date(start) + "2w").format("YYYY-MM-DD")'
      isRecent: 'file.mtime > now() - "1 week"'
    

    Durations support y / M / w / d / h / m / s units, including compound values like "1y2M3d", and the duration() function. Month and year math is calendar-aware.

    More file properties. file.mtime, file.ctime, file.tags, file.basename, file.links, and file.backlinks now resolve in filters and formulas — so you can sort by last-modified time, list a note's outgoing links, or count its backlinks.

    formulas:
      backlinkCount: file.backlinks.unique().length
    

    More of the Bases spec is on the way. See the full Bases documentation for what's supported today.

  8. Monospace theme is now available

    Choose the compact Monospace theme from the dashboard or config.

    Monospace is now an official Flowershow theme for technical documentation, notes, and blogs. Select it in the dashboard or set "theme": "monospace" in your site configuration. See the themes gallery for a live preview.

  9. Dollar amounts in prose no longer break your text

    Currency mentions like "$61 … $76" are no longer mistaken for math formulas.

    Text that mentioned two dollar amounts used to break silently. A sentence like:

    Solar cost about $61 per MWh, cheaper than gas at $76/MWh.

    was mistaken for a math formula: everything between the two $ signs — including the *cheaper* emphasis — got swallowed and rendered as garbled KaTeX instead of text.

    This is now fixed. A $…$ is only treated as math when there's no space right after the opening $ and no space right before the closing $. Every other $ — currency amounts, a lone dollar sign, $HOME, etc. — renders as a literal dollar sign, and any markdown around it (bold, italic, links) renders normally.

  10. Custom Head Code — site-wide scripts and meta tags

    Inject analytics, verification meta tags, fonts, and widget loaders into the head of every page — from the dashboard or config.json.

    You can now add custom HTML to the <head> of every page on your site — no per-page embedding required.

    Use it for anything that belongs site-wide:

    • Third-party analytics and tag managers
    • Site-verification <meta> tags (Google Search Console, Bing, Pinterest…)
    • Custom fonts (<link> / <style>)
    • Widget loader scripts (Tally, Mailchimp, chat widgets…)

    Set it from the dashboard under Site Settings → Analytics → Custom Head Code, or in config.json:

    {
      "head": "<script defer src=\"https://tally.so/widgets/embed.js\"></script>"
    }
    

    Verification <meta> tags are rendered into the page <head> on the server, so crawlers see them on the first load.

    For form and widget embeds, put the loader script here once and drop just the <iframe> on the pages that need it — instead of repeating the whole embed on every page.

    CustomHtml is now deprecated

    Previously, the recommended way to embed a script was the CustomHtml component inside a page's markdown. It still works, but it's now deprecated: it re-runs the loader on every page that uses it and only works from .md/.mdx content.

    To migrate, split your embed in two — move the <script> into Custom Head Code, and keep just the embed markup (e.g. the <iframe>) in your page:

    <!-- before (deprecated) -->
    <CustomHtml html={`<iframe data-tally-src="https://tally.so/embed/your-form-id"></iframe><script src="https://tally.so/widgets/embed.js"></script>`}/>
    
    <!-- after: script in Custom Head Code, iframe in the page -->
    <iframe data-tally-src="https://tally.so/embed/your-form-id"></iframe>
    

    See the Custom Head Code docs for details.

Built with LogoFlowershow