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 📦#
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.