---
title: v4.0.16 Changelog
description: See what's new in Kener v4.0.16, including new features, improvements, and bug fixes
---

## New features {#new-features}

### gRPC monitor {#grpc-monitor}

Kener now supports monitoring gRPC services using the standard [gRPC Health Check Protocol](https://github.com/grpc/grpc/blob/master/doc/health-checking.md) (grpc.health.v1). ([#505](https://github.com/rajnandan1/kener/issues/505))

**Configuration:**

| Field   | Required | Description                                                                                              |
| :------ | :------- | :------------------------------------------------------------------------------------------------------- |
| Host    | Yes      | gRPC server hostname or IP                                                                               |
| Port    | Yes      | gRPC server port (default `50051`)                                                                       |
| Service | No       | Fully qualified service name (e.g. `my.package.ServiceName`). Leave empty to check overall server health |
| TLS     | No       | Enable TLS/SSL encrypted connections                                                                     |
| Timeout | No       | Request timeout in milliseconds (default `10000`)                                                        |

**Status mapping:**

| Health status | Kener status |
| :------------ | :----------- |
| `SERVING`     | UP           |
| `NOT_SERVING` | DOWN         |
| Timeout       | DOWN         |
| `UNKNOWN`     | DEGRADED     |

### Page monitor ordering {#page-monitor-ordering}

Monitors on a status page can now be reordered using up/down arrows in the page editor. Previously, monitors were displayed in creation order. A new `position` column in the database controls the display sequence.

### CSRF protection {#csrf-protection}

Added origin-based CSRF protection for all state-changing form submissions (POST, PUT, PATCH, DELETE). When an `Origin` header is present, the server validates it against the expected host and rejects mismatched requests with HTTP 403. Combined with the existing `SameSite=Lax` cookie policy, this prevents cross-site form attacks. ([#570](https://github.com/rajnandan1/kener/issues/570))

### Zeabur deployment {#zeabur-deployment}

Added a one-click deployment template for [Zeabur](https://zeabur.com) that provisions Kener with PostgreSQL and Redis pre-configured.

## Bug fixes {#bug-fixes}

### JSON settings merge in monitor API {#json-settings-merge}

Fixed the PUT `/api/v4/monitors/{tag}` endpoint not correctly merging `monitor_settings_json` when the existing value was already a parsed object. The field is now always stringified before storage, preventing data loss during partial updates. ([#654](https://github.com/rajnandan1/kener/pull/654))

## Improvements {#improvements}

### Traditional Chinese locale {#zh-tw-locale}

Added full Traditional Chinese (zh-TW) translation with 1000+ keys covering the entire UI.
