Changelog

Release notes for packages.

August 2026

  1. fumapress@1.0.0

    Automatic image optimization

    The recommended preset now enables image optimization automatically, with a provider matching your deployment adapter (auto-detected from the environment, or set via the adapter option):

    • Vercel: Vercel Image Optimization.
    • Cloudflare: Cloudflare Image Transformations.
    • Node.js: the self-hosted Sharp endpoint, only when sharp is installed in your app and the render mode is not static.

    On other targets, or when the requirements above aren't met, image optimization is skipped and the Image component keeps rendering a plain <img>, so sharp stays an optional dependency.

    An explicitly configured image plugin takes priority over the detected provider. Configure one to customize options such as allowedHosts for remote images.

  2. fumapress@1.0.0

    Own CLI, Waku.js becomes an internal dependency

    Fumapress now ships its own fumapress CLI and manages Waku.js as a regular dependency, so apps no longer install waku or react-server-dom-webpack themselves. Fresh installs only need fumapress, Fumadocs, React, and Vite.

    Migration:

    • Remove waku and react-server-dom-webpack from your dependencies.
    • Add vite to your devDependencies if it isn't there yet.
    • Replace waku dev/waku build/waku start scripts with fumapress dev/fumapress build/fumapress start.
    • Rename waku.config.ts to vite.config.ts: it is a plain Vite config now, use defineConfig from vite and move the vite field's contents to the top level.
    • Waku-specific options (basePath, srcDir, distDir, privateDir, rscBase, and the deployment adapter) moved into the press() plugin options in vite.config.ts.
    • Delete src/pages.gen.ts if present, it is stale output of Waku's route typegen (disabled by Fumapress) and its waku/router type imports no longer resolve.

    Custom server entries (src/waku.server.tsx) keep using Waku APIs directly — install waku yourself in that case, matching the version pinned by Fumapress.

    Auto-dedupe framework packages

    The press() Vite plugin now adds detected framework packages (Fumadocs, Fumapress plugins, and other packages with a React peer dependency) to resolve.dedupe, preventing duplicated React contexts when a package manager instantiates them more than once. The manual resolve.dedupe: ["fumadocs-ui"] workaround is no longer necessary.

  3. fumapress@1.0.0
  4. fumapress@1.0.0-beta.3

    linkValidationPlugin gained a report option. It still fails the build by default, but can now write dist/fumapress-diagnostics.json instead, so a CI check can annotate a pull request rather than parse an error message.

    linkValidationPlugin({ report: "json" });

    Use "both" to write the file and still fail the build. The file is written on every build, so an empty diagnostics array means validation ran and found nothing, rather than that it never ran.

  5. fumapress@1.0.0-beta.3

    The tags page hardcoded /blog/tags/{tag} for every tag, so a blogPlugin configured with a custom paths.tags linked to a route that was never generated, and localized sites dropped the locale prefix. Both cases returned 404. Links now resolve against the configured tags path and the current locale, matching the tag links already rendered on blog posts.

  6. fumapress@1.0.0-beta.2

    Support the Glass layout

    Added fumapress/layouts/glass, a layout wrapper for the new Glass layout from Fumadocs UI. It accepts the same options as the docs & notebook layouts, and works with built-in plugins (OpenAPI, AsyncAPI, GraphQL, llms.txt).

    press.config.tsx
    import { createGlassLayoutPage } from "fumapress/layouts/glass";
    
    const GlassLayout = createGlassLayoutPage<typeof config.$context>();

    It requires Fumadocs UI v16.12.0 or above, remember to import fumadocs-ui/css/generated/glass.css in your CSS file.

  7. @fumapress/ai@1.0.0-beta.2

    Fix aiPlugin export

    aiPlugin was re-exported as a type-only export, so import { aiPlugin } from "@fumapress/ai" failed at runtime. It is now exported as a value.

    Support the Glass layout

    aiPlugin now binds AI chat to the Glass layout's native aiChat option, the Ask AI trigger is shown in the layout header & sidebar instead of a floating button.

  8. @fumapress/graphql@1.0.0-beta.2

    Add the GraphQL integration

    Generate API docs from your GraphQL schema with @fumadocs/graphql:

    press.config.tsx
    import { createGraphQL, graphqlPlugin } from "@fumapress/graphql";
    
    const graphql = createGraphQL({
      input: [path.resolve("./schema.graphql")],
    });
    
    export default defineConfig({
      content: {
        docs: docs.toFumadocsSource(),
        graphql: await graphql.staticSource({ baseUrl: "/" }),
      },
    }).plugins(graphqlPlugin({ server: graphql }));

July 2026

  1. create-fumapress@0.1.5fumapress@1.0.0-beta.1
  2. @fumapress/notion@1.0.0-beta.0