#2590·grist-core

"Backups are not enabled" reported although MinIO/RustFS snapshots are working

Author: probpoCreated Sep 14, 2026Updated Sep 15, 2026

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

  1. Configure Grist 1.7.19 with a working MinIO-compatible backend using GRIST_DOCS_MINIO_*.
  2. Ensure the bucket exists and has versioning enabled.
  3. Start Grist.
  4. Open the administration/boot diagnostics.
  5. Observe the Backups result.
  6. The diagnostic reports "Backups are not enabled".
  7. Open a document and go to Document History → Snapshots.
  8. 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?

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.