Releases: bitbound/ControlR
v0.14.3.0 Release
Installation
See the readme for instructions on running in Docker.
Fixes:
- Fixed a bug with file system navigation file the data grid.
Changes:
- 1bafdf4 Refactor directory navigation from data grid.
This list of changes was auto generated.
v0.14.2.0 Release
Installation
See the readme for instructions on running in Docker.
Fixes:
- Fixed an issue where concurrent chat sessions were failing to open a new window on the desktop side.
Changes:
- 1e56b29 Fix chat session ID population.
This list of changes was auto generated.
v0.14.1.0 Release
Installation
See the readme for instructions on running in Docker.
Changes
New Device Access Page
Remote control and remote access features now pop out into a new tab, with a new layout focused on that individual device. This was implemented to support new tools and the ability to integrate with other solutions.

Desktop UI
A desktop UI app has been added, which will appear as a system tray icon in each user session. This UI was required to support native macOS remote control (shown below) and chat. Toast notifications have also been implemented in it.
It's built with AvaloniaUI and supports localization.
This required changing some communication patterns on Windows as well.

Native macOS Remote Control
Native remote control has been implemented on macOS. Accessibility and Screen Recording permissions are required, and each user will be prompted to enable them on first run.
The app is signed with an ad-hoc certificate, and security settings may prevent it from running on some systems. It's unlikely that I'll pay for a developer account/certificate, so this probably won't change.
Currently, a user must log in before remote control will work. This may or may not change in the future. I'm not sure if I'll be able to get it to work with an ad-hoc certificate.
mac-permissions-ui.mp4
Chat
Basic chat functionality has been implemented. Like remote control sessions, you're able to select which OS session you want to target on the remote computer.
chat.mp4
Remote File Manager
A remote file manager has been implemented.

Personal Access Tokens and API Spec
You can now create Personal Access Tokens (PATs) for use with integrations, automation, scripts, and such.
The OpenAPI spec is now published with each release (ControlR.Web.Server.json
in the below Assets). This file can be used to automatically generate clients in any language.
pat-creation.mp4
Desktop Preview
You can now get a preview image of the desktop before deciding whether or not to start remote control.
desktop-preview.mp4
Tenant-Level Settings
There's now a page for enforcing settings at the tenant level. Currently, the only option is to enforce whether or not the remote user is notified at the start of remote control sessions.

Logon Tokens
Logon tokens, which can be acquired using the above PATs, are single-use, time-limited tokens that can be used to authenticate a browser session to access a single device.
Below is an example of using logon tokens to integrate with Remote Desktop Manager.
FeETKBqjz7.mp4
Blazor Auto Rendering
ControlR uses a .NET UI framework called Blazor. It's capable of rendering either server-side only (which was the case with Remotely), client-side only (via WebAssembly), or dynamically selecting one (called Auto mode). Since the WebAssembly bundle can be large compared to other frameworks like React or Vue, the first load can take too long on a slow connection. After the initial download, though, the resources are cached and will load quickly on subsequent visits.
This is where Auto comes in. On that first load, it will see that the WebAssembly resources haven't been downloaded yet, and it will automatically switch to server-side rendering. This results in an instant load on the first visit. While using the app via server-side rendering, the WebAssembly bundle will download in the background.
Once downloaded, the next full page refresh will cause the app to switch over to WebAssembly.
ControlR was previously only using WebAssembly and would present a "Loading" indicator until the WebAssembly bundle was fully downloaded. Now it uses Auto mode. You'll see a different-colored connection icon and tooltip when it's using server-side rendering.

Testing Utilities
New unit and functional test helpers have been added under \Tests\ControlR.Web.Server.Tests\Helpers\
.
Commits:
- 81d1bfd Don't allow tenant admin role to supercede logon token device scope.
- 0338173 Update readme.
- 78167a7 Add new Blazor WebAssembly debug configurations and update render mode in development settings
- 9569dc4 fix: Correct icon reference and update file system row click handling to navigate on selection
- 29969cd feat: Update file system grid row click handling and improve logging
- 8d4e192 Use Win32Interop to get username for chats on Windows.
- 62c35bd feat: Implement directory creation and path validation features
- 7da8559 Add explicit file name to DownloadFile.
- 3a60a1d Only call BuildAvaloniaApp once per process.
- 6377cde Enhance path normalization logic for cross-platform compatibility
See More
- 6171585 Change log file share option.
- d3725af Cleanup.
- 7914dd8 Adjust layout of dialogs.
- fb000a2 Move string to Localization.
- 6fc8312 Show "You" on desktop side of sent messages.
- 105752e Add DeepWiki badge.
- 3490438 Harden logon token authentication with additional time and scope restrictions.
- fffaf8e Fix controller name.
- a0c6331 Add search functionality to file system component
- cac3c24 Separate TestApp and TestServer for clarity.
- 7bbde34 Remove extra render.
- 2207102 Adjust root drives returned.
- 9e06675 Add support for client-to-server streaming in IInvocationHandler and ProxyInvocationHandler
- 0bf4999 Checkpoint on file system streaming methods.
- 2a63123 Cleanup.
- 0458e62 Cleanup.
- cf4abe8 Add Pager.
- 2e44041 Cleanup.
- 2b3ebce Update default.yml
- 3c91a1a Refactor chat state management and enhance IPC handling; update build command in CI pipeline
- fdaaea6 Add license expression to NuGet package.
- 3450272 Upload API client NuGet.
- be1969d Add API client project.
- be167d0 Merged PR 27: Implement file manager.
- f06505c Use file system abstraction.
- 058bda6 Prompt for file overwrite.
- cf22759 Add ability to create directories.
- 8eba7a8 Upload, download, and delete working.
- 0e45c53 Checkpoint.
- 6bed99d Add file operations.
- 5401bf2 Fix overflow.
- 5316f45 Add navigation via grid row click.
- e18ee95 Add navigation bar.
- 04ff97a Make tree view resizable.
- c512264 Cleanup.
- 1957c35 Refactor node expansion.
- d22d41c Checkpoint.
- b080ec9 Add Page.
- cf6af35 Merged PR 26: Add desktop preview feature.
- ba542e6 Finish desktop preview.
- 84f06f0 Checkpoint.
- 8682a13 Checkpoint.
- 28ad2a1 Checkpoint.
- 4735a53 Checkpoint.
- f868fb6 Merged PR 25: Implement chat.
- 262e8b7 Fix chat window styling.
- dab9043 WIP on Chat UI.
- 6e32241 End-to-end chat messages working.
- 994cd31 Create StateBase and ChatState.
- 9a6c526 Improve toaster.
- 8c9c98a Add localization support in desktopclient common.
- dd6e857 WIP on chat UI.
- 4c93604 WIP on chat UI.
- 2b1a3ed...
v0.13.36.0 Release
Installation
See the readme for instructions on running in Docker.
Changes:
Support for MacOS (no remote control yet)
- Currently using an ad-hoc certificate, so there may be warnings or incompatibilities depending on security settings.
- Only Apple Silicon has been tested (MacBook Air M1, 2020, Sequoia 15.5)
Experimental VNC Tunneling Support
- Works on Linux and Mac (via Apple Screen Share).
- It's quite slow on Mac compared to Linux.
- The cursor only looks weird in the recording, not in actuality.
Embedded PowerShell with Auto-Complete
- Supports "Tab", "Shift + Tab", and "Ctrl + Space".
- Auto-complete entries populated based on the remote system, including file system entries.
See More
- b20c915 Update AgentInstallerMac.cs
- 48b8ccb Add support for win-x64 publishing and update paths in AppConstants
- 9402bd6 Refactor SendOutput method to handle string arrays and improve output size management
- 86d1211 Update README.md
- de6e66f Update README.md
- ce64f8c Update relay-server.yml
- 858c305 Fix shutdown command arguments for PowerControlMac to use 'now' instead of '0'
- 6d25736 Return early if RemoteDisplay already disposed.
- 0f132b9 Enhance Deploy page: add expiration notice for installer key usage and separate Windows install scripts for x86 and x64
- ff28b7b Refactor GitHub Actions workflows: rename build workflow to Deploy and add Tests workflow for improved CI/CD process
- c6d24a2 Update README.md to enhance OS support details and introduce experimental VNC feature for remote control
- 7d1a0cb Update System.CommandLine library.
- fecb8db Add path trigger for WebSocketRelay in pipeline configuration
- 8558d1c Fix relay uri for vnc.
- 291fe2a Encode relay URI for noVNC.
- e4f9fa4 Cleanup.
- a470954 Begin implemetning background session.
- 3c309a6 Merge branch 'jared/powershell-sdk' into jared/backstage
- 4c59c07 Handle null result.
- bc96950 Expand win32interop.
- 5f33d1e Revert multi-agent version change.
- 0b87e79 Refactor PowerShell completions handling to streamline request and response DTOs, improve pagination support, and enhance completion match processing.
- 9bdd4fe Refactor completion handling to support pagination and improve response structure
- f76ddee Remove StreamStore implementation and related references
- a9ddc3a Add completion selection with Ctrl + Space.
- a1693ea Add command completion.
- 26ef1fd Refactor TerminalHostUI to use GetAwaiter().GetResult() for synchronous calls to asynchronous methods
- 2a58f25 Refactor TerminalHostUI to support asynchronous prompts and improve output handling
- 0d6f5c4 Refactor Terminal input handling to use CancellationToken for improved control and responsiveness
- 38490e9 Add missing Terminal service references in AgentHubClient, DtoHandler, TerminalStore, and HostBuilderExtensions
- 8deca42 Refactor TerminalHostUI and TerminalSession to support asynchronous input handling with improved error management and timeout for user prompts.
- 708a99f Refactor TerminalSession to simplify using directives and update command execution to use InvokeAsync for improved performance.
- 2ffc446 Organize terminal files.
- 092594c Enhance TerminalSession to handle user input asynchronously and provide platform-specific shell guidance
- 5fd6d80 WIP on pwsh SDK.
- 5a2c5bd Merged PR 17: Allow agent to have differing versions on different OSes.
- 3d7a904 Cleanup.
- e101359 Log bootout error.
- 159bdd9 Add VNC menu items.
- 4d55c4b Fix path.
- 31ce2d5 Download mac agents to source dir before publishing server.
- 9df363e Increase fetch depth.
- d810229 Use codesign.
- f2bb8d3 Use shell script.
- 5210451 Use separate restore.
- e1f5a69 Add Blazor WASM tools.
- 6f41a83 UseAppHost
- d1b67c6 Remove exclusion that no longer exists.
- 359b78f Change branch format.
- 5f78e40 Try building on macos.
- c7c1829 Specify inline script.
- d737ba7 Try full path.
- ba07b52 Use arg array.
- 5c4d365 Try publish osx.
- b123492 Use SignToolPath variable.
- 6ff2983 Update dashboard css.
- 4709a17 Merge branch 'vnc'
- 8fa5120 Hide Mac Intel for now.
- f49835e Fix plist format.
- a3ea8bc Reveal Mac options.
- 17c5fda Recover deleted load-test functions.
- 92e8c44 Fix novnc content publishing.
- 01b1048 Move submodule path.
- 7bfa9bc Add noVNC.
This list of changes was auto generated.
v0.12.31.0 Release
What's Changed
- Add advanced filtering for the devices grid. by @bitbound in #18
- Switch to interactivity nav drawer toggle when in interactive render mode.
- Refactor bandwidth-based throttling.
- Move branding to app bar. Remove beta tag.
- Use keyframe capture when DX fails and falls back to BitBlt.
Full Changelog: v0.12.25.0...v0.12.31.0
v0.12.25.0 Release
Updates
The devices grid has changed from client-side to server-side query, filter, and pagination. This means that it's able to support a much higher number of devices while remaining responsive.
I've internally tested it with up to 150k devices.
What's Changed
Full Changelog: v0.11.30.0...v0.12.25.0
v0.11.30.0 Release
Updates
Agent installation now requires the Agent Installer
role. As an admin, you will need to give yourself this role to continue installing agents.
Note: You may need to hard refresh and/or log out and back in afterward to access the
Deploy
page. Access to the backend APIs is updated immediately, though, regardless of how the front-end UI behaves. It's a quirk in the Identity Framework implementation for Blazor that I didn't take the time to figure out.
On the Deploy
page, you will now generate links that expire either after a total number of uses, or at a certain point in time. The generated links will include an access key and should be treated as a secret.
For now, these are held in a simple memory cache and don't survive reboots.
Installation
See the readme for instructions on running in Docker.
Changes:
- b91cfef Update verbiage.
- 9b68da7 Update default.yml for Azure Pipelines
- 913cb57 Update readme.
- 681ff79 Update README.md
- 90ea87a Rename ScreenCapturer.
- 1409856 Add AgentInstaller role. Add AgentInstallerKeyManager tests.
- 9c0e9dd WIP on installer keys.
- ccc323d Add installer key to command line args.
- 3326817 Change single use installer keys to usage-based with a supplied count.
- 21d6a61 Merge branch 'agent-installer-keys' of ssh.dev.azure.com:v3/translucency/ControlR/ControlR into agent-installer-keys
See More
- 3c5cc1d WIP on installer keys.
- 7c0a083 Add UseHttpLogging option in compose file.
- 047f06b Change default installer key expiration to 1 hour.
- 301787e WIP on agent installer keys.
- 08e3c50 Refactor device update in agent hub.
- b9b9153 WIP on new agent installer flow.
- bf9461d Ignore query filters for server stats.
This list of changes was auto generated.
v0.11.25.0 Release
Docker Image
See Docker Hub for instructions on pulling and running the image.
Changes:
- c59ea7f Add backpressure on the streaming client.
- 3d26580 Remove unused dependency.
- 93d102d Remove unused dependency.
- 6481582 Merge branch 'main' of ssh.dev.azure.com:v3/translucency/ControlR/ControlR
- 8e661dd Update README.md
- 15f20a2 Update packages.
- 88cb63a Replace ISystemTime with TimeProvider.
- c727163 Update packages. Fix warnings.
- bacb0d3 Refactor terminal session disposal and error handling.
- 6e0ae72 Update packages.
See More
- 4d3cfe8 Add User.IsOnline. Move IsOutdated to view model property. Remove ConnectionCounter.
- 99a53dc Update readme.
This list of changes was auto generated.
v0.11.22.0 Release
Docker Image
See Docker Hub for instructions on pulling and running the image.
Changes:
- c647835 Merge branch 'main' of github.com:bitbound/ControlR
- 7235d07 Update README.md
- 46971a4 Add rename tag function. Fix grid sorting/filtering.
- b014a4f Turn off sorting and filtering for CurrentUsers column.
- ea5b514 Merge branch 'main' of ssh.dev.azure.com:v3/translucency/ControlR/ControlR
- b61f25b Update packages. Refactor for changes in MessagePack.
- 6e4f840 Small refactor.
- 18ee36d Update bug_report.md
- 03c038d Merge branch 'main' of ssh.dev.azure.com:v3/translucency/ControlR/ControlR
- 11a99a5 Implement IDataProtectionKeyContext.
See More
- 08ef0e0 Remove unused usings.
- 5b3a83c Refresh devices on connection state change.
- cb81037 Update issue templates
- f27b40a Update issue templates
This list of changes was auto generated.
v0.11.16.0 Release
Docker Image
See Docker Hub for instructions on pulling and running the image.
Changes:
- 2e3674a Add top margin.
- 145fffd Update default.yml for Azure Pipelines
- 5e185f7 Remove PrepareArtifacts.ps1
- dc1c4e0 Remove website publish.
- 60738b9 Add OS support.
- 4a9548e Remove unused param.
- 0902ce8 Add project board link to readme.
- ce277bb Merge template changes.
- 1b312d0 Update readme. Implement wake lock.
- 9f169b9 Update issue templates
See More
- 681d1a2 Update NuGet packages.
- 5728802 Move library.
- 9128a86 Update AgentVersion.txt
- c8e6540 Convert Reset Password page to MudBlazor.
- 79792e4 Convert some page to MudBlazor.
- 2a844f6 Add drive percentages. Move branding on layout.
- 0bcbeff Merge branch 'main' of ssh.dev.azure.com:v3/translucency/ControlR/ControlR
- 64329b1 Remove AppDbExtensions.
- 3303a83 Add temporary workaround for System.Drawing bug.
- 7ca1019 Complete initial invite flow.
- b0c7fc9 WIP on invites
- cb65b42 Finish invite table and controller.
- 349d24d WIP on invites.
- 626ae32 WIP on invites.
- 4671e9e WIP on invitations.
- a096b48 Add/remove devices from tag groups when modified.
- 4c83816 Fix logout. Add radial gauge.
- 755e7ff Update stores to immutable dtos. Replacing remaining agent connection ids with authorizations against device id.
- 7b2e999 Move Serilog packagse. Rename DisplayManager.
- 5ca0d82 Update to .NET 9.
- 07bd31d Refactor streamer startup.
- 056111c Add DeviceViewModel for dashboard.
- a5c2e88 WIP on DeviceDto refactoring.
- ee240a8 Add devices tab.
- 57bf023 Add RoleStore and roles UI.
- 20e6a3b Add search to tags tab.
- 230fc9c Add claims-based DbContextOptions extension.
- 9f3e7ed Add UserTags and DeviceTags endpoint.
- 891f3df WIP on permissions.
- 3b38152 WIP on permissions.
- 30106dd WIP on tags store.
- 3c43f73 Add TODOs.
- f64b6d8 Update launch profiles. Refactor generic and parameterless events.
- d7183f2 Inject stores.
- 7173f54 Merge branch 'wasm-frontend'
- 0aa7dca Update README.md
- 0fe0200 Add GitHub login.
- 85d6b21 Fix forwarded headers with Microsoft sign-in.
- c936724 Fix typo in template.
- fe913e6 Move startup extensions into Startup namespace.
- f411eb4 Remove comment.
- 811d3b0 Update packages.
- e7ebda3 WIP on Cloudflare proxy support.
- 9676296 WIP on tags.
- 444c840 WIP on tags.
- 6d05ae2 WIP on stores.
- ed8dd37 WIP on permissions UI.
- 9f17194 Microsoft login working.
- 3672fde Save startup profile.
- c4bd535 WIP on external logins.
- 1249017 Reword admin page.
- 84be5a8 WIP on external login.
- deae630 Use jsonb column for device drives.
- 178311e Remove service worker.
- 31554e8 Add app version to Dockerfile.
- c3a7683 Add server version endpoint.
- 3bb1acc Add clipboard APIs.
- 852ff37 Improve client generation for load tests.
- 7c26001 Disable service discovery.
- 6c3f146 Add tags
- 85e58af Add user preferences. Remove alert broadcast.
- 980fe1d Merge roles.
- a740059 Switch to GUID keys.
- b404768 Fix HttpClient config on the server.
- f73e334 Use ServerSettings controller to get public registration option.
- 29a3619 Add non-interactive drawer toggle.
- 36f4c20 Add healthcheck timeout and output caching.
- e4f9da2 Add email sender.
- 1326b1b Implement self-registration policy.
- 7b8f00d Fake another class during load tests.
- 3abc538 Remove multi-port listening.
- f2e5361 Add publish profile to git.
- ef44f88 Set all devices offline on startup.
- ed4f8e2 Add start count.
- 2d2a50f Add Fake CPU sampler.
- aca9e35 Move agent code to shared library.
- cb3b368 Fix publish paths. Enable listening on port range.
- 81470e4 Add LoadTester.
- 779b55e Update server proj path.
- 791e18b Update build scripts.
- a641e2a Add ConnectionId to Device. Add User Mgmt and Device Mgmt pages.
- 10f4d0c Refactor sending of device update.
- c4a21ae Delete Viewer project.
- 2d56090 Add extension helper for content windows.
- 7c78b59 Move controller mapping.
- 04227df Revert "Switch to auto render."
- 451dc86 Switch to auto render.
- ac3ec69 Add DeviceContentHarness.
- 0b859ba Add navigations to AddOrUpdate.
- a1996c4 Refactor device admin.
- a52ee50 Got devices show on the dashboard.
- d7283a6 Remove repos and mappers.
- 3c581ab Implement IHubConnection
- 98eb08b Rework authz policy.
- 407c946 Remove unused usings.
- c6129f2 WIP on device authorization.
- b465ea9 WIP on deploy to device group.
- 200fc77 Create tenant on registration.
- 7555077 Add Tenant and DeviceGroup.
- eda6f5f Add libraries.
- bf115de Add generic repository. Fix user claims on frontend.
- 4af7331 Fix antiforgery.
- 1f8e459 Fix form size.
- 8f7f848 Switch to IHostApplicationBuilder
- 83360b1 Add roles.
- b692cf3 Fix alerts and http client.
- fec43d7 Remove unneeded config.
- 6bf8ef5 Add mappers and repo.
- 0837526 Add standalone Aspire dashboard.
- e3bd313 Fix device update.
- bcf75aa Add repositories.
- 8c93772 Change device id to GUID.
- 29f2ac3 Clean up key references.
- 7adb7c9 Get authorization policies to work client-side.
- f52e604 Add welcome component.
- 86e2ee3 Add authorization policy to front-end.
- eea456d Yolo code cleanup.
- 7a56ae7 Resolve Rider warnings.
- fd5dc54 Move ControlR components to frontend.
- fd7879f Implement ILazyDi.
- 0bf24d5 Frontend loading now.
- 5f0c922 wip
- b4c8582 Move components.
- bb55e4f Fix dockerfile path.
- b52210c Resolve some errors.
- 37a3159 wip
- e685814 Re-organize projects.
- 60e1b2d...