1"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[1367],{11:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>o,toc:()=>l});var s=t(5893),i=t(1151);const r={title:"Cwtch 1.16.1",description:"Cwtch 1.16.1 is now available to download",slug:"cwtch-1-16",tags:["cwtch","cwtch-stable","release"],image:"/img/hero1.png",hide_table_of_contents:!1,toc_max_heading_level:4,authors:[{name:"Sarah Jamie Lewis",title:"Executive Director, Open Privacy Research Society",image_url:"/img/sarah.jpg"}]},a=void 0,o={permalink:"/blog/cwtch-1-16",source:"@site/blog/2025-10-30-cwtch-1.16.md",title:"Cwtch 1.16.1",description:"Cwtch 1.16.1 is now available to download",date:"2025-10-30T00:00:00.000Z",formattedDate:"October 30, 2025",tags:[{label:"cwtch",permalink:"/blog/tags/cwtch"},{label:"cwtch-stable",permalink:"/blog/tags/cwtch-stable"},{label:"release",permalink:"/blog/tags/release"}],readingTime:2.495,hasTruncateMarker:!1,authors:[{name:"Sarah Jamie Lewis",title:"Executive Director, Open Privacy Research Society",image_url:"/img/sarah.jpg",imageURL:"/img/sarah.jpg"}],frontMatter:{title:"Cwtch 1.16.1",description:"Cwtch 1.16.1 is now available to download",slug:"cwtch-1-16",tags:["cwtch","cwtch-stable","release"],image:"/img/hero1.png",hide_table_of_contents:!1,toc_max_heading_level:4,authors:[{name:"Sarah Jamie Lewis",title:"Executive Director, Open Privacy Research Society",image_url:"/img/sarah.jpg",imageURL:"/img/sarah.jpg"}]},unlisted:!1,prevItem:{title:"Cwtch 1.17 Stable Release Candidate",permalink:"/blog/cwtch-1-17"},nextItem:{title:"Cwtch 1.15",permalink:"/blog/cwtch-1-15"}},c={authorsImageUrls:[void 0]},l=[{value:"In This Release",id:"in-this-release",level:2},{value:"Reproducible Bindings",id:"reproducible-bindings",level:2},{value:"Help us go further!",id:"help-us-go-further",level:2}];function h(e){const n={a:"a",code:"code",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://cwtch.im/download",children:"Cwtch 1.16.1 is now available for download"}),"!"]}),"\n",(0,s.jsx)(n.p,{children:"Cwtch is a communication application (and associated libraries) that uses Tor v3 Onion Services to establish surveillance resistant channels between people. Cwtch has been designed to be secure, private, and resilient."}),"\n",(0,s.jsxs)(n.p,{children:["You can download Cwtch from ",(0,s.jsx)(n.a,{href:"https://docs.cwtch.im/download",children:"https://docs.cwtch.im/download"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Subscribe to our ",(0,s.jsx)(n.a,{href:"/blog/rss.xml",children:"RSS feed"}),", ",(0,s.jsx)(n.a,{href:"/blog/atom.xml",children:"Atom feed"}),", or ",(0,s.jsx)(n.a,{href:"/blog/feed.json",children:"JSON feed"})," to stay up to date, and get the latest on, all aspects of Cwtch development."]}),"\n",(0,s.jsxs)(n.p,{children:["Alternatively we also provide a ",(0,s.jsx)(n.a,{href:"https://cwtch.im/releases/index.xml",children:"releases-only RSS feed"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"in-this-release",children:"In This Release"}),"\n",(0,s.jsxs)(n.p,{children:["A special thanks to the ",(0,s.jsx)(n.a,{href:"https://docs.cwtch.im/docs/contribute/translate",children:"amazing volunteer translators"})," and ",(0,s.jsx)(n.a,{href:"https://docs.cwtch.im/docs/contribute/testing",children:"testers"})," who made this release possible."]}),"\n",(0,s.jsx)(n.p,{children:"Cwtch 1.16.1 is small update in scope, but reflected a large amount of work under the surface to improve and modernize our dependency stack."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"New Features:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"New Encrypted Database Backend"})," - The Cwtch Team have invested in updating our encrypted database backend. Prior to 1.16.1 Cwtch relied on an outdated go wrapper for sqlcipher with libTomCrypt for encryption. This dependency had not received updates in many years, and was lagging behind\nsqlcipher and sqlite releases. We have now forked and adopted this dependency under the name ",(0,s.jsx)(n.a,{href:"https://git.openprivacy.ca/openprivacy/go-sqlcipher",children:"go-sqlcipher"}),", invested in new maintenance scripts that make updating easier, and migrated the C-based crypto backed to a new memory-safe one based on standard, and audited go crypto."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Memory Tagging Extension Safe"})," - With the upgrade of our encrypted database backed we also took the opportunity to replace the less than ideal usage of GoString from the libSqlite3 go dependency. These calls are now wrapped with a go function that ensure safe memory reads and should no longer result in Cwtch being
1killed when MTE in enabled on ARM platforms."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Bug Fixes / Improvements:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Cwtch is now based on Flutter 3.29"}),"\n",(0,s.jsx)(n.li,{children:"Fixes to retry cooldown to prevent long-delays when an initial connection attempt fails. This should result in faster connections to online friends."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Accessibility / UX:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Core translations for ",(0,s.jsx)(n.strong,{children:"Brazilian Portuguese"}),", ",(0,s.jsx)(n.strong,{children:"Danish"})," , ",(0,s.jsx)(n.strong,{children:"Dutch"}),", ",(0,s.jsx)(n.strong,{children:"French"}),", ",(0,s.jsx)(n.strong,{children:"German"}),", ",(0,s.jsx)(n.strong,{children:"Italian"}),", ",(0,s.jsx)(n.strong,{children:"Norwegian"})," , ",(0,s.jsx)(n.strong,{children:"Romanian"})," , ",(0,s.jsx)(n.strong,{children:"Russian"}),", ",(0,s.jsx)(n.strong,{children:"Polish"}),", ",(0,s.jsx)(n.strong,{children:"Slovak"}),", ",(0,s.jsx)(n.strong,{children:"Spanish"}),", ",(0,s.jsx)(n.strong,{children:"Swahili"}),", ",(0,s.jsx)(n.strong,{children:"Swedish"}),", ",(0,s.jsx)(n.strong,{children:"Turkish"}),", and ",(0,s.jsx)(n.strong,{children:"Welsh"})]}),"\n",(0,s.jsxs)(n.li,{children:["Partial translations for ",(0,s.jsx)(n.strong,{children:"Korean"})," (41%), ",(0,s.jsx)(n.strong,{children:"Japanese"})," (26%), , ",(0,s.jsx)(n.strong,{children:"Luxembourgish"})," (19%), ",(0,s.jsx)(n.strong,{children:"Greek"})," (15%), ",(0,s.jsx)(n.strong,{children:"Uzbek"})," (9%), and ",(0,s.jsx)(n.strong,{children:"Portuguese"})," (5%)"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"reproducible-bindings",children:"Reproducible Bindings"}),"\n",(0,s.jsxs)(n.p,{children:["Cwtch 1.16.1 is based on libCwtch version ",(0,s.jsx)(n.code,{children:"libCwtch-autobindings-v0.2.0"}),".\nThe ",(0,s.jsx)(n.a,{href:"https://docs.cwtch.im/blog/cwtch-bindings-reproducible#introducing-repliqate",children:"repliqate scripts"})," to reproduce these bindings from source\ncan be found at ",(0,s.jsx)(n.a,{href:"https://git.openprivacy.ca/cwtch.im/repliqate-scripts/src/branch/main/cwtch-autobindings-v0.2.0",children:"https://git.openprivacy.ca/cwtch.im/repliqate-scripts/src/branch/main/cwtch-autobindings-v0.2.0"})]}),"\n",(0,s.jsx)("hr",{}),"\n",(0,s.jsx)("br",{}),"\n",(0,s.jsx)(n.h2,{id:"help-us-go-further",children:"Help us go further!"}),"\n",(0,s.jsxs)(n.p,{children:["We couldn't do what we do without all the wonderful community support we get, from ",(0,s.jsx)(n.a,{href:"https://openprivacy.ca/donate",children:"one-off donations"})," to ",(0,s.jsx)(n.a,{href:"https://www.patreon.com/openprivacy",children:"recurring support via Patreon"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["If you want to see us move faster on some of these goals and are in a position to, please ",(0,s.jsx)(n.a,{href:"https://openprivacy.ca/donate",children:"donate"}),". If you happen to be at a company that wants to do more for the community and this aligns, please consider donating or sponsoring a developer."]}),"\n",(0,s.jsxs)(n.p,{children:["Donations of ",(0,s.jsx)(n.strong,{children:"$5 or more"})," can opt to receive stickers as a thank-you gift!"]}),"\n",(0,s.jsxs)(n.p,{children:["For more information about donating to Open Privacy and claiming a thank you gift ",(0,s.jsx)(n.a,{href:"https://openprivacy.ca/donate/",children:"please visit the Open Privacy Donate page"}),"."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"A Photo of Cwtch Stickers",src:t(5005).Z+"",width:"1024",height:"768"})})]})}function d(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},5005:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg"},1151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>a});var s=t(7294);const i={},r=s.createContext(i);function a(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.