Changelog

Release notes for packages.

November 2026

  1. fumapress@2.0.2
  2. @fumapress/core@0.1.1
  3. fumapress@2.0.1
  4. fumapress@2.0.1

    Updated Waku to 1.0.0-rc.4

    • Fumapress runs on Waku 1.0.0-rc.4, which needs React 19.3.1 or later.
    • A custom server entry pins waku to 1.0.0-rc.4.
    • The head of ui.renderRoot has the charset and viewport tags, which Waku no longer adds to custom roots.
    • API routes in src/pages/_api accept CONNECT, TRACE and QUERY handlers, like Waku.
  5. @fumapress/ai@2.0.0

    AI chat on Waku and Astro

    • aiPlugin() and mcpPlugin() work on Waku and Astro, and fumapress is no longer a peer dependency.
    • The built-in UI docks the chat, with a floating "Ask AI" button.
    • The chat reaches layouts as their aiChat prop through useLayoutProps(), so a custom layout docks it by spreading useLayoutProps(). Docs and Notebook layouts show a floating "Ask AI" button, Glass and Spacious their own.
    • Removed AIChatLayout, and AIChat takes the endpoint as its api prop.
    • AI search indexes the pages of every plugin with page text, like OpenAPI pages.
    • /api/ai answers 400 to messages the UI never sends: system messages and parts like files, which the server would download.
  6. @fumapress/astro@0.1.0

    Fumapress on Astro

    • @fumapress/astro runs the site of press.config.tsx on Astro, with the plugins, ui options and search of Fumapress.
    • Add its default export to the integrations of Astro, and write the site with createPress() of @fumapress/astro/config. The core plugins are at @fumapress/astro/plugins/*.
    • It follows the output, adapter, site and base of Astro. A route rendered on demand without an adapter fails the build, naming the route.
    • With output: "server", content renders on demand unless mode of createPress() sets it. mode: "force-static" builds a dynamic source without an adapter.
    • A build without an adapter warns that the middleware of plugins never runs.
    • ui.renderPage can return an .astro file as the layout of a page, with a React root from createIsland() of @fumapress/astro/client in client:*. LayoutProps<typeof app, "docs"> and IslandProps<typeof app, "docs"> of @fumapress/astro/config type them.
    • contentSourcePlugin() of @fumapress/astro/plugins/content-source renders content collections and runtime sources: list it with components as a function of the page for components per page.
    • @fumapress/astro/css/default.css is the whole stylesheet, @fumapress/astro/css/preset.css only the styles of Fumapress for a custom Tailwind and Fumadocs UI setup.
    • It needs the Base UI build of Fumadocs UI, Astro 7.4 and Node.js 22.23.4 or later.
  7. @fumapress/blog@0.1.0

    Blog for Waku and Astro

    • @fumapress/blog is the blog of a Fumapress site, replacing fumapress/plugins/blog. blogPlugin({ source: "blog" }) renders the posts of one or more source keys.
    • Import its styles with @import "@fumapress/blog/css/preset.css"; and its frontmatter schema blogPageSchema from @fumapress/blog/schema.
    • ui.renderPage receives typed props for blog.index, blog.tags, blog.tag and the post pages. Compose them with BlogIndexView, BlogTagsView, BlogTagView and BlogPostView.
    • Tags, authors and cover images come from the getTags, getAuthors and getImage options, falling back to the frontmatter.
    • getBlogPosts(ctx, { lang }) lists the posts on custom pages, like a landing page. Without i18n, getBlogPosts(ctx).
    • The index and tag pages render on demand when their content source is dynamic.
  8. @fumapress/core@0.1.0

    Shared engine of Fumapress

    • @fumapress/core is the internal engine of fumapress and @fumapress/astro. Sites import from those two packages.
  9. create-fumapress@0.1.23

    Astro template

    • create-fumapress asks for a framework, and --framework astro scaffolds an Astro site. --yes picks Waku.
    • The Waku template uses createPress().
  10. @fumapress/feedback@2.0.0

    Feedback on Waku and Astro

    • feedbackPlugin(), githubFeedbackPlugin() and emailFeedbackPlugin() work on Waku and Astro, and fumapress is no longer a peer dependency.
    • Page feedback is the feedback:page slot item, props.slots["feedback:page"] in ui.renderPage.
    • Changed: actions of feedbackPlugin() run on the server at /api/feedback/page and /api/feedback/text instead of as Server Functions. A Response an action throws is the answer.
    • Actions exported from 'use client' modules run in the browser, also on a site without a server.
    • feedbackPlugin() accepts beforeRequest, like the integrations.
    • githubFeedbackPlugin() finds the existing discussion of a page instead of opening a new one for each feedback.
    • Feedback routes answer 400 to invalid JSON.