#6830·hedgedoc

Backend refuses to start with the default note permission settings

Author: lisboarochaCreated Sep 12, 2026Updated Sep 16, 2026

Correction. The first version of this issue said the published Docker quickstart was affected. It is not: that quickstart pins 2.0.0-alpha.3, which predates this code. This is a regression on develop only. Description replaced on 2026-09-12.

On develop, the backend exits during configuration validation when neither HD_NOTE_PERMISSIONS_MAX_GUEST_LEVEL nor HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE is set, because their two defaults contradict each other.

Measured on develop at f199a28, with ghcr.io/hedgedoc/hedgedoc/backend:develop.

To reproduce

Start the develop backend without setting either variable. It prints

There were some errors with your configuration:
 - HD_NOTE: 'HD_NOTE_PERMISSIONS_MAX_GUEST_LEVEL' is set to 'full', but
   'HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE' is set to 'read'. This does not
   allow the guest users to write in the notes they can create.

and exits before listening.

Why it happens

Neither variable was set — those are the defaults:

  • maxGuestLevel defaults to FULLbackend/src/config/note.config.ts:36
  • permissions.default.everyone defaults to READ:43
  • the refinement at :87 rejects exactly that pair

The refinement and the current variable names arrived in 8fe382131 (2026-01-07, "fix(noteConfig): correctly handle default everyone and max guest level interaction").

Not affected

2.0.0-alpha.3, and so the published quickstart that pins it. At that tag the settings are HD_GUEST_ACCESS (default write) and HD_PERMISSION_DEFAULT_EVERYONE (default read), validated differently; the alpha.3 backend starts without either set.

Expected

A backend built from develop starts on its own defaults, or the defaults are a combination the validator accepts.

Possible resolutions, in case it helps

  • default maxGuestLevel to WRITE, so it agrees with the other two defaults;
  • or default everyone to WRITE;
  • or relax the refinement when neither variable was explicitly provided.