Skip to content

DRAFT: Subpage for Custom Repository setup #9845

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 30 commits into
base: development
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
b464a4f
Create page for custom repository setup
akkrishnakumar Jul 10, 2025
d21de62
Move managed dependencies doc to subfolder
MarkvanMents Jul 14, 2025
9c89d98
Rename managed-dependencies to _index
MarkvanMents Jul 14, 2025
8be6317
Delete badly named index file
MarkvanMents Jul 14, 2025
40b2271
Add return type to Java with return
MarkvanMents Jul 10, 2025
4987d9e
clarify default filter and saved attribute limitations on lazy load
r0b1n Jul 10, 2025
efd7100
feat: updating the doc
OlufunkeMoronfolu Jul 11, 2025
8083b4c
fix: language usage
OlufunkeMoronfolu Jul 11, 2025
c93faff
fix: images error
OlufunkeMoronfolu Jul 11, 2025
b91c0cf
chore: remove image
OlufunkeMoronfolu Jul 11, 2025
aca2c58
[UIA-1213] Improve private container documentation
ozgeMendix Jul 9, 2025
8c4c575
TW review
NicoletaComan Jul 11, 2025
7c21fd0
Fixed missing text
NicoletaComan Jul 11, 2025
f979edc
Moved section out of main page and into main TOC
NicoletaComan Jul 11, 2025
0c47aa8
Fixed broken links
NicoletaComan Jul 11, 2025
1e4aa55
Fixed broken link
NicoletaComan Jul 11, 2025
772022c
Addressed feedback from support ticket #254043.
zlogic Jul 11, 2025
541b4d0
Moved the private service to its own section
NicoletaComan Jul 9, 2025
2e225ef
Updated the location
NicoletaComan Jul 11, 2025
7cb6e20
Fixed broken link
NicoletaComan Jul 11, 2025
3a59524
Reordered support pages
NicoletaComan Jul 11, 2025
68d2c97
Added version to the Private PDF service
NicoletaComan Jul 11, 2025
9dfc9b4
Updated the release page for SP 11 GA
NicoletaComan Jul 11, 2025
c177eae
Added note on additional support for Mx8
NicoletaComan Jul 11, 2025
623da6c
Removed note on grace period
NicoletaComan Jul 11, 2025
61224cf
Update mendix-cloud.md
SwapnilThange Jul 11, 2025
e846d8d
Update mendix-cloud.md
SwapnilThange Jul 11, 2025
558e40e
feat: language review
OlufunkeMoronfolu Jul 11, 2025
bb10d37
Gradle Firewall Requirements
MarkvanMents Jul 11, 2025
067eee0
Restructure and reformat content
akkrishnakumar Jul 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,14 @@ Before following the steps outlined on this page, make sure you meet the followi
To scale your licensed app in Mendix Cloud, follow these steps:

1. From [Apps](https://sprintr.home.mendix.com), go to the **Environments** page of your licensed app.
1. Click **Details** ({{% icon name="notes-paper-edit" %}}) on the environment you want to scale.
1. On the **General** tab, scroll down to the **Instances** row. Click **Change scaling**.
2. Click **Details** ({{% icon name="notes-paper-edit" %}}) on the environment you want to scale.
3. On the **General** tab, scroll down to the **Plan Details** section.
4. On the **Instances** row, click **Scale**.
5. To set the **Memory per instance** that you want to use, drag the **Memory per instance** indicator bar.
6. To set the number of **Instances** you want to use, drag the **Instances** indicator bar.
7. Click **Apply**. This restarts your environment to apply the changes.

{{< figure src="/attachments/deployment/mendix-cloud-deploy/scale-environment/change-scaling.png" alt="" >}}

1. To set the **Memory per instance** that you want to use, drag the **Memory per instance** indicator bar.
1. To set the number of **Instances** you want to use, drag the **Instances** indicator bar.
1. Click **Apply**. This restarts your environment to apply the changes.

{{< figure src="/attachments/deployment/mendix-cloud-deploy/scale-environment/scale.png" alt="Scaling dashboard" max-width=75% >}}
{{< figure src="/attachments/deployment/mendix-cloud-deploy/scale-environment/scale-instance.png" alt="Scaling dashboard" max-width=75% >}}

### Scaling Notes

Expand All @@ -63,8 +61,6 @@ You do not need to allocate all the available memory at once. You can just alloc

For example, you can use one instance with 2 GiB RAM. The remaining 6 GiB in your cloud resource pack will be unused.

{{< figure src="/attachments/deployment/mendix-cloud-deploy/scale-environment/scaling-example.png" alt="Scaling dashboard with 2 out of 8 GB of total allocated memory used" max-width=75% >}}

## Read More

* [Deploying Apps](/deployment/)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ To load Mendix Debugger password (`mx-debugger-password`) from CSI Secrets Stora

## Sample Implementations

The following sections outline the process of implementing an external secret store with Vault and with AWS. You can refer to them as an example, and to help you troubleshoot your own implementation.
The following sections outline the process of implementing an external secret store with Vault, AWS, Azure and Google Cloud. You can refer to them as an example, and to help you troubleshoot your own implementation.

### Configuring a Secret Store with HashiCorp Vault{#hashicorp}

Expand Down Expand Up @@ -729,7 +729,7 @@ To use this feature, you need to:
* Use an Azure Postgres (Flexible Server) database
* Use Mendix Operator version 2.17.0 and above.
* Use Mendix 9.22 and above.
* Complete the steps described in [Configuring a Secret Store with AWS Secrets Manager](#aws-secrets-manager).
* Complete the steps described in [Configuring a Secret Store with Azure Key Vault](#azure-key-vault).

After completing the prerequisites, follow these steps to switch from password-based authentication to managed identity authentication:

Expand Down Expand Up @@ -764,13 +764,13 @@ To use this feature, you need to:
* Use an Azure SQL database.
* Use Mendix Operator version 2.17.0 and above.
* Use Mendix 10.10 and above.
* Complete the steps described in [Configuring a Secret Store with AWS Secrets Manager](#aws-secrets-manager).
* Complete the steps described in [Configuring a Secret Store with Azure Key Vault](#azure-key-vault).

After completing the prerequisites, follow these steps to switch from password-based authentication to managed identity authentication:

1. Remove or comment out `database-password` from the `SecretProviderClass` and the associated Key vault Secret.
2. Write down the value of `database-username` - this username will need to be removed on step 5.
3. Edit the `database-jdbc-url` and add a `authentication=ActiveDirectoryManagedIdentity` parameter to the JDBC URL value: the URL should look like `jdbc:sqlserver://example.database.windows.net:1433;encrypt=true;trustServerCertificate=false;authentication=ActiveDirectoryMSI;`.
3. Edit the `database-jdbc-url` and add a `authentication=ActiveDirectoryManagedIdentity` parameter to the JDBC URL value: the URL should look like `jdbc:sqlserver://example.database.windows.net:1433;encrypt=true;trustServerCertificate=false;authentication=ActiveDirectoryManagedIdentity;`.
4. Add yourself (or your Entra group) as an [Entra Admin user](https://learn.microsoft.com/en-us/azure/azure-sql/database/authentication-aad-configure?view=azuresql&tabs=azure-powershell#azure-portal-1) in the Azure SQL database.
Azure SQL can only have one Entra Admin, and to add multiple users you'll need to do grant access through an Entra group.
5. Connect to the database using [Azure Query Editor](https://learn.microsoft.com/en-us/azure/azure-sql/database/authentication-aad-configure?view=azuresql&tabs=azure-cli#use-microsoft-entra-identity-to-connect-using-azure-portal-query-editor-for-azure-sql-database) using Entra Authentication, and run the following query
Expand All @@ -795,7 +795,7 @@ To use this feature, you need to:
* Use an Azure Blob Storage account.
* Use Mendix Operator version 2.17.0 and above.
* Use Mendix 10.10 and above.
* Complete the steps described in [Configuring a Secret Store with AWS Secrets Manager](#aws-secrets-manager).
* Complete the steps described in [Configuring a Secret Store with Azure Key Vault](#azure-key-vault).

After completing the prerequisites, follow these steps to switch from password-based authentication to managed identity authentication:

Expand Down Expand Up @@ -973,7 +973,7 @@ To enable your environment to use [Google Secret Manager Provider](https://githu

For more information, refer to the the official [Google Secret Manager Provider for Secret Store CSI Driver](https://github.com/GoogleCloudPlatform/secrets-store-csi-driver-provider-gcp) repository and [Google Secret Manager documentation](https://cloud.google.com/secret-manager/docs/overview).

### Using an exixting Kubernetes Secret as an external secret source{#regular-k8s-secrets}
### Using an existing Kubernetes Secret as an external secret source{#regular-k8s-secrets}

{{% alert color="info" %}}
This feature is only available in Mendix Operator version 2.22.0 or later.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,11 +320,7 @@ When a drop-down filter is used in conjunction with an Association Filter data g
{{% /alert %}}

{{% alert color="warning" %}}
Due to current limitations, **Default value** property will be ignored when a drop-down filter is used in conjunction with an [Association Filter](#association-filter) data grid configuration.
{{% /alert %}}

{{% alert color="warning" %}}
Due to current limitations, **Saved attribute** property will be ignored when a drop-down filter is used in conjunction with an [Association Filter](#association-filter) data grid configuration where **Use lazy load** is set to **Yes**. This limitation also applies when using page state, meaning that the filter value used in the drop-down filter will not persist when navigating between pages.
When a drop-down filter is used in conjunction with an [Association Filter](#association-filter) data grid configuration, both **Default value** and **Saved attribute** properties will be ignored if **Use lazy load** is set to **Yes** in the column settings. This limitation also applies when using page state, meaning that the filter value used in the drop-down filter will not persist when navigating between pages.
{{% /alert %}}

When adding a new option, the following properties are required:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ These are the limitations of using the private PDF Document Generation service:
Before you start using the private PDF Document Generation service, make sure you meet these prerequisites:

* You have a good understanding of how to run and manage Docker containers.
* You are familiar with the PDF Document Generation module. For more information, refer to [PDF Document Generation](/appstore/modules/document-generation/).
* You are familiar with the PDF Document Generation module. For more information, refer to [PDF Document Generation](/appstore/modules/document-generation/).
* You are using version 2.1.0 or higher of the PDF Document Generation module.
* Your deployment environment needs to allow bidirectional communication between Mendix apps and the Docker containers running the private PDF Document Generation service.

## Installation {#installation}
Expand All @@ -58,8 +59,8 @@ The following artifact is available for installing the service:

Follow these steps to install the service through Docker:

1. Pull the Docker image using the following command: `docker pull private-cloud.registry.mendix.com/mendix/document-generation-service:<tag>`.
2. Run the Docker container using the following command: `docker run -p 8085:8085 --name document-generation private-cloud.registry.mendix.com/mendix/document-generation-service:<tag>`. The `<tag>` component must be replaced with the version of the service, such as `1.0.0`. This creates a Docker container, which is exposed on port `8085`.
1. Pull the Docker image using the following command: `docker pull private-cloud.registry.mendix.com/mendix/document-generation-service:1.0.0`.
2. Run the Docker container using the following command: `docker run -p 8085:8085 --name document-generation private-cloud.registry.mendix.com/mendix/document-generation-service:1.0.0`. This creates a Docker container, which is exposed on port `8085`.

### Isolation

Expand Down
7 changes: 7 additions & 0 deletions content/en/docs/refguide/installation/system-requirements.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,13 @@ Studio Pro needs access to the following URLs in order to work. If your firewall
* `*.teamserver.sprintr.com`
* `*.api.mendix.com`

If you have set up managed dependencies, you will need access to the following Gradle and Maven URLs:

* `jcenter.bintray.com`
* `plugins-artifacts.gradle.org`
* `plugins.gradle.org`
* `repo.maven.apache.org`

If you have set up managed dependencies and are working behind a firewall or using a proxy, see the [Proxy Settings](/refguide/managed-dependencies/#proxy-settings) section of *Managed Dependencies* for advice on what you need to do to allow the managed dependencies to work.

To run a Mendix app, Mendix Studio Pro uses the following ports by default. If your firewall is blocking these, you will need to open them:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ Platform-supported Marketplace modules created by Mendix have been updated with

## Custom Repositories{#custom-repos}

By default, dependencies are downloaded from the [Maven Central](https://central.sonatype.com/) repository. In some scenarios, you may want to specify a custom location. For example, if your organization has its own repository to cache downloads or as an alternative if internet access is restricted in an air-gapped setup.
By default, dependencies are downloaded from the [Maven Central](https://central.sonatype.com/) repository. In some scenarios, you may want to specify a custom location. For example, if your organization has its own repository to cache downloads or as an alternative if internet access is restricted in an air-gapped setup. More details on how to setup custom repositories can be found [here](/refguide/managed-dependencies/custom-repositories)

Custom repositories are configured in the **Repositories** setting of the **Deployment** tab in the [Preferences](/refguide/preferences-dialog/) dialog box. This setting uses the same syntax as Gradle. To configure a custom repository server that is accessible via URL, use the following configuration (credentials are optional):

Expand Down Expand Up @@ -128,6 +128,8 @@ There are some dependencies that are required by Mendix. These need to be added

Your local setup might be configured to work with a proxy or it could be behind a firewall. This means your system will have restricted access to the internet. In such cases, Gradle cannot access external repositories to download the required dependencies to build the project. You will have to configure Gradle/JVM with the proxy settings on your system for it to be able to build and run the project on your local setup.

Also ensure that you are not blocking any of the required Gradle and Maven URLs. These are listed in the [Firewall Settings](/refguide/system-requirements/#firewall-settings) section of *System Requirements*.

Below are the few options you can try to configure Gradle with custom proxy settings:

### Gradle Proxy Settings
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
---
title: "How to setup Custom Repositories"
url: /refguide/managed-dependencies/custom-repositories
weight: 2
description: "Describes how to setup a custom repository locally"
---

{{% alert color="info" %}}
This document is relevant to developers who want to use Managed Dependencies and an internet-restricted or air-gapped setup
{{% /alert %}}

# Introduction
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe change the structure to:

Introduction

  • Explain why this topic is important (air-gapped) and what the difference between the approaches is with pros and cons

Use an Artifactory Server

Prerequisites

Set up the server

Configure the server

Configure Studio Pro

Use the Local File System

Prerequisites

Set up the server

Configure the server

Configure Studio Pro

Troubleshooting


If your development environment has restricted or no access(air-gapped) to the internet, the background job that automatically resolves your project dependencies will fail. Due to this, you'll not be able to build and run your Mendix project. For such cases, we would recommend you to setup a custom repository so that Studio Pro can resolve the required dependencies.
This document will guide you on how you can set up a local repository or a remote artifactory like JFrog and configure Studio Pro to use it to resolve the project dependencies. We'll also cover how to use a simple flat file folder to store your `.jar` files. This will allow you to manage your project's dependencies more efficiently, especially for internal libraries or when internet access is limited.

# Understanding Custom Repositories

Think of custom repositories as your own personal library for software components (like `.jar` files). Instead of downloading everything from the public internet (like Maven Central), you can store frequently used or private components in your own repository. This can make your builds faster and more reliable.
This is also the recommended setup when there is limited or no access to the internet.

* **JFrog Artifactory** and **Sonatype Nexus** are popular tools that act as these "personal libraries." They can store your own libraries, and also "proxy" public repositories, meaning they download from the internet once and then serve it to everyone in your team from their local cache.
* **Local repository:** This is a folder on your network which potentially contains your project dependencies. The folder can either follow the maven-style layout or can be a simple folder containing your dependencies.

# How to set up a Remote Repository

## 1. Prerequisites

In this example, we have made use of JFrog. You can opt for any tool of your choice. Most of the repositories in the market have very similar capabilities. You can install this on your local machine or host it on a local network.

### Installing JFrog

Follow the installation steps from the [official documentation page](https://jfrog.com/help/r/jfrog-installation-setup-documentation/installation-steps) of JFrog to install it on your local system. If you don't have permissions to install software on your system or local network, you can request your IT department to create a remote instance for you and provide credentials to access it.

## 2. Configuring the repository

When setting up your remote repository (JFrog), it's crucial to ensure it can access public repositories like Maven Central and Gradle Plugin Portal. If your repository doesn't have these configured as "proxy" sources, you might encounter errors when Studio Pro tries to sync the required dependencies. Following are the two public repositories you will have to configure.

* **Maven Central URL:** `https://repo1.maven.org/maven2/`
* **Gradle Plugins Repository URL:** `https://plugins.gradle.org/m2/`

{{< figure src="/attachments/refguide/java-programming/managed-dependencies/jfrog-remote-repositories.png" class="no-border" >}}

## 3. Configuring Studio Pro to use remote repository

Once you have set up your remote repository, you need to add a few configuration settings in Studio Pro. This will enable Studio Pro to resolve dependencies from the remote repository.

- Go to `Edit -> Preferences -> Deployment -> Use custom repository`. Enable this option.
- Input the following settings into the text area field that will appear once your enable the above option
```gradle
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use this if you have a repository mirror installed

maven {
url = uri("http://localhost:8046/artifactory/maven-remote/") // Make sure to use the correct url to your repository
// If the repository requires authentication, then uncomment the following config
// credentials {
// username = 'username'
// password = 'password'
//}
}

// This is for the CycloneDx Gradle plugin
maven {
url = uri("http://localhost:8046/artifactory/gradle-remote/") // Make sure to use the correct url to your repository
// If the repository requires authentication, then uncomment the following config
// credentials {
// username = 'username'
// password = 'password'
//}
}
```
- Press Ok and Studio Pro will start syncing the dependencies for the project.
- If everything goes well, you'll be able to see your `vendorlib` directory populated with the required project dependencies and `vendorlib-sbom.json` file.
- Then you can run the app to verify if it works.

# How to set up a local Repository

## 1. Prerequisites

For scenarios where you have absolutely no access to the internet(air-gapped), you can create a folder on your local system which will contain all the project dependencies. Then you can configure Studio Pro to resolve dependencies from this folder.

### Downloading M2 repository
We use [CycloneDx Gradle Plugin](https://github.com/CycloneDX/cyclonedx-gradle-plugin) to generate the `vendorlib-sbom.json` file. This is for Compliance and Security requirements. You will have to create a `m2` (Maven) style directory which will contain this plugin. You can download it from the [Mendix GitHub repo](broken-link)

## 2. Configuring the repository

Create a folder containing a flattened list of all the project dependencies. Make sure you store this on your local system where Studio Pro has read/write access to it.

## 3. Configuring Studio Pro to use local repository

Once you have set up your local repository, you need to add a few configuration settings in Studio Pro. This will enable Studio Pro to resolve dependencies from the local repository.

- Go to `Edit -> Preferences -> Deployment -> Use custom repository`. Enable this option.
- Input the following settings into the text area field that will appear once your enable the above option
```gradle
flatDir {
dirs '../libs' // This is the path to the project level dependencies. It is recommended to use absolute paths. But relative path can also be used.
}

// This is for the CycloneDx Gradle plugin
maven {
url = uri("C:/Users/user/Documents/gradle-remote") // Replace with your local m2 repo path
}
```
- Press Ok and Studio Pro will start syncing the dependencies for the project.
- If everything goes well, you'll be able to see your `vendorlib` directory populated with the required project dependencies and `vendorlib-sbom.json` file.
- Then you can run the app to verify if it works.
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ The XPath should be used in a [core.createXPathQuery](https://apidocs.rnd.mendix
For example, to retrieve all customers named Jansen:

```java
public getCustomersNameJansen(IContext context, ICore core, int value) {
public List<IMendixObject> getCustomersNameJansen(IContext context, ICore core, int value) {
List<IMendixObject> results = core.createXPathQuery("//Sales.Customer[Name='Jansen']")
.execute(context);
return results;
Expand Down
Loading