arrow-left

Only this pageAll pages
gitbookPowered by GitBook
triangle-exclamation
Couldn't generate the PDF for 127 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

Monolith

Monolith Resources

Loading...

Monolith Features

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Monolith API

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Getting Started

hashtag
Welcome to the Monolith documentation site!

The documentation for Monolith is currently a work in progress so please be patient while we add new documentation for Monolith over time.

Basic License Terms

Monolith is licensed on a per user per year basis.

Pricing information for Monolith can be found here: Pricing Pagearrow-up-right

hashtag
User Provisioning

When you purchase Monolith - your purchase includes a limit on how many active users you can have at any one time.

For Example: If you purchase Monolith with 5 active users, this means that you can have 5 active user accounts in Monolith. The users associated with these accounts can log into Monolith from anywhere and from as many different devices as they want.

Inactive users will not be able to access Monolith.

hashtag
User Terms

Account sharing is not allowed in our licensing terms, however, exceptions to this rule can be made on a case-by-case basis.

hashtag
License Expiration

If you choose not to renew your Monolith subscription, your Monolith access will revert to "Read-Only" mode. You will still have access to your Monolith data, but you will no longer be able to add new data or edit current data.

Your data will remain in Monolith for up to a year, after a year, we may permanently destroy any data still stored within our servers.

hashtag
Data Export

An export of your data in Monolith can be requested at any time by making a request to [email protected].

The data export will consist of a SQL dump file and a ZIP file that contains files uploaded to Monolith.

Please allow up to 2 weeks to receive your data export.

Accessing Monolith

Monolith can be accessed in two ways: Web Browser and Monolith Desktop.

hashtag
Monolith Web App

Monolith can be accessed from web browsers such as Google Chrome, Firefox, and Microsoft Edge via one of the following URLs:

chevron-rightUnited States and North Americahashtag

On-Premises Deployments

Monolith can be deployed on-premises and in your IT environment

Monolith UI Features

Cloud Security

Hardware Integrations

Monolith supports integration with various hardware devices such as Signature pads, USB barcode scanners, and Dymo Label Printers

Printer Recommendations

Monolith works exclusively with DYMO printers to print labels. Here are printer model recommendations:

DYMO LabelWriter 550 Turboarrow-up-right

DYMO LabelWriter 5XLarrow-up-right

Scanner Recommendations

Monolith works well with USB based scanners. Here is the scanner we recommend to use with Monolith.

Tera Pro 8100 Wireless Barcode Scannerarrow-up-right

This scanner conectst via Bluetooth or USB dongle, works with Windows and MacOS, scans barcodes and QR codes, and has several other useful features.

Case Reports

Monolith Case Reports

Audits

Audits allow your team to reconcile physical items under your control with their digital references in Monolith.

You can create audits to check and verify the locations and details of items currently recorded within your Monolith database.

Using a scanner

Settings

Relay Settings

hashtag
Configuring your Relay Tenant

The Relay settings page has 4 tabs: Basic Details, User Management, Instructions, and Custom Field Options.

Backups

Monolith On-premises deployments do not include a native backup solution.

The customer is responsible for creating and managing backups for data stored in the Monolith deployment.

The customer should set up a backup system that creates backups of the "data" folder maintained by the Monolith server. A backup solution for the MySQL Monolith database should also be implemented. The MySQL backup process should create something similar to SQL dumps of the databases stored by Monolith in MySQL.

Editor Templates

Coming Soon

Cases API

Task Templates

Using External MySQL Database

To use an external database instead of using the MySQL Docker container that is included with the default Monolith deployment, just set the following values in the .env file to the connection details for your external MySQL database:

MONOLITH_DB_NAME=
MONOLITH_DB_USER=
MONOLITH_DB_PORT=
MONOLITH_DB_HOST=
MONOLITH_DB_PASSWORD=

Use this if you are a customer in North America:

https://monolith-app.monolithforensics.comarrow-up-right

chevron-rightUnited Kingdom | Europehashtag

Use this if you are a customer in the UK or Europe:

https://monolith-app.monolithforensics.co.ukarrow-up-right

circle-info

Note: All new trials start in the US/NA Monolith server, so if you are trialing Monolith from Europe, you should use the US/NA server. Once you become a customer, we will deploy your Monolith tenant to our UK server.

hashtag
Monolith Desktop

Monolith be used as a desktop application called "Monolith Desktop". This app can be installed on MacOS and Windows Operating Systems.

You can download Monolith Desktop here:

Monolith Data

Once deployed, Monolith will store data in a folder called "data". This folder contains log files, files uploaded to Monolith, files uploaded to Relay, and database files generated by MySQL.

This data folder is important to maintain and create backups as the data that you store in Monolith will reside in this location.

Monolith Data Folder

Update MySQL Container

When running MySQL in Docker or as a container, you may need to update the version of MySQL from time to time.

hashtag
Ex: Update from MySQL 8.0.16 to 8.0.31 -

To update MySQL within Docker using Docker compose, you need to update your "docker-compose.yml" file.

hashtag
1 - Edit "docker-compose.yml" file:

Find this line in the MySQL block:

Update the MySQL version in this line to the next version:

This will tell Docker which version of MySQL to use when deploying Monolith.

hashtag
2 - Redeploy Monolith

Redeploy Monolith using the standard Docker compose command syntax:

This will stop the current Monolith deployment and restart it fresh containers. You should see the new version of MySQL download as a Docker image during this process.

Once redeployed, MySQL will go through a breif process of updating itself that may last a minute or two, so it may take a minute or two for Monolith to be available for use.

hashtag
Conclusion

After completing steps 1 and 2, you should have a new version of MySQL installed and deployed for use with your Monolith deployment.

Manually Update User Email

If a user's email has changed and you need to update it in Monolith, the change must be made directly in the Monolith database.

Here are the steps to make that change.

Install MySQL Workbench, open it, and create a connection to your Monolith database.

Open the Monolith database connection in MySQL workbench.

Navigate to your Monolith Database under the "schemas" tab and expand the schema and tables list. The Monolith db is usally called "monolith_db".

Scroll to the "users" table and open the table in Workbench to reveal the user records.

Find the user record that you want to update and click into that user's email column. Then type in the new email.

Click the "apply" button at the bottom right in Workbench, then click apply again in the confirm dialog that appears.

Once this is completed, the user's email has been updated and they can start logging into Monolith with that email address.

hashtag
Watch the email update process:

Signature Tablets

Monolith can be integrated with Topaz Signature tablets.

hashtag
Current Tested and supported models:

  • Topaz T-S460-HSB-R model signature pad

circle-info

Other Topaz pads may work, but have not been tested.

hashtag
Tablet Setup:

You must install the Topaz SigWeb software on the host system to use this feature. You can download the software from the Topaz website:

circle-info

This feature only works on Windows systems.

Template Examples

hashtag
Standard Monolith Report

This is an example of the standard report that Monolith has generated automatically. This is the templated form. It contains examples of how to use template variables, loop syntax, tables, and evidence photos.

file-download
102KB
Standard Monolith Report.docx
arrow-up-right-from-squareOpen

hashtag
Chain of Custody with Signatures

This is a simple template that shows how to output the chain of custody for an item with signature images.

Viewing and Accessing Audits

circle-info

Currently, audits are only accessible by Monolith user with the "Admin" role. This will likely be updated in the future.

Audits in Monolith can be viewed by clicking the "Audits" section in the Monolith sidebar under "Evidence Management".

Within the "Audits" section, audits are listed in a standard Monolith table.

An audits can be viewed and accessed by clicking the name of an audit within the table, which should be highlighted as a blue navigation link.

Organization Info

Customize your Monolith Account

In this section you can add additional details to your organization's profile including name, address details, contact information, and website.

Here you are also able to change the default Monolith logo to the logo of your organization.

Custom Field Options

Enable custom fields you would like accessed in Relay requests

Monolith allows you to enable Custom Fields for Inquiry and Evidence Items for Relay users making request. Once a field is enabled, it is viewable by all Relay requesters.

Custom Inquiry Fields: Allows Relay requesters to provide additional inquiry details with their request

Custom Evidence Fields: Allows users to provide additional details about evidence items associated with their request.

Login & 2FA

hashtag
Login

You can log into Monolith using your account email and password.

hashtag

SSO Login

Log into Monolith using your organization's Single Sign On provider.

If your organization has purchased and setup SSO with Monolith, you will be able to log in with your SSO account.

When you type your email into the Monolith Login screen, Monolith checks your email domain and resolves it to your SSO provider. When you click the "Log In" button, you will be redirected to your SSO provider to authenticate. After authentication, you will then be redirected back to Monolith and given access to your Monolith Tenant.

Docker Installation

These are the documented methods of installation for Docker

hashtag
Windows

To Install Docker on Windows, you need to install Docker Desktop for Windows. This installer can be downloaded from here:

Useful Commands

hashtag
Starting and Stopping Monolith Server

These commands can be used together to conduct a "hard" restart of Monolith.

circle-info

Query Filter

The Query Filter is a system used throughout Monolith that allows you to create complex queries for data using a simple user interface.

The filter uses conditional logic to construct a query that will result in records that match the filter.

Example:

The above filter has three conditions:

Global Search

Global search can be used to quickly find cases, evidence, notes, tasks, acquisitions, and storage items in Monolith.

To start a global search, press Control + F on your keyboard. This will open a search box where you can type in your search string.

Click the arrow icon on the search results to open the item.

Single Sign On (SSO)

hashtag
What is Single Sign On (SSO)

Single sign on is an authentication process that allows a user to log into Monolith using thier organization's authentication mechanism and identity management system. This authentication process is used in place of Monolith's default login system.

For example, if configured, a user may login into Monolith using Microsoft Azure AD credentials instead of using the default Monolith user credentials.

Forensic Software

View, Edit, Delete and export a list of all of your software products

The Forensic Software allows you to manage your software subscriptions including tracking details like purchase date, expire date, and cost. From this view you can also export the details of this table to an excel document.

hashtag
Exporting to Excel

Your equipment list to an excel document by selecting the Download option from the table menu.

Basic Details

In this section you can configure the details that your Relay Tenant will display to users.

hashtag
Basic Details Items

Tenant Logo: Select the logo that will display in Relay

Tenant Name: Name that will display for your organization in Relay

Relay Instructions

Edit instructions for users making requests

In this section you can edit instructions that will be shown to the requester before they make any requests in Relay.

Case Types

View, Create, and Delete custom Case Types

In this section you can view all of the Case Types associated with your organization. This is also where you can create new Case Types and delete your current Case Types.

hashtag
Creating a New Case Type

Select the "Create Case Type" button and enter the name of the Case Type you would like to create.

Evidence Types

View, Create, and Delete custom Evidence Types

In this section you can view all of the Evidence Types associated with your organization. This is also where you can create new Evidence Types and delete your current Evidence Types.

hashtag
Creating a New Evidence Type

Monolith Desktop Setup

There are a couple of steps to setup Monolith Desktop.

hashtag
Initial Installation

To download Monolith Desktop, go to the of the settings page and download the appropriate installer for you operating system (Windows or MacOS)

After installing Monolith Desktop and running it for the first time, you will be presented with an "API Mode" selection screen.

This screen allows you to connect Monolith Desktop to your Monolith Tenant, whether it is in the Cloud or On-premises:

Email Notifications

Configure email notifications

Monolith supports email notifications for assignments of tasks and cases.

QA Issue Types

View, Create, and Delete your quality assurance issue types

In this section, you can manage your QA Issue Types to identify events that do not meet your organization's quality assurance standards.

hashtag
Creating a New QA Issue Type

Select the "Create Type" button and enter the name of the QA Issue Type you would like to create.

Integrations

Monolith will including integrations in future releases. As of now, we offer integrations for organizations issuing reports to the US Secret Service.

hashtag
Forensic Partner Reports

Click the "Configure" button to allow you to map Evidence Types and Case Types to your report.

hashtag
SAML 2.0

SSO integration with Monolith uses the SAML 2.0 open standard to connect to your identity provider.

hashtag
Identity Provider/Service Provider

Identity and service provider are common terms used when configuring an SSO connection. The identity provider is the service your organization uses to manage it's employees' credentials to provide access to IT resources.

The service provider is the vendor or software that relies on the identiity provider ro authentication and identification.

In this case, Monolith is the service provider.

hashtag
What about Multi-Factor Authentication (MFA)?

When logging in with SSO, the Monolith MFA process is not used - MFA is passed onto the identity provider that is used in the SSO process.

hashtag
SSO Sessions

When a user authenticates into Monolith via SSO, a Monolith session is created that matches our default session standards.

hashtag
SSO Setup and Configuration

To integrate SSO with Monolith, you must have purchased an Enterrpise license to Monolith.

In order to setup SSO with Monolith, your organization should provide a SAML metadata file that is in XML format. This metadata file will contain specific information related to the SSO connection with Monolith that we need for integration.

Monolith will then provide your organization with 2 key pieces of information to complete the SSO connection:

ACS URL:

https://monolith-app.monolithforensics.com/api/auth/saml/acs/{{UNIQUE ORG ID}}

Service Provider Entity ID:

https://monolith-app.monolithforensics.com/{{UNIQUE ORG ID}}

These values are used by your identity provider to create an SSO connection with Monolith.

hashtag
Metadata Attributes

In order for Monolith to properly identify the user after SSO authentication, we need the user's email to be included with the SAML response.

This is typically included as a "NameID", but may also be added as an "email" attribute.

hashtag
Support

To setup SSO with your Monolith account, please contact support: [email protected]

https://topazsystems.com/sdks/sigweb.htmlarrow-up-right
file-download
14KB
COC with Signatures.docx
arrow-up-right-from-squareOpen
hashtag
WSL

To deploy Monolith on Windows, you will need to install the WSL package for Windows. This allows Windows to run Linux containers. During the Docker Desktop install, Docker typically prompts you to install this. If not, here is a direct link to download and install WSL:

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msiarrow-up-right

hashtag
MacOS

To Install Docker on MacOS, you need to install Docker Desktop for MacOS. This installer can be downloaded from here:

https://www.docker.com/products/docker-desktop/arrow-up-right

hashtag
Linux

To install Docker on a Linux OS, refer to the following Docker documentation for Linux installations:

https://docs.docker.com/engine/install/ubuntu/arrow-up-right

https://www.docker.com/products/docker-desktop/arrow-up-right
View an audit by click the audit name within the table
SSO Login
Open Date is sometime after January 1, 2023
  • The Case Lead is Matt Danner

  • The Case Type is Consultation

  • This filter combines those three conditions into an "exclusive" filter, which means that a record must match all three conditions. This can also be referred to as an "AND" statement:

    "Show me all cases WHERE the open date is after January 1, 2023 AND the case lead is Matt Danner AND the case type is Consultation."

    The query filter options are defined based on the type of records that your are filtering. So case data will have different filter options from evidence data.

    Each condition within the filter may have different options as well.

    The following condition filters are available"

    • Date filters

    • Text Filters

    • Multi-select Filters

    Edit Relay Instructions
    Forensic Partner Reports

    Monolith Desktop - MacOS Download

    Monolith Desktop - Windows Download

    Cover
    Cover

    API Access

    This section describes the basic access requirements for using the Monolith REST API via HTTPS.

    QA Checklist Items

    image: mysql:8.0.16
    Restarting Monolith in this way does not cause any data loss and should be used when you need to update your licensing from a license token.

    hashtag
    Various Docker Commands

    hashtag
    Docker CLI Reference

    Additional Docker commands can be reviewed on Dockers official documentation pages:

    https://docs.docker.com/engine/reference/run/arrow-up-right

    hashtag
    Docker Compose CLI Reference

    Additional Docker compose commands can be reviewed on Docker's official documentations pages:

    https://docs.docker.com/compose/reference/arrow-up-right

    image: mysql:8.0.31
    docker compose down
    docker compose up -d
    // Deploy and Run Monolith Containers
    // Must be run in same directory as docker-compose.yml
    docker compose up -d
    
    // Remove Monolith containers
    // ust be run in same directory as docker-compose.yml
    docker compose down
    // Show resource usage of docker containers
    docker stats
    
    // Show running containers
    docker container ls -a
    
    // Show downloaded container images
    docker image ls -a
    
    // Download fresh container image
    docker pull [container-name]
    
    // Restart container
    docker container restart [container-name]
    2-Factor Authentication

    By default, all cloud users are required to use 2-Factor Authentication to login to their Monolith accounts. Monolith utilizes TOTP based 2FA, which means that users must have an authenticator application to use 2FA with Monolith. The following authenticator apps are recommended:

    • Google Authenticator

    • Microsoft Authenticator

    On you first login to Monolith, you will be prompted to setup 2FA with the authenticator app of your choice. Open the authenticator app and scan the QR code presented by Monolith:

    2FA Setup

    Once you have scanned the QR code, type in the 6-digit code generated by the authenticator app into the box at the Monolith Login screen.

    For subsequent logins, you will be presented with a 2FA screen and asked to enter a 6-digit code generated by you authenticator application of choice.

    2FA Screen

    hashtag
    2FA Reset

    If you have lost your 2FA device or replaced it, a Monolith admin user can reset the 2FA device on your account. Once reset, Monolith will prompt you to connect a new 2FA device at your next login.

    hashtag
    Disable 2FA

    For cloud customers, you can request that 2FA be disabled for your account - please make a request to [email protected].

    For on-premises customers, you can disable 2FA from your user profile page.

    circle-info

    2FA is a very important and standard security measure - we highly recommend you do not disable this feature.

    Monolith Login
    Download Forensic Software list

    All of the columns you have selected in your table view will be shown in your exported excel document.

    hashtag
    Add Software Item

    You can add new software to your list by clicking the "New Software" button from the table view.

    Add Software Item

    You can include details such as Vendor, Edition, Purchase Date, Expire Date, Cost, and Location.

    hashtag
    Edit Software Item

    You can also edit all of the details of your software items by opening a flyout menu from the table view.

    hashtag
    Delete Software Item

    From the flyout menu you can delete Software Items.

    Edit and Delete Software Items

    table
    Relay URL slug: The URL identifier for your relay tenant. For example, if we use the slug "my-relay-slug" the Relay URL will be:

    https://relay-app.monolithforensics.com/my-relay-slug

    Tentant Email: The default email for your relay tenant. All notifications from Relay (new users, request, etc...) will be sent the this email.

    hashtag
    Basic Details View

    Basic Details for Relay

    Create Case Type

    hashtag
    Delete a Case Type

    You can also delete Case Types from the Case Types Section.

    circle-exclamation

    When deleting a Case Type, you must re-assign the cases associated with that Case Type to another pre-existing Case Type.

    Deleting Case Types
    Case Types
    Select the "Create Evidence Type" button and enter the name of the Evidence Type you would like to create.
    Create Evidence Type

    hashtag
    Delete an Evidence Type

    You can also delete Evidence Types from the Evidence Types Section.

    circle-exclamation

    When deleting an Evidence Type, you must re-assign the evidence items associated with that type to another pre-existing Evidence Type.

    Delete Evidence Type
    View Evidence Types
    Monolith Desktop - API Mode Selection

    hashtag
    Cloud Customers

    For cloud hosted Monolith Tenants/Customers - keep the default selection as "Cloud". The region is defaulted to US/North America, but if you are a UK customer, change the region to "United Kingdom" and select submit.

    This option ensures that Monolith Desktop will connect to the correct Monolith Server for your cloud deployment or region.

    circle-info

    Additional Cloud regions may be added in the future.

    hashtag
    On-Premises Customers

    For on premises customers - change the "API Mode" to "On-Premises". This mode allows Monolith to connect to an on-premises Monolith server that is running within your organization and network.

    When you select the On-Premises option, you then need to enter your Monolith Server's API endpoint. This will typically be the IP address of your Monolith server, or a custom domain if you have one setup in your network.

    The API endpoint must meet the following formats:

    If Monolith Desktop can successfully reach the Monolith server, you will see a green check mark populate and the Monolith Login screen will load.

    Monolith On-Premises Server Connection

    hashtag
    Reset Monolith Connection Settings

    To reset Monolith's API connection settings, click the "Reset Monolith" button located on the Monolith Login screen. This will return you to the API mode selection.

    Monolith Login Page
    System section
    hashtag
    Delete a QA Issue Type

    You can also delete a QA issue type in this section.

    Delete QA Issue type

    View QA issue types
    Create a QA Issue Type

    Managing Licensing

    How to manage your on-premises licensing for Monolith

    hashtag
    Where your license is managed

    Currently, your on-premises license to Monolith is managed within the ".env" file that is within your Monolith package deployment folder.

    There are two values within the ".env" file that related to your Monolith License:

    When the Monolith server starts up, it derives your license from one of these two values.

    circle-info

    When both values are present, the MONOLITH_LICENSE_TOKEN value takes precedence.

    hashtag
    Monolith License Token (Preferred - Offline Licensing)

    The Monolith license token is a long string that is a securely signed token that contains your licensing information.

    This method works in both online and offline environments and does not use the internet to operate.

    The Monolith server derives your license details from this token.

    This is the preferred method, because it does not rely on our licensing server to work and will keep your Monolith deployment operational even during internet outages.

    circle-info

    A license token must be provided to you from Monolith support. These tokens expire on your annual renewal date and must be refreshed each year. Contact [email protected] to get a new token.

    hashtag
    Monolith License Key (Online Licensing)

    The Monolith license key is a short, unique string that is associated with your Monolith customer account. Monolith uses this value to retrieve your licensing information from our online licensing server on the internet.

    circle-info

    This licensing method will not work in air-gapped environments

    hashtag
    Updating your license

    To update your license, simply replace the License key or token value in your ".env" file with a new one and restart your Monolith Docker deployment.

    You can restart your Monolith Docker deployment with the following commands:

    circle-info

    Be sure to run these commands from the same directory as your ".env" file and "docker-compose.yml" file

    Requirements

    These are the basic requirements for hosted Monolith on-premises

    hashtag
    Docker

    Docker or Docker Desktop is required for Monolith on-premises deployments. Installation instructions can be found here.

    hashtag
    Hardware

    The following hardware is required to properly run the Monolith API backend within Docker:

    • Ubuntu Server 20, 22, 24

    • 4GB of RAM

    • 2-core CPU

    hashtag
    SMTP (Email Use)

    To enable Monolith’s email capabilities, an email account is required with SMTP credentials:

    • SMTP host

    • SMTP port

    • SMTP user

    These values are supplied to the Monolith API server/Docker container at run-time.

    hashtag
    Amazon AWS S3 Integration

    If you want to store Monolith files in AWS S3, you will need to have the following to integrate S3:

    • AWS Access Key

    • AWS Secret Key

    • AWS Region & Endpoint

    Deployment

    hashtag
    On-Premises Package

    Once you have purchased Monolith and are ready to deploy - you will be provided with a Monolith On-premises deployment package. This package will contain configuration files necessary to run the deployment.

    hashtag
    Package Contents

    The package will contain the following items:

    • .env

      • This is an environment file that will contain variables that are injected into your Monolith deployment at run time. This is where your licensing information will be location along with other settings.

    • docker-compose.yml

    How to Deploy

    hashtag
    Default Deployment

    Deploying Monolith with the default configuration is a simple matter.

    1. Install Docker - Instructions

    2. Pick a location to store your on-premises package files.

    3. Open a command terminal.

    4. Navigate to the location of your Monolith On-premises package files.

      • This is the folder that contains the .env and docker-compose.yml files.

    5. Run the following command to download, deploy, and run the Monolith containers referenced in the docker-compose.yml file:

      • docker compose up -d

    6. This will download the Monolith container images which may take a few minutes.

    7. Once downloaded, the containers will launch and build the initial Monolith system.

    8. You can then navigate to Monolith in a web browser using the IP address of the host system running Monolith:

      • https://{host_server_ip}

    To remove the docker containers, you can use the following command:

    docker compose down

    circle-info

    NOTE: If deploying Monolith inside of a virtual machine, you must enable "nested virtualization" for Docker to work.

    hashtag
    Example

    Restoring Backups

    This section will cover restoring a database backup of your Monolith MySQL database.

    hashtag
    Backup Data

    This restore process assumes you have previously created a SQL dump of your Monolith database from MySQL. A SQL dump file is a plain text file that contains your database data in a SQL format.

    hashtag
    Database Schemas

    MySQL has a concept called "schemas". Schemas are the data segments within MySQL that store tables and data. You can have any number of schemas within a MySQL database. Your Monolith data is stored within a single schema within MySQL.

    Schemas are the data object that we will backup and restore from backups.

    hashtag
    Restore Steps

    Recommended Tools:

    • MySQL Workbench

      • This is a free tool provided by the MySQL team to access and manage MySQL databases. It also has several useful utilities including database backup and backup import services.

    1. Open MySQL Workbench

    2. Ensure that Workbench has a connection to your Monolith database.

    3. Open your Monolith database in MySQL workbench.

    This process will create a new "schema" and populate it with tables and data from your Monolith database backup.

    circle-info

    If the new schema has a different name from your original Monolith schema (database), then you may need to update your Monolith deployment configuration.

    Updates

    hashtag
    Automatic Updates

    If you have deployed Monolith with the Watchtower container, the Monolith API server, Monolith web app, and Relay web app will automatically update if the host system has internet access.

    Watchtower checks for updates to these container every 30 seconds.

    You may disable these automatic updates by simply removing the Watchtower container from your Monolith deployment.

    hashtag
    Force an Update

    If you don't want to wait for Watchtower or if you want to buld updates into a recurring script, you can force an update with a couple of commands.

    The following commands use Docker compose to pull down the latest Monolith images, and rebuild the entire Monolith deployment with the new images.

    circle-info

    Be sure to run these commands from the same directory as your Monolith docker-compose.yml file.

    You can imbed these commands within a bash or batch script if you would like to implement your own scheduled updates instead of using watchtower.

    hashtag
    Manual Updates

    You can also update the Monolith server containers manually. This can be useful in air-gapped environments or if you do not wish to deploy with automatic updates.

    hashtag
    Download Latest Container Images

    Run the following commands to download the latest container images for Monolith deployment or updates:

    hashtag
    Export Container Images for Transfer

    Run the following commands to export the container images to TAR files that can be transferred to the the host running the Monolith server:

    You can now transfer these TAR files to the host system that runs your Monolith deployment.

    hashtag
    Import Container Images to Server

    To import the TAR files, run the following commands on the host system that is using Docker to deploy the Monolith containers:

    hashtag
    Restart the Monolith Server

    To restart Monolith with the new containers, run the following commands on your Monolith host and from the directory that includes your docker-compose.yml file:

    Custom Domains and TLS

    Setting up a custom domain for Monolith requires just a couple of item and steps:

    1. Setup the domain that you want to use.

    2. Create SSL certificates with any necessary intermediate certs that are required for the domain.

    3. Add those SSL certificates to your Monolith deployment.

      1. Update the docker-compose.yml file

      2. Copy the SSL certs to your Monolith deployment folder.

    circle-info

    If you require a more complex setup, contact us at [email protected].

    hashtag
    Setting up a Custom Domain

    This process will be different for everyone, but usually your IT department can establish a specific Domain for you to use to access your Monolith deployment in a web browser.

    This is helpful because it allows you to use domain resolution in your browser instead of a plain IP address that points at your Monolith server.

    This also lets you setup SSL that can be verified by your browser and create secure and encrypted web traffic between your Monolith users and the Monolith server.

    hashtag
    Generating SSL certificates

    Again, this process varies, but you will need to generate two SSL certificates that are associated with your custom domain. These certificate file comprise of a certificate file and a key file.

    This is also a process that your IT department can help you with.

    hashtag
    Update your docker-compose.yml

    Before we can use the new SSL certificates, we need to update our Monolith deployment config so that it will override the built in self-signed certificates that Monolith uses by default.

    Under the "nginx" block of the docker-compose.yml file, add the following line under "volumes":

    The entire "nginx" block should look like this:

    hashtag
    Rename the SSL certificates

    When using custom SSL certs, Monolith is looking for certificates with specific names - rename your SSL certs to the following file names:

    hashtag
    Copy SSL certs to Monolith Deployment Folder

    Copy the SSL certs to "data" folder within your Monolith deployment, the final cert locations should look like this:

    hashtag
    Re-deploy the Monolith Server

    In order for Monolith to start using the new certs, we need to redeploy/restart the Monolith server so that it will indest the cert files.

    Open a terminal or command prompt in the location of the docker-compose.yml file.

    Enter the following commands, in order, to re-deploy and restart the Monolith server:

    hashtag
    Conclusion

    Now, Monolith will start using these certs and your custom domain to create a secure and encrypted connection between the server and your clients systems; both in the web browser and the Monolith desktop client.

    Tables

    All of the standard tables in Monolith have several features to help users find and export data quickly.

    hashtag
    Features

    hashtag
    Sorting

    To sort rows within a Monolith table, click the column header. Monolith will then sort the data based on that column.

    hashtag
    Filtering

    Filtering a table is handled by the Monolith Query Filter, which is discussed .

    hashtag
    Column Resizing

    Table columns can be resized by hovering over the edge of the column that you wish to resize. Then just click and drag the column to the desired width.

    hashtag
    Column Reordering

    Columns can be reordered by clicking and dragging the column header to the desired position in the table.

    hashtag
    Column Hiding/Showing

    Columns can be hidden or shown by using the "Column Selector" which is a button that is typically located in the top right menu of a table. This button has an icon that looks like 3 vertical columns.

    hashtag
    Pagination

    Most tables in Monolith are "paginated" which means that only a certain number of records are loaded at one time. The default is 20, but you can use the page size selector to increase that amount to 100.

    The table may also have a Page Selector that allows you to navigate to specific pages within the table data.

    hashtag
    Searching

    Table data may be searched if there is a search box associated with it. To search the table data, just enter your search string into the text box and press enter.

    hashtag
    Exporting

    Most tables can be exported to a Microsoft Excel document. to export the table data, use the table export button which is usually located in the top right table menu.

    The table export is a "What you see is what you get" export, which means that the only columns and rows included in the export are based on the filters and table orientation.

    All pages are included with the export.

    Storage Items

    hashtag
    What are storage items?

    In Monolith, storage items are considered to be devices that are used for the purpose of storing forensic data that has either been collected, processed, or provided.

    hashtag
    Examples of storage devices include:

    • External Hard Drives

    • USB Drives

    • Network Attached Storage devices

    hashtag
    Examples of stored data include:

    • Forensic Images

    • Smartphone Extractions

    • Case Data

    hashtag
    What is the difference between Evidence Items and Storage Items?

    First, everything in Monolith is considered evidence, but for the purposes of organization and management Monolith tracks evidence and storage items separately.

    Evidence typically represents the original source of forensic evidence or data. Usually, this includes hard assets like smartphones or laptops and soft assets like emails or cloud accounts. You should track anything that is considered as the original or "best" evidence as an evidence item.

    Storage represents the vessel that collected forensic data is stored on. So when tracking storage items in Monolith, you are essentially tracking all the device you use to store forensic data.

    hashtag
    What is a "General" storage item?

    Monolith tracks two categories of storage items: "General" and "Assigned".

    General storage items are meant to represent large storage arrays that are used as a permenant cache for all case data. This is typically a NAS array that stores pristine copies of all your case data and forensic images. It is also a fixed asset that usually stays in the lab and does not move.

    Assigned storage items represent storage that is associated with a specific case and stored very specific data. These devices are usually smaller and portable devices that move around a lot and may even be wiped, destroyed, or recycled at the end of a case or matter.

    General Item Rules:

    • Cannot be assigned to a case.

    • Monolith does not track chain of custody for these items.

    • Tracks data from multiple cases.

    Assigned Item Rules:

    • Must be assigned to a case to use.

    • Can only track data from one case.

    • Chain of custody is only logged when assigned to a case.

    hashtag
    Assigning Storage Items

    There are two ways to assign a storage item to a case: Create or Assign.

    hashtag
    Create an Item

    You an create a storage item from the "Storage Items" tab of a case. This will both create the new item and assign it to the case at the same time.

    hashtag
    Assign an Item

    You can also assign a storage item that already exists to the current case. This option is available in the "Storage Items" tab of a case and in the "Actions" menu as shown in the screenshot below.

    Auditing Items

    Pending Items Audit Tab

    Each of the status tabs can be used to navigate through the items being audited.

    hashtag
    How to Audit an Item

    Auditing an item typically involves at least two procedures:

    hashtag
    Verifying the item location

    One type of audit requires the auditor to compare the location of the item listed in Monolith with its actual location in the forensic lab or designated evidence storage.

    For Example, consider the following item:

    According to Monolith, this item is currently located within the Calgary office, at the Evidence Room group, and at the AAA location.

    Verify the location by finding the physical item in your posession and check if its actual location in reality matches the location recorded in Monolith.

    hashtag
    Verifying the item's details

    The other type of audit requires the auditor to verify all the item's details and not just the location. This type of audit requires more work but can be useful in maintaining accurate data in your Monolith database.

    hashtag
    Audit Procedure

    hashtag
    Failing an audit item

    If the item's location or other details are incorrect, use the status selector of the item to mark it as "Failed". This will open a meu where you can enter a note about why the item failed.

    You can then fix the item right away by updating the location or details in Monolith, or you can wait until you have audited all items first.

    Once the status update is submitted, the audit item card is moved to the "Failed" tab.

    hashtag
    Passing an audit item

    If you determine that the details and location of the item are correct, you can then mark the item as having passed its audit.

    This may also occur after you have failed the item and then updated the item with accurate information.

    The process to pass an item is identical to failing an item. You simply update its status to "Passed" and enter a note about why it passed.

    hashtag
    Audit methods

    When updating an audit item's status, the audit method will update whenever you pass or fail an item.

    The audit methods currently used are "Manual" and "Scanned". Using the status selector to update the item's status will set the audit method to "Manual" as it represent that the auditor manually passed or failed the item without using a scanner.

    The "Scanned" method is discussed in more detail here:

    hashtag
    Audit logs

    The audit logs record each time and audit item's status is updated. These logs include a timestamp, auditor, and the notes entered at the time of audit.

    These logs can be used for documentation or to keep track of why items did not pass an audit and then repair the items as needed.

    The audit logs can also be viewed within the audit items detail's page.

    Here is an example of the audit logs from this evidence items details page:

    Client Page

    View information about individual clients associated with your organization

    hashtag
    Client Details

    On the left hand side of the clients page you can view and edit all of the details associated with your client.

    Client Page

    hashtag
    Printing Labels

    At the top of the client details section you can also print using the information in client details

    hashtag
    Associated Cases

    You can also see a view all of the cases associated with this client in two views:

    My Associated Cases: Cases associated with this client that you are assigned as a user.

    All Associated Cases: Administrator view for all cases associated with this client.

    hashtag
    Delete Client

    Administrators can also delete a client from the client page.

    System

    View account information, access desktop client, and set date, time, and currency formats

    hashtag
    Account Information

    Organization profile: Information can be changed in the Organization Info section.

    Subscription Info: This section gives details about your licenses, subscription expiration date and storage usage. In this view you can also see your relay URL and current workspaces connected to your account.

    hashtag
    Desktop Installers

    If you would like to use Monolith as a desktop application, it can be downloaded from this section. We currently offer desktop applications for Windows and MacOS.

    hashtag
    Date, Time, and Currency Format

    Your selected format options will appear as the default throughout Monolith.

    User Management

    Manage your relay users

    hashtag
    Create and Manage Relay users

    Relay can be used by any internal or external party interacting with your lab. Relay users do not need to be Monolith users and they do not require a Monolith user license. There is no limit to the number of Relay users you create.

    hashtag
    Your Relay Users

    You can view, invite, and search for current users from this view.

    hashtag
    Editing and Removing Relay Users

    By selecting a user from this screen you can edit that user's details, remove that user from your Relay Tenant, and grant or remove admin permissions for that user.

    hashtag
    Inviting New Users

    You can invite new users by selecting the "Invite User" button from the "Relay Users" table. You will be prompted to enter that user's email address.

    Below is an example of an email invite to relay.

    hashtag
    User Account Set Up

    After accepting an invite users will be directed to register as a Relay user. An invitee must set up their account to access Relay.

    hashtag
    View Pending Invite Requests

    From the Access Requests tab, you can view all of your pending Relay user invites. They will remain pending until the invitee completes the user registration process.

    Evidence Progress

    Customize your Evidence Progress Bar

    Every Evidence Item in Monolith has a progress bar that illustrates the current stage of a particular evidence item. See also Case Progress.

    The current progress status for an evidence item can also be found under the Evidence Details section on the left sidebar of that item's page.

    Evidence Progress

    In the Evidence Progress section you can reorder, add, and delete these evidence progress options to best reflect your organization's workflow.

    hashtag
    Reordering Evidence Progress Items

    You can reorder your current Evidence Progress Items by dragging and dropping them into place. Your timeline will display the order of items going from top to bottom.

    hashtag
    Create New Progress Item

    Select the "Create Evidence Progress" button to create a new progress item. By default, this item will be added to the beginning of the list.

    hashtag
    Delete a Progress Item

    Select the Delete button to the right of the item you would like to delete.

    circle-exclamation

    When deleting a Progress Item, you will be required to reassign the progress status of the evidence items associated with the progress item you are deleting.

    Custom Fields

    Capture and track information that is unique to your organization.

    hashtag
    Custom Field Settings

    From the custom fields section you can create, edit, delete, and enable custom fields for your Monolith tenant. Monolith currently supports custom field items for: Cases, Evidence, Acquisitions, Inquiries and Storage.

    hashtag
    Adding Custom Fields

    Open the collapsable section for the category of custom field you would like to create (for example Custom Cases Fields).

    circle-exclamation

    Once created, a field's editor type cannot be changed, but fields can still be enabled, disabled, reordered, edited, or deleted at any time.

    Creating Custom Fields Options

    1. Field Name (Required): The display name of your custom field

    2. Is Required (Required): A yes/no option to indicate whether this should be a required field in Create and Edit modals for this category.

    3. Editor Type(Required): Select whether you want this field to be:

    hashtag
    Managing Custom Fields

    • Enable/Disable: Determines if custom field will appear in Create and Edit Modals.

    circle-info

    Disabling a custom field will not remove it from items that have been assigned a value for that field. For example, if you have an Evidence Custom Field called "Agency ID" that has been disabled, the evidence item(s) that have been assigned an "Agency ID" value will still display it in their individual pages. To remove the custom field completely from all items, you must delete that field.

    • Edit: Edit custom field details.

    • Delete: Removes the field and its values from your Monolith tenant.

    hashtag
    Re-Order Custom Fields

    Each category's custom field sections can be re-ordered by dragging and dropping custom field components within their respective lists.

    Time Entry Categories

    Manage your Time Entry Categories

    In this section you can view all of the Time Entry Categories associated with your organization. This is also where you can create new Time Entry Categories and delete current Time Entry Categories.

    These categories can help define the type of work conducted when recording billable time entries.

    View Time Entry Categories

    hashtag
    Creating a New Time Entry Category

    Select the "Create Category" button and enter the name of the Time Entry Category you would like to create.

    hashtag
    Delete a Time Entry Category

    You can also delete a Time Entry Category from the Time Entry Categories Section.

    circle-exclamation

    When deleting a Time Entry Category, you must re-assign the time entries associated with that category to another pre-existing Time Entry Category.

    Summary

    hashtag
    Base URL and Authentication

    • Base path: api/v1/cases

    • Auth: all endpoints in this document require x-api-key

    • Header format:

      • x-api-key: <api-key>

    • Notes:

      • This API does not use Authorization: Bearer.

      • Invalid or missing API key returns 401 Unauthorized (plain text from middleware).


    hashtag
    Endpoint Summary

    Method
    Path
    Purpose

    First Steps

    When first logging into Monolith, here are the first steps you should take to get Monolith ready for your forensic work and evidence:

    1. Setup your .

    2. Create for your team.

    Security Overview

    hashtag
    Multi-Tenancy

    All customers are assigned a Monolith "Tenant" - a tenant is a logical unit that separates every set of customer data into their own silos.

    In Monolith, each customer is given thier own database and logical file storage area in our block storage. This means that data you enter into Monolith is not commingled with data from other customers.

    The same idea applies to files uploaded into Monolith. Files stored in Monolith are stored in thier own logical silo based on the cutsomer tenant.

    Creating Audits

    hashtag
    Create a new audit

    Use the "+ New Audit" button to begin creating a new audit.

    The above screenshot shows the Audit Creation Menu:

    Monolith Endpoints

    These are the endpoints used by Monolith and Relay

    These endpoints can be used to manage whitelisting for your firewall systems. These endpoints may be updated or we may add new entries over time.

    hashtag
    Protocols

    Monolith uses HTTPS over TCP to access and transmit data. RESTful APIs are utilized that typically send and receive data in JSON format, Base64, or Form Data.

    Monolith also uses the following HTTP methods: GET, POST, PUT, PATCH, DELETE, OPTIONS.

    Authentication

    Authenticating your API Requests

    In order to submit an authenticated API request to the Monolith API, you need to include an API key in the following header value with the request.

    hashtag
    X-API-KEY

    This header must be present in all Monolith API HTTP requests and have a value that is a valid Monolith API key.

    The Monolith API is still under development, so if you would like access, please reach out to support to request an API key.

    API Endpoints

    The following endpoints can be used to access the Monolith API

    Region
    Endpoint
    circle-info

    Info API

    This endpoint retrieves basic details about your Monolith tenant and the API key currently being used.

    circle-info

    Use the endpoint as a quick test to ensure your call to the API is working.

    hashtag
    Get Info

    Migrate Evidence

    hashtag
    Migrate evidence items to a different case

    POST /api/v1/evidence/migrate

    Use this API endpoint to migrated chosen evidence items from one case to another.

    Request Body

    https://{monolith-server-ip-address}/api
    https://{custom-monolith-domain}/api
    Examples:
    https://192.168.1.22/api
    https://monolith.myorg.com/api
    MONOLITH_LICENSE_KEY=
    MONOLITH_LICENSE_TOKEN=
    At least 100 GB of storage (>500 GB recommended)
    SMTP password

    This is a Docker deployment configuration file. This file dictates how the various Monolith containers will be built and deployed.

  • This allows you to use a pre-defined configuration so that you don't need to build the Monolith Docker deployment from scratch.

  • init folder

    • This contains additional configuration files needed for successful deployment.

  • Select "Server >> Data Import" from the Workbench menu bar.
  • The import wizard should start at the "Import from Disk" tab - select this tab if its not selected.

  • Under "Import Options", check the radio button for "Import from Self-Contained file".

  • Use the file select browser to locate and choose your Monolith database backup, which should have a ".sql" extension.

  • (Optional) Select a default target schema or create a new one.

    1. This is optional because your SQL dump file likely already has a directive to create a new schema with the correct name.

  • Click the "Start Import" button.

  • Name
    Type
    Description

    uuid*

    array

    Array of evidence item UUIDs that are to be migrated. REQUIRED

    case_uuid*

    string

    The UUID of the case that the evidence items will be migrated to. REQUIRED

    DELETE

    /api/v1/cases/:uuid

    Delete a case and related records

    GET

    /api/v1/cases

    List cases (with filtering + pagination)

    GET

    /api/v1/cases/:uuid

    Get a specific case by UUID

    POST

    /api/v1/cases

    Create a new case

    PUT

    /api/v1/cases/:uuid

    Update an existing case

    More regions will likely be added in the future.

    United States/North America

    https://monolith-app.monolithforensics.com/api/v1

    United Kingdom

    https://monolith-app.monolithforensics.co.uk/api/v1

    Monolith Deployment and Removal
    here
    FTP Servers
  • Cloud Storage Systems (AWS, Google Drive, etc...)

  • Forensic Reports
    Can be removed from a case and reused/re-assigned.
  • Removing from a case will destroy its chain of custody and unlink any tracked acquisitions.

  • Assigning Storage Items
    Relay User list
    Relay User Details
    invite user
    Relay invite email
    Account signup screen for Relay users
    Pending Relay user requests

    Textbox - Regular text field

  • Date - Provides a date selector dropdown

  • Drop Down Menu - User's can select an item from a dropdown list

  • Tag Box - User's can select multiple items from a dropdown list

  • Description: Populates placeholder text in the input box associated with your custom field in the category's Create and Edit modals.

  • Using a scanner
    Audit Item
    Failing an audit item
    Passing an audit item
    Audit Logs
    labels
    table
    Associated Cases views
    Delete Client
    Reorder Evidence Progress
    Create Evidence Progress
    Delete Evidence Progress
    Create Time Entry Category
    Delete a Time Entry Category

    Lab Management

    Lab Management options allow you to manage lab equipment and software subscriptions for your forensic lab.

    hashtag
    Example API Request

    Use the "info" endpoint to get details related to your API key. This example shows how to make a simple API request to Monolith using an API key in the headers of the request.

    Python
    import requests
    
    # set your Monolith API key into a variable
    api_key = "qucuqwqg5q3rve28ehfh" # this is a fake API key
    
    # Set the api key in the header of the request
    headers = {
    	"x-api-key": api_key
    }
    
    # Use the appropriate API endpoint for your region
    api_url = f"https://monolith-app.monolithforensics.com/api/v1/info"
    
    # Execute the GET request
    response = requests.get(api_url, headers=headers)
    
    # print the JSON response to console
    print(response.json())
    docker compose down
    docker compose up -d
    ## destroy currently running Monolith containers
    docker compose down
    
    ## Pull latest images
    docker compose pull
    
    ## Deploy Monolith containers with new images
    docker compose up -d
    docker pull monolithforensics/nginx:latest
    docker pull monolithforensics/monolith:on-prem 
    docker pull monolithforensics/monolith-api:latest
    docker pull monolithforensics/monolith-forms:on-prem
    docker pull mysql:8.0.16
    docker image save -o monolithfornesics_nginx.tar monolithforensics/nginx:latest
    docker image save -o monolithforensics_monolith.tar monolithforensics/monolith:on-prem
    docker image save -o monolithforensics_monolith-api.tar monolithforensics/monolith-api:latest
    docker image save -o monolithforensics_relay.tar monolithforensics/monolith-forms:on-prem
    docker image save -o mysql_8.0.16.tar mysql:8.0.16
    docker image load -i monolithfornesics_nginx.tar
    docker image load -i monolithforensics_monolith.tar
    docker image load -i monolithforensics_monolith-api.tar
    docker image load -i monolithforensics_relay.tar
    docker image load -i mysql_8.0.16.tar
    docker compose down
    docker compose up -d
    ./data/nginx/certs:/etc/nginx/certs
      nginx:
        container_name: nginx
        image: monolithforensics/nginx:latest
        restart: always
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - ./data/logs/nginx:/var/log/nginx/
          - ./data/nginx/certs:/etc/nginx/certs
    // Cert file
    default_monolith.crt
    
    // Key File
    default_monolith.key
    // Some code
    {monolith-deployment-folder}/data/nginx/certs/default_monolith.crt
    {monolith-deployment-folder}/data/nginx/certs/default_monolith.key
    // shut down current deployment
    docker compose down
    
    // wait for process to complete
    
    // Restart Monolith deployment
    docker compose up -d
    Set the formatting for case numbers, evidence numbers, & storage numbers.
  • Create & Customize form selection options:

    1. Customize your Case Type selections.

    2. Customize your Case Status selections.

    3. Customize your .

    4. Customize .

    5. Customize .

    6. Customize to use with the Task Management System.

    7. Customize Quality Assurance .

  • Create and customize Quality Assurance checklists.

  • Create and upload evidence & storage labels with DYMO.

  • Create evidence locations.

  • Enter existing storage items.

  • Enter Forensic software.

  • Organization Info
    user accounts
    hashtag
    Data Export

    This Multi-tenant infrastructure also means that it is very easy to get a copy of your data - just make a support request!

    hashtag
    Encryption

    All data stored in Monolith is encrypted at rest using AES-256 bit encryption algorithms. This includes data stored in databases, on servers, and in file object storage.

    All data in transit to, from, or wihtin Monolith is also encrypted using HTTPS and TLS encryption standards/protocols.

    While this data is encrypted, the encryption is controlled by us, which means a few select people from the Monolith team have access to customer data. This access is only granted for support and maintenance purposes.

    hashtag
    Security Operations Policy

    Monolith has an internal Security Operations Policy and Data Management Policy that covers our internal standards in more detail. If you would like to see it, please submit a request to support.

    hashtag
    Cloud Hosting

    Our Monolith infrastructure is currently hosted in AWS.

    More specifically, we currently have 3 cloud infrastructure endpoints, which are all hosted on AWS: US East, London (UK), and Sydney (Australia)

    Our United States endpoint is currently hosted in the AWS GovCloud East Region.

    The AWS GovCloud infrastructure has some specific security policies in place that differs from normal AWS regions. These policies can be reviewed at the link below:

    AWS GovCloud Infoarrow-up-right

    hashtag
    Data Backup

    hashtag
    Database Backups

    Monolith data within our databases is backed up every 24 hours. We keep a 30 days of backups which allows us to recover data from up to 30 days in the past.

    We also typically create manual database backups for any major updates that require database maintenance.

    These backups are stored in an encrypted format within a separate region from the current database. This allows for recovery of data in the event of an AWS region outage.

    hashtag
    File Object Storage Backups

    Files uploaded to our Object Storage system implement typical object storage versioning. This means that a deleted file can be recovered by restoring one of its versions. A new file version is created and stored in the event of a file overwrite, which can occur when a file with the same name and path of another file is uplaoded.

    These file versions are kept for up to 90 days after deletion.

    hashtag
    Basic Cloud Infrastructure

    The following diagram illustrates the basic cloud infrastructure of the Monolith cloud environment. This is just an illustration to show how nodes communicate and share data/information:

    hashtag
    Vulnerability Scans

    The Monolith cloud infrastructure has network and system level scans that occur every 24 hours to test for network and system vulnerabilities. These scans produce reports that can be review for any issues or characteristics that are not inline with our security baseline.

    hashtag
    A/V - Malware Detection

    All of our endpoints, including employee systems, are monitored using Crowdstrike Falcon. This provides continious 24/7 monitoring of our endpoints for threat detetion and allows for immediate remediation.

    hashtag
    Penetration Testing

    We conduct annual pentests of Monolith that test for common infrastructure vulnerabilities, configuration issues, and application vulnerabilities. These pentests are conducted by an independent 3rd party. The testing targets our development and staging environments and not the customer facing production system to avoid interrupting services and prevent any potential access to customer data.

    Customer may request a copy of our latest pen test reports by contacting support at [email protected]

    hashtag
    Logging

    Various system logs are currently managed by logging services within AWS and Datadog. These logs are currently aggregated within Datadog, which allows for periodic review.

    Audit Name - This is the name of the audit, enter something simple and descriptive of the audit.

  • Assignee - This is the Monolith User/Person that will be assigned to run or administer the audit.

  • Start Date - This is anticipated start date of the audit.

  • Due Date - This is the expected due date of the audit.

  • Item Type - Select the type of items that will be included in this audit. Currently only Evidence and Storage items can be selected. You can only select one option.

  • Description - Provide a detailed description of the audit so that other users will know what this audit is for.

  • Cancel - Closes the menu and cancels the audit creation process.

  • Create Audit - Submits the completed form and creates a new audit with the supplied parameters.

  • hashtag
    Using the Audit Creation Filter

    When conducted an audit of items your organization is tracking, you will likely only want to audit a subset of all the items in Monolith. For example, you may only want to audit items from a specific year or quarter, or items of a specific type or location. The audit filter allows you to do this.

    Upon making a selection within the "Item Type" field, a new section within the audit creation menu will appear:

    Audit Creation Filter - Empty

    This filter will match the query filter you have seen in the Evidence and Storage items tables. Depending on the item type you selected, the filter will contain fields for either evidence or storage items.

    You can apply any filters that you want, and this will dictate which items will be included in the audit you are creating.

    The example filter below will include any evidence items that are "Smartphones" and were created in 2023:

    Audit Creation Filter - 2 Filters
    circle-exclamation

    If you do not apply a filter, all items will be included in the audit.

    Upon clicking the "Create Audit" button, the audit will be created and will appear in the audit table:

    Audit Table

    As you can see in the screenshot above, this audit includes 29 evidence items based on the filter that was applied.

    Create Audit Menu
    We also utilize web sockets for some operations and may use them more in the future.

    hashtag
    Endpoints

    Usage
    Region
    Endpoint

    Monolith

    US

    https://[www]monolith-app.monolithforensics.com

    Monolith

    UK

    https://[www]monolith-app.monolithforensics.co.uk

    Relay

    US

    https://[www]relay-app.monolithforensics.com

    GET /api/v1/info

    This endpoint retrieves basic details about your Monolith tenant and the API key currently being used.

    No parameters are required for this API.

    Response

    {
        "message": "Monolith API is running",
    
    {
      "error": "Invalid request"
    

    DELETE Cases

    hashtag
    DELETE /api/v1/cases/:uuid

    Deletes the specified case and associated dependent records (evidence, tasks, notes, report data, etc.).

    hashtag
    Path Params

    Name
    Type
    Required
    Description

    hashtag
    Query Params

    • None allowed. Any query string key will fail validation with 400.

    hashtag
    Success Response (200)

    hashtag
    Error Responses

    • 400 validation error:

    • 400 when UUID does not resolve to a case:

    hashtag
    Example

    docker-compose.yml

    Docker configuration and deployment file

    hashtag
    File Example

    This file is used to define the deployment options for the various Docker containers that make up the Monolith on-premises deployment.

    Unless you require an advanced deployment, you will not need to modify this file.

    circle-info

    Report Templates

    Monolith allows you to make use of report templates, so you can create any reports you wish based on data within a Monolith case.

    hashtag
    Template Document

    The template document must be a Microsoft Word document (DOCX).

    Get Evidence

    hashtag
    Get Evidence

    GET /api/v1/evidence/:uuid?

    Retrieves a list of evidence items. Calling with no parameters returns a paginated list of all evidence items in your Monolith database. Use the uuid query param to get details for one item or use the case_uuid

    "success": true,
    "user": {
    "name": "John McClain",
    "email": "[email protected]",
    "title": "Detective",
    "user_id": 1,
    "last_name": "McClain",
    "first_name": "John",
    "monolith_tenant": "tenant_123abc345"
    }
    }
    }

    Relay

    UK

    https://[www]relay-app.monolithforensics.co.uk

    File Management

    US

    https://monolith-cloud-east.s3.us-gov-east-1.amazonaws.com

    File Management

    UK

    https://monolith-cloud.s3.eu-west-2.amazonaws.com

    File Management

    US

    https://monolith-cloud.s3.us-west-004.backblazeb2.com

    App Updates

    ALL

    https://monolith-cloud.nyc3.cdn.digitaloceanspaces.com

    Case Progress selections
    Evidence Type Selections
    Evidence Progress selections
    Time Entry Categories
    Issue Type selections

    uuid

    string

    Yes

    UUID of case to delete.

    Note: Indentation matters in this file - if the indentation is not set properly, you may see errors when trying to deploy Monolith.

    hashtag
    How this file works

    This file is used with the following commands to build, re-build, and remove the containers that run Monolith.

    // Deploy Monolith
    docker compose up -d
    
    // Remove All Monolith Containers
    docker compose down
    {
      "message": "Case Deleted",
      "case_id": 123,
      "case_number": "INV-2026-001",
      "case_ref": "Customer Investigation",
      "uuid": "abc123..."
    }
    {
      "message": "Invalid case data",
      "success": false,
      "errors": [
        { "message": "\"uuid\" is required" }
      ]
    }
    {
      "message": "Case not found",
      "success": false
    }
    curl -X DELETE "https://<host>/v1/cases/<case-uuid>" \
      -H "x-api-key: <api-key>"
    docker-compose.yml
    services:
      monolith-api:
        container_name: monolith-api
        image: monolithforensics/monolith-api:latest
        restart: always
        volumes:
          - ./data/logs:/usr/src/app/data/logs
          - ./data/Monolith:/usr/src/app/data/Monolith
          - ./data/Monolith-forms:/usr/src/app/data/Monolith-forms
        ports:
          - "3001:3001"
        env_file:
          - .env
        mem_limit: 512m
    
      monolith-forms:
        container_name: monolith-forms
        image: monolithforensics/monolith-forms:on-prem
        restart: always
        volumes:
          - ./data/logs:/usr/src/app/data/logs
        ports:
          - "3003:3003"
        mem_limit: 150m
    
      monolith:
        container_name: monolith
        image: monolithforensics/monolith:on-prem
        restart: always
        volumes:
          - ./data/logs:/usr/src/app/data/logs
        ports:
          - "3005:3005"
        mem_limit: 150m
    
      mysql:
        container_name: mysql2
        image: mysql:8.0.16
        command: --default-authentication-plugin=mysql_native_password --sql_mode=""
        security_opt:
          - seccomp:unconfined
        restart: always
        ports:
         - "3307:3306"
        environment:
          MYSQL_ROOT_PASSWORD: ${MONOLITH_DB_PASSWORD}
          MYSQL_USER: ${MONOLITH_DB_USER}
          MYSQL_PASSWORD: ${MONOLITH_DB_PASSWORD}
          MYSQL_DATABASE: ${MONOLITH_DB_NAME}
        volumes:
          - ./data/mysql:/var/lib/mysql
          - ./init:/docker-entrypoint-initdb.d
        mem_limit: 512m
    
      nginx:
        container_name: nginx
        image: monolithforensics/nginx:latest
        restart: always
        ports:
          - "80:80"
          - "443:443"
        volumes:
         - ./data/logs/nginx:/var/log/nginx/
        # - /etc/nginx:/etc/nginx
        # - /etc/letsencrypt:/etc/letsencrypt/
    
      watchtower:
        container_name: watchtower
        image: containrrr/watchtower:latest
        restart: always
        environment:
         - WATCHTOWER_CLEANUP=true
        command: --interval 30
        volumes:
         - /var/run/docker.sock:/var/run/docker.sock
        mem_limit: 512m
    hashtag
    Template Syntax

    In order to use a template, you must insert placeholders that Monolith recognizes as case variables that can be replaced with case data:

    circle-info

    Be mindful of the placement of spaces within the template syntax - spaces matter.

    hashtag
    Standard Variable:

    Here is standard syntax for inserting basic values into a template -

    Please ensure that there is a space at the start and end of the variable name.

    At the time of report generation, Monolith will replace this template variable with the chosen data from the case:

    hashtag
    Lists and Loops

    Some data in a Monolith case consists of a list of items. For example, you may want to reference data from evidence items associated with a case. You may have ten evidence items in a case and you want that evidence data to be included in your templated report.

    To do this, we need to use some special syntax to loop through the list of evidence items and output each item's data into the template report.

    Here is the basic syntax to loop through a list of items in a template document:

    The above syntax will loop through a list of evidence items (stored in the "evidence" variable} and output a vertical list of evidence numbers.

    Loops are a very powerful way to create complex report templates and display just about any data that you want.

    hashtag
    Table Rows

    There is special syntax used to iterate through table rows - similar to the looping syntax above, you may want to iterate through a list and create table rows with data.

    Lets create a table that contains rows for each evidence item and columns for the evidence number and evidence provider (manufacturer, make, etc...)

    Given the following evidence data passed to the template from a case:

    Template Syntax for table -

    Generated Document Result -

    The "tr" prefix denotes that we are creating a loop through table rows.

    You'll notice that the table rows that have the start loop syntax and end loop syntax are not included in the final rendered table.

    Using this syntax you can create tables with templated lists pulled in from Monolith.

    hashtag
    Other Template Syntax

    There is more syntax available for templates, but the item listed about are the most common. If you need help with this or have more questions, reach out to us at [email protected].

    param to get a list of evidence items for one Monolith case.

    Query Params

    Name
    Type
    Description

    uuid

    string

    Monolith unique identifier for evidence item.

    evidence_id

    number

    Monolith unique identifier for evidence item.

    case_uuid

    string

    Monolith unique identifier for a Monolith case.

    case_id

    number

    Monolith unique identifier for a Monolith case.

    Connecting to File Shares

    Default Monolith deployments store files on the local file system of the host that is running Monolith's Docker containers.

    If you want to use an external file share, you will need to adjust the docker-compose.yml file to include configuration settings for the file share you would like to use.

    hashtag
    Windows/CIFS Share

    To connect to a basic Windows file share, add the following configuration to the bottom of your docker-compose.yml file:

    volumes:
      monolith:
        driver: local
        driver_opts:
          type: cifs
          o: "username=your_username,password=your_password,domain=your_domain"
          device: "//<SHARE_IP_ADDRESS>/share/data"
    • Replace your_username, your_password, your_domain with the appropriate credentials for accessing the CIFS share. your_domain is not required if your share does not have a specific domain, so you can omit this value.

    • Replace //<SHARE_IP_ADDRESS>/share with the network path to your CIFS share, but append the "/data" location at the end.

    To utilize this new volume, we need adjust the current volumes listed in each service block of the docker-compose.yml file.

    hashtag
    Final docker-compose.yml File with CIFS

    The following demonstrates the final docker-compose.yml file once a CIFS share has been configured:

    Update Evidence

    hashtag
    Update a current evidence item

    PUT /api/v1/evidence/:uuid?

    Use this API endpoint to update evidence items within Monolith.

    triangle-exclamation

    uuid is required.

    Request Body

    Name
    Type
    Description

    Case Progress

    Customize your Case Progress Bar

    Every case in Monolith has a progress bar that illustrates the current stage of a case. See also Evidence Progress.

    Case Progress Bar

    In the Case Progress section you can reorder, add, and delete these case progress options to best reflect your organization's workflow.

    Case Progress Items

    hashtag
    Reordering Case Progress Items

    In this section you can reorder your current Case Progress Items by dragging and dropping them into place. Your timeline will display the order of items from going from top to bottom.

    hashtag
    Create New Progress Item

    Select the "Create Case Progress" button to create a new progress item. By default, this item will be added to the end of the list.

    hashtag
    Delete a Progress Item

    Select the Delete button to the right of the item you would like to delete.

    circle-exclamation

    When deleting a Progress Item, you will be required to reassign the progress status of the cases associated with the progress item you are deleting.

    Create Evidence

    hashtag
    Create a new evidence item

    POST /api/v1/evidence

    Use this API endpoint to create evidence items within Monolith.

    Either case_id, case_uuid, or case_number is required.

    GET Cases

    hashtag
    GET api/v1/cases and GET api/v1/cases/:uuid

    hashtag

    Admin Log

    Admin log of user actions in Monolith

    Users with administrative access will be able to view a log of user activity throughout the Monolith application.

    hashtag
    Features

    The Admin Log table offers robust sort and filter functionality.

    Total Logs: The total number of logs can be found to the right of the filter button at the top of the table.

    Item Labels

    Upload DYMO Labels to use with evidence, storage items, or for people

    hashtag
    Adding Labels

    Click the "Add Label" button to upload a .dymo label file Monolith.

    hashtag

    {{ variable }}
    
    Ex: {{ case.case_number }}
    // Example Template Data in docx file
    This case was issued case number "{{ case.case_number }}".
    
    // Resulting document data in generated report
    THis case was issued case number "MF-22-1985".
    {% for item in evidence %}
    {{ item.evidence_number }}
    {% endfor %}
    // Here is a basic evidence list variable example:
    // evidence = [{evidence_number: "1234"}, {evidence_number: "45689"}]
    
    Example 1: Vertical list of evidence numbers - 
    
    // template syntax for a loop
    {% for item in evidence %}
    {{ item.evidence_number }}
    {% endfor %}
    
    // The above syntax will result in the following document output:
    1234
    45689
    
    Example 2: Horizontal list of evidence numbers - 
    // template syntax for a loop
    {% for item in evidence %}{{ item.evidence_number }} {% endfor %}
    
    // The above syntax will result in the following document output:
    1234 45689
    [
        {
            evidence_number: "1234", 
            manufacturer: "Apple"
        },
        {
            evidence_number: "45689", 
            manufacturer: "Dell"
        }
    ]
    Working with Variables

    Monolith fields for your organization's info (set in Organization Info), Evidence, Storage, People (Clients and Contacts) can be used as variables for custom DYMO labels.

    user_id

    number

    Unique identifier for a user.

    location_id

    number

    Unique identifier for an evidence location.

    include_coc

    boolean

    Attaches chain of custody records to each evidence item as an array.

    created_on

    ISO Date

    Date that the evidence was entered into Monolith.

    created_before

    ISO Date

    Evidence items that were created before this Date.

    created_after

    ISO Date

    Evidence items that were created after this Date.

    updated_on

    ISO Date

    Evidence items that were created on this Date.

    updated_before

    ISO Date

    Evidence items that were created before this Date.

    updated_after

    ISO Date

    Evidence items that were created after this Date.

    intake_date

    ISO Date

    The initial intake date of the evidence.

    intake_before

    ISO Date

    Evidence items that were initially received before this Date.

    intake_after

    ISO Date

    Evidence items that were initially received after this Date.

    location_id

    number

    Changes the location of the evidence item. Location ID can be retrieved from the Locations API.

    provider

    string

    Service provider or manufacturer of evidence.

    model_number

    string

    Evidence model number.

    unique_id

    string

    Unique ID associated with the device - usually a serial number or account name.

    size

    number

    Capacity of the evidence

    size_unit

    string

    Unit of capacity: KB, MB, GB, TB, PB

    description

    string

    Description of the item

    uuid

    string

    Unique ID of the evidence to be updated. REQUIRED

    evidence_number

    string

    Evidence number of the evidence being created.

    item_name

    string

    Name of the evidence item.

    type

    string

    The type of evidence item: (Smartphone, Server, Email, etc...)

    Reorder case progress items
    Create Progress Item
    Progress Items

    Evidence API

    Get Evidencechevron-rightCreate Evidencechevron-rightUpdate Evidencechevron-rightDelete Evidencechevron-rightMigrate Evidencechevron-right

    // Some code
    monolith-api:
      container_name: monolith-api
      image: monolithforensics/monolith-api:latest
      restart: always
      volumes:
        - monolith:/usr/src/app/data
      ports:
        - "3001:3001"
      env_file:
        - .env
      mem_limit: 512m
    docker-compose.yml
    services:
      monolith-api:
        container_name: monolith-api
        image: monolithforensics/monolith-api:latest
        restart: always
        volumes:
          - monolith:/usr/src/app/data
        ports:
          - "3001:3001"
        env_file:
          - .env
        mem_limit: 512m
    
      monolith-forms:
        container_name: monolith-forms
        image: monolithforensics/monolith-forms:on-prem
        restart: always
        volumes:
           - monolith:/usr/src/app/data
        ports:
          - "3003:3003"
        mem_limit: 150m
    
      monolith:
        container_name: monolith
        image: monolithforensics/monolith:on-prem
        restart: always
        volumes:
          - monolith:/usr/src/app/data
        ports:
          - "3005:3005"
        mem_limit: 150m
    
      mysql:
        container_name: mysql2
        image: mysql:8.0.16
        command: --default-authentication-plugin=mysql_native_password --sql_mode=""
        security_opt:
          - seccomp:unconfined
        restart: always
        ports:
         - "3307:3306"
        environment:
          MYSQL_ROOT_PASSWORD: ${MONOLITH_DB_PASSWORD}
          MYSQL_USER: ${MONOLITH_DB_USER}
          MYSQL_PASSWORD: ${MONOLITH_DB_PASSWORD}
          MYSQL_DATABASE: ${MONOLITH_DB_NAME}
        volumes:
          - ./data/mysql:/var/lib/mysql
          - ./init:/docker-entrypoint-initdb.d
        mem_limit: 512m
    
      nginx:
        container_name: nginx
        image: monolithforensics/nginx:latest
        restart: always
        ports:
          - "80:80"
          - "443:443"
        volumes:
         - monolith:/usr/src/app/data
    
      watchtower:
        container_name: watchtower
        image: containrrr/watchtower:latest
        restart: always
        environment:
          - WATCHTOWER_CLEANUP=true
        command: --interval 30
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
        mem_limit: 512m
    
    # Connect CIFS share
    volumes:
      monolith:
        driver_opts:
          type: cifs
          o: username={username},password={password},vers=3.0
          device: //192.168.1.12/Monolith/data
    If evidence_number is not provided, Monolith will automatically generate a value.

    Request Body

    Name
    Type
    Description

    case_id

    number

    Unique ID of a case to link evidence.

    case_uuid

    string

    Unique ID of a case to link evidence.

    case_number

    string

    Case number to link evidence.

    evidence_number

    string

    Evidence number of the evidence being created.

    hashtag
    Custom Fields

    To create custom fields for your evidence in an API request, you must include a custom_fields value that consists of an array of JSON objects in the following form:

    Name
    Type
    Description

    field_id

    integer

    Unique id of the custom field

    value

    string

    This is the value to be set for the custom field

    The field_id is the numeric identifier for the custom field you are setting a value for.

    Path Params
    Name
    Type
    Required
    Description

    uuid

    string

    No

    Case UUID in route path. Optional because route is /:uuid?.

    hashtag
    Query Params

    Only these query params are accepted (unknown params return 400):

    Name
    Type
    Required
    Validation / Behavior

    pageSize

    integer

    No

    Must be positive integer. Service caps effective page size to < 1000; otherwise defaults to 1000.

    page

    integer

    No

    Must be positive integer.

    search

    string

    No

    hashtag
    Success Response (200)

    Returns a pagination object:

    hashtag
    Error Responses

    • 400 validation error:

    • 500 server error:

    hashtag
    Example

    Filters: Admin logs can be filtered by Timestamp, User, and/or Admin log

    Search: Admin logs can also be searched to quickly find specific items

    Admin log

    You can find more on filtering, searching, and customizing views in our Tables UI documentation.

    Case Statuses

    View, Create, and Delete your Case Statuses

    In this section you can view all of the Case Statuses associated with your organization. This is also where you can create new Case Statuses and delete your current Case Statuses.

    circle-info

    The "Active" and "Closed" statuses are required by Monolith and cannot be altered or deleted.

    View your Case Statuses

    hashtag
    Creating a New Case Status

    Select the "Create Case Status" button and enter the name of the Case Status you would like to create.

    hashtag
    Delete a Case Status

    You can also delete Case Statuses from this section.

    circle-exclamation

    When deleting a Case Status, you must re-assign the cases associated with that status to another pre-existing Case Status.

    Clients

    View clients associated with your organization

    In this section you can see a list of all clients associated with your organization in a table view.

    Clients Table

    hashtag
    Create Client

    From this view you can also create new clients by clicking the "New Client" button above the clients table.

    Create Client

    Delete Evidence

    hashtag
    Delete a current evidence item

    DELETE /api/v1/evidence/:uuid?

    Use this API endpoint to delete evidence items within Monolith.

    triangle-exclamation

    uuid is required.

    Request Body

    Name
    Type
    Description

    Audit Features & Layout

    Main Audit Details

    hashtag
    Navigation Tabs

    The main audit view contains two tabs for navigation.

    Audit Items - This is where the audit process takes place and contains the audit details and items.

    Audit Logs - Contains a table of logs related to auditing items.

    hashtag
    Audit Overview

    This sub-tab contains the details about the audit you are viewing.

    This section shows you the current status of the audit, "Open" or "Complete", along with other details such as the audit due date, assignment, and filter used to select the audit items.

    hashtag
    Other Sub-tabs

    The remaining tabs: All, Pending, Passed, & Failed, list the audit items included with the audit. The items are group by thier current status.

    These tabs are used when conducting the audit process.

    .env

    hashtag
    Example

    This is an environment variables file that is loaded into the Monolith Docker deployment at build/run time. These values determine various setup options and licensing information for your Monolith deployment.

    The values are typically set for you when you purchase Monolith.

    circle-info

    UPDATE Cases

    hashtag
    PUT /api/v1/cases/:uuid

    Updates an existing case identified by UUID.

    hashtag

    Equipment

    Manage your lab equipment

    The Equipment allows you to manage your lab equipment including purchase date, costs, and locations. From this table you can also export the details of this table to an excel document.

    hashtag
    Exporting to Excel

    Your equipment list to an excel document by selecting the Download option from the table menu.

    // Custom Fields Example
    "custom_fields": [
        {
            "field_id": "1",
            "value": "I am some custom data."
        },
        {
            "field_id": "2",
            "value": "This is some separate custom field data."
        }
    ]
    {
      "data": [
        {
          "case_id": 123,
          "uuid": "abc123...",
          "case_number": "CASE-0001",
          "case_name": "Example Case"
        }
      ],
      "total": 1,
      "pageCount": 1,
      "currentPage": 1,
      "nextPage": null,
      "pageSize": 1000
    }
    {
      "message": "Invalid case data",
      "success": false,
      "errors": [
        { "message": "\"page\" must be a positive number" }
      ]
    }
    {
      "message": "Error getting case",
      "success": false
    }
    curl -X GET "https://<host>/v1/cases?page=1&pageSize=25&search=fraud" \
      -H "x-api-key: <api-key>"

    item_name

    string

    Name of the evidence item.

    type

    string

    The type of evidence item: (Smartphone, Server, Email, etc...)

    location_id

    number

    Sets the location of the evidence item at creation. Location ID can be retreived from locations API.

    provider

    string

    Service provider or manufacturer of evidence.

    model_number

    string

    Evidence model number.

    unique_id

    string

    Unique ID associated with the device - usually a serial number or account name.

    size

    number

    Capacity of the evidence

    size_unit

    string

    Unit of capacity: KB, MB, GB, TB, PB

    description

    string

    Description of the item

    custom_fields

    array

    Array of custom field objects

    Full-text style search across multiple case-related fields.

    uuid

    string

    No

    Alternate UUID filter via query.

    case_id

    integer

    No

    Must be positive integer.

    user_id

    integer

    No

    Must be positive integer. Filters by assigned user or case lead.

    client_id

    integer

    No

    Must be positive integer.

    case_number

    string

    No

    Max length 255. Exact match filter.

    uuid

    string

    Unique ID of the evidence to be updated. REQUIRED

    Create new Case Status

    Make sure the file name is changed to ".env" from "env.txt".

    hashtag
    Values

    hashtag
    MONOLITH_LICENSE_KEY

    This is a license key that allows for your Monolith deployment to get licensing information from our online license server. Using this value ensures that your Monolith deployment always has up to date license info.

    This key will be provided to you upon purchase.

    hashtag
    MONOLITH_LICENSE_TOKEN

    This is a signed token that contains licensing information for your Monolith purchase. This can be used to utilize cached license info without needed to query our licensing server for license info.

    This is a good option for Monolith deployments that exist in air-gapped environments.

    If this value is provided, Monolith will use this instead of the license key value.

    hashtag
    ACCESS_TOKEN_SECRET

    This should be a long alphanumeric string. This value is used for various cryptographic operations related to access tokens, encryption, and session management.

    hashtag
    REFRESH_TOKEN_SECRET

    This should be a long alphanumeric string. This value is used for various cryptographic operations related to access tokens, encryption, and session management.

    hashtag
    MONOLITH_DB_NAME

    This is the name of the MySQL schema that the Monolith API server should connect to.

    hashtag
    MONOLITH_DB_HOST

    This is the domain or IP address of the MySQL database host that the Monolith API server should connect to.

    hashtag
    MONOLITH_DB_USER

    This is the MySQL user name that should be used for database connections.

    circle-info

    NOTE: This should only be root if you are using the default MySQL container. If using an external MySQL database, you should provision a user account other than root to use here.

    hashtag
    MONOLITH_DB_PORT

    The port that should be used for database connections. The default MySQL port is 3306.

    hashtag
    MONOLITH_DB_PASSWORD

    MySQL password used to establish database connections.

    hashtag
    MONOLITH_ADMIN_FIRST_NAME

    First name of initial Monolith user. Only required for first time setup/deployment.

    hashtag
    MONOLITH_ADMIN_LAST_NAME

    Last name of initial Monolith user. Only required for first time setup/deployment.

    hashtag
    MONOLITH_ADMIN_EMAIL

    Email of initial Monolith user. Only required for first time setup/deployment.

    hashtag
    MONOLITH_ADMIN_PASSWORD

    Password of initial Monolith user - this will be used for firs time login to Monolith. Only required for first time setup/deployment.

    hashtag
    FORM_TENANT_NAME

    Initial tenant name for your Relay deployment. Only required for first time setup/deployment.

    hashtag
    FORM_ORG_NAME

    Organization name for your Relay deployment. Only required for first time setup/deployment.

    hashtag
    FORM_TENANT_SLUG

    URL slug for your Relay deployment. Only required for first time setup/deployment.

    hashtag
    FORM_TENANT_EMAIL

    Initial tenant email for your Relay deployment. Only required for first time setup/deployment.

    hashtag
    API_INSTANCE_COUNT

    The Monolith API server runs in "cluster" mode. This allows multiple instances to run at the same time, which increases scalability. This value defaults to 1 and is disabled by default. You will likely not need to use this value, but contact support if you think this is needed.

    hashtag
    FILE_SERVICE

    This value determines whether Monolith will use a local file system or Amazon S3 to store Monolith files. Allowed values are "S3" or "Local". The default value is "Local". If you set this to "S3", you will also need to set the S3 access key values.

    hashtag
    AWS_ENDPOINT

    This value configures Monolith to use the correct AWS region with your S3 bucket.

    hashtag
    MONOLITH_FORMS_BUCKET

    The S3 bucket where you would like to store files uploaded to Relay.

    hashtag
    MONOLITH_CLOUD_BUCKET

    The S3 bucket where you would like to store files uploaded to Monolith.

    hashtag
    S3_ACCESS_KEY

    AWS access key to use S3 APIs for file storage.

    hashtag
    S3_SECRET_KEY

    AWS secret key to use S3 APIs for file storage.

    hashtag
    SMTP_HOST

    Email host domain to enable email capabilities in Monolith.

    hashtag
    SMTP_PORT

    Email port to enable email capabilities in Monolith. This value is typically 587.

    hashtag
    SMTP_USER

    User value to enable email capabilities in Monolith. May not be required if you are using an SMTP relay.

    hashtag
    SMTP_PASSWORD

    User password to enable email capabilities in Monolith. May not be required if using an SMTP relay.

    ### Application Settings ###
    
    ### Mandatory Options ###
    
    ### Monolith License key
    # Used to activate license
    
    MONOLITH_LICENSE_KEY=
    MONOLITH_LICENSE_TOKEN=
    
    ### API Token Secrets
    # Used to generate secure access tokens and refresh tokens
    # Set these to long, random alphanumeric strings
    
    ACCESS_TOKEN_SECRET=
    REFRESH_TOKEN_SECRET=
    
    
    ### Monolith Database Config
    
    MONOLITH_DB_NAME=monolith
    MONOLITH_DB_USER=monolith
    MONOLITH_DB_PORT=3306
    MONOLITH_DB_HOST=mysql
    MONOLITH_DB_PASSWORD=
    
    ### Initial Monolith User - Only needed for initial setup
    
    MONOLITH_ADMIN_FIRST_NAME=
    MONOLITH_ADMIN_LAST_NAME=
    MONOLITH_ADMIN_EMAIL=
    MONOLITH_ADMIN_PASSWORD=
    
    ### Monolith Forms Settings
    
    FORM_TENANT_NAME=
    FORM_ORG_NAME=
    FORM_TENANT_SLUG=
    FORM_TENANT_EMAIL=
    
    ### OPTIONAL SETTINGS ###
    
    ### API Instance Total
    # Set the number of API cluster instances to run
    # default is 1 - which should be plenty for most deployments
    
    #API_INSTANCE_COUNT=1
    
    ### File Service
    # Choose the file service you wish to use
    # Options are "S3" and "LOCAL"
    # Defaults to "LOCAL" if not set
    # S3 keys required if using S3 service
    
    # FILE_SERVICE=S3
    # FILE_SERVICE=LOCAL
    
    
    
    ### AWS S3 Config
    
    # AWS_ENDPOINT={aws_endpoint}
    # MONOLITH_FORMS_BUCKET={aws_bucket_name}
    # MONOLITH_CLOUD_BUCKET={aws_bucket_name}
    # S3_ACCESS_KEY={s3_access_key}
    # S3_SECRET_KEY={s3_secret_key}
    
    ### SMTP settings
    SMTP_HOST=
    SMTP_PORT=
    SMTP_USER=
    SMTP_PASSWORD=
    Slug Example
    my-forensic-company
    Path Params
    Name
    Type
    Required
    Description

    uuid

    string

    Yes

    UUID of case to update.

    hashtag
    Body Params

    Only these fields are accepted (unknown fields return 400):

    Name
    Type
    Required
    Validation / Notes

    case_name

    string

    No

    Max 255, cannot contain `+ < > : " / \

    case_number

    string

    No

    Max 255, same character restrictions

    description

    string

    No

    hashtag
    Success Response (200)

    hashtag
    Error Responses

    • 400 validation error:

    • 400 when UUID does not resolve to a case:

    • 500 server error:

    hashtag
    Example

    All of the columns you have selected in your table view will be shown in your exported excel document.

    Forensic Equipment Spreadsheet

    hashtag
    Add Equipment Item

    You can add new equipment to your list by clicking the "New Equipment" button from the table view.

    Create Equipment

    You can include details such as Vendor, Model, Serial Number, Purchase Date, Cost, and Location.

    hashtag
    Edit Equipment Item

    You can also edit all of the details of your equipment items by opening a flyout menu from the table view.

    hashtag
    Delete Equipment Item

    From the flyout menu you can delete Equipment Items.

    Edit and Delete Equipment
    table
    Forensic Equipment table
    Export to excel

    Monolith Containers (Docker)

    Monolith utilizes Docker for on-premises deployments

    hashtag
    Docker

    Docker is a platform that uses OS-level virtualization to deliver software in packages called "containers". Docker is used to deploy, manage, and run containers within a variety of environments.

    Monolith is deployed in on-premises environments using containers and Docker is recommended as the container management system to run and manage Monolith.

    hashtag
    How Monolith Works

    Monolith runs in a server-client configuration where users access and manage data via the Monolith desktop client or web application. A Monolith API server runs on a centralized host and handles HTTP requests from the desktop clients and web application. The API server communicates with a database to create, update, delete, and read data from the database.

    The image above illustrates the basic setup of containers within an on-premises deployment. The containerized nature of Monolith allows for flexible and scalable on-premises deployment options.

    hashtag
    Monolith Containers

    hashtag
    NGINX proxy

    This is a web server container that handles incoming requests from clients and proxies traffic to one of 3 containers: Monolith Web App,Monolith API, or the Relay App. This container can be configured to include custom domain TLS certificates.

    hashtag
    Monolith App

    This is the Monolith web application that can be access via a web browser. To access this application, you just need to navigate to the host system IP address or assigned domain name in a web browser - Ex: https://192.168.1.12

    hashtag
    Monolith API

    This container hosts an API server that can send authenticated requests for data to and from the Monolith and Relay web applications. This container connects directly to the MySQL server to store data and a file system to store files uploaded to Monolith.

    hashtag
    Relay App

    The Relay app container runs the Relay application. Relay is a web-based request system that allows non-monolith users to submit requests for forensic services.

    hashtag
    MySQL DB

    This container runs a MySQL database that stores data accessed and managed by users of Monolith and Relay. The MySQL database does not have to be a container inside Docker. You can use an external hosted MySQL database if you wish.

    hashtag
    File System

    This is not a container, it represents your chosen file system component to store files that are uploaded to Monolith and Relay. This can be the file system on the host system, AWS S3 object storage, or a network file share.

    hashtag
    Watchtower

    Watchtower is an optional container that manages automatic updates for the other containers. Watchtower checks for container updates every 30 seconds. When an update is available, Watchtower downloads the new container images and replaces the current containers with new containers built from the updates container images.

    Dymo Label Printers

    hashtag
    Using your DYMO Printer with Monolith

    The first step of configuring your DYMO printer with Monolith is to ensure you have the latest DYMO software installed on the machine that is using Monolith.

    Latest versions of the DYMO software can be downloaded herearrow-up-right.

    MacOS:

    After install, ensure that the DYMO.WebAPI.Mac.Host software is running in your menu bar (it is a small blue DYMO connect icon on the menu bar on the top of your screen.

    If it is not running, find "DYMO.WebAPI.Mac.Host" in your Applications folder and launch the program.

    Once running, when you go to in Monolith you will see your DYMO printer as an available printing option.

    hashtag
    MacOS Troubleshooting Tips

    When troubleshooting DYMO issues, we have found a complete uninstall and re-install fixes most issues. It's essential to remove all of the supporting files and certificates before re-installing the DYMO software.

    hashtag
    How to uninstall all DYMO software from your Mac

    1. Remove printer(s)

    Open System Preferences > Printers & Scanners. Click the – button to remove the printer. (Do this for each DYMO printer shown)

    1. Delete Application and Folder

    • Go to your Applications folder and delete all instances of DYMO applications

    • Open the Library/Extensions folder and Delete DYMOUsbPrinterClassDriver.kext, if found.

    • Open the Library/Frameworks folder and Delete the DYMO folder, if found.

    1. Delete all DYMO Certificates from Keychain

    • Open the Utilities folder (Finder>Go>Applications>Utilities)

    • Double-Click Keychain Access to open keychain

    • Type “DYMO” in the search field on the upper right

    After these steps are complete, re-install your DYMO software and try printing from Monolith.

    {
      "success": true,
      "message": "Case updated successfully",
      "case_id": 123
    }
    {
      "message": "Invalid case data",
      "success": false,
      "errors": [
        { "message": "Invalid date format for case_open_date, must be YYYY-MM-DD" }
      ]
    }
    {
      "message": "Case not found",
      "success": false
    }
    {
      "message": "Error updating case",
      "success": false
    }
    curl -X PUT "https://<host>/v1/cases/<case-uuid>" \
      -H "Content-Type: application/json" \
      -H "x-api-key: <api-key>" \
      -d '{
        "case_name": "Updated Case Name",
        "description": "Updated synopsis",
        "status": "Closed",
        "type": "Investigation",
        "case_closed_date": "2026-02-25"
      }'

    Max 2000

    status

    string

    No

    Max 255

    type

    string

    No

    Max 255

    case_lead_id

    integer

    No

    Positive integer

    client_id

    integer

    No

    Positive integer

    case_open_date

    string

    No

    Must be strict YYYY-MM-DD and valid calendar date

    case_closed_date

    string

    No

    Must be strict YYYY-MM-DD and valid calendar date

    Open the Library/LaunchAgents folder and Delete com.DYMO.dls.webservice.plist, if found.
  • Open the Library/LaunchDaemons folder and Delete com.DYMO.pnpd.plist, if found.

  • Open the Library/Printers folder and Delete the DYMO

  • Right-Click the certificate item (if found) and select Delete
  • Type “localhost” in the search field on the upper right

  • Click any item that appears and verify its properties show “issued by DYMO …” If so, then Right-Click and select Delete

  • print labels
    Monolith On-Premises Infrastructure

    CREATE Cases

    hashtag
    POST api/v1/cases

    Creates a new case.

    hashtag
    Body Params

    Only these fields are accepted (unknown fields return 400):

    Name
    Type
    Required
    Validation / Notes

    hashtag
    Success Response (200)

    hashtag
    Error Responses

    • 400 validation error:

    • 400 duplicate case number:

    • 500 server error:

    hashtag
    Example

    Item Number Formats

    Set naming conventions for Case, Evidence, and Storage items

    In this section, Monolith allows you to customize your Case number, Evidence number, and Storage number format.

    Case number format selection
    Evidence number format selection
    Storage number format selection

    case_status

    string

    No

    Max 255.

    case_type

    string

    No

    Max 255.

    case_lead_id

    integer

    No

    Integer.

    case_open_date

    date

    No

    Valid date value.

    user_group_uuid

    string or string[]

    No

    Either one UUID string or array of UUID strings.

    client_id

    integer

    No

    Integer.

    case_name

    string

    Yes

    Max 255, cannot contain any of: `+ < > : " / \

    case_number

    string

    No

    Max 255, same character restrictions as case_name; must be unique if provided.

    description

    string

    No

    Max 2000.

    {
      "success": true,
      "message": "Case Created",
      "case_id": 123,
      "uuid": "abc123...",
      "case_number": "CASE-0001",
      "case_name": "New Case"
    }
    {
      "message": "Invalid case data",
      "success": false,
      "errors": [
        { "message": "\"case_name\" is required" }
      ]
    }
    {
      "message": "Case number already exists. Case number must be unique",
      "success": false
    }
    {
      "message": "Error creating case",
      "success": false
    }
    curl -X POST "https://<host>/v1/cases" \
      -H "Content-Type: application/json" \
      -H "x-api-key: <api-key>" \
      -d '{
        "case_name": "Customer Investigation",
        "case_number": "INV-2026-001",
        "description": "Investigation details",
        "case_open_date": "2026-02-25",
        "case_lead_id": 12,
        "client_id": 44,
        "user_group_uuid": ["group-uuid-1", "group-uuid-2"]
      }'

    Template Variables

    hashtag
    Case Report Variables

    These variables represent data contained within a report instance of a case.

    circle-info

    Currently, the summary and analysis variables do not include any rich text formatting like bold, bullets, or underline. Pasted images are also not included in the template when generated.

    Variable Name
    Description

    hashtag
    Organization Variables

    These are template variables that reference your organization information entered into Monolith.

    Variable Name
    Description

    hashtag
    Current User Variables

    These are variables that reference the currently logged in Monolith user.

    Variable Name
    Description

    hashtag
    Case Variables

    These are variables that contain data related to the current case you are generated a report for.

    Variable Name
    Type
    Description

    hashtag
    Evidence Variables

    These are variables that contain data related to evidence items within a case.

    Remember - the evidence object within a template is a list of evidence items. To use this data in a template, The values must be inside a loop:

    circle-info

    Evidence photos are stored in an array/list and must be referenced within for loop syntax.

    Variable Name
    Type
    Description

    hashtag
    Chain of Custody Variables

    The chain of custody records for an evidence item can be accessed by using the {{ item.coc }} variable listed above. The example below shows how to access COC records for each evidence item:

    Variable Name
    Type
    Description

    hashtag
    Acquisition Variables

    These are variables that contain data related to acquisition items within a case.

    Remember - the acquisitions object within a template is a list of acquisition records. To use this data in a template, The values must be inside a loop:

    Variable Name
    Type
    Description

    hashtag
    Notes Variables

    These variables represent the data associated with notes created in Monolith. The notes contain rich text content as well as metadata that can be placed into a template report.

    circle-info

    Notes data can be accessed using the "notes" variable

    In order to render the note content as rich text data within the Word document, be sure to use the following syntax:

    Similar to the evidence data, the 'notes' template data is a list of notes, so you must place the note template data inside of a loop to access it and display note content within the template report.

    Variable Name
    Type
    Decription

    {{ org.website }}

    Website URL set for your organization.

    {{ user.user_id }}

    Integer based user id stored by Monolith.

    {{ case.case_open_date }}

    Date

    Case open date in the format "YYYY-MM-DD".

    {{ case.case_closed_date }}

    Date

    Case closed date in the format "YYYY-MM-DD".

    {{ case.last_activity_date }}

    Date

    Case last activity date in the format "YYYY-MM-DD".

    {{ case.case_status }}

    String

    Current status of case.

    {{ case.case_type }}

    String

    Current case type.

    {{ case.case_progress }}

    String

    Current progress status of case.

    {{ case.description }}

    String

    Description of the current case.

    {{ case.case_lead }}

    {user_id, first_name, last_name, full_name, email, title}

    Properties related to the user assigned as a case lead.

    {{ case.custom_field_id }}

    {name, value}

    Case custom field value - replace 'id' with custom field id number.

    {{ item.provider }}

    String

    Service provider/manufacturer

    {{ item.item_name }}

    String

    Item name

    {{ item.capacity }}

    Number

    Size of item

    {{ item.capacity_unit }}

    String

    Size units: KB, MB, GB, TB

    {{ item.size }}

    Number

    Size of item

    {{ item.size_unit }}

    String

    Size units: KB, MB, GB, TB

    {{ item.description }}

    String

    Description of item

    {{ item.progress }}

    String

    Progress status of item

    {{ item.created_on }}

    Timestamp

    Creation Timestamp

    {{ item.linked_contact }}

    String

    Name of linked contact

    {{ item.evidence_photos }}

    [{name, image}]

    Array/list of evidence photos

    {{ item.custom_field_id }}

    {name, value}

    Custom field value - ID is a number that uniquely identifies a custom field.

    {{ item.coc }}

    List of chain of custody records for this evidence item.

    {{ record.reason }}

    string

    Notes or reason provided for COC event.

    {{ item.size }}

    Number

    Size of item in numbers.

    {{ item.size_unit }}

    String

    Units of item size: KB,MB,GB,TB.

    {{ item.format }}

    String

    Format of acquisition Ex. E01, DD, ZIP.

    {{ item.type }}

    String

    Type of acquisition: Ex. File System, Physical, Chip-off.

    {{ item.status }}

    String

    Active or Deleted.

    {{ item.acquired_on }}

    Date

    Date of acquistion.

    {{ item.created_on }}

    Date

    Date of record creation.

    {{ item.acquired_by }}

    {full_name, user_id, email, title}

    The user that acquired this data.

    {{ item.linked_contact }}

    {name, contact_id}

    The person that this acquisition is associated with.

    {{ item.evidence }}

    {evidence_id, uuid, evidence_number}

    Evidence linked to acquisition.

    {{ item.tool }}

    {name, version}

    Software uses to create acquisition.

    {{ item.storage }}

    {storage_id, uuid, storage_number}

    Storage item where acquisition is stored.

    {{ item.duration }}

    {hours, mins}

    Time spent creating acquisition.

    {{ item.custom_field_id }}

    {name, value}

    Custom Field Value

    {{ note.updated_on }}

    ISO String

    Last Update time of note

    {{ note.created_by }}

    User Object

    User that created the note

    {{ note.linked_object }}

    Object Link {

    type: string,

    name: string,

    id: string

    }

    This is an object that is linked to the note such as a case, evidence item, or task.

    {{ report.summary }}

    This is the report summary data that was entered into the summary tab of a Monolith case report.

    {{ report.analysis }}

    This is the analysis data that was entered into the analysis tab of a Monolith case report.

    {{ report.name }}

    This is the name of your report instance.

    {{ org.name }}

    Name of your agency, company, or organization.

    {{ org.address }}

    Street address of organization.

    {{ org.city }}

    City location of your organization.

    {{ org.state }}

    State or province of your organization

    {{ org.zipcode }}

    Postal code of your organization

    {{ org.email }}

    Email set for your organization.

    {{ user.first_name }}

    First Name of user. (Jane)

    {{ user.last_name }}

    Last name of user. (Doe)

    {{ user.full_name }}

    First name and last name combined. (Jane Doe)

    {{ user.email }}

    User email address.

    {{ user.title }}

    User title set in Monolith.

    {{ user.office }}

    Office location that the user is assigned to.

    {{ case.case_id }}

    Number

    Integer based, unique id set by Monolith for the case.

    {{ case.uuid }}

    String

    String based, unique id set by Monolith for the case.

    {{ case.case_number }}

    String

    Case number for the case.

    {{ case.case_name }}

    String

    {{ item.evidence_id }}

    Number

    Unique ID of evidence

    {{ item.uuid }}

    String

    Unique ID of evidence

    {{ item.evidence_number }}

    String

    Item evidence number

    {{ item.evidence_type }}

    String

    {{ record.type }}

    string

    Type of COC record: Intake, Release, Move, etc...

    {{ record.custody_to }}

    string

    Person or location that received the item.

    {{ record.custody_from }}

    string

    Person or location that provided the item.

    {{ record.timestamp }}

    string

    {{ item.acquisition_id }}

    Number

    Unique ID of item.

    {{ item.uuid }}

    String

    Unique ID of item.

    {{ item.name }}

    String

    Name of item.

    {{ item.description }}

    String

    {{r note.content }}

    Rich Text or Plain Text

    This is the note content - use 'r' to output as rich text. Includes pasted images as well.

    {{ note.title }}

    String

    This is the note title

    {{ note.uuid }}

    String

    This is the unique identifier assigned by Monolith to the note.

    {{ note.created_on }}

    ISO String

    Case name/reference set for the case.

    Type of evidence

    UTC timestamp of COC event.

    Description of item.

    Creation timestamp of note

    Example:
    {% for item in evidence %}
    {{ item.evidence_id }}
    {% endfor %}
    Chain of Custody Example:
    
    // Loop through evidence items
    {% for item in evidence %}
    
        // Loop through evidence item COC records
        {% for record in item.coc %}
        
            // Output COC record details
            {{ record.type }}
            {{ record.custody_to }}
            {{ record.custody_from }}
            {{ record.timestamp }}
            {{ record.reason }}
            
        // End loop for COC records
        {% endfor %}
        
    // End loop for evidence items
    {% endfor %}
    Example:
    {% for item in acquisitions %}
    {{ item.acquisition_id }}
    {% endfor %}
    // Notes template example
    // use 'r' inside the template declaration to output the note content as rich text
    // remove the 'r' to output as plain text data
    
    {% for note in notes %}
    {{r note.content }}
    {% endfor %}
    Chain of Custody List

    People