Workspace app pre-configuration quick start

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.

What is pre-configuration

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

Quick start: choose your method

For enterprise deployment (Intune/SCCM)

  • Use DEPLOY_CONFIG for automated deployments: Recommended for Intune, SCCM, silent installs

msiexec /i Workspace.msi /qn DEPLOY_CONFIG="C:\path\to\Config.cfg"

Why DEPLOY_CONFIG?

  • Works reliably in automated/silent installs

  • Applies to all users on the machine

  • No user context issues

  • Automatically cleans up source config file

Where to get Config.cfg

  • Create using UI Configuration Tool (Tools – Custom Installation in Workspace)

  • Or manually create a .cfg file

For Simple deployments

  • 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"

Quick examples

Example 1: Deploy Devolutions Server with settings

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"

Example 3: Deploy using config file

msiexec /i Workspace.msi /qn DEPLOY_CONFIG="\\server\share\Config.cfg"

Configuration file format

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 dvls array.

Click here to view the complete configuration reference.

Microsoft Intune deployment

Quick steps

  1. Prepare files:

  • Workspace.msi

  • config.cfg

  • Install-Workspace.ps1 (see below)

  1. 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
  1. Create .intunewin package:

IntuneWinAppUtil.exe -c C:\IntuneApps\Workspace -s Install-Workspace.ps1 -o C:\Output
  1. Configure in Intune:

  • Install command: `powershell.exe -ExecutionPolicy Bypass -File .\Install-Workspace.ps1

  • Uninstall command: msiexec.exe /x {PRODUCT-CODE-GUID} /qn /norestart

  • Install behavior: System

  • Detection rule: MSI (Intune auto-detects the product code)

  • What happens on the endpoint: Intune runs the script, which copies config.cfg to C:\Program Files\ and installs the MSI with DEPLOY_CONFIG. The MSI applies the configuration, and users get a fully configured app on first launch

Click [here](/workspace/kb/workspace-app/workspace-pre-configuration/workspace-pre-configuration/#example-3-microsoft-intune-deployment) to view the complete Intune guide.

File locations

Windows

  • System-wide (all users): %ProgramData%\net.devolutions\Workspace\DefaultConfig.cfg

  • Per-user: %APPDATA%\net.devolutions\Workspace\Config.cfg

  • Note: System-wide requires config.ready indicator file in same directory

Click here to view the detailed location information.

Common settings

Security settings

{
  "language": "en-US",
  "reduceToTrayOnClose": true,
  "useFavicon": true,
  "useEntriesSyncOnDatasourceAccess": true
}

Locking options

  • password - Master password

  • biometric - Fingerprint/Face ID

  • windowsCredentials - Windows Hello

Language codes

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.

Troubleshooting quick fixes

Config not applied

  • Check if config.ready file exists next to DefaultConfig.cfg

  • Validate JSON syntax (no trailing commas)

  • Check file permissions

Intune deployment failing

  • Use DEPLOY_CONFIG (not USER_CONFIG)

  • Package both MSI and .cfg together

  • Use /l*v install.log to capture detailed logs

Settings not persisting

  • 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.

Decision tree

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)

Support & Resources

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.

What is pre-configuration

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.

  1. Download the Jamf schema: Jamf Pro JSON Schema.

  2. In Jamf Pro, go to Computers – Configuration Profiles – Application & Custom Settings.

  3. Upload the JSON schema and configure settings in the GUI.

  4. Scope the profile to target computers.

Preference domain: net.devolutions.authenticator

Why use MDM

  • Centralized management from the MDM console

  • Highest priority (overrides file-based configuration)

  • Policy enforcement capabilities

  • Enterprise-standard approach

Click here to view the full instructions.

For non-MDM environments

Use configuration files for scripted deployments or environments without MDM.

System-wide deployment

sudo cp config.cfg "/Library/Application Support/Devolutions/Workspace/DefaultConfig.cfg"

Examples

Example 1: Configure a Devolutions Server with Jamf Pro

Using the Jamf JSON schema (GUI):

  1. Upload the schema to a Jamf Pro configuration profile

  2. Configure settings, for example:

    • Devolutions Server: Add a server with URL https://dvls.company.com

    • Locking method: Biometric (Touch ID)

    • Lock when backgrounded: Enabled

  3. Scope and deploy

Example 2: Create a manual configuration profile (plist)

<?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>

Example 3: defaults command (Testing)

# 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 file format

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.

Click here to view the complete configuration reference.

File locations

macOS

  • System-wide: /Library/Application Support/Devolutions/Workspace/DefaultConfig.cfg

  • Per-user: ~/Library/Application Support/Workspace/Config.cfg

  • MDM (highest priority): net.devolutions.authenticator preference domain

Priority order

  1. MDM Managed Preferences (highest priority)

  2. User Configuration File

  3. System Configuration File

Click [here](/workspace/kb/workspace-app/workspace-pre-configuration/workspace-pre-configuration/#configuration-file-locations-1)to view the Detailed location information.

Common settings

Security settings

{
  "language": "en-US",
  "reduceToTrayOnClose": true,
  "useFavicon": true,
  "useEntriesSyncOnDatasourceAccess": true
}

Locking options

  • password - Master password

  • biometric - Touch ID

Language codes

en-US, fr, de, es, cs, hu, it, nl, pl, ru, sv, tr, uk, zh-CHS, zh-TW

Click hereto view all available settings.

Troubleshooting quick fixes

MDM config not applied

  • Verify preference domain: net.devolutions.authenticator

  • Check profile status: System Preferences – Profiles

  • Force refresh: sudo profiles renew -type enrollment

Config file not loaded

  • Check file location and permissions (chmod 644)

  • Validate JSON syntax (no trailing commas)

  • Delete user config to allow system config to apply

Touch ID not working

  • 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.

Decision tree

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/...

Verify configuration

Check MDM settings:

defaults read net.devolutions.authenticator

Check specific setting:

defaults read net.devolutions.authenticator language

Support & resources

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.

What is MDM pre-configuration

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

Prerequisites

  • Jamf Pro server or Apple MDM solution

  • Workspace app deployed via MDM

  • iOS 13.0+ on managed devices

  • Devices enrolled in MDM

Quick Start: Jamf pro deployment

  1. Download the AppConfig specfile.

  2. Upload to the Jamf AppConfig Generator and configure settings via the GUI form.

  3. Download the generated plist.

  4. In Jamf Pro, navigate to Mobile Device AppsWorkspaceApp Configuration.

  5. Paste the generated plist.

  6. Scope to target devices.

  7. Deploy.

Click here to view the complete documentation.

Option 2: Direct plist configuration

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
  }

Configuration examples

Devolutions Server only

{
  "dvls": [
    {
      "name": "Corporate DVLS",
      "serverUrl": "https://dvls.company.com"
    }
  ]
}

Devolutions Hub Business with security

{
  "hubs": [
    {
      "url": "https://workspace.devolutions.app",
      "organizationId": "",
      "type": "business",
      "version": "2020"
    }
  ],
  "configs": {
    "lockingOption": "biometric",
    "useBackgroundLock": true,
    "backgroundLockDelay": 0
  }
}

Multiple datasources

{
  "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"
    }
  ]
}

Security settings

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).

General settings

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.
Click here to consult the complete settings reference.

Troubleshooting quick fixes

Config not applied

  • 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

Users can't delete pending datasources

  • New in 2025.3.2: Users can now delete pending datasources

  • Long-press datasource – Select Remove

Face ID/Touch ID not working

  • Verify device has biometric hardware

  • Ensure Face ID/Touch ID is set up in Settings

  • Falls back to passcode if unavailable

Click here to consult the troubleshooting guide.

Best practices

{
  "lockingOption": "biometric",
  "useBackgroundLock": true,
  "backgroundLockDelay": 0,
  "useLockWhenInactive": true,
  "lockInactivityDelay": 300,
}

Why

  • Enforces Face ID/Touch ID

  • Locks immediately when backgrounded

  • Auto-locks after 5 minutes of inactivity

URL Format requirements

  • Include protocol (https://)

  • Be valid, accessible URLs

  • No trailing slash

Examples:

  • https://dvls.company.com

  • dvls.company.com (missing https://)

Deployment steps summary

  1. Download the AppConfig specfile.

  2. Upload to the Jamf AppConfig Generator.

  3. Configure settings via GUI form.

  4. Download the generated plist.

  5. In Jamf Pro: Mobile Device AppsWorkspaceApp Configuration.

  6. Paste plist, scope to target devices, deploy.

  7. Verify on test device.

Support & resources

AppConfig Specfile

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>
Devolutions Forum logo Share your feedback