`v0.16.15` cleans up the Groups tab's layout: removed the redundant "Groups / Organize users for Access List permissions." heading, since the tab button and admin panel description already say what the tab is, and it was adding a bare, boxless line of text found nowhere else in Administration once the tab's own Create button moved to the shared header. The Enabled/Disabled stat bar is now the first thing in the panel, structurally matching how the Users tab's own stat bar is positioned. Also added top spacing between the Administration page's subtitle and the row of tab buttons (System, Users, Groups, ...) below it -- that gap had never been set, so the tabs bar sat flush against the subtitle text.
`v0.16.16` ships a batch of fixes found in live use: the Backup type picker (in both the scheduled-backup form and the manual "Create a backup" dialog) no longer shows a long wrapped sentence as the selected value -- it now shows a short "Complete (Recommended)" / "Configuration only" label with the detail moved into the helper text beneath it, and the in-app documentation now explicitly names the "Backup type" field so it's easy to find by search. The Performance page's "Outliers / Slowest requests" section has been removed, along with the per-row error-count badge in the "Throughput by domain" table -- both added noise without being worth the space for most setups. That table's column headers now stay pinned while scrolling instead of scrolling out of view. Rows for domains with no matching Hosted Site, Proxy Host, or Redirect Host are now badged "Not configured" -- that table is built from Caddy's raw access log, so it always included every hostname a request was ever seen for (including scanner/bot traffic hitting made-up subdomains that fall through to the Default Site handler), not just domains you've actually configured; the badge makes that distinction visible instead of leaving it to guesswork. Finally, the Administration Users tab no longer flashes "No users found." for a moment before the user list has actually loaded.
`v0.16.17` fixes the Backup type helper text showing both the Complete and Configuration-only explanations stacked on top of each other on page load or refresh, instead of just the one matching the currently selected option. Root cause: the help text only ever updated on the select's `change` event -- but `renderBackups()` sets the select's value from saved settings on every render without firing a `change` event, so the static placeholder text (which briefly held both sentences as a v0.16.16 authoring mistake) never got replaced until you manually touched the dropdown. Factored the text-selection logic into its own function and call it both on `change` and every time `renderBackups()` runs, so it always matches the select's actual current value.
`v0.16.18` reworks the API Access tab to match the Users and Groups tabs' layout instead of the old plain data-row list: tokens are now shown as tiles in the same card grid Hosted Sites/Users/Groups use, and a stat bar above them breaks down Active/Revoked and Full access/Read-only counts at a glance. No behavior changed -- Revoke still works the same way it always has (a one-way action; there is no re-enable, since a revoked token's secret is treated as compromised). An earlier idea of adding an enable/disable toggle was dropped once it became clear that would require adding real token-reactivation support on the backend, a deliberate security-posture change rather than a layout fix.
<sectiondata-admin-panel="backups"class="hidden settings-panel"><divclass="panel-heading"><div><h2>Backup & restore</h2><pclass="muted">Create a copy, restore a previous version, or schedule automatic backups.</p></div><divclass="row-actions"><buttonid="import-backup"class="button secondary">Import backup</button><buttonid="create-backup"class="button primary">Create backup</button></div></div><inputid="backup-upload"type="file"accept=".sgbackup,application/zip"hidden><formid="backup-settings-form"class="settings-form backup-settings"><divclass="form-section form-section-wide"><pclass="eyebrow">Scheduled backups</p><divclass="form-grid"><labelclass="check-control"><inputname="enabled"type="checkbox"><span>Enable scheduled backups</span></label><label>Backup type<selectname="type"><optionvalue="complete">Complete (Recommended)</option><optionvalue="configuration">Configuration only</option></select><smallid="backup-type-help">Complete includes configuration plus uploaded Hosted Site files. Configuration only includes settings and metadata, not uploaded Hosted Site files.</small></label><pid="backup-config-only-warning"class="callout hidden"style="grid-column:1/-1"><strong>Heads up</strong><span>Scheduled backups are set to Configuration only — they will not include your Hosted Site files, icons, or certificates. Switch to Complete if you want scheduled backups to protect those too.</span></p><label>Schedule<selectname="frequency"><optionvalue="daily">Daily</option><optionvalue="weekly">Weekly</option><optionvalue="monthly">Monthly</option></select></label><label>Hour<selectname="hour"></select></label><label>Keep<inputname="retention"type="number"min="1"max="100"value="7"></label><labelclass="check-control"><inputname="includeLogs"type="checkbox"><span>Include logs</span></label></div></div><divclass="form-section form-section-wide"><pclass="eyebrow">Encryption</p><divclass="form-grid encryption-grid"><labelclass="backup-password-field"><spanclass="field-label">Backup encryption password <spanclass="optional">Optional</span></span><inputname="backupPassword"type="password"autocomplete="new-password"><small>Used for manually created backups and required when restoring an encrypted archive. It is not stored by Site Gateway.</small></label><labelclass="check-control encryption-toggle"><inputname="encrypt"type="checkbox"><span>Encrypt scheduled backups<small>Uses the container’s <code>BACKUP_PASSWORD</code> value. Enable only after configuring that value.</small></span></label></div></div><divclass="dialog-actions"><buttonclass="button primary">Save schedule</button></div></form><divclass="callout"><strong>Storage guidance</strong><spanid="backup-path">Backups are stored in /data/backups. Mount /backups separately to protect against appdata disk failure.</span><spanid="backup-summary"class="backup-summary"></span></div><divclass="dashboard-panel backup-stored-section"><divclass="panel-heading"><div><pclass="eyebrow">On disk</p><h2>Stored backups</h2><pclass="muted">The actual backup files currently sitting in /data/backups. Download, Restore, and Delete here act on these files directly — deleting one here is permanent and removes it from disk, not just from this list.</p></div></div><divid="backup-list"class="data-list"></div></div><!-- Gateway diagnostics / support report -- hidden from view per admin request (v0.11.109). Re-enable by deleting this comment wrapper (markup unchanged); backend endpoint /api/support-report left intact. <div class="dashboard-panel"><div class="panel-heading"><div><p class="eyebrow">Troubleshooting & support</p><h2>Gateway diagnostics</h2><p class="muted">Run checks and download a redacted report when you need to investigate a gateway issue.</p></div><button id="download-support" class="button secondary admin-only">Download support report</button></div><p class="muted feature-note">The report includes version, configuration health, certificate readiness, upstream checks, and recent events. Passwords, private keys, session secrets, cookies, and certificate contents are excluded.</p></div> --></section>
<sectiondata-admin-panel="backups"class="hidden settings-panel"><divclass="panel-heading"><div><h2>Backup & restore</h2><pclass="muted">Create a copy, restore a previous version, or schedule automatic backups.</p></div><divclass="row-actions"><buttonid="import-backup"class="button secondary">Import backup</button><buttonid="create-backup"class="button primary">Create backup</button></div></div><inputid="backup-upload"type="file"accept=".sgbackup,application/zip"hidden><formid="backup-settings-form"class="settings-form backup-settings"><divclass="form-section form-section-wide"><pclass="eyebrow">Scheduled backups</p><divclass="form-grid"><labelclass="check-control"><inputname="enabled"type="checkbox"><span>Enable scheduled backups</span></label><label>Backup type<selectname="type"><optionvalue="complete">Complete (Recommended)</option><optionvalue="configuration">Configuration only</option></select><smallid="backup-type-help">Complete backups include configuration, uploaded Hosted Site files, icons, default-site assets, and certificate storage. Verify the file count after creation.</small></label><pid="backup-config-only-warning"class="callout hidden"style="grid-column:1/-1"><strong>Heads up</strong><span>Scheduled backups are set to Configuration only — they will not include your Hosted Site files, icons, or certificates. Switch to Complete if you want scheduled backups to protect those too.</span></p><label>Schedule<selectname="frequency"><optionvalue="daily">Daily</option><optionvalue="weekly">Weekly</option><optionvalue="monthly">Monthly</option></select></label><label>Hour<selectname="hour"></select></label><label>Keep<inputname="retention"type="number"min="1"max="100"value="7"></label><labelclass="check-control"><inputname="includeLogs"type="checkbox"><span>Include logs</span></label></div></div><divclass="form-section form-section-wide"><pclass="eyebrow">Encryption</p><divclass="form-grid encryption-grid"><labelclass="backup-password-field"><spanclass="field-label">Backup encryption password <spanclass="optional">Optional</span></span><inputname="backupPassword"type="password"autocomplete="new-password"><small>Used for manually created backups and required when restoring an encrypted archive. It is not stored by Site Gateway.</small></label><labelclass="check-control encryption-toggle"><inputname="encrypt"type="checkbox"><span>Encrypt scheduled backups<small>Uses the container’s <code>BACKUP_PASSWORD</code> value. Enable only after configuring that value.</small></span></label></div></div><divclass="dialog-actions"><buttonclass="button primary">Save schedule</button></div></form><divclass="callout"><strong>Storage guidance</strong><spanid="backup-path">Backups are stored in /data/backups. Mount /backups separately to protect against appdata disk failure.</span><spanid="backup-summary"class="backup-summary"></span></div><divclass="dashboard-panel backup-stored-section"><divclass="panel-heading"><div><pclass="eyebrow">On disk</p><h2>Stored backups</h2><pclass="muted">The actual backup files currently sitting in /data/backups. Download, Restore, and Delete here act on these files directly — deleting one here is permanent and removes it from disk, not just from this list.</p></div></div><divid="backup-list"class="data-list"></div></div><!-- Gateway diagnostics / support report -- hidden from view per admin request (v0.11.109). Re-enable by deleting this comment wrapper (markup unchanged); backend endpoint /api/support-report left intact. <div class="dashboard-panel"><div class="panel-heading"><div><p class="eyebrow">Troubleshooting & support</p><h2>Gateway diagnostics</h2><p class="muted">Run checks and download a redacted report when you need to investigate a gateway issue.</p></div><button id="download-support" class="button secondary admin-only">Download support report</button></div><p class="muted feature-note">The report includes version, configuration health, certificate readiness, upstream checks, and recent events. Passwords, private keys, session secrets, cookies, and certificate contents are excluded.</p></div> --></section>
<!-- Danger Zone tab -->
<sectiondata-admin-panel="danger"class="hidden settings-panel danger-zone"><h2>Danger Zone</h2><pclass="muted">These actions can permanently remove Site Gateway data. Review each warning carefully before continuing.</p><divclass="danger-card"><pclass="eyebrow">Restore defaults</p><h3>Reset gateway preferences</h3><p>Restore default site behavior, backup scheduling, certificate thresholds, and interface preferences. Your users, routes, certificates, logs, and backups remain intact.</p><buttonid="restore-defaults"class="button secondary">Restore default settings</button></div><divclass="danger-card destructive"><pclass="eyebrow">Permanent action</p><h3>Factory reset</h3><p>Deletes all Site Gateway data under <code>/data</code>, including users, routes, certificates, logs, backups, and settings. Docker-mounted files outside <code>/data</code> are not affected. The container restarts at first-install setup.</p><formid="factory-reset-form"class="danger-form"><label>Administrator username<inputname="username"autocomplete="username"required></label><label>Administrator password<inputname="password"type="password"autocomplete="current-password"required></label><label>Type <strong>FACTORY RESET</strong> to confirm<inputname="confirmation"requiredautocomplete="off"></label><pid="factory-reset-error"class="error"></p><divclass="danger-actions"><buttonclass="button secondary"type="button"id="factory-reset-cancel">Cancel</button><buttonclass="button danger"type="submit">Erase all data and reset</button></div></form></div></section>
</section>
@@ -434,6 +434,6 @@
<divid="toast"class="toast"role="status"></div>
<divid="update-banner"class="update-banner hidden"role="status"><span>A new version of Site Gateway is available.</span><divclass="update-banner-actions"><buttonid="update-banner-refresh"class="button primary">Refresh</button><buttonid="update-banner-dismiss"class="text-button">Dismiss</button></div></div>
<!-- App scripts: core (app.js) then extended views/admin (features.js) -->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.