[{"data":1,"prerenderedAt":408},["ShallowReactive",2],{"navigation":3,"/posts/2025-09-16-release-notes-v0.22.4":166,"/posts/2025-09-16-release-notes-v0.22.4-surround":405},[4],{"title":5,"path":6,"stem":7,"children":8,"page":165},"Posts","/posts","posts",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161],{"title":10,"path":11,"stem":12},"New API client library: Perl","/posts/2012-01-03-perl-api-library","posts/2012-01-03-perl-api-library",{"title":14,"path":15,"stem":16},"'Good' vs 'Strong' passwords","/posts/2012-01-25-good-passwords","posts/2012-01-25-good-passwords",{"title":18,"path":19,"stem":20},"Protecting your credentials from criminals","/posts/2012-01-30-protecting-credentials","posts/2012-01-30-protecting-credentials",{"title":22,"path":23,"stem":24},"Onetime Secret is Now Opensource","/posts/2013-01-30-onetimesecret-is-now-opensource","posts/2013-01-30-onetimesecret-is-now-opensource",{"title":26,"path":27,"stem":28},"Major UI update (with mobile support)","/posts/2013-02-04-ui-update-mobile","posts/2013-02-04-ui-update-mobile",{"title":30,"path":31,"stem":32},"Copying server data from the command-line, safely","/posts/2013-02-12-copy-server-data-command-line","posts/2013-02-12-copy-server-data-command-line",{"title":34,"path":35,"stem":36},"Privacy Policy Update (June 2024)","/posts/2024-06-15-privacy-policy-update","posts/2024-06-15-Privacy Policy-Update",{"title":38,"path":39,"stem":40},"Onetime Secret v0.16.0 Release - Modern UI and Enhanced Development","/posts/2024-07-29-release-notes-v0.16.0","posts/2024-07-29-release-notes-v0.16.0",{"title":42,"path":43,"stem":44},"Open-Source First Development Model","/posts/2024-08-14-opensource-first-model","posts/2024-08-14-opensource-first-model",{"title":46,"path":47,"stem":48},"Onetime Secret v0.17.0: Foundation for the Future","/posts/2024-08-31-release-notes-v0.17.0","posts/2024-08-31-release-notes-v0.17.0",{"title":50,"path":51,"stem":52},"So the custom font was a whoopsies","/posts/2024-09-03-custom-font-a-whoopsies","posts/2024-09-03-custom-font-a-whoopsies",{"title":54,"path":55,"stem":56},"UI/UX Updates - September '24","/posts/2024-09-04-ux-ui-updates","posts/2024-09-04-ux-ui-updates",{"title":58,"path":59,"stem":60},"Data Privacy Regulations: A New Framework for UI Design","/posts/2024-09-05-constraints","posts/2024-09-05-constraints",{"title":62,"path":63,"stem":64},"A verifiable error in our signup flow","/posts/2024-09-06-mistake-were-made-signups","posts/2024-09-06-mistake-were-made-signups",{"title":66,"path":67,"stem":68},"Support for ASCII QR Codes","/posts/2024-09-08-qr-code","posts/2024-09-08-qr-code",{"title":70,"path":71,"stem":72},"Denial of Service (DoS) Attack: A brief summary","/posts/2024-09-09-denial-of-service","posts/2024-09-09-denial-of-service",{"title":74,"path":75,"stem":76},"Denial of Service (DoS) Attack: Continued Adventure","/posts/2024-09-12-ddos-day-4","posts/2024-09-12-ddos-day-4",{"title":78,"path":79,"stem":80},"Denial of Service (DoS) Attack: Day 5","/posts/2024-09-13-ddos-day-5","posts/2024-09-13-ddos-day-5",{"title":82,"path":83,"stem":84},"Onetime Secret v0.18.0: Enjoying the Vue","/posts/2024-10-03-release-notes-v0.18.0","posts/2024-10-03-release-notes-v0.18.0",{"title":86,"path":87,"stem":88},"Installing Onetime Secret: The Complete Guide (Part 1 of 5)","/posts/2024-10-08-installation-series-1of5-standalone","posts/2024-10-08-installation-series-1of5-standalone",{"title":90,"path":91,"stem":92},"Ugly By Nature: Why Our Blog Graphics Look Terrible (On Purpose)","/posts/2024-10-15-ai-generated-graphics-transparency","posts/2024-10-15-ai-generated-graphics-transparency",{"title":94,"path":95,"stem":96},"Expanding Horizons: Introducing US Data Locality for Onetime Secret","/posts/2024-10-23-us-data-center","posts/2024-10-23-us-data-center",{"title":98,"path":99,"stem":100},"Industry Practices We Deliberately Avoid","/posts/2024-11-01-industry-practices-we-deliberately-avoid","posts/2024-11-01-industry-practices-we-deliberately-avoid",{"title":102,"path":103,"stem":104},"Why we don't have a cookie notice","/posts/2024-11-05-privacy-by-design-no-cookie-notice","posts/2024-11-05-privacy-by-design-no-cookie-notice",{"title":106,"path":107,"stem":108},"Onetime Secret v0.19.0: Custom Branding & Type Safety","/posts/2025-01-24-release-notes-v0.19.0","posts/2025-01-24-release-notes-v0.19.0",{"title":110,"path":111,"stem":112},"Onetime Secret v0.20.0: Internationalization","/posts/2025-02-24-release-notes-v0.20.0","posts/2025-02-24-release-notes-v0.20.0",{"title":114,"path":115,"stem":116},"Canada Region Now Available","/posts/2025-03-03-canada-region-now-available","posts/2025-03-03-canada-region-now-available",{"title":118,"path":119,"stem":120},"Aotearoa New Zealand Region Now Available","/posts/2025-04-03-aotearoa-new-zealand-region-available","posts/2025-04-03-aotearoa-new-zealand-region-available",{"title":122,"path":123,"stem":124},"Homepage Update: We're Going Regional","/posts/2025-05-05-homepage-update-going-regional","posts/2025-05-05-homepage-update-going-regional",{"title":126,"path":127,"stem":128},"Domain Strategy Reengineered: Building Verification into Our Architecture","/posts/2025-05-14-homepage-post-as-in-after","posts/2025-05-14-homepage-post-as-in-after",{"title":130,"path":131,"stem":132},"Verifying Authentic Onetime Secret Services","/posts/2025-05-15-distrust-and-double-verify","posts/2025-05-15-distrust-and-double-verify",{"title":134,"path":135,"stem":136},"Claude Roasts our tests","/posts/2025-05-21-claude-roasts-our-tests","posts/2025-05-21-claude-roasts-our-tests",{"title":138,"path":139,"stem":140},"JSON Trouble on the Default-lines","/posts/2025-06-07-json-trouble-on-the-default-lines","posts/2025-06-07-json-trouble-on-the-default-lines",{"title":142,"path":143,"stem":144},"OneTimeSecret v0.22.4: Password Settings & Disabling Homepage","/posts/2025-09-16-release-notes-v0.22.4","posts/2025-09-16-release-notes-v0.22.4",{"title":146,"path":147,"stem":148},"The Ramshackler's Guide to i18n","/posts/2025-12-12-how-we-handle-translations","posts/2025-12-12-how-we-handle-translations",{"title":150,"path":151,"stem":152},"Onetime Secret v0.23: Config Migration and API Improvements","/posts/2026-01-18-release-notes-v0.23","posts/2026-01-18-release-notes-v0.23",{"title":154,"path":155,"stem":156},"UK Region Now Available","/posts/2026-02-06-uk-region-now-available","posts/2026-02-06-uk-region-now-available",{"title":158,"path":159,"stem":160},"Onetime Secret v0.24.0: A New Foundation","/posts/2026-03-04-release-notes-v0.24.0","posts/2026-03-04-release-notes-v0.24.0",{"title":162,"path":163,"stem":164},"Mea gulpa: a big bowl of humble broth (or, API-carumba: an upgrade story)","/posts/2026-03-27-mea-gulpa-api-carumba","posts/2026-03-27-mea-gulpa-api-carumba",false,{"id":167,"title":142,"authors":168,"badge":174,"body":176,"date":396,"description":182,"extension":397,"headline":398,"icon":398,"image":399,"layout":401,"meta":402,"navigation":280,"path":143,"readingTime":252,"seo":403,"stem":144,"__hash__":404},"posts/posts/2025-09-16-release-notes-v0.22.4.md",[169],{"name":170,"to":171,"avatar":172},"Delano","https://blog.onetimesecret.com/about",{"src":173},"/img/portrait-profile-pic-delano-2025-m.png",{"label":175},"Release",{"type":177,"value":178,"toc":391},"minimark",[179,183,188,195,210,216,229,233,330,334,353,364,367,373,387],[180,181,182],"p",{},"Version v0.22.4 introduces new configuration options for customizing security policies and access control.",[184,185,187],"h2",{"id":186},"changes","Changes",[180,189,190,194],{},[191,192,193],"strong",{},"Configurable Passphrase Validation",": Environment variables are now available to configure passphrase requirements, including minimum length and complexity. This is useful for deployments with specific security policies.",[180,196,197,200,201,205,206,209],{},[191,198,199],{},"Disable Homepage",": A new ",[202,203,204],"code",{},"AUTH_REQUIRED"," mode can be enabled to restrict homepage access to authenticated users. Site navigation remains available. This can be used with ",[202,207,208],{},"UI_ENABLED=false"," for API-only deployments.",[180,211,212,215],{},[191,213,214],{},"Password Generation",": The length and character sets (uppercase, lowercase, numbers, symbols) of generated passwords can now be configured. There is also an option to exclude ambiguous characters.",[217,218,219],"blockquote",{},[180,220,221,225,228],{},[222,223,224],"span",{},"!INFO",[191,226,227],{},"Admin Interface",": The Colonel settings view is now read-only.",[184,230,232],{"id":231},"configuration-examples","Configuration Examples",[234,235,240],"pre",{"className":236,"code":237,"language":238,"meta":239,"style":239},"language-bash shiki shiki-themes material-theme-lighter houston one-dark-pro","# Disable Homepage\nAUTH_REQUIRED=false\nUI_ENABLED=true\n\n# Password Policies\nPASSPHRASE_MIN_LENGTH=8\nPASSPHRASE_ENFORCE_COMPLEXITY=false\nPASSWORD_GEN_LENGTH=12\nPASSWORD_GEN_SYMBOLS=false\n","bash","",[202,241,242,250,264,275,282,288,299,309,320],{"__ignoreMap":239},[222,243,246],{"class":244,"line":245},"line",1,[222,247,249],{"class":248},"s9XRh","# Disable Homepage\n",[222,251,253,256,260],{"class":244,"line":252},2,[222,254,204],{"class":255},"sFOsI",[222,257,259],{"class":258},"svn82","=",[222,261,263],{"class":262},"sC_Oy","false\n",[222,265,267,270,272],{"class":244,"line":266},3,[222,268,269],{"class":255},"UI_ENABLED",[222,271,259],{"class":258},[222,273,274],{"class":262},"true\n",[222,276,278],{"class":244,"line":277},4,[222,279,281],{"emptyLinePlaceholder":280},true,"\n",[222,283,285],{"class":244,"line":284},5,[222,286,287],{"class":248},"# Password Policies\n",[222,289,291,294,296],{"class":244,"line":290},6,[222,292,293],{"class":255},"PASSPHRASE_MIN_LENGTH",[222,295,259],{"class":258},[222,297,298],{"class":262},"8\n",[222,300,302,305,307],{"class":244,"line":301},7,[222,303,304],{"class":255},"PASSPHRASE_ENFORCE_COMPLEXITY",[222,306,259],{"class":258},[222,308,263],{"class":262},[222,310,312,315,317],{"class":244,"line":311},8,[222,313,314],{"class":255},"PASSWORD_GEN_LENGTH",[222,316,259],{"class":258},[222,318,319],{"class":262},"12\n",[222,321,323,326,328],{"class":244,"line":322},9,[222,324,325],{"class":255},"PASSWORD_GEN_SYMBOLS",[222,327,259],{"class":258},[222,329,263],{"class":262},[184,331,333],{"id":332},"installation","Installation",[180,335,336,339,340,343,339,346],{},[191,337,338],{},"Docker",": ",[202,341,342],{},"docker pull onetimesecret/onetimesecret:v0.22.4",[191,344,345],{},"Source",[347,348,352],"a",{"href":349,"rel":350},"https://github.com/onetimesecret/onetimesecret/releases/tag/v0.22.4",[351],"nofollow","GitHub Release",[180,354,355,356,359,360,363],{},"The release also includes updates to ",[202,357,358],{},"INSTALL.md"," and the ",[202,361,362],{},"README.md"," for Docker deployment.",[365,366],"hr",{},[180,368,369],{},[370,371,372],"em",{},"This post was written with assistance from:",[374,375,376,382],"ul",{},[377,378,379],"li",{},[370,380,381],{},"Claude Code: collecting release facts, document structure, first draft.",[377,383,384],{},[370,385,386],{},"Gemini CLI: content editing (\"Update the text to remove false enthusiasm, marketing speak, and overall keep it an engineer's doc\")",[388,389,390],"style",{},"html pre.shiki code .s9XRh, html code.shiki .s9XRh{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEF0F98F;--shiki-default-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic}html pre.shiki code .sFOsI, html code.shiki .sFOsI{--shiki-light:#90A4AE;--shiki-default:#4BF3C8;--shiki-dark:#E06C75}html pre.shiki code .svn82, html code.shiki .svn82{--shiki-light:#39ADB5;--shiki-default:#EEF0F9;--shiki-dark:#56B6C2}html pre.shiki code .sC_Oy, html code.shiki .sC_Oy{--shiki-light:#91B859;--shiki-default:#FFD493;--shiki-dark:#98C379}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":239,"searchDepth":252,"depth":252,"links":392},[393,394,395],{"id":186,"depth":252,"text":187},{"id":231,"depth":252,"text":232},{"id":332,"depth":252,"text":333},"2025-09-16","md",null,{"src":400},"/img/blog/2025/release-0.22.4.svg","post",{},{"title":142,"description":182},"ozgxbeL7a19ChqMfuMLZwUboJ34jFVO-zcotZiNWF_A",[406,407],{"title":138,"path":139,"stem":140,"children":-1},{"title":146,"path":147,"stem":148,"children":-1},1781425298572]