Skip to contents

The conventions a field project is expected to carry, as data. Each row is one setting: which file holds it, its key, its type, the value rfp applies, and the evidence for that value.

Usage

rfp_project_settings(file = NULL)

Arguments

file

Character. Optional filter - "qgs" or "mergin_config". NULL (default) returns every row.

Value

A tibble with columns:

file

"qgs" or "mergin_config" - which file holds the setting

key

scope path (qgs) or JSON key (mergin_config)

type

the type the file records, from that file's vocabulary

value

the value rfp applies, as text

why

the evidence for it

Details

Two files, one lookup. QGIS keeps project properties in the .qgs; Mergin Maps keeps its per-device policy in mergin-config.json. Splitting the source of truth to match would mean two places to edit a convention, which is the thing this replaces - so the file column carries that distinction instead.

type is a column because it cannot be inferred from the value: 0 is a valid int and a valid QString, and QGIS parses a property on its type attribute. Its vocabulary is per-file - QGIS's for qgs rows, JSON's for mergin_config rows.

A qgs key is a /-separated QGIS scope path as it appears in Project Properties, e.g. Measure/Ellipsoid - the key QGIS itself reads as readEntry("Measure", "/Ellipsoid").

What is deliberately not here: Mergin/PositionTracking/* is a per-project decision rather than a fleet default (only one project runs tracking, and TrackingLayer holds a per-project layer id), so it stays with position tracking. Anything you would change on the canvas or in the layer tree is the template's business, not a setting.

See also

Examples

# Every setting rfp applies
rfp_project_settings()
#> # A tibble: 5 × 5
#>   file          key                      type    value         why              
#>   <chr>         <chr>                    <chr>   <chr>         <chr>            
#> 1 qgs           Measure/Ellipsoid        QString EPSG:7019     Set on 4 of 5 fl…
#> 2 qgs           Mergin/PhotoQuality      int     3             Low (~0.5 MB). U…
#> 3 qgs           Mergin/Snapping          int     0             Already unanimou…
#> 4 mergin_config input-selective-sync     bool    true          Present on every…
#> 5 mergin_config input-selective-sync-dir string  ignore_mobile Must equal .rfp_…

# Just the QGIS project properties
rfp_project_settings("qgs")
#> # A tibble: 3 × 5
#>   file  key                 type    value     why                               
#>   <chr> <chr>               <chr>   <chr>     <chr>                             
#> 1 qgs   Measure/Ellipsoid   QString EPSG:7019 Set on 4 of 5 fleet projects; the…
#> 2 qgs   Mergin/PhotoQuality int     3         Low (~0.5 MB). Unanimous in hand-…
#> 3 qgs   Mergin/Snapping     int     0         Already unanimous across the flee…

# Why a value is what it is
rfp_project_settings("qgs")$why[[2]]
#> [1] "Low (~0.5 MB). Unanimous in hand-configured projects and 0 in both templates, so rfp-created projects capture at original size - hornby_2026's first survey averaged 11.3 MB a photo, 113 MB for ten, syncing over cell from a bluff."