
Project Settings rfp Applies to Every Project
Source:R/rfp_project_settings.R
rfp_project_settings.RdThe 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.
Value
A tibble with columns:
file"qgs"or"mergin_config"- which file holds the settingkeyscope path (
qgs) or JSON key (mergin_config)typethe type the file records, from that file's vocabulary
valuethe value rfp applies, as text
whythe 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
rfp_project_settings_apply() to apply them to a project.
Other project:
rfp_project_settings_apply(),
rfp_project_subset()
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."