Skip to content

RD-API-Server v1.5.0

Choose a tag to compare

@TheJakeBraun TheJakeBraun released this 17 Aug 02:34
· 23 commits to main since this release

Every picker whose list grows with the deployment now searches instead of listing it.

The problem

A fleet is thousands of devices. A directory-synced deployment has as many user groups as the directory does. Rendering either into a <select> builds every row into the DOM on page load — so the page is slowest for exactly the deployments with the most to manage, and the operator can only scroll it, never search for the name they already know.

Device and user pickers already worked this way. This release brings the rest into line:

Picker Was Now
Remote control peer 200 most-recent devices in a <select> Searched, online first
User group (create, edit, bulk bar) Every group in scope Searched
Admin role scoped groups Every group in the deployment Searched, as chips
Group "can access" Every group in scope Searched, as chips
Device group "accessible by" Every group in scope Searched, as chips

Fixed lists — statuses, enum choices, quality presets — stay plain <select>s. A combobox for four options is worse, and the rule recorded in CLAUDE.md says so explicitly.

Multi-value selection

The existing combobox was single-value, which is why three pickers had remained multi-selects. It now supports multiple selections as removable chips, with Backspace on an empty box removing the last, and duplicates refused.

The component emits whichever shape the form already posted — a comma-joined hidden field, or one hidden input per value under an array name — so no controller, request validation or write path changed. That was the point: a conversion that alters the request shape is one that can silently save the wrong thing.

Chips use the existing design tokens; no new colours were introduced.

Fixed

The admin role scope picker showed every group in the deployment. It ran an unscoped query, so a delegate confined to a single group could read the names of every group in the deployment from the role form. Group names are not the most sensitive thing in the system, but a scope boundary that leaks the shape of what lies outside it is still a leak. It now goes through AdminScopeService like every other group query.

A dead query on every device-index page load. Every visit fetched every in-scope user, ordered them by name, and rendered none of them — the owner picker had been converted to a combobox and the query was left behind. On a large deployment it was the single biggest unbounded fetch on the page.

Upgrading

docker compose pull && docker compose up -d

No migration, no configuration change, and no request or API shape changed.

Image

ghcr.io/gigaionllc/rustdesk-api-server:1.5.0

Multi-architecture (AMD64/ARM64), digest sha256:5b853a9e93e82a7e6ef24af656384319335b1c7434f234dedc92dab64eb53d99. The latest, 1 and 1.5 tags point at the same manifest.

Verification

677 PHP tests, 253 web-client unit tests, 15 browser tests, Pint and PHPStan.

The multi-value combobox was also exercised in a real browser against the published image: searching, selecting, refusing a duplicate, removing a chip, and submitting — with the saved row read back out of the database to confirm the round trip. The PHP suite proves the request shapes; only a browser shows that the chips and their hidden inputs stay in step.


Full notes: docs/releases/v1.5.0.md

RD-API-Server is an independent, third-party, open-source project. It is not affiliated with, endorsed by, or sponsored by RustDesk or Purslane Ltd.