Changelog
Are you looking for 1.x.x changelogs?
Prior to version 2.0.0, the changelogs were maintained only in the GitHub repository.
2.4.0 2025-08-15
New features
- New HTTP response evaluation options: you can now configure your HTTP monitors to:
- accept only specific HTTP status codes as valid responses
- check for a keyword in the response body, and you can make the check optionally case-sensitive, or also reversed to check for the absence of the keyword
- check the response time against a threshold (in milliseconds) to ensure that the response is not only valid but also fast enough
- More details are persisted about the errors that occur during the HTTP uptime checks
- Added French translation, thanks to @waazaa-fr!
- Added Polish translation, thanks to @nkkfs!
- Made the URL on details page clickable, so you can easily open the target URL in a new tab
Improvements
- Re-worked the logic of the HTTP uptime check configuration & evaluation to make it easier to introduce new configuration & evaluation options in the future
- @by-su improved the validation messages around the admin authentication configuration, and also extended the docs to clarify the usage of it, thanks for that!
- Other validation messages have been improved as well, to make them more user-friendly if something goes wrong during the bootstrapping of Kuvasz or during an API request.
- Client-related HTTP response errors are not retried anymore, only the server-related ones. This means practically that 4xx responses will be evaluated as-is without retrying them, while 5xx responses will be retried up to 3 times with an exponential backoff strategy.
Fixes
- Translated the "...[REDACTED]" string to make it internationalization friendly
- Fixed the latency measurement logic to not include the time spent on retrying failing HTTP requests
- Fixed the following CVEs by upgrading 3rd party dependencies:
2.3.1 2025-07-25
Fixes
- Make sure that no deadlocks can occur during the uptime checks by introducing an expiry for every single lock as a fail-safe fallback mechanism
- UI: Align the cards on the settings page better, by not having gaps between them
Chore
- Dependencies: bumped i18n4k to 0.11.0
2.3.0 2025-07-19
Features
- Discord integration: Added support for sending notifications to Discord channels via webhooks. Configure Discord integrations in your YAML file and receive real-time alerts about monitor status changes directly in your Discord server.
2.2.0 2025-07-17
Features
- Metrics exporter settings are exposed both on the API (under
GET /api/v1/settings
) and on the UI, so you can easily get an overview of the effective configuration. - A live demo is available at demo.kuvasz-uptime.dev where you can try out the latest features of Kuvasz without setting up your own instance. Further details, credentials here.
Fixes
- Fixed the glitch on the UI regarding read-only mode in case the underlying logic was initialized before YAML monitors were loaded. This caused the UI to not show the read-only mode correctly, even though the backend was working as expected.
2.1.0 2025-07-11
Features
- Metrics exporters: Added support for exporting metrics to OpenTelemetry and Prometheus. See the Metrics exporters section for more details. With this feature, you easily integrate Kuvasz with your existing observability stack. Currently exposed metrics are:
- Uptime status
- Latest latency
- SSL status
- SSL expiry date
- Bearer token authentication: Added support for Bearer token authentication on the API, along with the existing API key authentication. This allows you to use the same authentication mechanism as other modern APIs, making it easier to integrate with your existing systems.
2.0.0 2025-07-02
Breaking changes
- Native image build logic has been removed: Native images will not be supported in the future due to their higher level of unpredictability, and the achieved performance gain/resource saving in exchange is not so significant.
- PostgreSQL 12+ is the minimum supported DB version.
- The HTTP communication log has been removed, because it was an unnecessary overhead in the network pipeline, and a built-in solution is also available now.
- Authentication has been fully reworked, read the Authentication section for more details.
- The latency data (avg, p95, p99) of the monitors are not returned under
MonitorDetailsDto
, because a new endpoint is introduced for metrics like this under/api/v1/monitors/{monitorId}/stats
- (might be breaking, but not necessarily): SSL validation now takes intermediate certs into account
- The
DELETE /monitors/{monitorId}/pagerduty-integration-key
andPUT /monitors/{monitorId}/pagerduty-integration-key
endpoints are gone, because the PATCH endpoint is now flexible enough to support both use-cases.
Features
- New Monitor attributes (every default value also applies for the existing monitors):
requestMethod
:GET
orHEAD
. The latter is generally faster, but be aware that certain targets might not support it (defaultGET
)latencyHistoryEnabled
:true
orfalse
. If set tofalse
latency will be not logged or returned in the monitors' metrics -> Better for a snappier experience on a slow machine (defaulttrue
)forceNoCache
:true
orfalse
. If set totrue
, aCache-Control: no-cache
header will be sent with the request (defaulttrue
)followRedirects
:true
orfalse
. If set totrue
, Kuvasz will follow redirects during uptime checks, and the last, non-redirected URL will be evaluated (defaulttrue
)sslExpiryThreshold
: The number of days before the SSL certificate expires when a notification should be sent.
- Option to disable authentication (useful in a home-lab, for example) via
ENABLE_AUTH
.true
orfalse
, defaulttrue
- Optimization of the check scheduling logic: the first uptime check will be scheduled randomly between 1 second and the configured interval of the monitor to prevent hitting the HTTP client with a lot of requests right after the startup.
- Optimization of the uptime checker:
- Made the error handling more robust by handling exceptions that come from invalid response format (e.g. invalid status code)
- Increased the client's read timeout to 30s
- Added support for non-absolute redirect URLs (a redirect location of
/path/something-else
onhttps://example.com
will be resolved ashttps://example.com/path/something-else
- Detect and avoid redirect loops
- Improvement of the
DOWN
event's error formatting both for showing and saving it. Non-visible/printable characters, and long response errors are now sanitised and might be redacted. If the uptime check fails with a standard HTTP status code and a standard error response, then the HTTP status and its name will be the error's "label" (e.g.403 Forbidden
) - Initial (i.e. if there is no previous state for a given monitor) UP & VALID states of uptime & SSL checks are not sent to RTC & SMPT event handlers to prevent sending irrelevant notifications upon the first startup
- The latency metrics calculation logic has been optimized to handle large datasets efficiently
- ✨A brand-new Web UI has been introduced, which is more modern, responsive, and user-friendly
- Monitors are configurable via a YAML file besides the UI and the API ("infrastructure as code" way)
- Exposed
nextUptimeCheck
andnextSSLCheck
on the API - Made
sslValidUntil
persisted on the SSL events, and exposed it on the API sslExpiryThreshold
is configurable now on a per monitor basis- Uptime & latency data retention are separetely configurable now
- Made the whole project translatable (the only language set up is English, as of now, but future translations are already super-easy)
- Monitor filtering on the API was greatly improved with new filters:
enabled: Boolean?
,sslCheckEnabeld: Boolean?
,uptimeStatus: UptimeStatus[]?
andsslStatus: SSLStatus[]?
- App and integration settings are exposed now both on the UI and on the API (under
GET /api/v1/settings
) - Added more latency metrics to
GET /api/v1/monitors/{monitorId}/stats
: min, max and p90 - The integration setup has been completely reworked, making it smarter and more flexible. From now on, you can set up multiple integrations per type (Slack, E-mail, etc.) in your YAML config. Then you can make them global (that is in effect for all your monitors without further configuration), or you can assign them on a per monitor basis.
Chore
- Simplified and streamlined the things around jOOQ
- Simplified the logging configuration by moving it to Micronaut's own config file
- Changed the base image to
liberica-runtime-container:jre-17
and reduced the compressed image size by ~23% - Build
arm64
images too - Bumped the 3rd party dependencies to their latest versions
- Use Java 21
- Switched to a multi-module project layout (should have done it at the beginning 🤦 )
- Switched to kover from JaCoCo
The full changelog is available on GitHub