Jarek Krochmalski
|
58f712d432
|
environment API uses a write-only model for the tls key and hawser token
|
2026-08-27 07:34:37 +02:00 |
|
Jarek Krochmalski
|
bf518f98aa
|
emergency script to relocate stack paths after moving DATA_DIR
|
2026-08-27 07:34:37 +02:00 |
|
Jarek Krochmalski
|
9264a53a44
|
compose validate flags a service with no healthcheck and a defined-but-unused named volume
|
2026-08-27 07:34:37 +02:00 |
|
Jarek Krochmalski
|
909e9934d3
|
compose generated from a container now captures network config and resource limits
|
2026-08-27 07:34:37 +02:00 |
|
Jarek Krochmalski
|
bd42cfaa1b
|
coalesce concurrent secret-provider probes
|
2026-08-27 07:34:37 +02:00 |
|
Jarek Krochmalski
|
fa1987add6
|
KeePassXC as a secret provider - pull secrets from a .kdbx via keepassxc-cli, bulk or inline refs
|
2026-08-27 07:34:37 +02:00 |
|
Jarek Krochmalski
|
674d80b178
|
release 1.0.44
|
2026-08-25 12:58:22 +02:00 |
|
Jarek Krochmalski
|
a4e2637ea5
|
release housekeeping
|
2026-08-25 05:42:29 +02:00 |
|
Jarek Krochmalski
|
d5d979aa5d
|
hide tls certificate fields for backends that never use tls
|
2026-08-25 05:42:29 +02:00 |
|
Jarek Krochmalski
|
730ad8ff82
|
fix the container backups tab crashing when a container has a mount
|
2026-08-23 19:00:40 +02:00 |
|
Jarek Krochmalski
|
8ae0b4367e
|
release housekeeping
|
2026-08-23 12:08:30 +02:00 |
|
Jarek Krochmalski
|
49d71c01b6
|
generate a compose file from any container - save as new or append to existing stack
|
2026-08-23 12:08:30 +02:00 |
|
Jarek Krochmalski
|
c71d066835
|
release housekeeping
|
2026-08-23 11:00:36 +02:00 |
|
Jarek Krochmalski
|
9a7ef9c12c
|
MQTT notification channel - publish events to a broker
|
2026-08-23 11:00:36 +02:00 |
|
Jarek Krochmalski
|
bc73e7ba84
|
ci: pin node to 24.18.1 in the openapi check so npm install builds better-sqlite3
|
2026-08-23 10:26:44 +02:00 |
|
Jarek Krochmalski
|
40524e0d8d
|
release housekeeping
|
2026-08-23 10:21:00 +02:00 |
|
Jarek Krochmalski
|
4af255ebc9
|
clarify stack env-var api docs (git vs internal storage, secret masking)
|
2026-08-23 10:21:00 +02:00 |
|
Jarek Krochmalski
|
4ba349113d
|
branch selector on git stack, with per-stack branch override
|
2026-08-23 10:21:00 +02:00 |
|
Jarek Krochmalski
|
534ecf4564
|
fix switching an Infisical provider back to a static token
|
2026-08-23 10:21:00 +02:00 |
|
Jarek Krochmalski
|
114f21385a
|
sort IPv6 subnets and addresses numerically instead of randomly
|
2026-08-23 10:21:00 +02:00 |
|
Jarek Krochmalski
|
2791e8c36d
|
keep specific images from being pruned with a dockhand.prune=false label
|
2026-08-23 10:21:00 +02:00 |
|
Jarek Krochmalski
|
70491423dc
|
Pushover notifications can target specific devices
|
2026-08-23 10:20:59 +02:00 |
|
Jarek Krochmalski
|
7692758467
|
TLS backup repositories with a private CA and optional mutual TLS
|
2026-08-23 10:20:59 +02:00 |
|
Jarek Krochmalski
|
f6ffadbacb
|
stack and container icons - pick an icon per stack or per container (survives recreation), plus automatic app logos on containers
|
2026-08-23 10:20:59 +02:00 |
|
Jarek Krochmalski
|
30fb770a9f
|
compose validate: recognize socket proxies and add exposure/volume/deploy rules
|
2026-08-22 17:11:57 +02:00 |
|
Jarek Krochmalski
|
b165e4608a
|
branch selector on git stack, with per-stack branch override
|
2026-08-22 17:11:57 +02:00 |
|
Jarek Krochmalski
|
3795cecf50
|
git-branch-lookup: docblock says two guards, matching the code
|
2026-08-22 16:24:04 +02:00 |
|
Jarek Krochmalski
|
40f6076b8d
|
Proton Pass inline references accept vault and item names, not just ids (pass://vault/item/field)
|
2026-08-22 16:22:18 +02:00 |
|
Jarek Krochmalski
|
f1e4af3267
|
Infisical secret references now resolve to their value instead of the raw reference
|
2026-08-22 16:22:18 +02:00 |
|
Jarek Krochmalski
|
68821f4d92
|
branch selector on git stack, with per-stack branch override
|
2026-08-22 16:22:18 +02:00 |
|
Jarek Krochmalski
|
94f8f52f52
|
release housekeeping for 1.0.44
|
2026-08-22 16:22:18 +02:00 |
|
Jarek Krochmalski
|
0885e8245f
|
bump checkout action to v5 for node 24 runners
|
2026-08-22 09:27:23 +02:00 |
|
Jarek Krochmalski
|
9700412a8f
|
updated generate-changelog-page.ts
|
2026-08-22 09:25:42 +02:00 |
|
Jarek Krochmalski
|
aff8f25d2a
|
internal cleanups and build config
|
2026-08-22 09:10:20 +02:00 |
|
Jarek Krochmalski
|
5f9e6bde3c
|
add missing unit test suite
|
2026-08-22 09:09:50 +02:00 |
|
Jarek Krochmalski
|
7227b334f9
|
release housekeeping for 1.0.44
|
2026-08-22 09:09:42 +02:00 |
|
Jarek Krochmalski
|
e23936b4df
|
azure key vault as a secret provider (bulk pull or inline azurekv:// references)
|
2026-08-22 09:09:41 +02:00 |
|
Jarek Krochmalski
|
a760680b8d
|
detect newer version tags for pinned images and show them as a badge with release notes
|
2026-08-22 09:09:41 +02:00 |
|
Jarek Krochmalski
|
9977476b15
|
a compose stack with a restarting container shows a stop action instead of start
|
2026-08-22 09:09:30 +02:00 |
|
Jarek Krochmalski
|
e68fd2fc0e
|
1password deploys reuse the sdk client to cut api calls
|
2026-08-22 09:09:30 +02:00 |
|
Jarek Krochmalski
|
7d45fddad3
|
proton pass secrets resolve on headless hosts with no system keyring
|
2026-08-22 09:09:30 +02:00 |
|
Jarek Krochmalski
|
0b294973d8
|
switching an infisical provider back to a static token works again
|
2026-08-22 09:09:30 +02:00 |
|
Jarek Krochmalski
|
6f087a3c2a
|
direct-remote staging pulls the alpine helper image when it's missing
|
2026-08-22 09:09:30 +02:00 |
|
jarek
|
a485c8580b
|
detect newer version tags for pinned images and show them as a badge with release notes
|
2026-08-20 08:28:26 +02:00 |
|
jarek
|
8b67fc0662
|
editing a secret provider no longer wipes its stored token
|
2026-08-20 08:28:26 +02:00 |
|
jarek
|
b56e1ef7f9
|
Compose validate - a preflight linter & validator for compose files
|
2026-08-20 08:28:26 +02:00 |
|
jarek
|
f8bfd756ef
|
apply the containers:exec permission check to the websocket terminal path
|
2026-08-20 08:28:26 +02:00 |
|
jarek
|
f50c3e52f3
|
registry auth survives an http to https token realm redirect behind a TLS proxy
|
2026-08-20 08:28:26 +02:00 |
|
jarek
|
3d208e6f22
|
release housekeeping
|
2026-08-20 08:28:25 +02:00 |
|
jarek
|
99b1672be5
|
detect newer version tags for pinned images and show them as a badge with release notes
|
2026-08-19 14:26:45 +02:00 |
|
jarek
|
29795c074c
|
Bitwarden Secrets Manager as a secret provider via an operator-installed bws client
|
2026-08-19 14:26:45 +02:00 |
|
jarek
|
2584e52852
|
Compose validate - a preflight linter & validator for compose files
|
2026-08-19 14:26:45 +02:00 |
|
jarek
|
bc91e71075
|
registry auth no longer fails when the token realm redirects http to https behind a TLS-terminating proxy
|
2026-08-19 14:26:45 +02:00 |
|
jarek
|
7e2f813438
|
security: update Go to 1.25.13 (8 HIGH stdlib CVEs) and update docker-compose to 5.5.0
|
2026-08-19 14:26:45 +02:00 |
|
jarek
|
5f401602bb
|
release housekeeping
|
2026-08-19 14:26:45 +02:00 |
|
jarek
|
adabaffb23
|
API: validating a stack's env vars no longer drops the environment id
|
2026-08-18 10:05:37 +02:00 |
|
jarek
|
e9b6bf48a7
|
hint that op:// and pass:// references only resolve in the stack env panel
|
2026-08-18 10:05:37 +02:00 |
|
jarek
|
e73c7b3d68
|
backup helper wait uses an unbounded deadline
|
2026-08-18 10:05:37 +02:00 |
|
jarek
|
f7ca18fa0c
|
container update notifications now fire properly
|
2026-08-18 10:05:37 +02:00 |
|
jarek
|
6fe735ad97
|
git stacks accept a compose/env path with a leading slash
|
2026-08-18 10:05:36 +02:00 |
|
jarek
|
9b6b6a9d3e
|
Infisical: the project ID is optional when using a service token - it's taken from the token
|
2026-08-18 10:05:36 +02:00 |
|
jarek
|
ba1a9588b9
|
detect newer version tags for pinned images and show them as a badge with release notes
|
2026-08-18 10:05:36 +02:00 |
|
jarek
|
088c7dc343
|
OpenAPI spec at /api/docs with a Scalar viewer, opt-in via FEAT_API_DOCS
|
2026-08-18 10:05:36 +02:00 |
|
jarek
|
1ad16a7c2a
|
Compose validate - a preflight linter & validator for compose files
|
2026-08-18 10:05:36 +02:00 |
|
jarek
|
6fab8ec70a
|
release housekeeping
|
2026-08-18 10:05:36 +02:00 |
|
Jarek Krochmalski
|
5c0fa6aa91
|
add the missing OpenAPI generator (scripts/generate-openapi.ts + scripts/openapi) so a clean checkout builds
|
2026-08-18 05:12:37 +02:00 |
|
jarek
|
0547ca1970
|
adopting a stack over the API rejects a compose path not on Dockhand's filesystem
|
2026-08-17 09:50:35 +02:00 |
|
jarek
|
88fa9bcab5
|
backup notifications show a real title and message instead of "undefined"
|
2026-08-17 09:50:35 +02:00 |
|
jarek
|
d7c0c88794
|
concurrent git syncs sharing an SSH credential no longer fail on a missing temp key
|
2026-08-17 09:50:35 +02:00 |
|
jarek
|
da26f7f764
|
OpenAPI spec at /api/docs with a Scalar viewer, opt-in via FEAT_API_DOCS
|
2026-08-17 09:50:34 +02:00 |
|
jarek
|
ba8670af66
|
detect newer version tags for pinned images and show them as a badge with release notes
|
2026-08-17 09:50:34 +02:00 |
|
jarek
|
1740fdccfa
|
Infisical: Universal Auth (Machine Identity) as well as a static token
|
2026-08-17 09:50:34 +02:00 |
|
jarek
|
ef6c22a6ea
|
Proton Pass as a secret provider via an operator-installed pass-cli client
|
2026-08-17 09:50:34 +02:00 |
|
jarek
|
95fd26656b
|
Bitwarden Secrets Manager as a secret provider via an operator-installed bws client
|
2026-08-17 09:50:34 +02:00 |
|
jarek
|
ff006965ce
|
release housekeeping
|
2026-08-17 09:50:34 +02:00 |
|
jarek
|
3b43946a38
|
container update no longer fails on Podman for containers using userns_mode: keep-id
|
2026-08-16 08:15:30 +02:00 |
|
jarek
|
0a08c94287
|
optional indentation guides in the compose/YAML editor
|
2026-08-16 08:15:30 +02:00 |
|
jarek
|
cda446a232
|
release housekeeping
|
2026-08-16 08:15:30 +02:00 |
|
jarek
|
19548772df
|
reject duplicate secret provider name with a 400
|
2026-08-14 15:59:50 +02:00 |
|
jarek
|
5fef45e003
|
validate secret provider config before save
|
2026-08-14 14:01:36 +02:00 |
|
jarek
|
344ad4aadc
|
external vault providers - live probing secrets when editing stack
|
2026-08-14 10:40:02 +02:00 |
|
jarek
|
9a416e165f
|
point the compose timeout error at COMPOSE_TIMEOUT
|
2026-08-14 09:35:37 +02:00 |
|
jarek
|
a38e973155
|
grouped container logs now show one merged timeline sorted by time
|
2026-08-14 09:35:37 +02:00 |
|
jarek
|
a89a6e3bd4
|
multi-arch images no longer show false "update available"
|
2026-08-14 09:35:36 +02:00 |
|
jarek
|
32a86129d0
|
stack secrets from external providers (1Password, HashiCorp Vault, Infisical and Doppler)
|
2026-08-14 09:35:36 +02:00 |
|
jarek
|
78d67d2dc1
|
release housekeeping
|
2026-08-14 09:35:36 +02:00 |
|
jarek
|
cd5d2651b3
|
backfill missing 0009/0010 drizzle snapshots for both dialects
|
2026-08-13 13:53:12 +02:00 |
|
jarek
|
959a426507
|
internal cleanups and build config
|
2026-08-13 10:20:30 +02:00 |
|
jarek
|
3c75bd4919
|
backup engine internals - restic timeout and stack-dir capture
|
2026-08-13 10:20:30 +02:00 |
|
jarek
|
610e46dc19
|
read-side backup snapshot endpoints use job polling
|
2026-08-13 10:20:30 +02:00 |
|
jarek
|
315c795058
|
container update no longer fails on Podman when CPU limits are set
|
2026-08-13 10:20:30 +02:00 |
|
jarek
|
f1a3311c90
|
start, stop or restart on Hawser updates its files on the remote host, not only on redeploy
|
2026-08-13 10:20:29 +02:00 |
|
jarek
|
cc0d50913a
|
updating a compose file over the API now saves it, not just deploys it
|
2026-08-13 10:20:29 +02:00 |
|
jarek
|
16ee5d82b9
|
reopening the MFA setup screen while MFA is enabled no longer wipes the secret and backup codes
|
2026-08-13 10:20:29 +02:00 |
|
jarek
|
ce93e92f6e
|
support caddy-docker-proxy labels
|
2026-08-13 10:20:29 +02:00 |
|
jarek
|
c91f38eddf
|
upload a Docker image .tar through the UI (docker load) for air-gapped hosts
|
2026-08-13 10:20:29 +02:00 |
|
jarek
|
f43736d94a
|
stack secrets from external providers (1Password, HashiCorp Vault, Infisical and Doppler)
|
2026-08-13 10:20:29 +02:00 |
|
jarek
|
d7f435dd5f
|
release housekeeping
|
2026-08-13 10:20:29 +02:00 |
|
jarek
|
905c4a004d
|
persist restic cache and backup restore fixes
|
2026-08-09 13:46:03 +02:00 |
|
jarek
|
091adfca35
|
remove backup journal, stop-recovery, and verify modal (deleted upstream)
|
2026-08-09 10:35:15 +02:00 |
|