Learn R Programming

openmpp

The goal of openmpp is to provide a programmatic interface to the OpenM++ API directly from R to simplify creating scenarios, running models, and gathering results for further processing.

Installation (R Package)

You can install the CRAN version of openmpp with:

install.packages("openmpp")

Or, you can install the development version of openmpp from GitHub with:

# install.packages("remotes")
remotes::install_github("mattwarkentin/openmpp")

Installation (OpenM++)

If you do not have access to an existing OpenM++ server, you can download and install OpenM++ locally and run a local server on your workstation. The openmpp package can then connect to this local server instance.

Download

For most users, the best way to install OpenM++ locally is to download the pre-compiled binaries. To install OpenM++, download and unzip the “Source code and binaries” appropriate for your operating system. The latest release of OpenM++ can be found here: https://github.com/openmpp/main/releases/latest. Pre-compiled binaries are available for Mac (Intel and Arm), Windows, and several common Linux distributions (Debian, Ubuntu, RedHat).

NOTE: Windows may allow you to view the contents of the zip directory without extracting, however, the files must be extracted for the installation to function properly.

Running OpenM++ on Windows

Enter the OpenM++ directory using the File Explorer. Right-click anywhere inside the folder and select “Open in Terminal”.

In the Windows Terminal, enter the following command:

.\bin\oms.exe

This will start the process responsible for running the OpenM++ web service (OMS). Note that the local host address will be printed in the console and is the address used by the openmpp R package to communicate with the API. This local host address will be set as the OPENMPP_LOCAL_URL. See the Usage section for more details.

Running OpenM++ on MacOS

Open a new MacOS Terminal window (either by using Spotlight Search or by navigating to “Applications” and then “Utilities” in Finder).

After unzipping the downloaded directory in Finder, drag the folder into the terminal and press Enter. This will change your active directory to the OpenM++ folder.

Enter the following command into the terminal:

bin/oms

Similar to the Windows installation, the web service (OMS) will initiate and the local host address will be shared with the R package for API communication.

Usage

The openmpp package contains many functions that provide access to nearly every OpenM++ REST API endpoint. However, users of this package will typically only use a smaller set of functions for most common tasks.

User Authentication

Each user is suggested to set their local or remote host address (i.e., URL) for the OpenM++ API in their global or project-specific .Renviron file in order for the openmpp package to authenticate and communicate with the API on behalf of the user. You can pass the URL directly to the functions that create the connections but it is our suggestion to declare the URL in the .Renviron file alongside other credentials described below.

If you are working in an IDE (e.g., Positron, RStudio), you may consider using the following function usethis::edit_r_environ() to open your .Renviron file for editing. Note that you will need to restart your R session after editing the file for the effect to take place.

Local API

For an API running locally, set the following environment variable in your .Renviron file:

OPENMPP_LOCAL_URL=http://localhost:XXXX

Where XXXX is the four digits corresponding to your specific local host address for this service (typically 4040 is used by default). The local host address is printed to the console when starting the OpenM++ web service in the terminal.

Once the environment variable is set, users may register a local API connection in their R scripts with:

library(openmpp)
use_OpenMpp_local()

Custom API

The methods for building a connection to a remote or custom API has changed as of version 0.0.2 of this package. This internal rewrite was done to enable more flexibility to define custom connections where the user provides the tooling to build requests and authenticate (if required).

This new interface for custom API connections is through the use of use_OpenMpp_custom(). This function has a single argument, req, which should be a function that, when called, returns a httr2_request object. At a minimum, this function should build the start of the request (with httr2::request()).

Once a user defines this custom function, they can provide it to use_OpenMpp_custom(). For example, the following code would replicate the local API connection:

library(openmpp)

custom_req <- function(url = Sys.getenv('OPENMPP_LOCAL_URL')) {
  httr2::request(url)
}

use_OpenMpp_custom(custom_req)

The simple example presented above could be extended to handle user authentication or to add headers, cookies, or other data to the request.

See ?use_OpenMpp_custom for more information.

Main Functions

  • Functions for accessing tables of models, worksets, or model runs

    • get_models()

    • get_worksets() / get_scenarios()

    • get_model_runs() / get_runs()

  • Functions for creating new worksets or scenarios

    • create_scenario() / create_workset()
  • Functions for loading models, worksets, or model runs

    • load_model()

    • load_workset() / load_scenario()

    • load_model_run() / load_run()

    • load_model_runs() / load_runs()

  • Functions for deleting worksets or model runs

    • delete_workset() / delete_scenario()

    • delete_model_run() / delete_run()

Models, Scenarios, Runs, and RunSets

There are 4 main classes you will work with when using the openmpp package: OpenMppModel, OpenMppWorkset, OpenMppModelRun, and OpenMppModelRunSet. Each of these are R6 classes. R6 is an encapsulated object-oriented programming (OOP) system for R. Use the load_*() set of functions to load a model, workset/scenario, model run, or set of model runs into memory.

Instances of each of these 4 classes have methods (i.e., functions) and fields (i.e., data) associated with them. You can access these functions and data using the standard $ subset operator (e.g., obj$function() or obj$data).

Why use R6? We chose to use the R6 OOP as we believe it can simplify the ability for the R package to communicate with OpenM++ to ensure that all changes made to the microsimulation objects in the R session are propagated and synchronized with the OpenM++ database. Encapsulated OOP allows the internal state of the object (i.e., the connection to the actual object in the OpenM++ database) to be accessed and modified through well-defined and high-level methods, rather than directly manipulating the data with low-level function calls. This approach enforces data integrity, improves code readability, and simplifies maintenance by abstracting away the implementation details of an object and preventing unintended modifications to its state. More information about R6 can be found here.

Developing New Models

Developing new microsimulation or agent-based models in OpenM++ is beyond the scope of this package. In-depth information on model development can be found here: https://github.com/openmpp/openmpp.github.io/wiki/Model-Development-Topics.

Contributor Guidelines

Contributions to this package are welcome. The preferred method of contribution is through a GitHub pull request. Before contributing, please file an issue to discuss the idea with the project team. More details on contributing can be found in the CONTRIBUTING document.

Acknowledgments

We gratefully acknowledge the authors and maintainers of OpenM++ for developing and sustaining the open-source modeling platform that makes this work possible. Their efforts to build, document, and support OpenM++ have provided a robust foundation for microsimulation research and for the development of tools such as this package.

Code of Conduct

Please note that the openmpp project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

Copy Link

Version

Install

install.packages('openmpp')

Monthly Downloads

162

Version

0.0.2

License

MIT + file LICENSE

Issues

Pull Requests

Stars

Forks

Maintainer

Matthew T. Warkentin

Last Published

February 20th, 2026

Functions in openmpp (0.0.2)

create_task

Update Modeling Tasks
get_workset_param

Read Parameters
get_user_views

Manage OpenM++ User Settings
load_model

OpenM++ Model Class
initiate_model_download

Download Model, Model Run Results, or Input Parameters
load_model_run

OpenM++ ModelRun Class
initiate_run_upload

Upload Model Runs or Worksets
get_workset

Model Workset Metadata
is_compatible

Are data frames compatible?
get_service_config

OpenM++ Model Run Jobs and Service State
run_model

Run Models and Monitor Progress
set_workset_readonly

Update Workset Metadata
use_OpenMpp_local

OpenM++ Local API Connection
use_OpenMpp_custom

OpenM++ Custom API Connection
get_user_files

Manage OpenM++ User Files
opts_run

Run Configuration Options
openmpp-package

openmpp: Programmatic Interface to 'OpenM++'
load_workset

OpenM++ Workset Class
load_model_runs

OpenM++ ModelRunSet Class
touch_model_profile

Update Model Profile
use_OpenMpp_CPAC

OpenM++ CPAC API Connection
delete_model_run

Update Model Runs
get_run_microdata

Read Run Microdata
get_model_lang_list

Model Extras
create_scenario

Manage Model Scenarios
get_model_run

Model Run Results Metadata
get_model_task

Modeling Task Metadata
get_model

Model Metadata
get_run_table

Read Output Tables
admin_models_refresh

OpenM++ Administrative Tasks