Zuplo logo

Zuplo Changelog

We release improvements, new features, and fixes daily. Follow along here to see the most important updates.

This release brings significant improvements to the Dev Portal documentation experience with enhanced navigation, better visual indicators, and a comprehensive schema overview system. Key highlights include the addition of pagination for large documentation sets, optional request body indicators, and an improved schema browsing experience.

New Features 🎉#

Enhanced Documentation Navigation

  • Added pagination to OpenAPI documentation pages with smooth loading transitions using a subtle progress bar instead of full-page spinners #849

Comprehensive Schema Management

  • Introduced a new schema overview page that displays a complete list of all API schemas, making it easier to browse and discover available data structures #855
  • Enhanced schema documentation by displaying examples and default values directly in the schema overview to help developers understand real-world usage #859

Improved Request Documentation

  • Added visual badges to clearly indicate when request bodies are optional in API endpoint documentation #858

Bug Fixes 🐛#

UI Improvements

  • Fixed catalog sidebar incorrectly appearing on API documentation pages, creating a cleaner browsing experience #857

Dependency Updates 📦#

  • Updated autoprefixer from 10.4.20 to 10.4.21 #852
  • Updated @types/estree from 1.0.6 to 1.0.7 #850
  • Updated nx-dependencies group with 3 package updates #853
  • Updated Next.js from 15.2.3 to 15.2.4 #861

This release includes internal improvements and bug fixes to enhance system stability and performance. No customer-facing changes were included in this release.

This release focuses on enhancing authentication capabilities, improving developer experience, and providing better control over search and documentation features. Key improvements include new authentication events, customizable API examples, enhanced search functionality, and better SEO control.

New Features 🎉#

Enhanced API Example Transformation
Added support for custom transformation of operation examples in OpenAPI documentation. Developers can now use a new transformOperationExamples hook to customize how API examples are displayed and processed for both request and response sections. #836

Authentication State Broadcasting
Introduced an "auth" event in the Dev Portal context that broadcasts authentication state changes throughout the application. This improvement enables better state management by allowing other components to react to authentication changes more effectively. #845

Improved Authentication Provider Interface
Added a new signRequest method to authentication providers, centralizing request signing logic within authentication providers. This refactoring improves modularity and separation of concerns by moving responsibility for signing requests from direct header setting to a dedicated method. #846

Context-Aware Search Filtering
Enhanced search functionality by passing authentication and context data to the Pagefind search filter. This makes search results more contextual and enables better search experiences across different authentication states. #847

Bug Fixes 🐛#

Improved Anchor Scrolling
Fixed reliability issues with initial anchor scroll behavior when navigating to hash links. The update includes improved scrolling logic and a MutationObserver to handle initial scroll conditions after component mounting and page loads. #842

Other Changes 🔄#

Canonical URL Configuration
Added a new top-level canonicalUrl configuration option, replacing client-side generation of canonical URLs. This change provides explicit control over canonical URL configuration and prevents preview URLs from potentially being crawled by search engines, ensuring they don't compete with production pages. #841

This release introduces improved support for special characters in OpenAPI URL paths, adds redirect functionality to the URL forward handler, and includes important compatibility date changes that affect log initialization.

Breaking Changes 🛠#

Breaking changes are always behind a compatibility date

  • Enhanced support for special characters in OpenAPI URL paths - Zuplo now properly handles special characters in OpenAPI-formatted URL paths, improving compatibility with APIs that use non-standard characters in their routes. This change ensures better compliance with OpenAPI specifications and more flexible path matching. See our advanced path matching documentation for more details.

  • Legacy log initialization removed for compatibility date 2025-02-06 - Starting with compatibility date 2025-02-06, the legacy log initialization system has been removed in favor of the modern logging infrastructure. This change provides better performance and more consistent logging behavior across your API gateway.

New Features 🎉#

  • URL forward handler now supports redirects - The URL forward handler has been enhanced with a new option to handle HTTP redirects. This feature allows you to configure whether the handler should follow redirects automatically or return the redirect response to the client, giving you more control over how your API gateway handles upstream redirect responses.

The wave of fresh logging plugins continues this week with the addition of Splunk. Now available for use direct from your Zuplo API project.

To add the Splunk logging plugin to your Zuplo project, add the following code to your zuplo.runtime.ts file. Set the url parameter to your Splunk HEC endpoint and the token parameter to your Splunk HEC token.

import {
  RuntimeExtensions,
  SplunkLoggingPlugin,
  environment,
} from "@zuplo/runtime";

export function runtimeInit(runtime: RuntimeExtensions) {
  runtime.addPlugin(
    new SplunkLoggingPlugin({
      // For Splunk Cloud
      url: "https://<your-instance>.splunkcloud.com:8088/services/collector",
      token: environment.SPLUNK_TOKEN,
      // Channel ID for Splunk HEC with indexer acknowledgment
      channel: "FE0ECFAD-13D5-401B-847D-77833BD77131",
      // Optional parameters with defaults
      index: "main",
      sourcetype: "json",
      host: "zuplo-api",
      fields: {
        environment: "production",
        application: "my-api",
      },
    }),
  );
}

As with all our loggers, the Splunk Plugin supports custom fields via the fields object, in addition to the standard fields.

Full details can be found in the documentation.

We have added the ability to specify redirect behavior for the URL Forward handler using a new forwardRedirects option.

You can implement this manually from routes.oas.json in your Zuplo project by adding it to the options object for urlForwardHandler on any route you want to use it on.

"paths": {
  "/v1/links": {
    "x-zuplo-path": {
      "pathMode": "open-api"
    },
    "get": {
      "summary": "Gets a list of links",
      "x-zuplo-route": {
        "corsPolicy": "none",
        "handler": {
          "export": "urlForwardHandler",
          "module": "$import(@zuplo/runtime)",
          "options": {
            "baseUrl": "${env.BASE_URL}",
            "forwardRedirects": true
          }
        },
        "policies": {
          "inbound": []
        }
      }
    }
  }
}

When set to false or not specified, redirects won't be followed - the status and location header will be returned as received.