"Backups are not enabled" reported although MinIO/RustFS snapshots are working
Describe the current behavior
Summary
In Grist 1.7.19, the admin/boot diagnostics report:
Backups are not enabled
even though an S3/MinIO-compatible external storage backend is configured and document snapshots are working correctly.
The diagnostic appears to check the parent externalStorage.active flag, while the configured MinIO backend sets externalStorage.minio.active.
Environment Grist: 1.7.19 Installation: bare-metal OS: Debian 13 Storage: SQLite External object storage: RustFS 1.0.0-rc6 RustFS endpoint: 127.0.0.1:9000 Grist bucket: grist-snapshots Grist external-storage backend: MinIO Single Grist instance / single worker Configuration
The relevant Grist environment variables are:
GRIST_DOCS_MINIO_ACCESS_KEY= GRIST_DOCS_MINIO_SECRET_KEY= GRIST_DOCS_MINIO_USE_SSL=0 GRIST_DOCS_MINIO_BUCKET=grist-snapshots GRIST_DOCS_MINIO_ENDPOINT=127.0.0.1 GRIST_DOCS_MINIO_PORT=9000
GRIST_DISABLE_S3 is not set.
Observed diagnostic result
The Grist backup probe reports:
Backups are not enabled
with details equivalent to:
availableBackends ["minio","filesystem"] backend minio
This is confusing because the diagnostic simultaneously identifies minio as the active backend.
Actual functionality
The snapshot functionality works correctly.
In the Grist UI:
Document History → Snapshots
shows snapshots successfully, and snapshots can be created/used normally.
The RustFS bucket is also configured with versioning enabled.
Therefore this does not appear to be a failure of the external storage configuration or of snapshot creation.
Source-code investigation
In the compiled Grist 1.7.19 source, configureMinIOExternalStorage.js contains:
const settings = appSettings.section("externalStorage").section("minio");
and after successfully reading the MinIO configuration:
settings.flag("active").set(true);
Thus the MinIO child setting becomes active.
The backup probe in BootProbes.js, however, does:
const externalStorage = appSettings.section("externalStorage");
const active = externalStorage.flag("active").getAsBool();
const availableBackends = server.create.getAvailableStorageBackends();
const backend = Object.values(externalStorage.nested) .find(storage => storage.flag("active").getAsBool()) ?.name;
return { status: active ? "success" : "warning", verdict: active ? undefined : "Backups are not enabled", details: { active, availableBackends, backend, }, };
The relevant distinction appears to be:
externalStorage.active externalStorage.minio.active
The MinIO provider explicitly sets the latter.
I could not find corresponding code in the relevant Grist 1.7.19 server sources which sets the parent:
externalStorage.flag("active").set(true);
when a valid MinIO backend is configured.
FlexServer.js does, however, determine whether external storage is available by examining the nested providers:
const haveExternalStorage = Object.values(externalStorage.nested) .some(storage => storage.flag("active").getAsBool());
This means the actual external-storage initialization correctly recognizes the MinIO backend, while the backup diagnostic appears to use a different indicator.
Expected behavior
If a valid external storage backend is configured and functioning, the Backups diagnostic should report success.
Alternatively, the diagnostic should explicitly report the configured backend and test its functionality rather than relying on externalStorage.active if that parent flag is not guaranteed to be set.
For example:
Backups: success backend: minio Actual behavior
The diagnostic reports:
Backups are not enabled
despite:
backend: minio
and despite actual document snapshots working successfully.
Steps to reproduce
- Configure Grist 1.7.19 with a working MinIO-compatible backend using GRIST_DOCS_MINIO_*.
- Ensure the bucket exists and has versioning enabled.
- Start Grist.
- Open the administration/boot diagnostics.
- Observe the Backups result.
- The diagnostic reports "Backups are not enabled".
- Open a document and go to Document History → Snapshots.
- Observe that snapshots are available and functioning.
Describe the expected behavior
If a valid external storage backend is configured and functioning, the Backups diagnostic should report success.
Alternatively, the diagnostic should explicitly report the configured backend and test its functionality rather than relying on externalStorage.active if that parent flag is not guaranteed to be set.
For example:
Backups: success backend: minio
Where have you encountered this bug?
- On docs.getgrist.com
- On a self-hosted instance
Instance information (when self-hosting only)
Grist instance:
- Version: 1.7.19
- URL (if it's OK for you to share it): https://grist.lan.dahom
- Installation mode: compiled from source, sitting behind traefik and using authelia for forward auth; redis and rustfs for snapshots
- Architecture: single-worker
Browser name, version and platforms on which you could reproduce the bug: Safari 26.6.1 macOS 15.7.9.
Source: gristlabs/grist-core