Reference Guide for Portable Apps Distribution

Last modified: March 26, 2026

Introduction

In the following Reference Guide document, you can find information about the folder structure of the .zip file generated by Portable App Distribution, as well as the available command-line parameters for the start script. The Reference Guide also suggests some best practices for managing the order of your custom configuration files.

Folder Structure

The .zip file generated by Portable App Distribution contains the following files and directories:

  • app/ - The application, containing the following directories (similar to the .mda file):

    • data/
    • model/
    • native/
    • sass/
    • tmp/
    • web/
  • bin/ - Scripts to start the runtime:

    • start - Shell script for Linux and OSX
    • start.bat - Batch file for Windows
    • start.ps1 - Batch file for Windows - PowerShell
  • etc/ - Runtime config files for all configurations in the model

    • example.conf - An example runtime configuration file containing all possible parameters with the default values and documentation

    • StudioPro.Conf - The configuration that is set in StudioPro; this file is to be included in the specific configurations

    • $ConfigName - The runtime configuration for the configuration named $ConfigName

    • variables.conf - Environment variable overrides for all public settings

    • configurations/ - The configurations as defined in the App Settings

      • $ConfigName.conf - Specific settings for the configuration named $ConfigName
    • constants/ - All microflow constants

      • defaults.conf - Default values for all constants in the project
      • variables.conf - Environment variable overrides for all constants
  • lib/ - All included dependencies

    • runtime/ - All required runtime files

      • bundles/ - All jar file that are needed to start the runtime server
      • launcher/ - The jar file for launching the runtime server
      • lib/ - Additional library files
      • mxclientsystem/ - The runtime client files

Command Line Parameters for the Start Script

The start script has the following parameters:

start [options...] [config-file...]

There can be multiple configuration files. If omitted, the script uses the default configuration.

If a setting occurs multiple times across different files, the definition from the last file is used.

The following options are supported:

  • -h or --help - Print the command line usage.
  • -J $JvmOption - Pass $JvmOption to the JVM.

Database Settings

The database settings have the following parameters:

# Database configuration
runtime.params {
  DatabaseType = Type of Database (*)
  DatabaseHost=host:port
  DatabaseName = MyMendixDB
  DatabaseUserName = mymendixusername
  DatabasePassword=mymendixusernamepassword
}

Example Settings for PostgreSQL

# Database configuration
runtime.params {
  DatabaseType = POSTGRESQL
  DatabaseHost = "localhost:5432"
  DatabaseName = MyMendixDB
  DatabaseUserName = mymendixusername
  DatabasePassword=mymendixusernamepassword
}

Example Settings for AzureSQL

# Database configuration
runtime.params {
  DatabaseType = SQLSERVER
  DatabaseHost = ""your-database-host.database.windows.net:1433""
  DatabaseName = MyMendixDB
  DatabaseUserName = mymendixusername
  DatabasePassword=mymendixusernamepassword
}

Example Settings for JDBC

# Database configuration
runtime.params {
  DatabaseType = MYSQL
  DatabaseJdbcUrl=mysql://db:3306/mendix
  DatabaseName = MyMendixDB
  DatabaseUserName = mymendixusername
  DatabasePassword=mymendixusernamepassword
}

File Storage

The example.conf file in the Portable App Distribution .zip file contains example file storage settings for AWS S3 and Azure Blob Storage.

AWS S3

runtime.params {
  # Acts as the username to authenticate with the S3 service.
    # Type: String
    # com.mendix.storage.s3.AccessKeyId = ""
    # Name of the bucket where the files are stored on S3.
    # Type: String
    # com.mendix.storage.s3.BucketName = ""
    # Overrides the default maximum connections limit in the S3 service.
    # The default value is enough for most applications, so we do not recommend explicitly setting this to a custom value unless a larger maximum connections limit is absolutely necessary.
    # Type: Duration (use suffixes like s(econds), m(inutes) or h(ours); without suffix the value is taken as milliseconds)
    # com.mendix.storage.s3.ClientExecutionTimeout = 
    # Sets the amount of time to wait (in milliseconds) when initially establishing a connection before giving up and timing out.
    # A value of 0 means infinity and is not recommended.
    # For more information, see the AWS Java SDK.
    # Type: Duration (use suffixes like s(econds), m(inutes) or h(ours); without suffix the value is taken as milliseconds)
    # com.mendix.storage.s3.ConnectionTimeout = 
    # List of keys which can be used to encrypt and decrypt data at rest in S3.
    # The right key to decrypt the data with is automatically selected depending on with which key it was encrypted.
    # Each encryption key consists of a key id, the encryption algorithm and the actual key (Base64 encoded).
    # Type: Array of objects
    # com.mendix.storage.s3.EncryptionKeys = []
    # Overrides the default endpoint.
    # This setting is required when the storage is on a non-AWS location (for example, IBM Cloud Object Storage).
    # Both the endpoint (for example, s3.example.com) or the full URL (including the protocol) are supported (for example, https://s3.example.com).
    # Note that when setting a custom endpoint, path style access will be enabled.
    # For more information, see Class S3ClientOptions.
    # Type: String
    # com.mendix.storage.s3.EndPoint = ""
    # The value true allows the server to route requests to a different region than specified in these settings (false disallows it).
    # Type: Boolean
    # com.mendix.storage.s3.ForceGlobalBucketAccessEnabled = true
    # Overrides the default maximum connections limit in the S3 service.
    # The default value is enough for most applications, so we do not recommend explicitly setting this to a custom value unless a larger maximum connections limit is absolutely necessary.
    # Type: Integer
    # com.mendix.storage.s3.MaxConnections = 
    # Sets the region in which the S3 bucket is located.
    # This will be used to determine the service endpoint, unless overridden in com.mendix.storage.s3.EndPoint.
    # This setting will also be used as the signing region for requests.
    # Type: String
    # com.mendix.storage.s3.Region = ""
    # Sets the amount of time to wait (in milliseconds) for the request to complete before giving up and timing out.
    # A value of 0 means no timeout.
    # For more information, see the AWS Java SDK.
    # Type: Duration (use suffixes like s(econds), m(inutes) or h(ours); without suffix the value is taken as milliseconds)
    # com.mendix.storage.s3.RequestTimeout = 
    # Prefix for the keys under which objects are stored.
    # Separators are not added automatically to keys.
    # For keys like prefix/key1, com.mendix.storage.s3.ResourceNamePrefix should have value prefix/.
    # Type: String
    # com.mendix.storage.s3.ResourceNamePrefix = ""
    # Suffix for the keys under which objects are stored.
    # This can be used when S3 buckets are divided into different segments for different users with different credentials (for example, store objects as [key].customer1 for customer1 and as [key].customer2 for customer2).
    # Separators are not added automatically to keys.
    # For keys like key1.customer1, com.mendix.storage.s3.ResourceNameSuffix should have value .customer1.
    # Type: String
    # com.mendix.storage.s3.ResourceNameSuffix = ""
    # Acts as the password to authenticate with the S3 service.
    # Type: String
    # com.mendix.storage.s3.SecretAccessKey = ""
    # Sets the amount of time to wait (in milliseconds) for data to be transferred over an established, open connection before the connection times out and is closed.
    # A value of 0 means infinity and is not recommended.
    # For more information, see the AWS Java SDK.
    # Type: Duration (use suffixes like s(econds), m(inutes) or h(ours); without suffix the value is taken as milliseconds)
    # com.mendix.storage.s3.SocketTimeout = 
    # Set this value to true to use the configured CACertificates for the connection to the S3 service.
    # Type: Boolean
    # com.mendix.storage.s3.UseCACertificates = false
    # Lets the authentication policy use Signature Version 2 instead of the default Signature Version 4.
    # Set this setting to true when the endpoint does not support Signature Version 4.
    # Type: Boolean
    # com.mendix.storage.s3.UseV2Auth = false
}

Azure Blob Storage

runtime.params {
   # Account key to authenticate with the Azure blob storage service.
    # Type: String
    # com.mendix.storage.azure.AccountKey = ""
    # Account name to authenticate with the Azure blob storage service.
    # Type: String
    # com.mendix.storage.azure.AccountName = ""
    # Set the blob endpoint.
    # This setting is required when authentication by SharedAccessSignature or UseDefaultAzureCredential is used.
    # Type: String
    # com.mendix.storage.azure.BlobEndpoint = 
    # Name of the container containing the blob.
    # Type: String
    # com.mendix.storage.azure.Container = ""
    # Indicates whether to check if the container exists, and creates it if it does not exist.
    # Type: Boolean
    # com.mendix.storage.azure.CreateContainerIfNotExists = true
    # Maximum number of parallel multi-part file uploads/downloads.
    # We advise not changing this setting unless you experience slow file transfers for large files.
    # Choosing larger values will lead to higher memory usage.
    # Type: Duration (use suffixes like s(econds), m(inutes) or h(ours); without suffix the value is taken as milliseconds)
    # com.mendix.storage.azure.MaximumExecutionTimeInMs = 
    # Sets the maximum execution time (in milliseconds) to use when making this request.
    # For more information, see the Azure libraries.
    # Type: Int
    # com.mendix.storage.azure.ParallelismFactor = 5
    # Provides delegated access to resources in your storage account.
    # For more information, see Shared Access Signature on docs.microsoft.com.
    # Type: String
    # com.mendix.storage.azure.SharedAccessSignature = 
    # Sets the amount of time (in milliseconds) to allow a call to the storage service to complete.
    # For more information, see the Azure libraries.
    # Type: Duration (use suffixes like s(econds), m(inutes) or h(ours); without suffix the value is taken as milliseconds)
    # com.mendix.storage.azure.TimeoutIntervalInMs = 
    # Enables the use of the credential information present in the running environment.
    # For more information, see DefaultAzureCredential on Microsoft Learn.
    # Type: Boolean
    # com.mendix.storage.azure.UseDefaultAzureCredential = false
    # For enabling or disabling secure connections using HTTPS.
    # Can be true or false.
    # Type: Boolean
    # com.mendix.storage.azure.UseHttps = true
}

Certificates

The example.conf file in the Portable App Distribution .zip file contains example runtime settings for certificates.

runtime.params {
    # A comma-separated list of paths to CA certificates.
    # Example: D:\App\CA1.pem, D:\App\CA2.pem, D:\App\CA3.pem, D:\App\CA4.pem
    # Type: String
    # CACertificates = ""
    # Comma-separated list of passwords for Client Certificates (should match the ClientCertificates order).
    # Example: pwd1, pwd2, pwd3, pwd4
    # Type: String
    # ClientCertificatePasswords = ""
    # Only use this when you have multiple client certificates and you want to configure specific certificates for specific servers.
    # This setting defines which service must use which client certificate.
    # See NoClientCertificateUsages if you want to make sure that no client certificate is used for a certain host or web service.
    # The value of ClientCertificateUsages must be a comma-separated list of key/value items.
    # A key/value item must be specified as "identifier": "path to certificate".
    # For web services, use the imported web service name as the identifier.
    # For REST services, use the host name of the remote server as the identifier.
    # Please note that any backslash in the path must be doubled.
    # The whole value must be enclosed by braces ({ }).
    # Type: Object
    # ClientCertificateUsages = {}
    # Comma-separated list of paths to Client Certificates.
    # Example: D:\App\Mx1.pfx, D:\App\Mx2.pfx, D:\App\Mx3.pfx, D:\App\Mx4.pfx
    # Type: String
    # ClientCertificates = ""
}