Learn how to quickly deploy Workspace Windows app with pre-configured data sources and settings across across across Windows endpoints.
Click here to view the complete Windows documentation for detailed instructions, troubleshooting, and advanced scenarios.
Pre-configuration allows you to deploy Workspace Windows app with:
Data sources already configured (Devolutions Server, Devolutions Hub Business)
Application settings pre-applied (language, security, locking options)
Zero user setup required - users launch and are immediately productive
Use DEPLOY_CONFIG for automated deployments: Recommended for Intune, SCCM, silent installs
msiexec /i Workspace.msi /qn DEPLOY_CONFIG="C:\path\to\Config.cfg"
Works reliably in automated/silent installs
Applies to all users on the machine
No user context issues
Automatically cleans up source config file
Create using UI Configuration Tool (Tools – Custom Installation in Workspace)
Or manually create a .cfg file
Use inline MSI parameters for quick deployments
msiexec /i Workspace.msi /qn ^
DVLS_SERVER_URL="https://dvls.company.com" ^
HUB_NAME="mycompany" ^
ORGANIZATION_ID="your-org-guid" ^
LANGUAGE="en-US"
msiexec /i Workspace.msi /qn ^
DVLS_SERVER_URL="https://dvls.company.com" ^
LOCKING_OPTION="windowsCredentials" ^
LANGUAGE="en-US"
### Example 2: Deploy Devolutions Hub Business
```bash
# With Organization ID
msiexec /i Workspace.msi /qn ^
HUB_NAME="mycompany" ^
ORGANIZATION_ID="12345678-1234-1234-1234-123456789abc" ^
REDUCE_TO_TRAY_ON_CLOSE="true"
# Without Organization ID (if not required by your Hub)
msiexec /i Workspace.msi /qn ^
HUB_NAME="mycompany" ^
REDUCE_TO_TRAY_ON_CLOSE="true"
msiexec /i Workspace.msi /qn DEPLOY_CONFIG="\\server\share\Config.cfg"
Configuration files (.cfg) use JSON format:
{
"dvls": [
{
"name": "Production Server",
"serverUrl": "https://dvls.company.com"
}
],
"hubs": [
{
"url": "https://mycompany.devolutions.app",
"organizationId": "your-org-guid-here"
}
],
"configs": {
"language": "en-US",
"lockingOption": "windowsCredentials",
"clearClipboardSensitiveData": true,
"clipboardTimer": 60
}
}
Multiple servers: Add more objects to the
dvlsarray.
Click here to view the complete configuration reference.
Prepare files:
Workspace.msi
config.cfg
Install-Workspace.ps1 (see below)
PowerShell script (
Install-Workspace.ps1):
$ConfigSource = "$PSScriptRoot\config.cfg"
$ConfigTarget = "C:\Program Files\config.cfg"
$MsiPath = "$PSScriptRoot\Workspace.msi"
# Copy config.cfg to Program Files
try {
Copy-Item -Path $ConfigSource -Destination $ConfigTarget -Force
} catch {
Write-Host "Error copying config file: $($_.Exception.Message)"
exit 1
}
# Install MSI silently with DEPLOY_CONFIG parameter
$Arguments = "/i `"$MsiPath`" /qn /norestart DEPLOY_CONFIG=`"C:\Program Files\config.cfg`""
$Process = Start-Process "msiexec.exe" -ArgumentList $Arguments -Wait -PassThru
exit $Process.ExitCode
Create .intunewin package:
IntuneWinAppUtil.exe -c C:\IntuneApps\Workspace -s Install-Workspace.ps1 -o C:\Output
Configure in Intune:
Install command: `powershell.exe -ExecutionPolicy Bypass -File .\Install-Workspace.ps1
Uninstall command:
msiexec.exe /x {PRODUCT-CODE-GUID} /qn /norestartInstall behavior: System
Detection rule: MSI (Intune auto-detects the product code)
What happens on the endpoint: Intune runs the script, which copies
config.cfgtoC:\Program Files\and installs the MSI withDEPLOY_CONFIG. The MSI applies the configuration, and users get a fully configured app on first launch
System-wide (all users):
%ProgramData%\net.devolutions\Workspace\DefaultConfig.cfgPer-user:
%APPDATA%\net.devolutions\Workspace\Config.cfgNote: System-wide requires
config.readyindicator file in same directory
{
"language": "en-US",
"reduceToTrayOnClose": true,
"useFavicon": true,
"useEntriesSyncOnDatasourceAccess": true
}
password- Master passwordbiometric- Fingerprint/Face IDwindowsCredentials- Windows Hello
en-US, fr, de, es, cs, hu, it, nl, pl, ru, sv, tr, uk, zh-CHS, zh-TW
Click here to view all available settings.
Check if
config.readyfile exists next toDefaultConfig.cfgValidate JSON syntax (no trailing commas)
Check file permissions
Use
DEPLOY_CONFIG(notUSER_CONFIG)Package both MSI and .cfg together
Use
/l*v install.logto capture detailed logs
System config only applies if user config doesn't exist
Once user modifies settings, they're saved to
Click here to view the complete troubleshooting guide.
Enterprise deployment?
├─ YES → Use DEPLOY_CONFIG with .cfg file
│ (Intune, SCCM, silent installs)
│
├─ Simple setup → Use inline MSI parameters
│ (Quick, one DVLS server)
│
└─ Complex setup → Create .cfg with UI tool first
(Multiple servers, many settings)
Learn how to quickly deploy Workspace macOS app with pre-configured data sources and settings across across macOS endpoints.
Click here to view the complete macOS documentation for detailed instructions, troubleshooting, and advanced scenarios.
Pre-configuration lets you deploy Workspace macOS app with:
Data sources already configured Devolutions Server, Devolutions Hub Business
Application settings pre-applied (language, security, locking options)
Zero user setup required — users launch and are immediately productive
Use Jamf Pro or Intune MDM profiles - Enterprise standard for managed fleets.
Download the Jamf schema: Jamf Pro JSON Schema.
In Jamf Pro, go to Computers – Configuration Profiles – Application & Custom Settings.
Upload the JSON schema and configure settings in the GUI.
Scope the profile to target computers.
Preference domain: net.devolutions.authenticator
Centralized management from the MDM console
Highest priority (overrides file-based configuration)
Policy enforcement capabilities
Enterprise-standard approach
Use configuration files for scripted deployments or environments without MDM.
sudo cp config.cfg "/Library/Application Support/Devolutions/Workspace/DefaultConfig.cfg"
Using the Jamf JSON schema (GUI):
Upload the schema to a Jamf Pro configuration profile
Configure settings, for example:
Devolutions Server: Add a server with URL
https://dvls.company.comLocking method: Biometric (Touch ID)
Lock when backgrounded: Enabled
Scope and deploy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadType</key>
<string>net.devolutions.authenticator</string>
<key>PayloadIdentifier</key>
<string>net.devolutions.authenticator.config</string>
<key>PayloadDisplayName</key>
<string>Workspace Configuration</string>
<key>language</key>
<string>en-US</string>
<key>lockingOption</key>
<string>biometric</string>
</dict>
</array>
</dict>
</plist>
# Configure settings
defaults write net.devolutions.authenticator language -string "en-US"
defaults write net.devolutions.authenticator lockingOption -string "biometric"
defaults write net.devolutions.authenticator useBackgroundLock -bool true
Configuration files (.cfg) use JSON format:
{
"dvls": [
{
"name": "Production Server",
"serverUrl": "https://dvls.company.com"
}
],
"hubs": [
{
"url": "https://mycompany.devolutions.app",
"organizationId": "your-org-guid-here"
}
],
"configs": {
"language": "en-US",
"lockingOption": "biometric",
"clearClipboardSensitiveData": true,
"clipboardTimer": 60
}
}
Multiple servers Add more objects to the dvls array.
System-wide:
/Library/Application Support/Devolutions/Workspace/DefaultConfig.cfgPer-user:
~/Library/Application Support/Workspace/Config.cfgMDM (highest priority):
net.devolutions.authenticatorpreference domain
MDM Managed Preferences (highest priority)
User Configuration File
System Configuration File
{
"language": "en-US",
"reduceToTrayOnClose": true,
"useFavicon": true,
"useEntriesSyncOnDatasourceAccess": true
}
password- Master passwordbiometric- Touch ID
en-US, fr, de, es, cs, hu, it, nl, pl, ru, sv, tr, uk, zh-CHS, zh-TW
Click hereto view all available settings.
Verify preference domain:
net.devolutions.authenticatorCheck profile status: System Preferences – Profiles
Force refresh:
sudo profiles renew -type enrollment
Check file location and permissions (
chmod 644)Validate JSON syntax (no trailing commas)
Delete user config to allow system config to apply
Verify Mac has Touch ID hardware
Ensure Touch ID is configured in System Preferences
Falls back to password if unavailable
Click hereto view the complete troubleshooting guide.
Is this a managed Mac?
├─ YES (Jamf/Intune) – Use MDM profiles
│ (Highest priority, centralized)
│
└─ NO – Use config files
- System-wide: /Library/Application Support/...
- Per-user: ~/Library/Application Support/...
Check MDM settings:
defaults read net.devolutions.authenticator
Check specific setting:
defaults read net.devolutions.authenticator language
Learn how to quickly deploy Workspace iOS app with pre-configured data sources and settings across iOS devices.
Click here to view the complete iOS documentation for detailed instructions, troubleshooting, and advanced scenarios.
MDM pre-configuration allows you to deploy Workspace iOS app with:
Data sources already configured (Devolutions Server, Devolutions Hub Business)
Application settings pre-applied (security, locking options)
Zero user setup required - users launch and are immediately productive
Jamf Pro server or Apple MDM solution
Workspace app deployed via MDM
iOS 13.0+ on managed devices
Devices enrolled in MDM
Download the AppConfig specfile.
Upload to the Jamf AppConfig Generator and configure settings via the GUI form.
Download the generated plist.
In Jamf Pro, navigate to Mobile Device Apps – Workspace – App Configuration.
Paste the generated plist.
Scope to target devices.
Deploy.
If not using the specfile, enter configuration directly as a plist dictionary in Jamf Pro's App Configuration field. Use the flat key format (the app auto-transforms it):
{
"dvls": [
{
"name": "Production DVLS",
"serverUrl": "https://dvls.company.com",
"serverVersion": "2024.1"
}
],
"hubs": [
{
"url": "https://workspace.devolutions.app",
"organizationId": "your-org-id",
"type": "business",
"version": "2020"
}
],
"configs": {
"lockingOption": "biometric",
"useBackgroundLock": true,
"backgroundLockDelay": 0,
"useLockWhenInactive": true,
"lockInactivityDelay": 300
}
{
"dvls": [
{
"name": "Corporate DVLS",
"serverUrl": "https://dvls.company.com"
}
]
}
{
"hubs": [
{
"url": "https://workspace.devolutions.app",
"organizationId": "",
"type": "business",
"version": "2020"
}
],
"configs": {
"lockingOption": "biometric",
"useBackgroundLock": true,
"backgroundLockDelay": 0
}
}
{
"dvls": [
{
"name": "Production DVLS",
"serverUrl": "https://dvls-prod.company.com"
},
{
"name": "Test DVLS",
"serverUrl": "https://dvls-test.company.com"
}
],
"hubs": [
{
"url": "https://workspace.devolutions.app",
"organizationId": "org-abc123",
"type": "business",
"version": "2020"
}
]
}
| Setting | Values | Description |
|---|---|---|
| lockingOption | "", "biometric" |
App locking method. |
| useBackgroundLock | true, false |
Lock when backgrounded. |
| backgroundLockDelay | 0, 60, 300, 900, 1800, 3600 |
Delay before locking (seconds). |
| useLockWhenInactive | true, false |
Auto-lock after inactivity. |
| lockInactivityDelay | 30, 60, 120, 180, 240, 300 |
Inactivity timeout (seconds). |
| Setting | Values | Description |
|---|---|---|
| useFavicon | true, false |
Download website favicons. |
| autoSearch | true, false |
Enable auto-search in vault. |
| useHubEmbeddedBrowser | true, false |
Use embedded browser for Devolutions Hub. |
| highlightSpecialCharacters | true, false |
Highlight special characters. |
| shareUsageData | true, false |
Share anonymous analytics. |
Verify device: Settings – General – VPN & Device Management
Check app is MDM-managed (deployed via MDM, not App Store)
Validate JSON syntax (use jsonlint.com)
Delete and reinstall app
New in 2025.3.2: Users can now delete pending datasources
Long-press datasource – Select Remove
Verify device has biometric hardware
Ensure Face ID/Touch ID is set up in Settings
Falls back to passcode if unavailable
{
"lockingOption": "biometric",
"useBackgroundLock": true,
"backgroundLockDelay": 0,
"useLockWhenInactive": true,
"lockInactivityDelay": 300,
}
Enforces Face ID/Touch ID
Locks immediately when backgrounded
Auto-locks after 5 minutes of inactivity
Include protocol (
https://)Be valid, accessible URLs
No trailing slash
https://dvls.company.comdvls.company.com(missing https://)
Download the AppConfig specfile.
Upload to the Jamf AppConfig Generator.
Configure settings via GUI form.
Download the generated plist.
In Jamf Pro: Mobile Device Apps – Workspace – App Configuration.
Paste plist, scope to target devices, deploy.
Verify on test device.
Below is the AppConfig spec file in .xml format.
<?xml version="1.0" encoding="UTF-8"?>
<managedAppConfiguration>
<version>1</version>
<bundleId>net.devolutions.workspace.mobile</bundleId>
<dict>
<!-- DVLS configuration -->
<string keyName="dvls_serverUrl"></string>
<!-- Hub Business configuration -->
<string keyName="hub_url"></string>
<string keyName="hub_organizationId"></string>
<!-- Security settings -->
<string keyName="language">en-US</string>
<string keyName="lockingOption"></string>
<boolean keyName="useBackgroundLock">false</boolean>
<integer keyName="backgroundLockDelay">0</integer>
<boolean keyName="useLockWhenInactive">false</boolean>
<integer keyName="lockInactivityDelay">30</integer>
<!-- General settings -->
<boolean keyName="shareUsageData">false</boolean>
<boolean keyName="useFavicon">false</boolean>
<boolean keyName="autoSearch">false</boolean>
<boolean keyName="useHubEmbeddedBrowser">true</boolean>
<boolean keyName="highlightSpecialCharacters">false</boolean>
</dict>
<presentation defaultLocale="en-US">
<!-- DVLS server URL -->
<field keyName="dvls_serverUrl" type="input">
<label>
<language value="en-US">DVLS Server URL</language>
</label>
<description>
<language value="en-US">Full URL to the DVLS server including https:// (e.g., https://dvls.company.com)</language>
</description>
</field>
<!-- Hub Business URL -->
<field keyName="hub_url" type="input">
<label>
<language value="en-US">Hub Business URL</language>
</label>
<description>
<language value="en-US">Full Hub URL including https:// (e.g., https://yourcompany.devolutions.app)</language>
</description>
</field>
<!-- Hub organization ID -->
<field keyName="hub_organizationId" type="input">
<label>
<language value="en-US">Hub Organization ID</language>
</label>
<description>
<language value="en-US">Organization identifier for Hub Business (optional)</language>
</description>
</field>
<!-- Language -->
<field keyName="language" type="select">
<label>
<language value="en-US">Language</language>
</label>
<description>
<language value="en-US">App display language</language>
</description>
<options>
<option value="en-US">
<language value="en-US">English (US)</language>
</option>
<option value="fr">
<language value="en-US">French</language>
</option>
<option value="de">
<language value="en-US">German</language>
</option>
<option value="es">
<language value="en-US">Spanish</language>
</option>
<option value="cs">
<language value="en-US">Czech</language>
</option>
<option value="hu">
<language value="en-US">Hungarian</language>
</option>
<option value="it">
<language value="en-US">Italian</language>
</option>
<option value="nl">
<language value="en-US">Dutch</language>
</option>
<option value="pl">
<language value="en-US">Polish</language>
</option>
<option value="ru">
<language value="en-US">Russian</language>
</option>
<option value="sv">
<language value="en-US">Swedish</language>
</option>
<option value="tr">
<language value="en-US">Turkish</language>
</option>
<option value="uk">
<language value="en-US">Ukrainian</language>
</option>
<option value="zh-CHS">
<language value="en-US">Chinese (Simplified)</language>
</option>
<option value="zh-TW">
<language value="en-US">Chinese (Traditional)</language>
</option>
</options>
</field>
<!-- Locking option -->
<field keyName="lockingOption" type="select">
<label>
<language value="en-US">Locking Method</language>
</label>
<description>
<language value="en-US">Authentication method for app locking</language>
</description>
<options>
<option value="">
<language value="en-US">None</language>
</option>
<option value="biometric">
<language value="en-US">Biometric (Touch ID/Face ID)</language>
</option>
</options>
</field>
<!-- Lock when backgrounded -->
<field keyName="useBackgroundLock" type="checkbox">
<label>
<language value="en-US">Lock When Backgrounded</language>
</label>
<description>
<language value="en-US">Lock app when it goes to background</language>
</description>
</field>
<!-- Background lock delay -->
<field keyName="backgroundLockDelay" type="select">
<label>
<language value="en-US">Background Lock Delay</language>
</label>
<description>
<language value="en-US">Time to wait before locking when backgrounded</language>
</description>
<options>
<option value="0">
<language value="en-US">Immediately</language>
</option>
<option value="60">
<language value="en-US">1 minute</language>
</option>
<option value="300">
<language value="en-US">5 minutes</language>
</option>
<option value="900">
<language value="en-US">15 minutes</language>
</option>
<option value="1800">
<language value="en-US">30 minutes</language>
</option>
<option value="3600">
<language value="en-US">1 hour</language>
</option>
</options>
</field>
<!-- Auto-lock when inactive -->
<field keyName="useLockWhenInactive" type="checkbox">
<label>
<language value="en-US">Auto-Lock When Inactive</language>
</label>
<description>
<language value="en-US">Lock after period of inactivity</language>
</description>
</field>
<!-- Inactivity lock delay -->
<field keyName="lockInactivityDelay" type="select">
<label>
<language value="en-US">Inactivity Lock Delay</language>
</label>
<description>
<language value="en-US">Time before locking due to inactivity</language>
</description>
<options>
<option value="30">
<language value="en-US">30 seconds</language>
</option>
<option value="60">
<language value="en-US">1 minute</language>
</option>
<option value="120">
<language value="en-US">2 minutes</language>
</option>
<option value="180">
<language value="en-US">3 minutes</language>
</option>
<option value="240">
<language value="en-US">4 minutes</language>
</option>
<option value="300">
<language value="en-US">5 minutes</language>
</option>
</options>
</field>
<!-- Share usage data -->
<field keyName="shareUsageData" type="checkbox">
<label>
<language value="en-US">Share Usage Data</language>
</label>
<description>
<language value="en-US">Share anonymous usage analytics</language>
</description>
</field>
<!-- Use favicons -->
<field keyName="useFavicon" type="checkbox">
<label>
<language value="en-US">Use Favicons</language>
</label>
<description>
<language value="en-US">Download and display website favicons for entries</language>
</description>
</field>
<!-- Auto search -->
<field keyName="autoSearch" type="checkbox">
<label>
<language value="en-US">Auto Search</language>
</label>
<description>
<language value="en-US">Enable auto-search in vaults</language>
</description>
</field>
<!-- Use Hub embedded browser -->
<field keyName="useHubEmbeddedBrowser" type="checkbox">
<label>
<language value="en-US">Use Hub Embedded Browser</language>
</label>
<description>
<language value="en-US">Open Hub connections in embedded browser</language>
</description>
</field>
<!-- Highlight special characters -->
<field keyName="highlightSpecialCharacters" type="checkbox">
<label>
<language value="en-US">Highlight Special Characters</language>
</label>
<description>
<language value="en-US">Highlight special characters in passwords</language>
</description>
</field>
</presentation>
</managedAppConfiguration>