Skip to main content
Have a personal or library account? Click to login
MIFCSheet: An Open-Source Progressive Web Application for Vegetation Inventory Data Collection Cover

MIFCSheet: An Open-Source Progressive Web Application for Vegetation Inventory Data Collection

Open Access
|Jul 2026

Full Article

(1) Overview

Introduction

Vegetation and forest inventories are fundamental for ecological research, forest management, and conservation planning. Traditional data collection methods rely heavily on paper forms, which require later digitization and are prone to transcription errors and data loss. Although digital tools have been introduced for forest inventories in large national projects (e.g., PDAs in China’s fourth NFI) (1, 2), many institutions still rely on paper or mixed approaches, such as the Spanish National Forest Inventory (3).

A range of mobile applications has been proposed to support digital inventory workflows, from form-based data entry to sensor-assisted measurements enabled by commercial off-the-shelf (COTS) hardware. Examples include ArcGIS-based collection for urban trees (4), Android applications for storing tree attributes (5), ODK-based forms for community monitoring (6, 7), and biodiversity assessment applications (8). Other tools target semi-automated measurements using device sensors. For instance, ForestScanner leverages iOS LiDAR to estimate DBH and spatial coordinates (9), while Android tools such as Trestima and Katam use image and video capture for stand metrics (10). However, sensor performance can degrade under challenging field conditions, and some approaches still require substantial post-processing, limiting their operational uptake.

This paper introduces MIFCSheet, a progressive web application (PWA) for structured field data collection. The application was developed to address the aforementioned limitations by providing a lightweight, open-source, and configuration-driven solution that supports adaptation to different inventory protocols. Compared with native applications, PWAs are (1) platform-independent, (2) capable of offline operation and integration with device features such as cameras, (3) lightweight, enabling reduced resource consumption, and (4) easy to customize using standard web technologies (11). MIFCSheet was designed to replace manual note-taking and to reduce end-to-end data collection time.

MIFCSheet is not an automated measurement tool; rather, it provides a digital form for manual completion by field technicians. The software targets researchers, forest managers, and practitioners who require reliable and efficient data collection tools in remote environments. It is currently used in the project Dynamic analysis of the resilience of forest landscapes affected by fire using multisensorspectral indicators (PaF) (12). Its performance was evaluated against paper-based and audio-based data collection methods. Transcription was the main source of delay in both alternatives, with average times 25.2 min for audio and 13.2 min for paper. When field collection and transcription were considered together, MIFCSheet demonstrated the best overall performance, with an average completion time of 16.9 min, compared with 27.6 min for paper and 37.5 min for audio. This represents end-to-end time savings of 39% and 55%, respectively.

MIFCSheet was originally developed for the Linear Transect Sampling Method for Phanerophytes and Chamaephytes (MIFC), which is used to characterize vegetation in burned and unburned areas (13). The application is implemented using standard web technologies (HTML, CSS, and JavaScript) and can be installed and operated offline through modern browser capabilities.

Implementation and Architecture

The application is implemented in plain HTML, CSS, and JavaScript (Figure 1). Core functions are organized using ES6+ class-based modules to improve readability and reuse. On first use, the application and external API files are retrieved from the network and cached by the Service Worker API. Subsequent use loads resources from the cache, enabling full offline operation—a key requirement in dense vegetation where connectivity is unreliable.

Figure 1

Application schema: application and external API files are retrieved once and cached by the Service Worker API. Subsequent requests are served from the cache.

Inventory data are stored locally using IndexedDB (14), which supports transactional operations and efficient queries. The schema (Figure 2) includes an inventory table for metadata and a row table for per-species entries. Images can be associated with an inventory or with specific rows. Storage capacity depends on the device, but inventories are typically small; for example, an inventory with 15 parameters and 300 rows is approximately 20 KB (excluding images).

Figure 2

Database schema: tables, columns, and data types used by the application.

The form is rendered as a single page that mirrors the paper workflow (Figure 3). Section A stores metadata, and Section B stores species rows. The UI is responsive and adapts to different screen sizes.

Figure 3

MIFCSheet interface. The top section shows the paper sheet layout that the application emulates. Bottom left: new inventory view with stored inventories listed. Bottom right: an open inventory with rows for data entry.

On first load, the user enters metadata and selects Create inventory. The inventory is stored and an initial blank row is created. Additional species are added via Add row. Table 1 summarizes core functions. Dates are not entered manually because creation time is recorded automatically.

Table 1

Application functions.

FUNCTIONDESCRIPTION
Create inventoryInitialize a new inventory.
Open inventoryLoad a saved inventory and display its rows.
Download inventoryExport inventory metadata, rows, and images as a ZIP archive.
Delete inventoryRemove an inventory from local storage.
Add rowInsert a new blank row in the open inventory.
Delete rowDelete selected row(s) from local storage.
Add pictureCapture an image and store it. If a row is selected, link it to that row; otherwise link it to the inventory.
Close inventoryClose the current inventory and return to the main page.

Exports are packaged as a ZIP archive named after the inventory. It includes inventory_metadata.csv and rows.csv. If images exist, additional folders store inventory-level and row-level images (named by image ID and row ID). Image formats depend on the device camera.

The selected architecture also has some limitations. First, the application relies on browser-supported web technologies, such as IndexedDB and the Service Worker API, so compatibility may vary across browsers and devices. This should be considered when deploying or maintaining the application. In addition, storing data locally reduces dependence on a server-side database; however, it also introduces risks if the device is lost, damaged, or cleared, or if browser storage is manually deleted. At the same time, this local-only approach improves data protection because the application operates entirely on the user’s device: all data processing occurs locally, and no data are transmitted to external servers or other devices, thereby minimizing privacy risks and enhancing user control over sensitive information.

Quality Control

Data integrity is maintained through structured parsing, validation of configured fields, and controlled local database operations. Inventory metadata parsing stores only configured inv_header keys, required fields are rendered explicitly, and duplicate inventory names are checked before storage. Row-level validation includes conversion of numeric inputs to the appropriate integer or floating-point type, handling of both decimal comma and decimal point notation, and prevention of unintended NaN values from empty numeric fields. Select fields are also checked so that invalid or unselected options are stored as empty strings.

Quality control was addressed through an initial testing strategy based on Vitest, jsdom, and fake-indexeddb, designed to support automated testing of the core forest inventory collection workflow. The unit tests focus on the main application logic, including the data model classes, the IndexedDB wrapper, and the form and row parsing routines. The service worker was not included in this first testing stage because its behavior is more appropriately evaluated through browser-based or end-to-end tests. The test suite covers inventory metadata parsing, row generation and value preservation, IndexedDB initialization and basic database operations, including adding, retrieving, updating, and deleting records, indexed queries, and configuration consistency.

The tests also consider operational failure cases relevant to field inventory work, including duplicate inventories, deletion of inventories with associated rows and images, and missing species codes in the autocomplete logic. These checks help ensure that invalid inputs, incomplete entries, and common field-use errors do not compromise the consistency of locally stored inventory data.

In addition, the software has been extensively tested under field conditions by vegetation inventory experts within the PaF project. All core functionalities were evaluated and validated during real-world use.

Users may also verify the correct behavior of the application by performing a basic functional test with a sample inventory. This test involves completing the inventory header, creating several species rows, and downloading the inventory data. If the exported ZIP archive contains two CSV files, one with the inventory metadata and another with the inventory rows, the application can be considered to be functioning as expected. An example of a completed inventory is included among the repository files, providing a reference for the expected behavior of the application.

(2) Availability

Operating system

The application runs on any device that supports modern browsers (Table 2).

Table 2

Web browsers and versions compatible with the application.

WEB BROWSERVERSION
Google Chrome133
Google Chrome for Android132
Firefox134

Programming Language

HTML 5, CSS 3, and JavaScript ES6+.

Additional System Requirements

Inventories are stored locally in browser-managed storage, constrained by device capacity. As a practical guideline, at least 50 MB of free storage is recommended when inventories include photos.

Dependencies

  • FileSaver == 1.3.2

  • JSZip == 3.5.0

  • JSZipUtils == 0.0.2

List of contributors

The software was created by Cristian Iranzo.

Software location

Zenodo

  • Name: CristianICS/MIFCSheet: Flexible Inventory Types

  • Persistent identifier:  https://doi.org/10.5281/zenodo.17140284

  • Licence: GNU General Public License v3.0

  • Publisher: Zenodo

  • Version published: 1.0.1

  • Date published: 17/09/2025

GitHub

Language

English

(3) Reuse Potential

MIFCSheet is configured through two JSON dictionaries in the repository (15): inventory_header.js (metadata fields, Section A in Figure 3) and form_columns.js (row variables, Section B). To customize, users download the repository and edit these two files to match the target protocol.

In inventory_header.js, each key maps to a database column name and a dictionary describing how the field is rendered and validated. Table 3 lists available options.

Table 3

Parameters supported in inventory_header.js.

PARAMETERDESCRIPTION
custom_nameLabel shown in the UI.
form_typeField type: input, select, or textarea.
input_typeFor input: text or number.
requiredWhether the field is mandatory (boolean).
display_colField used to describe an inventory in the inventory list.

Row variables are defined in form_columns.js. Keys map to database columns, and each entry specifies either an input field (text or numeric) or a select field (predefined options). Table 4 summarizes supported options.

Table 4

Parameters supported in form_columns.js.

PARAMETERDESCRIPTION
descriptionTooltip text shown at the bottom of the page.
form_typeField type: input or select.
input_typeFor input: text or number.
number_typeFor numeric input: integer or float.
valuesFor select: list of allowable values (e.g., [‘N’,‘S’]).
meaningsDescriptions for each value (e.g., [‘North’,‘South’]).
autocompleteEnable autocomplete (boolean); requires entries in species.js.
autocomplete_codeIf true, display the code associated with autocomplete values.
autocomplete_valueColumn key storing the value corresponding to the displayed code.

Each row variable can include a short description that is displayed as a tooltip (Figure 4, bottom right). A protocol-level guideline panel can also be shown at the top of the form (Figure 4, top left), defined in index.html within the div of class tab__content.

Figure 4

MIFCSheet tooltips. Top left: guideline panel. Bottom right: variable descriptions and option meanings.

To reduce repetitive input, the application supports autocomplete for species names and codes. Selecting a name fills its code automatically, and selecting a code fills the corresponding name. Date and time are recorded automatically when an inventory is created.

The species thesaurus is editable, and the same autocomplete mechanism can be extended to other fields by populating the thesaurus dictionary.

Comparative configuration of inventory protocols

Figure 5 compares two distinct forest inventory forms. On the one hand, the MIFC inventory type is displayed, which is the default implementation in the application; on the other hand, the Canadian NFI forest inventory schema is shown. Both implement (i) an inventory header (metadata) and (ii) per-species rows. The two types of inventories are stored in the application repository (15).

Figure 5

Comparison of the Canadian NFI adaptation (left) and the MIFC adaptation (right).

The MIFC header includes five fields: inventory ID, creator name, comments, and numeric IDs for initial and final transect GNSS points. The Canadian NFI header includes a coordinate ID for the plot center and five fields for crew member names. These were defined by editing inventory_header.js, using numeric types for IDs and text for names.

Row variables include shared fields (e.g., species/genus, height, DBH, relative position) and protocol-specific fields. In both protocols, some variables are conditionally relevant (e.g., DBH thresholds in MIFC; subplot-specific variables in Canadian NFI). To avoid dynamic row schemas, we include the union of variables and rely on the technician to complete only applicable fields. For Canadian NFI, an additional categorical field specifies plot type (e.g., Large Tree Plot, Ecological Plot) and other predefined-option fields (e.g., quadrant) capture location within the plot.

Image attachment supports required photo documentation (e.g., the eight mandatory photographs in the Canadian NFI workflow) by linking images to the inventory or to a specific row.

Support mechanisms

The software is made available as is, with no associated support services. If a user detects an error, an issue can be submitted to the application’s GitHub repository (15), and it will be addressed as quickly as possible by the maintainers.

DOI: https://doi.org/10.5334/jors.692 | Journal eISSN: 2049-9647
Language: English
Page range: 49 - 49
Submitted on: Feb 6, 2026
Accepted on: Jun 23, 2026
Published on: Jul 3, 2026
Published by: Ubiquity Press
In partnership with: Paradigm Publishing Services

© 2026 Cristian Iranzo, Quinn E. Barber, Koreen Millard, Luis A. Longares, Fernando Pérez-Cabello, Jorge Angás, published by Ubiquity Press
This work is licensed under the Creative Commons Attribution 4.0 License.