# Changelog ## [1.20.0](https://github.com/sablierapp/sablier/compare/v1.19.1...v1.20.0) (2026-11-08) ### Features * **activity:** refresh sessions from container traffic with eBPF ([#1237](https://github.com/sablierapp/sablier/issues/1237)) ([ba3aa90](https://github.com/sablierapp/sablier/commit/ba3aa90a1d219a45284472456bcc38923e1fe0b0)) * **tracing:** honour a path in the OTLP/HTTP endpoint ([#1248](https://github.com/sablierapp/sablier/issues/1248)) ([828b21d](https://github.com/sablierapp/sablier/commit/828b21d422eaa3e93c3f775520382a114deb0ed3)), closes [#1247](https://github.com/sablierapp/sablier/issues/1247) * **webhooks:** set endpoints with flags and environment variables ([#1287](https://github.com/sablierapp/sablier/issues/1287)) ([45898d3](https://github.com/sablierapp/sablier/commit/45898d37bdd9a7bbd27640bc182ae4e89d878b42)), closes [#1245](https://github.com/sablierapp/sablier/issues/1245) ### Bug Fixes * **api:** stop listing registered groups in the group-not-found response ([#1277](https://github.com/sablierapp/sablier/issues/1277)) ([2ef247c](https://github.com/sablierapp/sablier/commit/2ef247c29e9d00f96544157301faa3d874207c0d)) * **docker:** handle rename events so a group follows a recreated container ([#1142](https://github.com/sablierapp/sablier/issues/1142)) ([5612a93](https://github.com/sablierapp/sablier/commit/5612a9379f6a3a9526cf47276f8359db3b537aa5)) * **kubernetes:** scale with a merge patch to avoid update conflicts ([#1239](https://github.com/sablierapp/sablier/issues/1239)) ([849f9de](https://github.com/sablierapp/sablier/commit/849f9ded7bc11856b86e0b13c02637ba51159b94)) * **kubernetes:** skip the CNPG cluster list when the CRD is not installed ([#1270](https://github.com/sablierapp/sablier/issues/1270)) ([3565bb7](https://github.com/sablierapp/sablier/commit/3565bb7f33485846bc97fa030f0c2665c0341bdb)) * **sablier:** restart instance whose start failed while its session is active ([#1240](https://github.com/sablierapp/sablier/issues/1240)) ([a246122](https://github.com/sablierapp/sablier/commit/a24612223edd77cc5a77f853e78706ddcde3117e)) * **theme:** load custom themes from a Kubernetes ConfigMap volume ([#1242](https://github.com/sablierapp/sablier/issues/1242)) ([3b20676](https://github.com/sablierapp/sablier/commit/3b20676345c221ec512b7c44127ec536211f2b13)) * **theme:** read the themes of a Kubernetes volume through ..data ([#1238](https://github.com/sablierapp/sablier/issues/1238)) ([ecd26f4](https://github.com/sablierapp/sablier/commit/ecd26f4949f348636be6941ddb78dfa989e76667)) * **theme:** skip a custom theme that vanishes while loading ([#1274](https://github.com/sablierapp/sablier/issues/1274)) ([e4371c4](https://github.com/sablierapp/sablier/commit/e4371c433bdbdf84d180982792a8d36c49d080d4)) * **webhook:** only fire for instances labelled sablier.enable=true ([#1254](https://github.com/sablierapp/sablier/issues/1254)) ([f0e8d8c](https://github.com/sablierapp/sablier/commit/f0e8d8c0284299b6efae0710ecd88ddb69868fe1)), closes [#1246](https://github.com/sablierapp/sablier/issues/1246) ### Performance Improvements * **sablier:** seed anti-affinity registry from instance list ([#1236](https://github.com/sablierapp/sablier/issues/1236)) ([946a694](https://github.com/sablierapp/sablier/commit/946a694efc0907c14b3d492313f096b1e2f646f4)) ### Code Refactoring * **docker:** tidy rename handling and test it against a real daemon ([#1258](https://github.com/sablierapp/sablier/issues/1258)) ([8605831](https://github.com/sablierapp/sablier/commit/8605831d4b31548824b95c12ca250523ff9e1688)) ### Tests * **kubernetes:** give the k3s kubelet /dev/null as /dev/kmsg ([#1243](https://github.com/sablierapp/sablier/issues/1243)) ([e6b1399](https://github.com/sablierapp/sablier/commit/e6b1399b81ee66b7d360f2eadad9cad99bfff8f2)) * **provider:** stop moby event streams before the test ends ([#1244](https://github.com/sablierapp/sablier/issues/1244)) ([8e7dc90](https://github.com/sablierapp/sablier/commit/8e7dc9062747e86d6ab4657546ba5646c852bec5)) ## [1.19.1](https://github.com/sablierapp/sablier/compare/v1.19.0...v1.19.1) (2026-10-28) ### Documentation * fix the README image paths broken by the Hugo docs move ([#1233](https://github.com/sablierapp/sablier/issues/1233)) ([d134fe1](https://github.com/sablierapp/sablier/commit/d134fe153342f052b636549c64785012050b321b)) ## [1.19.0](https://github.com/sablierapp/sablier/compare/v1.18.0...v1.19.0) (2026-10-28) ### Features * **api:** add operationIds to the OpenAPI spec ([#1224](https://github.com/sablierapp/sablier/issues/1224)) ([b63a877](https://github.com/sablierapp/sablier/commit/b63a877327a65cb0af58b491d1c58aaa1fdcfb88)) * **api:** filter the events stream by instance names or group ([#1229](https://github.com/sablierapp/sablier/issues/1229)) ([980655b](https://github.com/sablierapp/sablier/commit/980655b6fa3dd00ce8652e15edbdaf6ee5c7a3db)) * **client:** add a standard-library Go client for the Sablier API ([#1225](https://github.com/sablierapp/sablier/issues/1225)) ([3cf282c](https://github.com/sablierapp/sablier/commit/3cf282cecf90f42bc605346b2392e9cca67749e6)) * **ecs:** add the AWS ECS provider ([#1123](https://github.com/sablierapp/sablier/issues/1123)) ([5407360](https://github.com/sablierapp/sablier/commit/540736030228f07b9b6a167adf99f0ab57fdc63f)) * **kubernetes:** expose workload name to themes ([#1160](https://github.com/sablierapp/sablier/issues/1160)) ([fe0398a](https://github.com/sablierapp/sablier/commit/fe0398a417ecf4cb4accf2b9d29e2e1edc925daf)) * **kubernetes:** support public sablierapp.dev label keys ([#1114](https://github.com/sablierapp/sablier/issues/1114)) ([2771b53](https://github.com/sablierapp/sablier/commit/2771b53f2414e099bc69fc4abadde58fd55acc77)), closes [#449](https://github.com/sablierapp/sablier/issues/449) * **nomad:** add the Nomad provider ([#1122](https://github.com/sablierapp/sablier/issues/1122)) ([c88419b](https://github.com/sablierapp/sablier/commit/c88419b75e7ecaba6c4aa2bf905dc5cc5327c88a)) ### Bug Fixes * **api:** describe error responses as they go on the wire in the OpenAPI spec ([#1223](https://github.com/sablierapp/sablier/issues/1223)) ([82a47f3](https://github.com/sablierapp/sablier/commit/82a47f313d38ee9659e15bd1588a886bb181eefd)) * **api:** return the documented session shape from the poke strategy ([#1222](https://github.com/sablierapp/sablier/issues/1222)) ([57957cf](https://github.com/sablierapp/sablier/commit/57957cf09ab9cf783181bf45587436c2ff047c54)) * **docker:** honor depends_on entries without a condition like Compose ([#1203](https://github.com/sablierapp/sablier/issues/1203)) ([7219555](https://github.com/sablierapp/sablier/commit/72195554ab7ccf6a30af7fb05d73468db76689b0)), closes [#1182](https://github.com/sablierapp/sablier/issues/1182) * **docker:** start stopped containers in scale mode ([#1212](https://github.com/sablierapp/sablier/issues/1212)) ([5c52934](https://github.com/sablierapp/sablier/commit/5c529342c5111a42000d6112b1575b02a1702155)) * **docker:** treat paused containers as idle ([#1213](https://github.com/sablierapp/sablier/issues/1213)) ([b6d2447](https://github.com/sablierapp/sablier/commit/b6d24476002fa11ab800f172125badb48bde2b3c)) * embed fallback CA roots so the scratch image can verify HTTPS ([#1207](https://github.com/sablierapp/sablier/issues/1207)) ([7cfbf80](https://github.com/sablierapp/sablier/commit/7cfbf80da3eca12cfc50209066a99a9818b29a07)) * keep instance event watchers from queueing notifications without bound ([#1157](https://github.com/sablierapp/sablier/issues/1157)) ([36a1d94](https://github.com/sablierapp/sablier/commit/36a1d940c1f2ef2418464c4d774f1f6a5784ef9d)) * **kubernetes:** close the event stream and stop informers on cancel ([#1218](https://github.com/sablierapp/sablier/issues/1218)) ([9ab6b01](https://github.com/sablierapp/sablier/commit/9ab6b01d6d873054395967cdc5aa387471883e74)) * **kubernetes:** list only the running workloads when All is false ([#1112](https://github.com/sablierapp/sablier/issues/1112)) ([9a1b640](https://github.com/sablierapp/sablier/commit/9a1b640e04f3fe6055b8c4c7cb604535d55d84a3)), closes [#1095](https://github.com/sablierapp/sablier/issues/1095) * **kubernetes:** parse the instance name replica count as int32 ([#1217](https://github.com/sablierapp/sablier/issues/1217)) ([2c485b1](https://github.com/sablierapp/sablier/commit/2c485b198ffdc41f5f966c58b3b19cdc253ec796)) * **kubernetes:** show sablier.active.replicas as desired replicas ([#1159](https://github.com/sablierapp/sablier/issues/1159)) ([4a36d1f](https://github.com/sablierapp/sablier/commit/4a36d1fb37bc36da3ddacbc05aab89cce8e03833)) * **podman:** send scale-mode CPU limits as a quota and period ([#1214](https://github.com/sablierapp/sablier/issues/1214)) ([38c3bd9](https://github.com/sablierapp/sablier/commit/38c3bd945d1356e3a904017f3ed909ab14a86466)) * **proxmox:** prefer tagged containers for hostnames, skip ambiguous ones ([#1211](https://github.com/sablierapp/sablier/issues/1211)) ([f398059](https://github.com/sablierapp/sablier/commit/f398059191bea211ab80e56538e524ca4bd9576b)), closes [#1179](https://github.com/sablierapp/sablier/issues/1179) * **proxmox:** report the sablier tag as Enabled on inspect and events ([#1206](https://github.com/sablierapp/sablier/issues/1206)) ([1eb88cb](https://github.com/sablierapp/sablier/commit/1eb88cb2854b69b9c34f2af4d961bde53adee464)) * replace stale since: NEXT_RELEASE markers with real versions ([#1205](https://github.com/sablierapp/sablier/issues/1205)) ([69bb240](https://github.com/sablierapp/sablier/commit/69bb2400f0fe2fe23e69bbb3c22cfe47ed012517)) * resolve instance name aliases before the session lookup ([#1210](https://github.com/sablierapp/sablier/issues/1210)) ([0eee4aa](https://github.com/sablierapp/sablier/commit/0eee4aa3665fc28b4855bf31afcd186544343f84)), closes [#1178](https://github.com/sablierapp/sablier/issues/1178) [#1185](https://github.com/sablierapp/sablier/issues/1185) * **strategy:** do not wait a full refresh interval in blocking strategy ([#1117](https://github.com/sablierapp/sablier/issues/1117)) ([59fb00d](https://github.com/sablierapp/sablier/commit/59fb00d1c7ec2583900cea31ce8d6a3d14c11b7c)), closes [#282](https://github.com/sablierapp/sablier/issues/282) * **swarm:** leave global services out of groups ([#1208](https://github.com/sablierapp/sablier/issues/1208)) ([272d904](https://github.com/sablierapp/sablier/commit/272d9043044b2fedab327368defe34597392522e)) * **theme:** serve at least one second of refresh interval to the waiting page ([#1143](https://github.com/sablierapp/sablier/issues/1143)) ([94ec4d9](https://github.com/sablierapp/sablier/commit/94ec4d9561fba9f02347fc254730199c17549239)) * **tinykv:** send onExpire when a stale timer is in the same cycle ([#1111](https://github.com/sablierapp/sablier/issues/1111)) ([2d147f8](https://github.com/sablierapp/sablier/commit/2d147f848a9e689380f4eac3e56e27f5a02d2cb3)), closes [#1110](https://github.com/sablierapp/sablier/issues/1110) ### Performance Improvements * **sablier:** skip instances without running-hours before inspecting them ([#1158](https://github.com/sablierapp/sablier/issues/1158)) ([7b3876d](https://github.com/sablierapp/sablier/commit/7b3876dc5dadb8b2097cadb1b7b2cafffd1336aa)) ### Documentation * add systemd to feature compatibility front matter ([#1164](https://github.com/sablierapp/sablier/issues/1164)) ([7ab9cad](https://github.com/sablierapp/sablier/commit/7ab9cada87748fea80d94cec623344b7ec3975d0)) * add the systemd sidebar icon and toggle sidebar sections in place ([#1192](https://github.com/sablierapp/sablier/issues/1192)) ([0b68b32](https://github.com/sablierapp/sablier/commit/0b68b324ee05591e9dffe8bbe4bb990bdc640456)) * credit LocalStack as a supporter ([#1163](https://github.com/sablierapp/sablier/issues/1163)) ([a023afd](https://github.com/sablierapp/sablier/commit/a023afd0272c6e8b9ccba28095228ff183247152)) * **docker-swarm:** rewrite the provider page on the shared outline ([#1171](https://github.com/sablierapp/sablier/issues/1171)) ([484050b](https://github.com/sablierapp/sablier/commit/484050bf7a525aeb6f02ec8b2c954350b971cc42)) * **docker:** rewrite the provider page on the shared outline ([#1170](https://github.com/sablierapp/sablier/issues/1170)) ([8ca0ce4](https://github.com/sablierapp/sablier/commit/8ca0ce4ecb72802125a1cc48a2db8a4bde19bded)) * **ecs:** rewrite the provider page on the shared outline ([#1176](https://github.com/sablierapp/sablier/issues/1176)) ([a5b4be1](https://github.com/sablierapp/sablier/commit/a5b4be1d6c30fb1e9f6d86b9e8ae0fac76c80ba5)) * fix stale code comments and docs ([#1204](https://github.com/sablierapp/sablier/issues/1204)) ([e34092a](https://github.com/sablierapp/sablier/commit/e34092ad34ade83431524946b8872d037c28649e)), closes [#1188](https://github.com/sablierapp/sablier/issues/1188) * flatten the how-to guides into a Features list with icons ([#1201](https://github.com/sablierapp/sablier/issues/1201)) ([e46c947](https://github.com/sablierapp/sablier/commit/e46c947acac80f7224ba6357438e2b507abcbd23)) * **kubernetes:** rewrite the provider page on a shared outline ([#1169](https://github.com/sablierapp/sablier/issues/1169)) ([c0cd799](https://github.com/sablierapp/sablier/commit/c0cd7999a7986b60c58ccf466a4d7c877c38b08a)) * list feature support on each provider page ([#1166](https://github.com/sablierapp/sablier/issues/1166)) ([f33a474](https://github.com/sablierapp/sablier/commit/f33a474dffdd0a55d001effb640efc649772d45c)) * make feature pages provider-neutral and link them to provider pages ([#1191](https://github.com/sablierapp/sablier/issues/1191)) ([da7e902](https://github.com/sablierapp/sablier/commit/da7e9022d26f3ab228ce16bd670a87876fe0dfb5)) * **nomad:** rewrite the provider page on the shared outline ([#1175](https://github.com/sablierapp/sablier/issues/1175)) ([93a83c8](https://github.com/sablierapp/sablier/commit/93a83c890d1a290027d4d1f57cb638bdb7a38a6e)) * **podman:** rewrite the provider page on the shared outline ([#1172](https://github.com/sablierapp/sablier/issues/1172)) ([e3a346e](https://github.com/sablierapp/sablier/commit/e3a346e7fc232a138e0955a4dd6cf531b9245e99)) * promote providers to a top-level section ([#1165](https://github.com/sablierapp/sablier/issues/1165)) ([bb5978c](https://github.com/sablierapp/sablier/commit/bb5978cc7f6b73a4df48e01419ffc15056754b60)) * promote reverse proxies to a top-level section ([#1167](https://github.com/sablierapp/sablier/issues/1167)) ([4c4b423](https://github.com/sablierapp/sablier/commit/4c4b423ac3494144961574f638facd22496308df)) * **proxmox-lxc:** rewrite the provider page on the shared outline ([#1173](https://github.com/sablierapp/sablier/issues/1173)) ([3c87656](https://github.com/sablierapp/sablier/commit/3c876564ea2fd2626d4d6d68aa27b3c2b410da5a)) * restore the old how-to redirects on the Docker page ([#1215](https://github.com/sablierapp/sablier/issues/1215)) ([cf7100e](https://github.com/sablierapp/sablier/commit/cf7100e1c517f8c622fdc97057a1495517915484)) * **systemd:** rewrite the provider page on the shared outline ([#1174](https://github.com/sablierapp/sablier/issues/1174)) ([3f12ace](https://github.com/sablierapp/sablier/commit/3f12acede0cb7b6d28af80c58ad0689271858a50)) ### Code Refactoring * **sablier:** use strings.CutLast to parse blkio device lists ([#1118](https://github.com/sablierapp/sablier/issues/1118)) ([cdc1e0a](https://github.com/sablierapp/sablier/commit/cdc1e0a8466902a6ca6514c51fc8702e271b1b67)) ### Tests * **sablier:** let async starts finish before tests end ([#1220](https://github.com/sablierapp/sablier/issues/1220)) ([314fc3b](https://github.com/sablierapp/sablier/commit/314fc3b666c0efa23d614afb1b06614ff9da3250)) * use httptest.NewTestServer in the webhook, metrics and proxmoxlxc tests ([#1119](https://github.com/sablierapp/sablier/issues/1119)) ([346c009](https://github.com/sablierapp/sablier/commit/346c009637e2f69c52a8673d017e993903a4fc9b)) * use testing/synctest for time-based tests ([#1121](https://github.com/sablierapp/sablier/issues/1121)) ([e4c307a](https://github.com/sablierapp/sablier/commit/e4c307ac577b20c2638fe856a5e22f585bc661d3)) ### Chores * **main:** release client 0.1.0 ([#1231](https://github.com/sablierapp/sablier/issues/1231)) ([0e88907](https://github.com/sablierapp/sablier/commit/0e88907d4792f0fec33d46d871a04b15496427ca)) ## [1.18.0](https://github.com/sablierapp/sablier/compare/v1.17.0...v1.18.0) (2026-09-02) ### ⚠ BREAKING CHANGES * **theme:** a custom theme in a sub-directory is now requested as "/" rather than "", as documented. ### build * **deps:** bump github.com/getkin/kin-openapi from 0.146.0 to 0.147.0 ([#1084](https://github.com/sablierapp/sablier/issues/1084)) ([0d4e617](https://github.com/sablierapp/sablier/commit/0d4e6178e48cea226f003fe8929d0cebb82bc733)) ### Features * add systemd provider ([#611](https://github.com/sablierapp/sablier/issues/611)) ([08c1ad4](https://github.com/sablierapp/sablier/commit/08c1ad4876edf29540aa1929109b06530895eddd)) * **logging:** honor the NO_COLOR environment variable ([#1090](https://github.com/sablierapp/sablier/issues/1090)) ([f5c1dcc](https://github.com/sablierapp/sablier/commit/f5c1dcc20ace8a72e618de2763a75e975a705cff)), closes [#1085](https://github.com/sablierapp/sablier/issues/1085) * **theme:** add the retro waiting page theme ([#1096](https://github.com/sablierapp/sablier/issues/1096)) ([510f0e1](https://github.com/sablierapp/sablier/commit/510f0e1967e9a87abc0a496c7cf3a402b2f9c305)) * **theme:** default the custom themes path to /etc/sablier/themes ([#1087](https://github.com/sablierapp/sablier/issues/1087)) ([5b44757](https://github.com/sablierapp/sablier/commit/5b44757762f77eb279a5c8c9b0d57b0a327d056f)), closes [#1081](https://github.com/sablierapp/sablier/issues/1081) ### Bug Fixes * **theme:** name custom themes after their path, ignore non-theme entries ([#1088](https://github.com/sablierapp/sablier/issues/1088)) ([001101e](https://github.com/sablierapp/sablier/commit/001101e86ecaeb20dd3eb097c428b36237e44d17)), closes [#1081](https://github.com/sablierapp/sablier/issues/1081) ### Documentation * **themes:** correct the themes endpoint path and response shape ([#1086](https://github.com/sablierapp/sablier/issues/1086)) ([867f542](https://github.com/sablierapp/sablier/commit/867f54273f98895f1d07cca583f094f3dc142743)) ## [1.17.0](https://github.com/sablierapp/sablier/compare/v1.16.2...v1.17.0) (2026-08-19) ### Features * **session:** best-effort instances via the optional: name prefix ([#1068](https://github.com/sablierapp/sablier/issues/1068)) ([90d89b2](https://github.com/sablierapp/sablier/commit/90d89b2ee9988c818cae69925954a500694a7c14)) * **strategy:** add poke strategy ([#1015](https://github.com/sablierapp/sablier/issues/1015)) ([b60578a](https://github.com/sablierapp/sablier/commit/b60578a17e152ff20a85de50df5e7bfd86235727)) ### Documentation * share giscus comment threads across doc versions ([#1072](https://github.com/sablierapp/sablier/issues/1072)) ([632d9a6](https://github.com/sablierapp/sablier/commit/632d9a6680a1dc1dcc6b5bee9be2e0cb22e5527f)) ## [1.16.2](https://github.com/sablierapp/sablier/compare/v1.16.1...v1.16.2) (2026-08-12) ### Documentation * add Discord link to the website navigation bar ([#1069](https://github.com/sablierapp/sablier/issues/1069)) ([88504de](https://github.com/sablierapp/sablier/commit/88504de63452b9b425f8a55fd28a04b960e332db)) ## [1.16.1](https://github.com/sablierapp/sablier/compare/v1.16.0...v1.16.1) (2026-07-24) ### Bug Fixes * **dockerswarm:** honor the running-only filter in InstanceList ([#1041](https://github.com/sablierapp/sablier/issues/1041)) ([7bc1459](https://github.com/sablierapp/sablier/commit/7bc14595ceff9c5cb1dbcc64b5afa1355f832b0a)) ## [1.16.0](https://github.com/sablierapp/sablier/compare/v1.15.0...v1.16.0) (2026-07-17) ### Features * **kubernetes:** add ready-on-first-replica option ([#1011](https://github.com/sablierapp/sablier/issues/1011)) ([c059946](https://github.com/sablierapp/sablier/commit/c059946d8f27ff478245070a74b0ca0afa2020d5)) ### Bug Fixes * **api:** pass the request context, not the gin context, to session requests ([#1019](https://github.com/sablierapp/sablier/issues/1019)) ([0fb0079](https://github.com/sablierapp/sablier/commit/0fb00795edfec9047dee716e62bc215187c69b79)) * **api:** surface theme render errors and validate the theme before starting instances ([#1021](https://github.com/sablierapp/sablier/issues/1021)) ([8efa983](https://github.com/sablierapp/sablier/commit/8efa9831d68eac74ac80f6f65f205d1fe17f15c7)) * **dockerswarm:** nil-service panic when the name filter has no exact match ([#1017](https://github.com/sablierapp/sablier/issues/1017)) ([3d704f1](https://github.com/sablierapp/sablier/commit/3d704f17a86a328c9f2d0a341c4c16cb0a873964)) * **kubernetes:** detect CloudNativePG CRD via discovery instead of List ([#1002](https://github.com/sablierapp/sablier/issues/1002)) ([c2673cf](https://github.com/sablierapp/sablier/commit/c2673cfacae4ae2a58ef460653cadae6c685c743)) * **kubernetes:** handle informer tombstones in deployment/statefulset watchers ([#1018](https://github.com/sablierapp/sablier/issues/1018)) ([8b93854](https://github.com/sablierapp/sablier/commit/8b93854fdcd111dbc411e0c1b84947b521e6b20a)) * **sablier:** copy group member slices at the registry boundary ([#1016](https://github.com/sablierapp/sablier/issues/1016)) ([8e1df8b](https://github.com/sablierapp/sablier/commit/8e1df8bd222d5298a9e039759894f821c411a790)) * **server:** drain in-flight requests on shutdown and fail fast on bind errors ([#1020](https://github.com/sablierapp/sablier/issues/1020)) ([5bb95c9](https://github.com/sablierapp/sablier/commit/5bb95c97b9cb97d493ad6ab49731384869b143cf)) ### Code Refactoring * **api:** return an explicit session DTO instead of the domain struct ([#1024](https://github.com/sablierapp/sablier/issues/1024)) ([5b9fcb0](https://github.com/sablierapp/sablier/commit/5b9fcb0ce6b9a10d632281cf0e9d4006b89ca020)) * **provider:** one event-stream loop for the Docker-API providers ([#1022](https://github.com/sablierapp/sablier/issues/1022)) ([642d0fa](https://github.com/sablierapp/sablier/commit/642d0fae84a10af6de307d33a5f8806f60804efd)) * **sablier:** typed InstanceConfig with one parser and one enabled-semantics ([#1023](https://github.com/sablierapp/sablier/issues/1023)) ([65b82c2](https://github.com/sablierapp/sablier/commit/65b82c236a691a69132182660407462b3399a1c5)) * **store:** persist sessions as explicit versioned records ([#1025](https://github.com/sablierapp/sablier/issues/1025)) ([57b9fe4](https://github.com/sablierapp/sablier/commit/57b9fe41c05a009a809967e5e5124943fb7ba1ae)) ## [1.15.0](https://github.com/sablierapp/sablier/compare/v1.14.0...v1.15.0) (2026-07-09) ### Features * add anti-affinity ([#997](https://github.com/sablierapp/sablier/issues/997)) ([4c183c2](https://github.com/sablierapp/sablier/commit/4c183c2348c10da39e4ae037975e56854873168f)) * add next build tag and multi-versionned doc ([#1009](https://github.com/sablierapp/sablier/issues/1009)) ([b14ff78](https://github.com/sablierapp/sablier/commit/b14ff78b3b88ef74fda224f3272b9d6e6a01d1b8)) * add running-days ([#994](https://github.com/sablierapp/sablier/issues/994)) ([c981a92](https://github.com/sablierapp/sablier/commit/c981a924eff8c95e414b1b135fa20f7961187563)) * **docker:** add blkio throttling support to scale mode ([#935](https://github.com/sablierapp/sablier/issues/935)) ([60987e2](https://github.com/sablierapp/sablier/commit/60987e2c1536ac4c867332602af8e631184a674a)) * **docker:** respect restart policy and resolve `depends_on` on start ([#956](https://github.com/sablierapp/sablier/issues/956)) ([b050d14](https://github.com/sablierapp/sablier/commit/b050d1486b2c3882a8f847631a89f20444597ad3)) * **metrics:** expose per-session expiry as a Prometheus gauge ([#987](https://github.com/sablierapp/sablier/issues/987)) ([89215db](https://github.com/sablierapp/sablier/commit/89215db336b5913e3adb64db4f7b8580782410e6)) * **provider:** add auto-warm-externally-started option ([#993](https://github.com/sablierapp/sablier/issues/993)) ([26cc2cf](https://github.com/sablierapp/sablier/commit/26cc2cf15b683d4b7c6467226a256fa4695d747a)), closes [#985](https://github.com/sablierapp/sablier/issues/985) * **sablier:** add ready-on-start support via sablier.ready-on-start label ([#984](https://github.com/sablierapp/sablier/issues/984)) ([3d700e8](https://github.com/sablierapp/sablier/commit/3d700e8dd7c6b4afb04b82d589f810b5d030cc40)) ### Bug Fixes * **kubernetes:** honor names-based replica count on instance start ([#1003](https://github.com/sablierapp/sablier/issues/1003)) ([3e4dab9](https://github.com/sablierapp/sablier/commit/3e4dab9be8c56b2f11ce136852f007160324acd7)), closes [#258](https://github.com/sablierapp/sablier/issues/258) ### Documentation * add giscus ([#1007](https://github.com/sablierapp/sablier/issues/1007)) ([66fdf34](https://github.com/sablierapp/sablier/commit/66fdf34f13f35e4f15b1a879741b568aa21173bd)) * use version template ([#1008](https://github.com/sablierapp/sablier/issues/1008)) ([e63413f](https://github.com/sablierapp/sablier/commit/e63413fa2d1f1eff6d774ceea889c5daacb3f43c)) * website rework using Hugo ([#1000](https://github.com/sablierapp/sablier/issues/1000)) ([5abdcbb](https://github.com/sablierapp/sablier/commit/5abdcbb27d9188741e0a92661d3d3392cdb56c4d)) ### Tests * fix test failures ([#998](https://github.com/sablierapp/sablier/issues/998)) ([adcb35b](https://github.com/sablierapp/sablier/commit/adcb35bfe40e64aec3c5fc0f300d4c28e5fb70fd)) ## [1.14.0](https://github.com/sablierapp/sablier/compare/v1.13.0...v1.14.0) (2026-06-12) ### Features * **provider:** pause redis-operator reconciliation during StatefulSet scale-to-zero ([#963](https://github.com/sablierapp/sablier/issues/963)) ([f3f1af0](https://github.com/sablierapp/sablier/commit/f3f1af0118742d1f0d539c3100612fbe2771d4b6)) ### Bug Fixes * **kubernetes:** address code review findings on redis-operator skip-reconcile ([f3f1af0](https://github.com/sablierapp/sablier/commit/f3f1af0118742d1f0d539c3100612fbe2771d4b6)) ## [1.13.0](https://github.com/sablierapp/sablier/compare/v1.12.0...v1.13.0) (2026-05-29) ### ⚠ BREAKING CHANGES * sablier.idle.cpu / sablier.idle.memory no longer enable throttling on their own. Add sablier.idle.replicas=1 to existing workloads that relied on CPU/memory throttling. ### Features * add --auto-stop-externally-started flag ([#906](https://github.com/sablierapp/sablier/issues/906)) ([d2fd51d](https://github.com/sablierapp/sablier/commit/d2fd51d09692cee90604199aba7d7f61b7bf9ef7)) * add `--provider.reject-unlabeled-requests` and `--provider.verify-enabled-on-expiration` ([#901](https://github.com/sablierapp/sablier/issues/901)) ([f1a4e61](https://github.com/sablierapp/sablier/commit/f1a4e617e38a40c2f6a1749face383cf3d9b2c5a)) * add OpenTelemetry distributed tracing support ([#929](https://github.com/sablierapp/sablier/issues/929)) ([68faefd](https://github.com/sablierapp/sablier/commit/68faefd4bcfb57fa76754bf9aa011334abb11ac4)) * add replica count to scale mode, gate resource throttling on idle.replicas >= 1 ([#909](https://github.com/sablierapp/sablier/issues/909)) ([5722c6f](https://github.com/sablierapp/sablier/commit/5722c6f831d9c8729d8e2a914e47f9e134e6c5e3)) * add running-hours keep-warm windows and timezone support ([#907](https://github.com/sablierapp/sablier/issues/907)) ([ed9c611](https://github.com/sablierapp/sablier/commit/ed9c611e180ead41f567f6bbc204ca8dc3a94bbf)) * add theme options schema ([#917](https://github.com/sablierapp/sablier/issues/917)) ([20828ca](https://github.com/sablierapp/sablier/commit/20828ca6b62010bfb171c07a9d003414508e7889)) * add webhooks ([#920](https://github.com/sablierapp/sablier/issues/920)) ([a608a8c](https://github.com/sablierapp/sablier/commit/a608a8ccc6bf3a8f6ca4b43e60361ba9dfb9b56e)) * **api:** add SSE instance events endpoint ([#916](https://github.com/sablierapp/sablier/issues/916)) ([2eccf89](https://github.com/sablierapp/sablier/commit/2eccf89a9cb44b15012d17235bfed6f8ade0bb99)) * **metrics:** add sablier_instance_active_seconds_total metric ([#932](https://github.com/sablierapp/sablier/issues/932)) ([e92f438](https://github.com/sablierapp/sablier/commit/e92f438b4ca6c86b594058c22523e23cab2b1b8f)) * **provider:** add ready-after instance configuration ([#904](https://github.com/sablierapp/sablier/issues/904)) ([ff60d31](https://github.com/sablierapp/sablier/commit/ff60d31728f99eb3206c7153dcb80cadeeca89c6)) * **provider:** support CloudNativePG Cluster hibernation in Kubernetes ([#944](https://github.com/sablierapp/sablier/issues/944)) ([199f12e](https://github.com/sablierapp/sablier/commit/199f12ea5f33b049d2aafacd90ff7c5847d5477f)), closes [#943](https://github.com/sablierapp/sablier/issues/943) * scale mode to throttle CPU/memory instead of stopping containers ([#908](https://github.com/sablierapp/sablier/issues/908)) ([d39804f](https://github.com/sablierapp/sablier/commit/d39804f10ea2b2e605cfa0007d03eb867c92a616)) * support multiple groups per instance ([#913](https://github.com/sablierapp/sablier/issues/913)) ([5b0f896](https://github.com/sablierapp/sablier/commit/5b0f896d2f63759be3051fa9c9e9e302798d36c4)) * **theme:** bundle external CSS, JS, and images into custom themes ([#928](https://github.com/sablierapp/sablier/issues/928)) ([e9ba051](https://github.com/sablierapp/sablier/commit/e9ba0515fb49d557790e684598641afedc9b7048)) ### Bug Fixes * add missing benchmarks folder ([3b1b421](https://github.com/sablierapp/sablier/commit/3b1b4219b8cfabd3a62e7da67ece0d6069887418)) * **api:** handle multiple error types ([#921](https://github.com/sablierapp/sablier/issues/921)) ([2dba936](https://github.com/sablierapp/sablier/commit/2dba936e3a72dc8b07d8191df1c6d23b5de3d12a)) * go routine leak in session request ([#927](https://github.com/sablierapp/sablier/issues/927)) ([91c57c3](https://github.com/sablierapp/sablier/commit/91c57c3b5eb1658df04b2d022e51bf32eb52a4a4)) * multiple sonarqube fixes ([#924](https://github.com/sablierapp/sablier/issues/924)) ([e5d7546](https://github.com/sablierapp/sablier/commit/e5d7546dd120bb71044b98357b6a15edf2317814)) * remove built-in configuration file ([#905](https://github.com/sablierapp/sablier/issues/905)) ([9f3dd79](https://github.com/sablierapp/sablier/commit/9f3dd79537e16580a8abae77ecc651c72bb02433)) * run go fix ([#926](https://github.com/sablierapp/sablier/issues/926)) ([02c1223](https://github.com/sablierapp/sablier/commit/02c12238b462f37c1a59fe1b11d99cc31a558d8a)) * **storage:** properly save and restore file ([#933](https://github.com/sablierapp/sablier/issues/933)) ([5a8f480](https://github.com/sablierapp/sablier/commit/5a8f480f9cf786c4bba29b3e94d2a878f80c68aa)) * **webhooks:** avoid gorouting leaks ([#925](https://github.com/sablierapp/sablier/issues/925)) ([c02d98b](https://github.com/sablierapp/sablier/commit/c02d98b95c58a824f531d99bce78c782f1e76f30)) ### Documentation * add benchmarking/performance ([#931](https://github.com/sablierapp/sablier/issues/931)) ([33abb7e](https://github.com/sablierapp/sablier/commit/33abb7e0f36855087d0836f0d0dff0156b0f93df)) * add docker socket proxy example ([#902](https://github.com/sablierapp/sablier/issues/902)) ([af8127b](https://github.com/sablierapp/sablier/commit/af8127b92546c973dde11c190ad46391b955af1a)) * add table of content divider ([44134a3](https://github.com/sablierapp/sablier/commit/44134a30ccc09a3c8ca43510f38e962cc7bbe4eb)) * **examples:** example verify enabled on expiration ([#911](https://github.com/sablierapp/sablier/issues/911)) ([3e64b9e](https://github.com/sablierapp/sablier/commit/3e64b9e9098d57dae7d8d46197190d250f1ca70c)) * release please update version typo ([b92169a](https://github.com/sablierapp/sablier/commit/b92169a028a249db5fa8f194546e511abd07bb82)) * update configuration docs and README ([#930](https://github.com/sablierapp/sablier/issues/930)) ([57a65d9](https://github.com/sablierapp/sablier/commit/57a65d97ed8e7b1c844db6c6b780195795dc022b)) ### Code Refactoring * watch groups through events ([#910](https://github.com/sablierapp/sablier/issues/910)) ([44b57a9](https://github.com/sablierapp/sablier/commit/44b57a99615dd7f7e91af56aedb4fd2fed1a14e4)) ### Chores * add OpenTelemetry patterns to dependabot config ([68866ea](https://github.com/sablierapp/sablier/commit/68866ea6372bae243b2a5308bb9989f97fb5b555)) ## [1.12.0](https://github.com/sablierapp/sablier/compare/v1.11.2...v1.12.0) (2026-05-13) ### Features * add Prometheus /metrics endpoint ([#884](https://github.com/sablierapp/sablier/issues/884)) ([b0a0237](https://github.com/sablierapp/sablier/commit/b0a023707d28859dd33dcf84635dbcef8d777cb4)) * add raw instance data in InstanceInfo ([#892](https://github.com/sablierapp/sablier/issues/892)) ([d09b56c](https://github.com/sablierapp/sablier/commit/d09b56c10f51bf684e3395276dc32d38d3aca696)) * **docker:** add event stream reconnection ([#891](https://github.com/sablierapp/sablier/issues/891)) ([0510380](https://github.com/sablierapp/sablier/commit/0510380bfe9d4cf71817e63fa91bf54f85cb80a1)), closes [#535](https://github.com/sablierapp/sablier/issues/535) * Proxmox VE LXC provider ([#868](https://github.com/sablierapp/sablier/issues/868)) ([4692a09](https://github.com/sablierapp/sablier/commit/4692a09e463ff8355e75eac4c48eb6198557d6fe)) ### Bug Fixes * async InstanceStart calls ([#869](https://github.com/sablierapp/sablier/issues/869)) ([3c1430f](https://github.com/sablierapp/sablier/commit/3c1430f18d2573f326b9eb6f7c6565a4e51ad9ac)) * **log:** add INFO logs for started instances ([#871](https://github.com/sablierapp/sablier/issues/871)) ([4d1ea62](https://github.com/sablierapp/sablier/commit/4d1ea622a2ca436cee4408aa71d8e6231660ea98)) * remove volume declaration from Dockerfile ([#899](https://github.com/sablierapp/sablier/issues/899)) ([9ed4d11](https://github.com/sablierapp/sablier/commit/9ed4d11f49ece5c26d22e30855338c7ada63f40c)) * use moby/moby/client ([#753](https://github.com/sablierapp/sablier/issues/753)) ([a5babb9](https://github.com/sablierapp/sablier/commit/a5babb9678d2f3a079e3d4283eaed2709da9deb7)) ### Code Refactoring * **podman:** use moby/moby/client instead of podman bindings ([#885](https://github.com/sablierapp/sablier/issues/885)) ([858f12a](https://github.com/sablierapp/sablier/commit/858f12a6e4d56c5b7895883d3524ab51e1ed752b)) ### Tests * **kubernetes:** run all tests in a single cluster ([#889](https://github.com/sablierapp/sablier/issues/889)) ([aaf20b4](https://github.com/sablierapp/sablier/commit/aaf20b4e1130b6c1486d19809e67d6004fe37d6c)) * **sonar:** remove generated code from coverage ([2c25b04](https://github.com/sablierapp/sablier/commit/2c25b0468adfb710f2118fbb9eb3e8814fcfb26d)) ## [1.11.2](https://github.com/sablierapp/sablier/compare/v1.11.1...v1.11.2) (2026-04-03) ### Bug Fixes * **cmd:** return an error instead of panic ([#820](https://github.com/sablierapp/sablier/issues/820)) ([d7f6403](https://github.com/sablierapp/sablier/commit/d7f640382c2f82f1f3918aec3899a661bcf0e9bb)) * **deps:** bump the k8s-io group across 1 directory with 3 updates ([#828](https://github.com/sablierapp/sablier/issues/828)) ([13bd6b2](https://github.com/sablierapp/sablier/commit/13bd6b2c46ca502911e9e318f0489753833313c3)) * handle instance start errors in dynamic and blocking strategies ([#854](https://github.com/sablierapp/sablier/issues/854)) ([69b3d57](https://github.com/sablierapp/sablier/commit/69b3d57035c6036c925f47c791b8e4f4219407ea)) ## [1.11.1](https://github.com/sablierapp/sablier/compare/v1.11.0...v1.11.1) (2026-01-14) ### Bug Fixes * **config:** use SABLIER_ environment variable prefix ([#790](https://github.com/sablierapp/sablier/issues/790)) ([e9c2213](https://github.com/sablierapp/sablier/commit/e9c2213d49320bba9cf7ecd0f6585c221da13f64)) * **logging:** access log level is set to debug ([#791](https://github.com/sablierapp/sablier/issues/791)) ([6e46cdb](https://github.com/sablierapp/sablier/commit/6e46cdba313605e01af52072e695db32d84282e3)) ### Documentation * clarify configuration source evaluation order ([#788](https://github.com/sablierapp/sablier/issues/788)) ([ecdfd37](https://github.com/sablierapp/sablier/commit/ecdfd37901fff470ded9690e62f414330b5afbf6)) ## [1.11.0](https://github.com/sablierapp/sablier/compare/v1.10.5...v1.11.0) (2025-12-05) ### Features * **docker:** add docker pause strategy ([#755](https://github.com/sablierapp/sablier/issues/755)) ([0d699ef](https://github.com/sablierapp/sablier/commit/0d699effc34260be35aba0d3acb57d8775bf8f8b)) ### Documentation * add mimic healthcheck ([ff5c447](https://github.com/sablierapp/sablier/commit/ff5c4476bd0a45f4495fdb8e32e1d18e0b32ec4e)) * add quick start ([58896b9](https://github.com/sablierapp/sablier/commit/58896b9feb27577ff8a41e5a8f3e3438761b2f5f)) * update provider features ([d7685f0](https://github.com/sablierapp/sablier/commit/d7685f04a1afd4df1b4acb511ecd9c6051b17e99)) ## [1.10.5](https://github.com/sablierapp/sablier/compare/v1.10.4...v1.10.5) (2025-11-23) ### Bug Fixes * **dockerfile:** remove running as non-root ([b3d356a](https://github.com/sablierapp/sablier/commit/b3d356ac63d636791a7eed20adac29fde184fe26)) * warn when the custom theme path does not exist ([112bdaa](https://github.com/sablierapp/sablier/commit/112bdaaf8f1eb6259a4cd8ff6f8b6e179add0700)) ### Documentation * set version to 1.10.4 ([d66a143](https://github.com/sablierapp/sablier/commit/d66a143a9c22711724a5217fa58c1233a56e1d21)) ## [1.10.4](https://github.com/sablierapp/sablier/compare/v1.10.3...v1.10.4) (2025-11-23) ### Bug Fixes * **dockerfile:** copy file with proper permissions ([#746](https://github.com/sablierapp/sablier/issues/746)) ([12d00e0](https://github.com/sablierapp/sablier/commit/12d00e05bee50f8e3814ce828f4d468457c1ef7b)) ### Documentation * add signature verification ([3417baf](https://github.com/sablierapp/sablier/commit/3417baf0898e218b34cc5f2b72a04161bc69d289)) ## [1.10.3](https://github.com/sablierapp/sablier/compare/v1.10.2...v1.10.3) (2025-11-23) ### Bug Fixes * **goreleaser:** reverse --snapshot ternary expression ([d834d17](https://github.com/sablierapp/sablier/commit/d834d178efdda758a6ccf850b617b91e289da101)) ### Documentation * fix podman documentation link ([#743](https://github.com/sablierapp/sablier/issues/743)) ([080e4d1](https://github.com/sablierapp/sablier/commit/080e4d1a1f7702b63a146b6607064bf2876a51c6)) ## [1.10.2](https://github.com/sablierapp/sablier/compare/v1.10.1...v1.10.2) (2025-11-23) ### ⚠ BREAKING CHANGES * remove plugins from the repository ### fix\ * remove plugins from the repository ([6d88092](https://github.com/sablierapp/sablier/commit/6d880928c7ec1992b998ef78a43334b1f4823026)) ### Bug Fixes * bump go 1.25 ([#723](https://github.com/sablierapp/sablier/issues/723)) ([0588627](https://github.com/sablierapp/sablier/commit/0588627d3623109aa792ae20c16be9fa4b2814a2)) ### Documentation * add CONTRIBUTING.md ([a4d7dda](https://github.com/sablierapp/sablier/commit/a4d7ddae05fd5df141386139a5aee80304499476)) * add discord server and link pugin repositories ([c5ac357](https://github.com/sablierapp/sablier/commit/c5ac3578822089db228c82f8c0a282202476b7cf)) * add github and docker icons ([da5d2d1](https://github.com/sablierapp/sablier/commit/da5d2d113a83558697387da35141053699e82093)) * add helm chart ([71a35ca](https://github.com/sablierapp/sablier/commit/71a35ca8dd273901d7e0469ff68e61bfa77241ff)) * add OpenSSF scorecard ([dc5fb22](https://github.com/sablierapp/sablier/commit/dc5fb22b4007814f9db92eb626ab0c1000c3c7cd)) * add release please glob file ([64550ff](https://github.com/sablierapp/sablier/commit/64550ff25bb82571d49b99d058b4a5c9731f7481)) * add release please tags to update version ([8bc21fb](https://github.com/sablierapp/sablier/commit/8bc21fbaa91e62b5ea83991c46e134e79ede271a)) * add sponsor section ([e2b7965](https://github.com/sablierapp/sablier/commit/e2b7965f7a54194ba2b053f7cef0df8b750ffd8f)) * add support section ([09f99f6](https://github.com/sablierapp/sablier/commit/09f99f69ba7b3089ed9d3a1cdcf97dd4184ec961)) * improve documentation clarity ([a6614de](https://github.com/sablierapp/sablier/commit/a6614de3ad4e3d0119a43e1c0b85145a58f4a187)) * reference plugin repositories ([33209ac](https://github.com/sablierapp/sablier/commit/33209acc6c7c597a15ec1c9846683e8cdd9c5b7a)) * **traefik:** set traefik plugin version to v1.10.1 ([#654](https://github.com/sablierapp/sablier/issues/654)) ([8af2f32](https://github.com/sablierapp/sablier/commit/8af2f3265da6478a9224e2639452c83aae485544)) * update documentation ([96750a5](https://github.com/sablierapp/sablier/commit/96750a50da79fe0a4594480d82a40dee5855c017)) ### Code Refactoring * add sabliercmd pkg ([#727](https://github.com/sablierapp/sablier/issues/727)) ([0f4a3a2](https://github.com/sablierapp/sablier/commit/0f4a3a2e930aa41915d5eb46c60d39fd664a7143))