Technical Documentation
Bootstrap
Higson Studio is a Java application and can be run at JVM machine equipped with:
- at least Java 17 JRE,
- 4 GB of RAM,
- 2 CPU,
- Linux, Windows or macOS machine.
Docker#
Higson Studio distribution only contains H2 and PostgreSQL drivers, the others have to be added manually. Every image contains description how to configure JDBC driver.
Full docker repository is available here.
Prerequisites:
- Java 17
- Maven 3.x
- Higson Studio
We will show how to configure Higson Engine using Spring Boot configuration
Maven Configuration#
Apart from standard spring boot dependencies, you need to include higson-runtime dependency, available in Maven Central.
|
|
Another needed dependency is the JDBC driver to the database of choice, e.g., H2, Oracle, Postgres, MsSQL or MySQL and database connection pool managing library:
|
|
Properties#
Add Higson Runtime data source properties to application.properties file.
|
|
Properties are available here
Spring Configuration#
Add required beans to your java class annotated with @Configuration:
|
|
The application is ready to start. After successfully starting the application, you can see similar log output:
Run Higson Runtime REST in Test Mode Using Snapshot-Based Configuration#
It is possible to run the Higson Runtime in test mode using a configuration loaded directly from a snapshot. In this mode:
- The runtime does not require a database connection, as the entire configuration is sourced locally from the snapshot.
- The environment operates in read-only mode.
- Watchers are disabled, as no changes to the configuration are expected.
- Test mode is mutually exclusive with development mode and cannot be used simultaneously.
- This setup does not support tables from external data sources.
To use runtime in test mode, you need the following configuration:
private String pathToSnapshot = "C:\Users\UserName\Downloads\snapshot.zip"
@Bean(destroyMethod = "destroy")
public HigsonEngineFactory getHigsonEngineFactory() {
log.info("Engine factory begin creation...");
HigsonEngineFactory higsonEngineFactory = new HigsonEngineFactory();
higsonEngineFactory.setDataSource(new HigsonSnapshotDataSource(new File(pathToSnapshot)));
return higsonEngineFactory;
}
@Bean
public HigsonEngine getHigsonEngine(HigsonEngineFactory higsonEngineFactory) {
log.info("Engine begin creation...");
return higsonEngineFactory.create();
}
Prerequisites#
- Java 17
- Maven 3.x
- Spring Boot 3
Maven Configuration#
Apart from standard Spring Boot dependencies, you need to include spring-boot-starter-higson-runtime dependency,
available in Maven Central.
Add spring-boot-starter-higson-runtime dependency to pom.xml file:
|
|
Another needed dependency is the JDBC driver to the database of choice, e.g., h2, oracle, mssql, postgresql:
|
|
Properties#
With the above setup, all the configuration that is needed is application.yml file with database properties:
|
|
If required properties are not available, spring-boot-starter-higson-runtime will return an adequate message.
To configure external sources, you have to set comma separated list of external sources names and connection properties for each of them. You can do it by using the properties below.
|
|
Using Auto-Configured HigsonEngine#
After successfully configuring properties while starting the application, spring will create HigsonEngine bean available in the spring application context, then which can be injected anywhere:
|
|
Overriding Default Configuration#
To override default auto-configuration, you need to define HigsonEngine bean in the @Configuration class:
|
|
Existing auto-configured DataSource and HigsonRuntimeProperties can be used simply by injecting them:
|
|
Disabling Higson#
If you want to disable higson temporarily for some reason, you can do it with property higson.runtime.enabled set
to false.
|
|
Higson Runtime REST is a web application that provides REST API for decision table/function/domain access. It is a REST implementation of Java’s Higson Runtime jar. It is available in two forms:
- Spring boot’s executable jar, available here: https://www.higson.io/docs/d-success
- Docker image, available here: https://hub.docker.com/repository/docker/decerto/higson-runtime-rest
Environment#
Higson Runtime REST is a Java application and can run with any Java 8 or higher on Windows, MacOS X and Linux/Unix.
CLI#
To run Runtime-Rest from cli you must pass four properties:
- loader.path - path to jdbc driver
- higson.database.url
- higson.database.username
- higson.database.password
Download latest version of higson runtime rest and database driver (postgresql for example)
|
|
Docker#
To run Higson Runtime REST as a docker image, there is need to build a separate docker image based on decerto/higson-runtime-rest image, add your database driver jar and run Higson Runtime REST jar with additional path.
Example:
|
|
Additionally, you need to pass 3 properties:
- higson.database.url
- higson.database.username
- higson.database.password
An invocation example:
|
|
Using Higson Runtime REST#
This short tutorial will guide you through the process of running Higson Runtime REST as a docker image and invoking decision table/function/domain element.
Prerequisites#
In order to run examples from this article you will need:
- running docker. See https://docs.docker.com/installation/#installation for details on setting Docker up for your machine.
- a favorite REST API Client to send requests such as Postman
- a favorite internet browser
Setting Up Docker Images#
The tutorial will be based on our motor insurance. It consists of the insurance web application, Higson Studio, and Higson Runtime REST modules. There is a docker-compose.yml file that makes the whole application easy to run. Just download a project from GitHub, open terminal in that directory, and run the following command:
|
|
If you look closely inside the docker-compose.yml file, you will see that Higson Runtime REST docker image needs three additional properties to be passed to run properly:
- higson.database.url : JDBC url to Higson’s database
- higson.database.username : Higson’s database username
- higson.database.password : Higson’s database password
If you want to connect to other database types such as Oracle, Postgres, MsSQL or MySQL, then you must build your own docker image and provide your database driver. Here’s a Docker file example that copies custom database driver and runs Runtime REST application:
|
|
- Demo app should be available at
localhost:48080/demo - Higson Studio should be available at
localhost:38080/higson/app - Higson Runtime REST should be available at
localhost:8081
To access higson services use followed credentials: User: admin Password: admin
Getting Decision Table Value#
We will be using a decision table examples from this article. Let’s get the value of a demo.motor.coverage.position decision table for the BI coverage code. Here’s the request we’re going to use:
|
|
It consists of 2 main parts: ctx and elements. The former represents the input values we want to pass to Higson. We can pass there simple as well as complex objects. The latter is a list of Higson elements to invoke.
When we send this request to the localhost:8081/api/execution/invoke url, we should receive the following response:
|
|
We receive a list of executed Higson elements with corresponding values.
Let’s see how the response will look like if more than one row will be returned from the decision table. In this example, we are going to use the demo.motor.dict.vehicle.available decision table. Here’s the request:
|
|
Besides a new decision table (parameter) code and context property, you can see how to invoke more than one Higson element in a single JSON request. Let’s see the response:
|
|
As we see, each element has its own JSON section in returned array. What’s more, each row in the decision table’s matrix corresponds to one complex element in the resultValue array.
Calling Function#
Let’s get the computed value of the demo.insurance.calc.premium function. Here’s the request we’re going to use:
|
|
It’s basically the same request as the one used in the decision tables section. However, we pass here three context key-value pairs instead of one. Here’s the response we should get by calling the localhost:8081/api/execution/invoke endpoint:
|
|
Again, the same response format as in the decision table’s.
Accessing Domain Attributes#
Last but not least, let’s see how to access domain attributes through invoke API. We’ll be using examples from this article. Let’s see how to evaluate a position attribute of a coverage BI domain element:
|
|
The main difference between domain element and decision table/function is the presence of 2 additional attributes: profileCode and attributeCode, which names are self-describing. Let’s look at the response:
|
|
As we see, the response format is the same as in the decision table/function section.
If you want to learn more or discover other available endpoints, there is a Runtime REST swagger online documentation available at: http://localhost:8081/swagger-ui/index.html.
Accessing Swagger UI#
The Swagger UI link is generated automatically based on the installation type (Docker or Bundle). The Swagger UI is accessible at the following address format:
http://[host]:[port]/[appname]/[apiname]/swagger-ui/index.html
For Docker-Based Deployments#
When the application is running in a Docker environment, the URL components are determined as follows:
- host: localhost (or the container’s IP address if accessed externally)
- port: retrieved from the server.port property (e.g., 8080)
- apiname: the value of server.servlet.context-path from the application’s configuration (e.g., /api)
Example: http://localhost:8080/api/swagger-ui/index.html
For Bundle Installations#
In the case of a bundle installation:
-
host: localhost
-
port: retrieved from the conf/server.xml configuration file by locating a line such as:
<Connector port="38080" protocol="HTTP/1.1" ... />In this example, the port is 38080.
-
appname and apiname: determined based on the directory structure within the webapps folder. For version 4.1, the typical folder name is higson#api, which translates to:
- appname = higson
- apiname = api
Example: http://localhost:38080/higson/api/swagger-ui/index.html
By following these rules, you can easily determine the correct Swagger UI URL regardless of the deployment method.
Generating Runtime REST JSON from Tester#
To generate a request to Runtime Rest, navigate to Tools -> Tester. Click “Add Test”, then add the elements for which you want to generate an example request. In the example below, the following elements have been selected:
- Decision Table,
- Function,
- Domain Element,
- Click “Add element” on the left side.
- Select the elements for which you want to generate an example request.
- Add the selected elements to the test.
Now you can click the “Generate Runtime Rest JSON” button, which will generate an example request without context values.
|
|
If you need to generate an example request with context values, you must first run the test by clicking “Run Test” button. This will populate the Context table with all available context values.
Next, fill in the desired context values and click “Run Test” again.
Then click “Generate Runtime Rest JSON”.
Now the generated example request will include the values from the context.
|
|
Cache Mechanism and the Role of Watchers in Higson Runtime REST#
Higson Runtime REST uses a caching mechanism to store computation logic, which significantly contributes to its high performance. The actual computation logic (e.g., functions or decision tables) is stored in a database managed by Higson Studio.
What happens when a Higson Studio user modifies a business configuration — for example, by editing a decision table? To ensure that Higson Runtime REST always operates on up-to-date data, the system must detect these changes and refresh its cache accordingly.
This is where watchers come in — specialized components within Runtime REST responsible for monitoring the state of business configuration in Higson Studio. By default, every 3 seconds, watchers check the current state of the Higson Studio database. If they detect any change in the configuration (e.g., in decision tables, functions, etc.), they signal the need to reload the cache. In response, Higson Runtime REST refreshes the configuration, ensuring that all computations are performed using the most recent data.
Thanks to this mechanism, Higson Runtime REST:
- Always holds an up-to-date business configuration in cache,
- Eliminates delays caused by accessing the database during computation,
- Ensures consistency between Higson Studio and the runtime environment.
Types of Watchers#
Higson Runtime REST defines nine types of watchers, categorized by the type of business configuration element they monitor:
- Decision tables
- Functions
- Versions
- Profiles
- My view - in dev-mode
- Domain
- Developer mode - unpublished changes in session
- Timeline
- Refresh
Each watcher is responsible for tracking changes in a specific resource type, enabling precise and efficient synchronization. Each watcher operates independently. This means that a change in one type of element (e.g., a decision table) does not trigger unnecessary cache reloads for other unrelated areas. This design significantly improves the system’s operational efficiency.
Watcher Properties#
The table below lists the properties related to each watcher type, along with their default values (expressed in seconds).
| Property | Description | Default value |
|---|---|---|
| Decision tables | ||
| higson.runtime.watcher.param-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.param-watcher-config.pause | Interval at which the watcher monitors the state of decision tables. | 3 |
| higson.runtime.watcher.param-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| higson.runtime.watcher.param-watcher-config.force | Set the time after which the watcher will force a full cache synchronization of decision tables. Currently only the param-watcher supports this setting. | 60 |
| Functions | ||
| higson.runtime.watcher.function-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.function-watcher-config.pause | Interval at which the watcher monitors the state of functions. | 3 |
| higson.runtime.watcher.function-watcher-config.errorPause` | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| Versions | ||
| higson.runtime.watcher.version-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.version-watcher-config.pause | Interval at which the watcher monitors the state of versions. | 3 |
| higson.runtime.watcher.version-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| Profiles | ||
| higson.runtime.watcher.profile-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.profile-watcher-config.pause | Interval at which the watcher monitors the state of profiles. | 3 |
| higson.runtime.watcher.profile-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| My view - in dev-mode | ||
| higson.runtime.watcher.user-region-version-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.user-region-version-watcher-config.pause | Interval at which the watcher monitors the state of users perspective (in Higson Studio set under the My View button). | 3 |
| higson.runtime.watcher.user-region-version-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| Domain | ||
| higson.runtime.watcher.domain-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.domain-watcher-config.pause | Interval at which the watcher monitors the state of the domain. | 3 |
| higson.runtime.watcher.domain-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| higson.runtime.watcher.domain-watcher-config.invalidate | Works in tandem with higson.runtime.watcher.domain-watcher-config.time-unit — defines how long the domain value may remain unchanged in the cache. |
24 |
| higson.runtime.watcher.domain-watcher-config.time-unit | Works in tandem with higson.runtime.watcher.domain-watcher-config.invalidate — defines how long the domain value may remain unchanged in the cache. |
HOURS |
| Developer mode - unpublished changes in session | ||
| higson.runtime.watcher.dev-mode-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.dev-mode-watcher-config.pause | Interval at which the watcher monitors the state of objects modified in session. | 1 |
| higson.runtime.watcher.dev-mode-watcher-config.errorPause` | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| Timeline | ||
| higson.runtime.watcher.schedule-runtime-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.schedule-runtime-watcher-config.pause | Interval at which the watcher monitors the state of the version timeline. | 10 |
| higson.runtime.watcher.schedule-runtime-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| Refresh | ||
| higson.runtime.watcher.refresh-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 15 |
| higson.runtime.watcher.refresh-watcher-config.pause | Checks each cached decision table (in-memory index). Evicts decision table from cache if: - the decision table’s auto-refresh period has expired - the decision table’s max idle time exceeded |
10 |
| higson.runtime.watcher.refresh-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
Run Higson Using AMI#
Launch the AMI#
The latest Higson versions are available as AMI (Amazon Machine Images) at Amazon Marketplace.
Higson Studio#
Visit the Higson Studio Amazon Marketplace. You can read basic information about Higson Studio. Click Continue to subscribe and read Terms and Conditions. After getting yourself familiar with the license, click Continue to configuration. On the next screen, you can choose the Higson Studio version and region you want to launch your instance in. Next, click Continue to launch. Select Launch through EC2 in the Choose Action section.
Higson Runtime#
Visit the Higson Runtime Amazon Marketplace. You can read basic information about Higson Runtime. Click Continue to subscribe and read Terms and Conditions. After getting yourself familiar with the license, click Continue to configuration. On the next screen, you can choose the Higson Runtime version and region you want to launch your instance in. Next, click Continue to launch. Select Launch through EC2 in the Choose Action section.
Configure#
This step is required to be able to specify the user-data script, which allows passing environment variables to the application without the need to log in to the instance.
AWS Systems Manager Parameter Store#
By default, Higson Studio uses AWS Systems Manager Parameter Store to fetch properties at the start of the application. You need to specify AWS_ACCESS_KEY_ID and AWS_SECRET_KEY in the user-data script to connect to the AWS Systems Manager Parameter Store. If you do not define those properties, Studio will not launch.
Default Configuration#
- key: /config/higson-studio/higson.database.url
description: JDBC address of dedicated postgresql database
value: jdbc:postgresql://address_to_your_postgressql_server:port/postgres?currentSchema=public - key: /config/higson-studio/higson.database.username
description: username for application’s connection to the dedicated database
value: admin - key: /config/higson-studio/higson.database.password
description: password for application’s connection to the dedicated database
value: admin
If you prefer to connect to H2 database in order not to setting up a standalone database - you can set up following properties:
-
key: /config/higson-studio/higson.database.url
description: JDBC address of dedicated postgresql database
value: jdbc:h2:/home/ec2-user/higson.test.db;AUTO_SERVER=TRUE;NON_KEYWORDS=VALUE -
key: /config/higson-studio/higson.database.username
description: username for application’s connection to the dedicated database
value: sa -
key: /config/higson-studio/higson.database.password
description: password for application’s connection to the dedicated database
value: sa
Environment Properties#
To set up environment variables for containers you can manually create a /home/ec2-user/environment.conf file or prepare user-data-script like in the example below. Both are available and its main aim is to configure instance system environments.
|
|
AWS_ACCESS_KEY_ID and AWS_SECRET_KEY you will be able to generate from your IAM page.
Both are needed if you want to use your AWS Parameter Store to pass your configuration.
You can inject this script directly into your container in EC2 console using:
Actions -> Instance settings -> Edit user data button.
Following script add 2 environment variables to your container.
You can learn more about bootstrapping AWS EC2 instance here.
Configure Without AWS Parameter Store#
If you don’t want to use AWS Parameter Store simply turn this off with AWS_PARAMSTORE_ENABLED=FALSE
Now you have to pass HIGSON_DATABASE_URL, HIGSON_DATABASE_USERNAME, HIGSON_DATABASE_PASSWORD properties in your user-data script
Properties Customization Precedence#
Higson Studio allows you to define properties in several locations. The properties are processed in the order as defined below. This implies that the last one overwrites other overlapping properties if you define the same property in two different locations.
- /home/ec2-user/conf/application.properties
- /home/ec2-user/higson-studio/conf/mpp-sensitive.properties
- /home/ec2-user/higson-studio/conf/application.properties
- /home/ec2-user/application.properties
- /home/ec2-user/higson-studio/conf/higson.properties
- “HIGSON_CONFIG_PATH” environment variable (can be defined in user-data script)
- environment variables (from/home/ec2-user/environment.conf)
- AWS Systems Manager Parameter Store
Instance Launch Options#
Below, you can find a few instance launch options:
- version - by default you should launch the latest version available on Amazon Marketplace.
- region - select the region you would like to launch your instance in. The image is available in all of Amazon’s publicly available regions.
- EC2 Instance Type - select the instance type you would like to use for your launched Higson Studio.
- Security Groups - Expose ports to access EC2 instances and Higson Studio:
- TCP/22 – SSH - used to administrate your instance remotely.
- TCP/38080 – default port for Higson Studio, this is the port on which you can access Higson Studio
- Key Value pair settings - generate or use an existing one key and secret pair that will be needed later to access the EC2 instance.
Connect the Instance#
In order to log in, you can use the following command:
ssh-i PATH_TO_PEM_FILE ec2-user@IP_HERE
You need to use a PEM file with a public key downloaded while creating the EC2 Instance.
Type the ssh command in a terminal. Application is deployed at /home/ec2-user/higson-studio-X.X.X where X.X.X is the version of
deployed Studio.
Systemd service is configured to manage the Higson Tomcat instance. You can use standard systemctl commands to
disable or check status such as sudo systemctl status higson-studio
All logs can be found under the following path /home/ec2-user/higson-studio-x.x.x/logs/
Log in to Running Higson Studio#
Studio stores temporary password at higson.log file. Login to your EC2 instance and grep a string ‘Copy password’ in the log file using:
|
|
as a result, you will find a string similar to: Copy password from file 'gifzWEZl' in home directory, where the filename
is different every time higson is bootstrapped. This file contains an admin user password. Copy the password. Now go to a browser and
open a page: http://IP_HERE:38080/higson/app . At login page please fill form with credentials: pass username: admin and password:
copied string here. You will be asked to change your temporary password. After that, you can login to higson as an admin with a
new set password
Supported Databases#
Higson supports various SQL databases, including PostgreSQL, Oracle, MySQL, Microsoft SQL and H2. By default, we have built the AMI with PostgreSQL and H2 support. This means that the PostgreSQL and H2 JDBC drivers are present in the Tomcat lib directory, and we only need you to provide the URL and credentials for the database. If you want to connect to another database, then add a proper JDBC driver to the Tomcat lib directory, which is located under the path: /home/ec2-user/higson-studio/lib
Run Higson Using ECS#
It is possible to run the Higson application in Amazon Elastic Container Service (ECS). The following steps will allow you to quickly and easily run Higson Studio or Higson Runtime REST:
- Log in to AWS Management Console
- Go to Elastic Container Service
- Create a Cluster:
- Define the cluster name (this is the only required field), e.g.: higson-cluster
- Verify the remaining optional settings
- Finish the process by creating a cluster
- Create a Task definition (using the configuration form):
- Define the task definition family name, e.g.: higson-studio or higson-runtime-rest
- Define the container name and the application image URI - an official DockerHub images for decerto/higson-studio or decerto/higson-runtime-rest are available at https://hub.docker.com/r/decerto/ (e.g.: decerto/higson-studio:4.2.0 or decerto/higson-runtime-rest:4.2.0)
- Define environment variables (check the list of required properties). Remember of correct environment variables notation!
- Configure log collection, e.g.: select Amazon CloudWatch
- Verify the remaining optional settings
- Finish the process by creating a task definition
- Go to cluster and create a service:
- Select task definition family, e.g.: previously created higson-studio or higson-runtime-rest
- Define service name, e.g.: higson-studio-service or higson-runtime-rest-service
- Finish the process by creating a service
- Verify the status of deployment and start using application!
If you would like to use Higson Studio and Higson Runtime REST both must have configured environment variable: HIGSON_SECURITY_JWT_SECRET_KEY with the same key value!
See an example of minimal required environment variables for Higson Studio:
See an example of minimal required environment variables for Higson Runtime REST:
Properties
Higson gives user a possibility to configure and overwrite internal application properties. They are stored in dedicated file, named application.yml . File should be placed in container or may be pass using environment properties
|
|
Configurable Properties#
| Property | Description | Default value |
|---|---|---|
| Database | ||
| higson.database.dialect | Database dialect to use. Predefined dialects available in Higson: oracle,hsqldb, h2, mssql2012, postgresql, mysql | oracle |
| higson.database.hbm2ddl-mode | proxy for hibernate property hibernate.hbm2ddl.auto | validate |
| higson.database.autoddl-action | Action to be taken during Higson Studio startup with respect to database schema update:check - verify whether schema is correctupdate - chcek database schema and update, if neededskip - do nothing | update |
| higson.database.url | JDBC connection url | THIS PROPERTY MUST BE SET AT SYSTEM START BY THE USER |
| higson.database.username | Username that Higson will use to connect to database defined in mpp.database.url | THIS PROPERTY MUST BE SET AT SYSTEM START BY THE USER |
| higson.database.password | Password that Higson will use to connect to database defined in mpp.database.url | THIS PROPERTY MUST BE SET AT SYSTEM START BY THE USER |
| higson.database.schema | Database schema wherein Higson tables exist | |
| Environment | ||
| higson.studio.instance-name | Id identifying specific Higson Studio Instance. It is visible in Higson Studio below menu toolbar | |
| higson.studio.url | Higson Studio url used in few places, for example to create url for authentication token reset, CAS authentication etc. | http://localhost:8080/higson/app |
| higson.studio.region.updater.task-cron | CRON expression used to schedule job updating system region versions in Higson Studio | 0 1 0 * * * |
| Security | ||
| higson.security.basic.password-encode | Name of using password encoder | bcrypt |
| higson.security.basic.bcrypt.complexity | Password encoder complexity | 5 |
| higson.security.jwt.secret-key | Secret to decode JWT token (up to 256-bytes chars). To communicate with Runtime Rest client. | |
| higson.studio.security.token.verification.secret-key | Secret to verify JWT token (up to 256-bytes chars). To communicate with UI. | THIS PROPERTY MUST BE SET AT SYSTEM START BY THE USER |
| higson.studio.security.token.verification.algorithm | Determines JWT token verification algorithm (only HMAC256 supported) | HMAC256 |
| higson.studio.security.token.verification.studio-token-secured-paths | Comma-separated list of URL paths secured by Studio token verification. Required to protect MCP endpoints. | |
| higson.studio.security.token.generation.enabled | Determines if studio server works as authentication provider | true |
| higson.studio.security.token.generation.secret-key | Secret to sign JWT token (up to 256-bytes chars). To communicate with UI. | ${higson.studio.security.token.verification.secret-key} |
| higson.studio.security.token.generation.algorithm | Determines JWT token sign algorithm (only HMAC256 supported) | ${higson.studio.security.token.verification.algorithm} |
| higson.studio.security.token.generation.access-token-lifetime.value | Access token lifetime value | 5 |
| higson.studio.security.token.generation.access-token-lifetime.unit | Access token lifetime unit | Minutes |
| higson.studio.security.token.generation.refresh-token-lifetime.value | Refresh token lifetime value | 7 |
| higson.studio.security.token.generation.refresh-token-lifetime.unit | Refresh token lifetime unit | Days |
| higson.studio.security.token.generation.persist-refresh-token | Should persist refresh token to database (session idempotent) | true |
| higson.studio.security.login.attempts-limit | Limit of failed login attempts | 3 |
| higson.studio.security.login.attempts-cooldown | Time (in seconds) to freeze the ability to log in after reaching the limit of failed attempts | 20 |
| higson.studio.security.password.policy.min-length | Specifies the length of the password. Can take values between 10 and 128 | 10 |
| Features | ||
| higson.studio.mail.host | Mailer server host. If host and port are not set - mailer is not loaded | "" |
| higson.studio.mail.port | Mailer server port. If host and port are not set - mailer is not loaded | "" |
| higson.studio.mail.username | Mailer server username | "" |
| higson.studio.mail.password | Mailer server username’s password | "" |
| higson.studio.mail.from | Mailer from metadata | "" |
| higson.studio.snapshot.param.matrix.writer.order-by-all-level | Should sort by all levels during export decision table to file. Available: true/false | true |
| higson.studio.groovy.secured | Groovy function verification. Available: true/false. If set to true it is not possible to use a class of type System or Exception. If set to false the function body is not validated and possible security problems will not be caught. | true |
| higson.studio.function.validate-arguments | Flag determining whether function arguments data types should be validated before test execution | false |
| higson.studio.max-file-size | Specifies the size of the snapshot that can be uploaded | 100MB |
| higson.persistence.ui.enabled | Enables GMO in Higson Studio UI | false |
| MCP | ||
| higson.studio.mcp.enabled | Enables the MCP server. When set to false, the MCP endpoint is not exposed. |
false |
| Snapshot Async | ||
| higson.studio.snapshot.async.poll.interval-ms | How often (in ms) the poller checks the job queue for pending imports. | 5000 |
| higson.studio.snapshot.async.poll.initial-delay-ms | Delay (in ms) before the import poller starts after application launch. | 10000 |
| higson.studio.snapshot.async.poll.batch-size | Number of QUEUED import jobs fetched from the database in a single polling tick. | 10 |
| higson.studio.snapshot.async.poll.max-concurrent-jobs | Maximum number of snapshot imports running in parallel on a single instance. | 3 |
| higson.studio.snapshot.async.orphan.threshold-minutes | Number of minutes without a heartbeat after which a RUNNING import job is considered orphaned and reset to QUEUED. | 5 |
| higson.studio.snapshot.async.orphan.interval-ms | How often (in ms) the orphan watcher checks for orphaned import jobs (fixed delay). | 60000 |
| higson.studio.snapshot.async.orphan.initial-delay-ms | Delay (in ms) before the orphan watcher starts after application launch. | 60000 |
| Deduplication | ||
| higson.studio.deduplication.enabled | Enables or disables the hard link feature. See Background Deduplication Process. | false |
| higson.studio.deduplication.job-enabled | Enables or disables the background deduplication process. | false |
| higson.studio.deduplication.job-interval | Interval between consecutive runs of the deduplication process (if enabled). Format: number followed by a unit (s, m, h, d). |
30m |
| higson.studio.deduplication.matrix.min-size | The minimum number of matrix rows required for a matrix to qualify for deduplication by the background process. | |
| AI Assistant (beta) | ||
| higson.studio.ai.features.enabled | Enables the AI Assistant — the Documentation Assistant chat panel and AI actions (Explain / Generate) in Functions and Decision Tables. When false, all AI controllers and adapters are not loaded. See AI Assistant Configuration. |
false |
| higson.studio.ai.features.thinking-budget | Global override for the reasoning budget of models that support reasoning mode. 0 disables reasoning, a positive value sets the token limit, empty value uses the default settings of each feature. |
|
| higson.studio.ai.provider.code | Unique identifier for the provider (e.g., vertex-ai, openai). |
|
| higson.studio.ai.provider.name | Display name of the provider, used in logs and the interface. | |
| higson.studio.ai.provider.type | Adapter type: VERTEX_AI or OPENAI_COMPATIBLE. |
|
| higson.studio.ai.provider.base-url | Base URL of the provider API. | |
| higson.studio.ai.provider.api-key | API key / access token. Required for OPENAI_COMPATIBLE. |
|
| higson.studio.ai.provider.auth-header-name | Name of the authentication header. | Authorization |
| higson.studio.ai.provider.auth-header-prefix | Prefix for the header value (with a trailing space). | Bearer |
| higson.studio.ai.provider.additional-headers | Map of additional headers appended to every request. | |
| higson.studio.ai.provider.connection-timeout | Connection timeout in seconds. | 10 |
| higson.studio.ai.provider.response-timeout | Timeout for waiting for a response in seconds. | 300 |
| higson.studio.ai.provider.read-timeout | Data read timeout in seconds. | 120 |
| higson.studio.ai.provider.vertex-project-id | Google Cloud project ID. Required when type is VERTEX_AI. |
|
| higson.studio.ai.provider.vertex-credentials-path | Path to the service account key file (JSON). If not set, Application Default Credentials (ADC) are used. Required when type is VERTEX_AI. |
|
| higson.studio.ai.model.name | Display name of the model. | |
| higson.studio.ai.model.model-id | Model identifier used in the provider API (e.g., gemini-2.5-flash, gpt-4o-mini). |
|
| higson.studio.ai.model.max-output-tokens | Maximum number of tokens the model can generate in a single response. | 4096 |
| higson.studio.ai.model.context-window | Context window size of the model. Informational value. | |
| higson.studio.ai.model.supports-streaming | Whether the model supports streaming responses. | true |
| higson.studio.ai.model.supports-json-mode | Whether the model supports structured JSON output mode. | false |
| higson.studio.ai.model.supports-tools | Whether the model supports tool-calling. Required by the Documentation Assistant. | true |
Runtime#
Available for Higson Runtime Spring Boot Starter or Higson Runtime REST apps
| Property Name | Description | Default Value |
|---|---|---|
| Database | ||
| higson.database.dialect | Database dialect to use. Available values: oracle, hsqldb, h2, mssql2012, postgresql, mysql. |
oracle |
| higson.database.url | JDBC connection URL. | THIS PROPERTY MUST BE SET AT SYSTEM START BY THE USER |
| higson.database.username | Username that Higson will use to connect to the database defined in higson.database.url. |
THIS PROPERTY MUST BE SET AT SYSTEM START BY THE USER |
| higson.database.password | Password that Higson will use to connect to the database defined in higson.database.url. |
THIS PROPERTY MUST BE SET AT SYSTEM START BY THE USER |
| higson.database.schema | Database schema wherein Higson tables exist. | |
| Environment | ||
| higson.runtime-rest.url | URL of Higson Runtime REST. | |
| Authentication | ||
| higson.runtime-rest.security.type | Defines security type for Runtime REST. Possible values: jwt, active-directory. When not set, basic authentication is enabled. |
|
| higson.security.jwt.secret-key | Secret key to decrypt Runtime REST token. | THIS PROPERTY MUST BE SET AT SYSTEM START BY THE USER |
| higson.security.active-directory.domain | Active Directory main root. | |
| higson.security.active-directory.url | Active Directory server URL. | |
| higson.security.active-directory.root-dn | Active Directory root domain. | |
| Watchers | ||
| higson.runtime.watcher.param-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.param-watcher-config.pause | Interval at which the watcher monitors the state of decision tables. | 3 |
| higson.runtime.watcher.param-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| higson.runtime.watcher.param-watcher-config.force | Time after which the watcher will force a full cache synchronization of decision tables. Currently only the param-watcher supports this setting. | 60 |
| higson.runtime.watcher.function-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.function-watcher-config.pause | Interval at which the watcher monitors the state of functions. | 3 |
| higson.runtime.watcher.function-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| higson.runtime.watcher.version-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.version-watcher-config.pause | Interval at which the watcher monitors the state of versions. | 3 |
| higson.runtime.watcher.version-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| higson.runtime.watcher.profile-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.profile-watcher-config.pause | Interval at which the watcher monitors the state of profiles. | 3 |
| higson.runtime.watcher.profile-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| higson.runtime.watcher.user-region-version-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.user-region-version-watcher-config.pause | Interval at which the watcher monitors the state of users’ perspective (in Higson Studio, set under the “My View” button). | 3 |
| higson.runtime.watcher.user-region-version-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| higson.runtime.watcher.domain-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.domain-watcher-config.pause | Interval at which the watcher monitors the state of the domain. | 3 |
| higson.runtime.watcher.domain-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| higson.runtime.watcher.domain-watcher-config.invalidate | Duration the domain value may remain unchanged in the cache. Works with domain-watcher-config.time-unit. |
24 |
| higson.runtime.watcher.domain-watcher-config.time-unit | Time unit for domain cache invalidation. Works with domain-watcher-config.invalidate. Possible values: HOURS, MINUTES, etc. |
HOURS |
| higson.runtime.watcher.dev-mode-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.dev-mode-watcher-config.pause | Interval at which the watcher monitors the state of objects modified in session. | 1 |
| higson.runtime.watcher.dev-mode-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| higson.runtime.watcher.schedule-runtime-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 10 |
| higson.runtime.watcher.schedule-runtime-watcher-config.pause | Interval at which the watcher monitors the state of the version timeline. | 10 |
| higson.runtime.watcher.schedule-runtime-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| higson.runtime.watcher.refresh-watcher-config.delay | Time after which the watcher starts following application launch [s]. | 15 |
| higson.runtime.watcher.refresh-watcher-config.pause | Checks each cached decision table (in-memory index). Evicts decision table if: - auto-refresh period has expired - max idle time exceeded |
10 |
| higson.runtime.watcher.refresh-watcher-config.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| Diagnostic Watchers | ||
| higson.runtime.watcher.diagnosticHeartbeatWatcherConfig.delay | Time after which the watcher starts following application launch [s]. Always active — cannot be disabled by higson.runtime.watchers.enabled=false. |
10 |
| higson.runtime.watcher.diagnosticHeartbeatWatcherConfig.pause | Interval at which the heartbeat watcher runs. | 3 |
| higson.runtime.watcher.diagnosticHeartbeatWatcherConfig.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| higson.runtime.watcher.diagnosticRuntimeMetricWatcherConfig.delay | Time after which the watcher starts following application launch [s]. Always active — cannot be disabled by higson.runtime.watchers.enabled=false. |
10 |
| higson.runtime.watcher.diagnosticRuntimeMetricWatcherConfig.pause | Interval at which the runtime metric watcher collects metrics. | 3 |
| higson.runtime.watcher.diagnosticRuntimeMetricWatcherConfig.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| higson.runtime.watcher.diagnosticFlushWatcherConfig.delay | Time after which the watcher starts following application launch [s]. Always active — cannot be disabled by higson.runtime.watchers.enabled=false. |
10 |
| higson.runtime.watcher.diagnosticFlushWatcherConfig.pause | Interval at which the flush watcher sends collected diagnostic data. | 3 |
| higson.runtime.watcher.diagnosticFlushWatcherConfig.errorPause | Duration for which the watcher is suspended after a watcher error occurs. | 30 |
| Other | ||
| higson.runtime.function.validate-arguments | Flag determining whether function argument data types should be validated before execution. | false |
| higson.runtime.normalization.throw-on-exception | Flag determining whether an exception should be thrown when a matrix value can’t be normalized. | false |
| higson.runtime.external-datasource.sql.names | List of external SQL data source names. | |
| higson.runtime.external-datasource.sql.%s.url | URL to data source. %s is a placeholder for the name of the data source. |
|
| higson.runtime.external-datasource.sql.%s.username | Username for data source. %s is a placeholder for the name of the data source. |
|
| higson.runtime.external-datasource.sql.%s.password | Password for data source. %s is a placeholder for the name of the data source. |
|
| higson.runtime.external-datasource.sql.%s.min-pool-size | Minimum size of connection thread pool. %s is a placeholder for the name of the data source. |
1 |
| higson.runtime.external-datasource.sql.%s.max-pool-size | Maximum size of connection thread pool. %s is a placeholder for the name of the data source. |
8 |
| higson.runtime.parameter.value-never-null | If true, decision tables return EmptyParamValue when no match is found; if false, decision tables return null. |
true |
| higson.runtime.ai-model.enabled | Enables the AI Model Source feature (ONNX-based decision tables). When false, the ONNX runtime is not initialized and decision tables backed by an AI model cannot be evaluated. Requires the com.microsoft.onnxruntime:onnxruntime dependency on the classpath. See the Implementation of AI in decision tables instruction. |
false |
| higson.runtime.watchers.enabled | Flag determining whether runtime watchers should start automatically. Does not affect diagnostic watchers (diagnosticHeartbeatWatcherConfig, diagnosticRuntimeMetricWatcherConfig, diagnosticFlushWatcherConfig) — those are always active. |
|
| Diagnostics | ||
| higson.runtime.diagnostic.profiler.enabled | Enables runtime profiling (call statistics collection for functions, flows, decision tables, and domain operations visible in the Diagnostic Panel). Enabling this property reduces runtime performance. Recommended for diagnostic purposes only — disable in production environments where performance is critical. | false |
Security#
| Version 4.0 | Version 4.1 |
|---|---|
| higson.security.jwt.access-token-lifetime.unit | higson.studio.security.token.generation.access-token-lifetime.unit |
| higson.security.jwt.access-token-lifetime.value | higson.studio.security.token.generation.access-token-lifetime.value |
| higson.security.jwt.authentication-server | higson.studio.security.token.generation.enabled |
| higson.security.jwt.algorithm | higson.studio.security.token.generation.algorithm |
| higson.security.password-encoder.name | higson.security.basic.password-encoder |
| higson.security.password-encoder.complexity | higson.security.basic.bcrypt.complexity |
| higson.security.jwt.refresh-token-lifetime.unit | higson.studio.security.token.generation.refresh-token-lifetime.unit |
| higson.security.jwt.refresh-token-lifetime.value | higson.studio.security.token.generation.refresh-token-lifetime.value |
| higson.security.jwt.secret-key | higson.security.jwt.secret-key |
| higson.security.jwt.persist-refresh-token | higson.studio.security.token.generation.persist-refresh-token |
| higson.security.password-encoder.name | higson.security.basic.password-encoder |
| higson.security.password-encoder.complexity | higson.security.basic.bcrypt.complexity |
Authentication
Standard / Username and Password#
No extra actions needed to use it, it is available by default.
SAML#
Configuration steps:
- Configure Tomcat to use HTTPS (if needed).
- Fill properties:
|
|
- Generate Studio metadata and import in your Identity Provider
On your IDP:
- Configure Identity Provider to send attributes with assertion response.
- Check that Identity Provider configuration for Assertion Consumer Service URL and Logout Service URL is correct.
Important! SAML Response signature must include message and assertions!
Attributes Mapping#
SAML Response must contain following attributes:
- Name ID (this is used as user login)
- firstname
- lastname
- roles
When a user logs into Higson Studio, their account is automatically created in the system with an external status.
Roles#
- if higson.studio.security.token.generation.authentication.saml.roles-origin=saml is specified roles are taken from assertion response therefore Identity Provider must be configured to send it with response. internal means Studio will take roles from database instead of SAML assertion response to authorize user.
Active Directory#
- Fill properties:
|
|
Requirements for Access Directory User#
Login - not empty, min size: 1, max size: 200
First name - not empty, min size: 1
Last name - not empty, min size: 1
E-mail address - if empty Higson generates default e-mail consistent with schema: ’login@local.com’
Roles - min one role consistent with Higson role.
Roles defined in Active Directory must be compatible with roles in Higson structure. When a user logs into Higson Studio, their account is automatically created in the system with an external status.
Hierarchy of Roles in Higson#
MPP_ADMIN - Higson Administrator
MPP_USER - Higson User
MPP_USER_READONLY - Readonly Higson User \
It is possible to create own roles in AD but remember to create same roles in Higson structure. It’s necessary to proper authentication process.
CAS#
Configuration steps:
- Configure Tomcat to use HTTPS.
- Fill properties:
|
|
When logging in using CAS, you must configure the corresponding users on the Higson Studio side. Roles are defined and managed on the Higson Studio side.
A refresh token is a special type of access key used to automatically renew a user session without the need to log in again. It is used together with an access token. It is used to ensure user convenience, as it means that users do not have to constantly log in to the application.
The following properties define the lifetime of tokens:
higson.studio.security.token.generation.access-token-lifetime.unit=Minutes
higson.studio.security.token.generation.access-token-lifetime.value=5
higson.studio.security.token.generation.refresh-token-lifetime.unit=Minutes
higson.studio.security.token.generation.refresh-token-lifetime.value=7
The refresh token has a longer lifespan and is used to obtain a new access token. The access token is included in requests and enables authorized access to the API. Once the access token expires, the browser automatically uses the refresh token to retrieve a new access token. If the refresh token also expires, the user will be logged out of the system. Modifying the access token lifetime affects how often it needs to be refreshed — in other words, how frequently the system must generate a new access token. Meanwhile, the refresh token lifetime determines how long a user can remain logged in, that is, how long they can obtain new access tokens without having to log in again.
It’s important to remember that when an automatic logout occurs, any unsaved changes will be lost.
JWT Based Authentication (Runtime Token)#
It is set by default.
The property higson.security.jwt.secret-key must be set in both Studio’s and client’s side
Runtime Rest application with same string sequence:
|
|
You can generate a new token in Studio. A view to see all existing tokens and to generate a new one can be found in Menu’s Tools tab.
When creating a new token, you can specify the expiry date. Admin users may also specify a user that a newly generated token will be assigned to.
To use generated token in REST API calls, you need to add an Authorization Header with the standard bearer format, such as
Authorization: Bearer your_jwt_token
Basic Authentication#
|
|
You can choose from the following password encoder security algorithms: bCrypt (default) or Pbkdf2
To select a Pbkdf2 algorithm, you must set higson.security.basic.password-encoder=Pbkdf2 property in the application.properties
You can choose the complexity of BCrypt algorithm by setting a property higson.security.basic.bcrypt.complexity with values
between 4 and 31 are accepted, 5 is used by default. Be careful, since the bigger the value the safer algorithm is, but the
performance impact is also increasing.
Active Directory#
|
|
Upgrade
This is wise to upgrade Higson applications (the Studio and Runtime) for a newer version as we are repairing bugs and adding new features, so let’s check how to do it in a few short steps. This article refers to patch installation.
IMPORTANT:
- As far higson-studio and higson-runtime are separate applications we truly recommend running them the same version.
- Higson Studio MUST BE STARTED FIRST! Higson Studio is managing the Database Schema!
Bump the Studio Application First#
Download Studio#
Firstly, download application from here. After filling the form, you will get mail with a link to your download page. Depending on your needs, download the file/files (probably you use a war file with your tomcat).
Shut Down Old Studio#
Turn off the Studio App. You probably want to stop all running applications which are using higson-runtime,
because we need to modify its database schema.
Remember to Create a Database Backup#
Due to the fact, there might occur database updates, it would be very helpful if you prepare a Higson’s database backup. Use a database client to create the backup. Do not use a snapshot (Higson Studio functionality), as snapshots do not store history.
Check out properties
Make sure that application properties are up to date.
Take a look at your property source (by default: {your_tomcat_dir}/conf/application.properties) and change them
regarding the table followed the link
Pay special attention to database connection properties.
Adjust ports
If necessary, modify the server.xml file (adjust ports as in previous version).
Start the Studio Application#
You should be able to see a standard login page
(by default: https://{serverUrl}/higson/app)
Bump the Runtime in Your Applications#
Since Runtime is available at Maven Central repositories, you should only bump its version at your building script, ie: build.gradle, pom.xml etc.
Developer License Requirement (version 4.3)#
Starting from version 4.3, a developer license is required on all non-production environments. Before completing the upgrade to version 4.3, ensure that a developer license has been obtained for each non-production environment.
To obtain a developer license, contact:
- Product Manager: oktawia.jakubik@decerto.com
- Sales team: lukasz.niedospial@higson.tech
Bump the Studio Application#
Understanding dependencies between applications:
- Higson Studio and Higson Runtime are separate applications but should run on the same version.
- Higson Studio must be started first, as it manages the database schema.
Download new Studio
The first step you should do is to head for new applications here. Search for version of 4.2
Shut down the Studio
Turn off the Studio App. You probably want to stop all running applications which are using higson-runtime,
because we need to modify its database schema.
Remember to create a database backup!
Due to the fact, there might occur database updates, it would be very helpful if you prepare a Higson’s database backup. Use a database client to create the backup. Do not use a snapshot (Higson Studio functionality), as snapshots do not store history.
Check out new properties
Make sure that applicatio properties are set up correctly.
Take a look at your property source (by default: {your_tomcat_dir}/conf/application.properties) and change them
regarding the table followed the link
Pay special attention to database connection properties and security properties.
Adjust ports
If necessary, modify the server.xml file (adjust ports as in version 4.0 or 4.1).
Start the Studio App
You should be able to see a standard login page
(by default: https://{serverUrl}/higson/app)
Bump the Runtime in Your Applications#
Since Runtime is available at Maven Central repositories, you should only bump its version at your building script, ie: build.gradle, pom.xml etc. Check out the new properties for Runtime App since there were a lot of changes.
Enabling a developer mode feature allows seeing all unpublished changes of a defined user by the Runtime application, which leads to faster development. Developer mode is disabled by default.
Enabling Devmode Programmatically#
|
|
Enabling Devmode Using Property File#
Configuration that is needed in application.yml to enable developer mode:
|
|
Using HigsonEngineFactory excludes a possibility to use application.yml.
The Higson CLI Maven Plugin (higson-cli-maven-plugin) allows you to synchronize the business logic configuration
stored in your project repository with a running Higson Studio instance directly from the command line or CI/CD pipeline.
The plugin uses the Studio snapshot API to perform pull (download) and push (upload) operations.
This eliminates the need to use the Higson Studio GUI for environment migrations and enables version-controlled, automated deployments of business rules configuration.
Prerequisites:
- Java 17
- Maven 3.x
- Running Higson Studio instance (4.2.x)
Quick Start#
Add the plugin to your pom.xml:
|
|
Pull the snapshot from Studio into your local directory:
mvn higson-cli:pull
Push local changes back to Studio:
mvn higson-cli:push
Authentication#
The plugin supports two mutually exclusive authentication methods.
Token (recommended)#
Provide a pre-obtained Bearer token directly. No login request is made. Recommended for CI/CD pipelines and automated environments.
|
|
Pass the token at build time:
mvn higson-cli:pull -DhigsonToken=eyJhbGciOiJIUzI1NiJ9...
The token must have the SNAPSHOT_DOWNLOAD permission for pull operations and SNAPSHOT_UPLOAD for push operations.
Studio Integration Tokens can be managed in Settings → Users.
Username and password#
The plugin will call the Studio login endpoint (/api/login) and obtain a Bearer token automatically.
Suitable for development environments. Do not hardcode credentials in pom.xml —
use Maven property references (${higsonPassword}) resolved from ~/.m2/settings.xml or CI/CD secret injection.
|
|
Pull#
The pull goal downloads a snapshot from Studio and writes the files into higsonSnapshotDir.
After extraction, the plugin prints a per-file status to the console: new (file did not exist locally),
modified (content changed), or skipped (file is unchanged).
If higsonSnapshotDir does not exist, the plugin creates it automatically.
mvn higson-cli:pull
Full goal reference:
mvn io.higson:higson-cli-maven-plugin:pull
Pull options#
All pull options are optional. When omitted, their default values apply.
|
|
Top-level pull options#
| Parameter | Type | Default | Description |
|---|---|---|---|
tags |
boolean | true |
Include tags in the downloaded snapshot. |
domains |
boolean | true |
Include domain configuration in the downloaded snapshot. |
profileWithContext |
boolean | true |
Include profile context data. |
sourceProfileCodes |
list of strings | empty | Limit the export to the listed profile codes. When empty, all profiles are included. |
eol |
string | none | Line ending conversion applied to all text files after download. Available values: LF, CR, CRLF. When not set, files are copied as-is. |
excludes |
list of glob patterns | empty | Files matching any of the patterns are not written to higsonSnapshotDir. |
Functions filtering#
| Parameter | Type | Default | Description |
|---|---|---|---|
nameStartsWith |
list of strings | empty | Include only functions whose names start with any of the provided prefixes. When empty, all functions are included. |
filterByTags |
list of strings | empty | Include only functions that have at least one of the listed tags assigned. When empty, tag filtering is not applied. |
onlyFromActiveSession |
boolean | false |
When true, includes only functions that have been modified in the currently active session. |
Decision tables filtering#
| Parameter | Type | Default | Description |
|---|---|---|---|
nameStartsWith |
list of strings | empty | Include only decision tables whose names start with any of the provided prefixes. When empty, all decision tables are included. |
filterByTags |
list of strings | empty | Include only decision tables that have at least one of the listed tags assigned. When empty, tag filtering is not applied. |
onlyFromActiveSession |
boolean | false |
When true, includes only decision tables that have been modified in the currently active session. |
Line ending conversion (EOL)#
By default, no line ending conversion is applied (files are copied as-is from the Studio response).
If you work on Windows with git config core.autocrlf=true, every pulled file may appear as modified
because of line ending differences. Setting <eol>CRLF</eol> normalises all pulled text files to Windows
line endings before writing them to disk, preventing false diffs.
| Value | Line ending | Platform |
|---|---|---|
LF |
\n |
Unix / Linux / macOS |
CR |
\r |
Classic macOS |
CRLF |
\r\n |
Windows |
File exclusions#
Use excludes to prevent specific files from being overwritten on pull.
Each entry is a glob pattern evaluated against the relative path of the file inside the snapshot.
|
|
Push#
The push goal zips the contents of higsonSnapshotDir and uploads it to Studio via the snapshot import endpoint.
Imported changes land in a new session — a set of pending changes that must be explicitly published before they
affect the live environment. See Sessions for how to review and publish sessions in Studio.
higsonSnapshotDir must exist and must not be empty.
mvn higson-cli:push
Publish the session immediately after a successful import:
mvn higson-cli:push -DautoCommit=true
Full goal reference:
mvn io.higson:higson-cli-maven-plugin:push
mvn io.higson:higson-cli-maven-plugin:push -DautoCommit=true
autoCommit#
| Parameter | Type | Default | Description |
|---|---|---|---|
autoCommit |
boolean | false |
When true, the imported snapshot is automatically published without requiring manual session approval in Studio. |
Push options#
The pushOptions block controls how Studio handles elements during import.
All parameters are optional and default to false.
|
|
These options mirror the Remove not in snapshot, Force Delete, and Search Within Parameter Matrix options available in the Studio snapshot upload UI. Refer to the Snapshot article for a detailed explanation of each behaviour.
Decision table configuration#
| Parameter | Type | Default | Description |
|---|---|---|---|
removeNotIncludedInSnapshot |
boolean | false |
Delete decision tables present in Studio but absent from the snapshot. Deletion respects the same name/tag filters that were used during export. |
forceDelete |
boolean | false |
Force delete decision tables even when they are referenced by other elements. May cause errors in dependent elements. |
searchWithinMatrix |
boolean | false |
When checking for references before deletion, also search inside decision table matrices (not only domain elements and IN-level value sources). |
Function configuration#
| Parameter | Type | Default | Description |
|---|---|---|---|
removeNotIncludedInSnapshot |
boolean | false |
Delete functions present in Studio but absent from the snapshot. Deletion respects the same name/tag filters that were used during export. |
forceDelete |
boolean | false |
Force delete functions even when they are referenced by other elements. May cause errors in dependent elements. |
searchWithinMatrix |
boolean | false |
When checking for references before deletion, also search inside decision table matrices. |
Domain configuration#
| Parameter | Type | Default | Description |
|---|---|---|---|
removeNotIncludedInSnapshot |
boolean | false |
Delete domain elements present in Studio but absent from the snapshot. |
Import result#
After a successful push, the plugin prints an import summary to the console grouped by element type (Decision Tables, Functions, Domain, Profiles, Tags, Tests, Test Packages). A detailed log is also written to the log file (see Log files).
The build fails if Studio reports any import error. A build with warnings completes successfully.
Log files#
The plugin writes operation logs to disk after each pull or push.
logFilePath sets the base path; the plugin automatically appends an operation suffix before writing:
- Pull:
higson-cli-pull.log - Push:
higson-cli-push.log
The default base is ${basedir}/higson-cli, which results in ${basedir}/higson-cli-pull.log and
${basedir}/higson-cli-push.log.
To use a custom base path, set logFilePath in the plugin configuration:
|
|
Or override at build time:
mvn higson-cli:push -DlogFilePath=/path/to/custom/higson.log
The pull log contains the full export request parameters and a per-file change summary (new, modified, skipped). The push log contains per-element-type import statistics and the status (imported, skipped, error, warning, deleted) for every individual element.
Full configuration reference#
The example below includes all available parameters with their default values.
|
|
Model Context Protocol (MCP) is an open standard developed by Anthropic that enables AI tools — such as Claude Desktop, Cursor, VS Code with GitHub Copilot, or other AI-powered development environments — to connect to external systems and services. MCP defines a uniform interface through which AI assistants can query data, execute operations, and interact with connected applications directly from within the development environment.
Higson provides a built-in MCP server that exposes Higson Studio’s capabilities to MCP-compatible AI tools. Through this integration, an AI assistant can interact with the Higson environment — for example, retrieve business configuration or inspect decision tables — without leaving the IDE.
Enabling the MCP Server#
To enable the Higson MCP server, add the following properties to your application.yml:
|
|
The studio-token-secured-paths property defines which Studio API paths require a valid Studio token for
authentication. The MCP endpoints (/mcp, /mcp/sse, /mcp/messages/**) must be included to ensure that
only authorized AI clients — authenticated with a token generated in Studio — can connect to the MCP server.
| Property | Description | Default value |
|---|---|---|
higson.studio.mcp.enabled |
Enables the MCP server. When set to false, the MCP endpoint is not exposed. |
false |
higson.studio.security.token.verification.studio-token-secured-paths |
Comma-separated list of URL paths secured by Studio token verification. | — |
Connecting an AI Client to Higson MCP#
Step 1 — Generate a Token in Studio#
- Log in to Higson Studio:
http://localhost:38080/higson - Go to the Licences and tokens tab (key icon in the top menu).
- Click New token.
- Set the following fields:
- User:
admin(or any other user) - Type:
Studio - Expiration Date: any future date (e.g.,
2049-02-02)
- User:
- Click Generate token.
- Copy the generated JWT token.
Step 2 — Configure the MCP Client#
Add the following entry to your AI client’s MCP configuration file:
|
|
Replace <YOUR_TOKEN> with the token copied in Step 6.
Replace http://localhost:38080 with the actual address of your Higson Studio instance.
Configuration File Locations#
| Client | Configuration file |
|---|---|
| Claude Desktop (macOS) | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Claude Desktop (Windows) | %APPDATA%\Claude\claude_desktop_config.json |
| Cursor | .cursor/mcp.json in the project directory, or ~/.cursor/mcp.json globally |
| VS Code (GitHub Copilot) | .vscode/mcp.json in the project directory |
Example: Full Claude Desktop Configuration#
|
|
Available Tools#
The Higson MCP server exposes the following tools to AI clients, organized by domain:
Decision Tables (Parameters)#
| Tool | Description |
|---|---|
higson_list_decision_tables |
List all decision tables |
higson_get_decision_table |
Get table definition (columns, types, matchers) |
higson_get_decision_table_matrix |
Retrieve data rows |
higson_create_decision_table |
Create a new decision table |
higson_update_decision_table |
Update table structure |
higson_delete_decision_table |
Delete one or more tables |
higson_rename_decision_table |
Rename a table |
higson_get_decision_table_history |
View change history |
higson_open_decision_table |
Open a table |
higson_update_decision_table_matrix |
Update data rows |
higson_export_decision_tables |
Export decision tables |
higson_import_decision_tables |
Import decision tables |
Context Types#
| Tool | Description |
|---|---|
higson_list_context_types |
List all context types |
higson_get_context_type |
Get a context type definition |
higson_get_context_type_paths |
Get available paths for a context type |
higson_create_context_type |
Create a new context type |
higson_update_context_type |
Update a context type |
higson_delete_context_type |
Delete a context type |
higson_clear_context |
Clear context data |
higson_export_context |
Export context types |
higson_import_context |
Import context types |
Domain Configuration#
| Tool | Description |
|---|---|
higson_get_domain_configuration_tree |
Get the full domain configuration tree |
higson_get_domain_element_details |
Get details of a domain element |
higson_get_domain_collection_details |
Get details of a domain collection |
higson_create_domain_element |
Create a new domain element |
higson_update_domain_element |
Update a domain element |
higson_delete_domain_element |
Delete a domain element |
higson_set_domain_attribute |
Set a domain attribute value |
higson_export_domain_configuration |
Export domain configuration |
higson_import_domain_configuration |
Import domain configuration |
higson_get_domain_definition |
Get the domain type definition |
higson_update_domain_type |
Update a domain type |
higson_delete_domain_type |
Delete a domain type |
higson_export_domain_definition |
Export the domain definition |
higson_import_domain_definition |
Import a domain definition |
higson_delete_all_domain_types |
Delete all domain types |
Flows#
| Tool | Description |
|---|---|
higson_list_flows |
List all flows |
higson_get_flow |
Get a flow definition |
higson_create_flow |
Create a new flow |
higson_update_flow |
Update a flow |
higson_rename_flow |
Rename a flow |
higson_get_flow_history |
View flow change history |
higson_delete_flow |
Delete a flow |
higson_export_flows |
Export flows |
higson_import_flows |
Import flows |
Functions#
| Tool | Description |
|---|---|
higson_list_functions |
List all functions |
higson_get_function |
Get a function definition |
higson_create_function |
Create a new function |
higson_update_function |
Update a function |
higson_delete_function |
Delete a function |
higson_rename_function |
Rename a function |
higson_get_function_history |
View function change history |
higson_export_functions |
Export functions |
higson_import_functions |
Import functions |
Profiles & Regions#
| Tool | Description |
|---|---|
higson_list_profiles |
List all profiles |
higson_assign_to_profile |
Assign an entity to a profile |
higson_detach_from_profile |
Detach an entity from a profile |
higson_list_regions |
List all regions |
higson_attach_to_region |
Attach an entity to a region |
higson_detach_from_region |
Detach an entity from a region |
Snapshots#
| Tool | Description |
|---|---|
higson_export_snapshot |
Export a full configuration snapshot |
higson_import_snapshot |
Import a configuration snapshot |
higson_get_snapshot_import_job |
Get the status of a snapshot import job |
Tests#
| Tool | Description |
|---|---|
higson_list_tests |
List all tests |
higson_get_test |
Get a test definition |
higson_run_test |
Run a test |
higson_create_test |
Create a new test |
higson_update_test |
Update a test |
higson_delete_test |
Delete a test |
higson_export_tests |
Export tests |
higson_import_tests |
Import tests |
Other#
| Tool | Description |
|---|---|
higson_search |
Search across Higson entities |
higson_get_version |
Get the Higson version |
higson_generate_runtime_request |
Generate a runtime request |
higson_list_work_sessions |
List active work sessions |
higson_publish_changes |
Publish pending changes |
higson_reject_changes |
Reject pending changes |
Verification#
After saving the configuration, restart your AI client. Higson should appear as an available tool (MCP server).
You can test the connection by sending a prompt in the chat:
“List available Higson tools” or “Show me the decision tables from Higson”
Claude Code Skills#
Claude Code skills are pre-written prompt templates stored as Markdown files in the .claude/skills/ directory
of a project. Each skill defines a slash command (e.g., /higson:review) that a developer can invoke in Claude Code
to trigger a specific, repeatable AI-assisted workflow.
Why Use Skills#
Skills are useful when a team wants to standardize how AI assistance is used across a project. Instead of writing the same prompt from scratch each time, a developer invokes a named skill and Claude Code executes the predefined workflow. This improves consistency, reduces onboarding time, and ensures that AI-assisted tasks follow the same quality standards across the team.
Using Skills in Claude Code#
To invoke a skill, type the skill’s slash command in the Claude Code input field:
/higson:review
Claude Code loads the corresponding skill file and runs the workflow defined in it.
Adding Skills to a Project#
Skills are stored as .md files in the .claude/skills/ directory:
.claude/
skills/
review.md
validate.md
Each file contains the prompt template for that skill. The filename (without the .md extension) becomes
the skill name used in the slash command. For example, review.md is invoked as /higson:review
(where higson is the project namespace defined in Claude Code settings).
The Higson AI Assistant is a beta feature that integrates an LLM provider directly into Higson Studio. Before the AI Assistant can be used, two steps are required: enabling the feature flag and configuring an LLM provider with a model.
Enabling the AI Assistant#
| Property | Description | Default value |
|---|---|---|
higson.studio.ai.features.enabled |
Enables the AI Assistant — the Documentation Assistant chat panel and AI actions (Explain / Generate) in Functions and Decision Tables. When false, all AI controllers and adapters are not loaded. |
false |
higson.studio.ai.features.thinking-budget |
Global override for the reasoning budget of models that support reasoning mode. 0 disables reasoning, a positive value sets the token limit, empty value uses the default settings of each feature. |
— |
Configuring an LLM Provider#
The provider is configured under higson.studio.ai.provider.
Provider Properties#
| Property | Required | Description | Default value |
|---|---|---|---|
higson.studio.ai.provider.code |
yes | Unique identifier for the provider (e.g., vertex-ai, openai). |
|
higson.studio.ai.provider.name |
yes | Display name of the provider, used in logs and the interface. | |
higson.studio.ai.provider.type |
yes | Adapter type: VERTEX_AI or OPENAI_COMPATIBLE. |
|
higson.studio.ai.provider.base-url |
yes | Base URL of the provider API. | |
higson.studio.ai.provider.api-key |
for OPENAI_COMPATIBLE |
API key / access token. | |
higson.studio.ai.provider.auth-header-name |
no | Name of the authentication header. | Authorization |
higson.studio.ai.provider.auth-header-prefix |
no | Prefix for the header value (with a trailing space). | Bearer |
higson.studio.ai.provider.additional-headers |
no | Map of additional headers appended to every request. | |
higson.studio.ai.provider.connection-timeout |
no | Connection timeout in seconds. | 10 |
higson.studio.ai.provider.response-timeout |
no | Timeout for waiting for a response in seconds. | 300 |
higson.studio.ai.provider.read-timeout |
no | Data read timeout in seconds. | 120 |
higson.studio.ai.provider.vertex-project-id |
for VERTEX_AI |
Google Cloud project ID. | |
higson.studio.ai.provider.vertex-credentials-path |
for VERTEX_AI |
Path to the service account key file (JSON). If not set, Application Default Credentials (ADC) are used. |
vertex-project-idandvertex-credentials-pathapply only to theVERTEX_AIadapter.api-keyapplies only toOPENAI_COMPATIBLE. All other provider and model properties are shared between both adapter types.
Model Properties#
| Property | Required | Description | Default value |
|---|---|---|---|
higson.studio.ai.model.name |
yes | Display name of the model. | |
higson.studio.ai.model.model-id |
yes | Model identifier used in the provider API (e.g., gemini-2.5-flash, gpt-4o-mini). |
|
higson.studio.ai.model.max-output-tokens |
no | Maximum number of tokens the model can generate in a single response. | 4096 |
higson.studio.ai.model.context-window |
no | Context window size of the model. Informational value. | |
higson.studio.ai.model.supports-streaming |
no | Whether the model supports streaming responses. | true |
higson.studio.ai.model.supports-json-mode |
no | Whether the model supports structured JSON output mode. | false |
higson.studio.ai.model.supports-tools |
no | Whether the model supports tool-calling. Required by the Documentation Assistant. | true |
The Documentation Assistant requires a model with
supports-tools: true. Models that do not support tool-calling can still be used for simpler actions such as Explain and Generate.
See Also#
If you want to connect an external AI client (such as Claude Desktop, Cursor, or VS Code) to Higson instead of using the built-in AI Assistant, see Enabling the MCP Server.