Zuplo Changelog
We release improvements, new features, and fixes daily. Follow along here to see the most important updates.
This release includes important improvements to error handling, and bug fixes to the GitLab integration. We've also made improvements to our project templates and development tooling.
New Features 🎉#
- Improved error messages for invalid module imports - When importing modules incorrectly in your Zuplo project, you'll now receive more helpful and descriptive error messages that make it easier to identify and fix import issues. This enhancement improves the developer experience when working with custom modules and policies.
Bug Fixes 🐛#
-
Fixed virtual module namespace collisions - Resolved an issue where virtual modules could conflict with each other due to namespace collisions. Virtual modules are now properly namespaced to ensure they work reliably alongside other modules in your project.
-
Fixed GitLab integration infinite loop - Corrected a critical issue where fetching from GitLab repositories could cause infinite loops under certain conditions. This fix ensures stable and reliable synchronization with your GitLab repositories when using Zuplo's source control integration.
Documentation 📚#
- Added /hello route to project template - The default project template now
includes a
/helloroute example, making it easier for new users to understand how to create and configure routes in their Zuplo API gateway.
Other Changes 🔄#
- Zudoku template enhancements - Updated the Zudoku documentation template to properly set Zuplo flags on scripts, ensuring better integration between Zuplo and the Dev Portal.
This release includes improvements to OpenAPI schema reference handling and a fix for the Zuplo CLI login behavior on middleware platforms.
Bug Fixes 🐛#
-
Improved nested schema reference traversing - Fixed an issue where deeply nested schema references in OpenAPI specifications were not being properly resolved. This enhancement ensures that complex OpenAPI documents with multiple levels of
$refpointers are correctly processed, improving compatibility with sophisticated API specifications. -
Fixed CLI login behavior on middleware platforms - Resolved an issue where the Zuplo CLI would unexpectedly exit after login when running on certain middleware platforms. The CLI now properly maintains the session after successful authentication, ensuring a smooth development experience.
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.
We’ve introduced a new default compatibility date for projects created after
March 27, 2025, which includes some breaking changes that improve the
overall behavior of Zuplo APIs.
The new default compatibility date is 2025-02-06.
Previously, special characters in open-api formatted URLs were not escaped.
This led to unintended behavior where regex patterns could be included, even
though OpenAPI format URLs don’t support regex. This has now been fixed—all
special characters are escaped.
Additionally, some Zuplo log plugins could be enabled using undocumented
environment variables and special properties on context.custom to set global
log attributes.
These legacy features, which predate the current plugin system, have now been removed.
Log plugins should now be enabled using the documented plugin system.
For full details on compatibility dates and the changes they include, see our documentation.