docs.cwtch.im/build-staging/blog/feed.json

339 lines
193 KiB
JSON
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"version": "https://jsonfeed.org/version/1",
"title": "Cwtch Development Log",
"home_page_url": "https://docs.cwtch.im/blog",
"description": "The latest insight into Cwtch Development and what the Cwtch team are working on",
"items": [
{
"id": "https://docs.cwtch.im/blog/cwtch-1-14",
"content_html": "<p><a href=\"https://cwtch.im/download\" target=\"_blank\" rel=\"noopener noreferrer\">Cwtch 1.14 is now available for download</a>!<!-- --></p>\n<!-- --><p>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\nsecure, private, and resilient.</p>\n<!-- --><p>You can download Cwtch from <!-- --><a href=\"https://cwtch.im/download\" target=\"_blank\" rel=\"noopener noreferrer\">https://cwtch.im/download</a>.<!-- --></p>\n<!-- --><p>Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><p>Alternatively we also provide a <!-- --><a href=\"https://cwtch.im/releases/index.xml\" target=\"_blank\" rel=\"noopener noreferrer\">releases-only RSS feed</a>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"in-this-release\">In This Release<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-1-14#in-this-release\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><figure><p><a target=\"_blank\" href=\"https://docs.cwtch.im/assets/files/Themes_collage-ac81d091a47194dcfc2093f45987a300.png\"><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/Themes_collage-ac81d091a47194dcfc2093f45987a300.png\" width=\"1920\" height=\"1080\" class=\"img_ev3q\"></a></p><figcaption>We have made many changes to Cwtch themeing in 1.14, including new Custom Themes</figcaption></figure>\n<!-- --><p>A special thanks to the <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/translate\" target=\"_blank\" rel=\"noopener noreferrer\">amazing volunteer translators</a> and <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing\" target=\"_blank\" rel=\"noopener noreferrer\">testers</a> who made this release possible.<!-- --></p>\n<!-- --><ul>\n<!-- --><li><strong>New Features:</strong>\n<!-- --><ul>\n<!-- --><li><strong>Custom Themes</strong> - You can now load <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/themes\" target=\"_blank\" rel=\"noopener noreferrer\">custom themes</a> into Cwtch.<!-- --></li>\n<!-- --><li><strong>Message View Backgrounds</strong> - This release contains the first support for (optional) background images in the message view. Future releases will allow per-conversation images.<!-- --></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li><strong>Bug Fixes / Improvements:</strong>\n<!-- --><ul>\n<!-- --><li>Fixed tor connectivity in newer Tails releases</li>\n<!-- --><li>Fixes in the Retry Plugin for better managing of a large number of contacts</li>\n<!-- --><li>Several UX improvements for font scaling, and styling</li>\n<!-- --><li>Fixed Android File Sharing Bug which prevent downloads of <!-- --><a href=\"https://docs.cwtch.im/docs/settings/experiments/image-previews-and-profile-pictures\" target=\"_blank\" rel=\"noopener noreferrer\">non-previewed files</a>.<!-- --></li>\n<!-- --><li>Fixed Android File Sharing Bug that resulted in a UI reset triggered by a rate race condition between reconnection and new message arriving</li>\n<!-- --><li>Split Settings Pane into multiple tabs for easier navigation of options</li>\n<!-- --><li>Fixed contact row date time/localization inconsistency</li>\n<!-- --><li>Fixed contact row issue where <!-- --><code>LANG</code> wasn't set on some linux systems<!-- --></li>\n<!-- --><li>libCwtch now support older Mac releases (min 10.12)</li>\n<!-- --><li>Updates images and descriptions in the Windows Installer</li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li><strong>Accessibility / UX:</strong>\n<!-- --><ul>\n<!-- --><li>Core translations for <!-- --><strong>Brazilian Portuguese</strong>, <!-- --><strong>Danish</strong> , <!-- --><strong>Dutch</strong>, <!-- --><strong>French</strong>, <!-- --><strong>German</strong>, <!-- --><strong>Italian</strong>, <!-- --><strong>Norwegian</strong> , <!-- --><strong>Romanian</strong> , <!-- --><strong>Russian</strong>, <!-- --><strong>Polish</strong>, <!-- --><strong>Slovak</strong>, <!-- --><strong>Spanish</strong>, <!-- --><strong>Swahili</strong>, <!-- --><strong>Swedish</strong>, <!-- --><strong>Turkish</strong>, and <!-- --><strong>Welsh</strong></li>\n<!-- --><li>Partial translations for <!-- --><strong>Korean</strong> (41%), <!-- --><strong>Japanese</strong> (26%), , <!-- --><strong>Luxembourgish</strong> (19%), <!-- --><strong>Greek</strong> (15%), <!-- --><strong>Uzbek</strong> (9%), and <!-- --><strong>Portuguese</strong> (5%)<!-- --></li>\n<!-- --><li><strong>Theme Refresh</strong> - Many small adjustments to existing themes to make them more accessible<!-- --></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --></ul>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"reproducible-bindings\">Reproducible Bindings<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-1-14#reproducible-bindings\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Cwtch 1.14 is based on libCwtch version <!-- --><code>libCwtch-autobindings-2024-02-12-11-04-v0.0.12</code>.\nThe <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-bindings-reproducible#introducing-repliqate\" target=\"_blank\" rel=\"noopener noreferrer\">repliqate scripts</a> to reproduce these bindings from source\ncan be found at <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/repliqate-scripts/src/branch/main/cwtch-autobindings-v0.0.12\" target=\"_blank\" rel=\"noopener noreferrer\">https://git.openprivacy.ca/cwtch.im/repliqate-scripts/src/branch/main/cwtch-autobindings-v0.0.12</a></p>\n<!-- --><hr>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-1-14#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-1-14",
"title": "Cwtch 1.14",
"summary": "Cwtch 1.14 is now available to download",
"date_modified": "2024-02-14T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"release"
]
},
{
"id": "https://docs.cwtch.im/blog/enhanced-permissions",
"content_html": "<p><a href=\"https://docs.cwtch.im/blog/path-to-hybrid-groups\">Last week</a>, we mentioned that <!-- --><strong>enhanced permissions</strong> are essential to implementing many of the aspects\nof the new <!-- --><strong>hybrid groups</strong> design.<!-- --></p>\n<!-- --><p>In this post we will introduce the new enhanced permissions api in libCwtch, explain why it is needed, and how future releases of Cwtch will manage\nconversation-level permissions.</p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/enhancedpermissions-a654ed1dfe43e9abc541278df1fda501.png\" width=\"1005\" height=\"481\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"how-do-conversation-level-permissions-work-in-cwtch-right-now\">How do conversation-level permissions work in Cwtch right now?<!-- --><a href=\"https://docs.cwtch.im/blog/enhanced-permissions#how-do-conversation-level-permissions-work-in-cwtch-right-now\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Underneath the libCwtch API, all conversations maintain an access control list. For peer-to-peer conversations this list has a single entry, keyed by\nthe handle of the contact.</p>\n<!-- --><p>Currently, this access control list only maintains the <!-- --><code>Blocked</code>-state of the contact. If a user blocks another, then this is where the flag is stored. While\nthere are other fields in this list, they have been unused, until now.<!-- --></p>\n<!-- --><p>Additionally, each conversation also stored an <!-- --><code>Accepted</code> flag, indicating if the user has approved a contact request. The <!-- --><code>Accepted</code> flag has many different\neffects including whether certain features (like file sharing) are accessible, or whether connection attempts with the contact are tried automatically.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"what-are-enhanced-permissions\">What Are Enhanced Permissions?<!-- --><a href=\"https://docs.cwtch.im/blog/enhanced-permissions#what-are-enhanced-permissions\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>The current approach has several issues; the major issue being that profiles have minimal control over how they interact with contacts. Ideally, you should be able to\nautomatically attempt to connect with a given cwtch user, but not allow file shares, for example.</p>\n<!-- --><p>This is the initial driving use case behind Enhanced Permissions. Exposing this underlying ACL and augmenting it with additional flags like <!-- --><code>ShareFiles</code>,\n<!-- --><code>RenderImages</code>, and <!-- --><code>AutoConnect</code>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"the-api\">The API<!-- --><a href=\"https://docs.cwtch.im/blog/enhanced-permissions#the-api\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Enhanced permissions will be available through a new set of low level libCwtch APIs i.e.:</p>\n<!-- --><div class=\"codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#F8F8F2;--prism-background-color:#282A36\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#F8F8F2;background-color:#282A36\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\tUpdateConversationAccessControlList(id int, acl model.AccessControlList) error</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\tEnhancedUpdateConversationAccessControlList(conversation int, serialized_acl string) error</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\tGetConversationAccessControlList(conversation int) (model.AccessControlList, error)</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\tEnhancedGetConversationAccessControlList(conversation int) (string, error)</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"Copy code to clipboard\" title=\"Copy\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<!-- --><p>As with other libCwtch APIs the <!-- --><code>Enhanced</code> functions speak JSON and be suitable for integration with UIs and other clients that cannot speak the\nGo model.<!-- --></p>\n<!-- --><p><code>AccessControlList</code> maintains it's current structure, while <!-- --><code>AccessControl</code> itself has been augmented with the fields\ndescribed in the previous section.<!-- --></p>\n<!-- --><p>Existing access-control APIs e.g. <!-- --><code>AcceptConversation</code>, <!-- --><code>BlockConversation</code> and <!-- --><code>UnblockConversation</code> have been updated\ninternally to use the augmented <!-- --><code>AccessControl</code> model, and will be able to be safely used by existing and future clients.<!-- --></p>\n<!-- --><p>However, the <!-- --><code>Accepted</code> field in the <!-- --><code>Conversation</code> model is now considered deprecated, and will be removed in a future Cwtch version.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"how-will-migration-work\">How will Migration Work?<!-- --><a href=\"https://docs.cwtch.im/blog/enhanced-permissions#how-will-migration-work\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>To simplify migration newer versions of Cwtch will detect if Enhanced Permissions have been enabled, and if they haven't will automatically turn on\nall new flags for <!-- --><code>Accepted</code> conversations. This will maintain behaviour between versions, and should minimize any potential confusion.<!-- --></p>\n<!-- --><p>You will then be able to modify this ACL on a per-conversation level in the Cwtch UI.</p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"when-will-enhanced-permissions-be-available\">When will Enhanced Permissions be Available?<!-- --><a href=\"https://docs.cwtch.im/blog/enhanced-permissions#when-will-enhanced-permissions-be-available\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We are aiming to roll out a nightly with Enhanced Permissions in the coming weeks. We will then spend some time iterating\non the UI to ensure that the new permissions are understandable and usable.</p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"how-does-this-fit-into-hybrid-groups\">How does this fit into Hybrid Groups?<!-- --><a href=\"https://docs.cwtch.im/blog/enhanced-permissions#how-does-this-fit-into-hybrid-groups\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>That is not the end of the story as far as Enhanced Permissions go. As I mentioned above for peer-to-peer conversations the\nACL has a single entry.</p>\n<!-- --><p>For Hybrid Groups, this list will have multiple entries, for each member of the group. This will allow group admins to\ncontrol who can post to a group, and what kinds of messages they can post.</p>\n<!-- --><p>How this list will be maintained, propagated, and authenticated by group members will be a topic of a future development log.</p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"stay-up-to-date\">Stay up to date!<!-- --><a href=\"https://docs.cwtch.im/blog/enhanced-permissions#stay-up-to-date\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>As always, we will be regularly updating this devlog <!-- --><a href=\"https://fosstodon.org/@cwtch\" target=\"_blank\" rel=\"noopener noreferrer\">and other channels</a> as we continue to make progress towards\nsurveillance resistant infrastructure!<!-- --></p>\n<!-- --><p>Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/enhanced-permissions#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/enhanced-permissions",
"title": "Enhanced Permissions",
"summary": "An introduction to the new fine-grained permissions API exposed in libCwtch",
"date_modified": "2024-01-12T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"hybrid-groups",
"acl"
]
},
{
"id": "https://docs.cwtch.im/blog/path-to-hybrid-groups",
"content_html": "<p>Back in <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-1-13\">September 2023 we released Cwtch 1.13</a>, the first version of Cwtch to be labelled as <!-- --><strong>stable</strong>,\nand a major milestone in Cwtch development.<!-- --></p>\n<!-- --><p>With the Cwtch interface now stable, we are in a position to begin a new phase in Cwtch development: a Path towards\n<!-- --><strong>Hybrid Groups</strong>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/hybridgroups-11c21d2516ceadabac8af92290b53a08.png\" width=\"1005\" height=\"481\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"the-problem-with-cwtch-groups\">The Problem with Cwtch Groups<!-- --><a href=\"https://docs.cwtch.im/blog/path-to-hybrid-groups#the-problem-with-cwtch-groups\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>One of the unique features of Cwtch is that <!-- --><a href=\"https://docs.cwtch.im/docs/groups/introduction\">groups</a> are dependent on <!-- --><a href=\"https://docs.cwtch.im/security/components/cwtch/server\">untrusted infrastructure</a>.<!-- --></p>\n<!-- --><p>Because of this, at their most basic, a Cwtch group is simply an agreement between a set of peers on a common\ncryptographic key, and a common (set of) untrusted server(s).</p>\n<!-- --><p>This provides Cwtch Groups with very nice properties such as anonymity to anyone not in the group, but it does mean\nthat certain other nice properties like member flexibility, and credential rotation are difficult to achieve.</p>\n<!-- --><p>We want to allow people to make the right trade-off when it comes to their own risk models, i.e. to be able to trade\nefficiency for trust when that decision makes sense.</p>\n<!-- --><p>To do that we need to introduce a new class of group into Cwtch, something we are calling <!-- --><strong>Hybrid Groups</strong>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"what-are-hybrid-groups\">What Are Hybrid Groups?<!-- --><a href=\"https://docs.cwtch.im/blog/path-to-hybrid-groups#what-are-hybrid-groups\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>The goal of hybrid groups is to balance the security properties of Cwtch peer-to-peer communication with the\nproperties of untrusted infrastructure.</p>\n<!-- --><p>This is done by augmenting existing Cwtch Groups with an additional layer of peer-to-peer communication in order to provide\nefficient participant management, key rotation, and other useful features.</p>\n<!-- --><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"levels-of-hybrid-groups\">Levels of Hybrid Groups<!-- --><a href=\"https://docs.cwtch.im/blog/path-to-hybrid-groups#levels-of-hybrid-groups\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h3>\n<!-- --><p>In practice, we imagine there will be a few different levels of Hybrid Group, reflecting different trade-offs between inter-peer trust,\ncommunication efficiency, and group security.</p>\n<!-- --><p>There are <!-- --><strong>Traditional Groups</strong>, these have similar properties to the existing Cwtch Groups. Highly inefficient, but essentially\nrequire zero-trust on behalf of participants other than an expectation that the key is kept secret.<!-- --></p>\n<!-- --><p>We plan to introduce <!-- --><strong>Managed Groups</strong>: A new kind of group where all participants explicitly trust a given always-online peer (e.g. a bot) with group operations. These\nwill be highly efficient, at the cost of that explicit trust (if that peer behaves maliciously then certain properties are broken). Managed groups will\nbe the first Cwtch groups to allow <!-- --><strong>Contractable</strong> and <!-- --><strong>Expandable</strong> groups, and more efficient <!-- --><strong>Key Rotation</strong>.<!-- --></p>\n<!-- --><p>To start with this <!-- --><em>trusted peer</em> will take the form of an external bot (powered by <!-- --><a href=\"https://docs.cwtch.im/developing/building-a-cwtch-app/building-an-echobot\">a cwtch bot framework</a>) however we\neventually plan to expose this capability as part of the Cwtch UI.<!-- --></p>\n<!-- --><p>And finally a category of <!-- --><strong>Augmented Groups</strong>: An extension of Managed Groups that places configurable restrictions of the trust given to\nthe peer e.g. by requiring participants to take part in a meta-protocol that confirms certain actions before they are carried out (preventing\nthe trusted-peer from harming properties like <!-- --><strong>Participant Consistency</strong>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"group-messaging-metadata\">Group Messaging Metadata<!-- --><a href=\"https://docs.cwtch.im/blog/path-to-hybrid-groups#group-messaging-metadata\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>As with the rest of Cwtch, our ultimate goal is that no metadata (and specifically as part of this work, no group metadata e.g. membership, message timing) be\navailable to a party outside of the group.</p>\n<!-- --><p>Traditional Cwtch Groups take this to the extreme, and the expense of long syncing times, and a high possibility of disruption. Managed Groups\nand Augmented groups will allow communities to make the right trade-offs allowing for greater resilience and faster syncing.</p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"a-rough-timeline-q1-week-0---week-10-2024\">A Rough Timeline (Q1: Week 0 - Week 10 2024)<!-- --><a href=\"https://docs.cwtch.im/blog/path-to-hybrid-groups#a-rough-timeline-q1-week-0---week-10-2024\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><ul>\n<!-- --><li><strong>Week 0</strong> - Planning Q1 Cwtch Timeline (this devlog), minor bug fixes and other small UI-focused work originating from reports and feedback\nfrom <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing\">Cwtch testers</a>.<!-- --></li>\n<!-- --><li><strong>Week 1</strong> - Work begins on exposing <!-- --><strong>Enhanced Permissions</strong> in the Cwtch library. These are essential to implementing many of the aspects\nof the new group design, as well as improving other parts of contact management. (Expect more about this in a future devlog). Also, a formal model for Managed Groups will be created and documented.\nThis will form the basis of the implementation.<!-- --></li>\n<!-- --><li><strong>Week 2</strong> - At this point we should be able to begin designing the Managed Group Extension to Cwtch. This will use the Cwtch Event Hooks API\nto respond to Peer events to manage groups. During this work, we also expect to migrate the legacy group code into it's own similar extension to make\nbest use of the APIs.<!-- --></li>\n<!-- --><li><strong>Week 3</strong> - Towards the end of January we expect to have a complete formal model of Managed Groups and to be able to start integrating the new extensions into the\nCwtch-UI. We also expect to be in the process of releasing a new 1.14 version of Cwtch that supports Enhanced Permissions.<!-- --></li>\n<!-- --><li><strong>Weeks 4 - Week 6</strong> - February marks the 6th anniversary of the founding of <!-- --><a href=\"https://openprivacy.ca/\" target=\"_blank\" rel=\"noopener noreferrer\">Open Privacy Research Society</a>, and our organizational year end. During this\ntime core members of the Cwtch team are often involved in administrative tasks that need to be done during this time, as such we are not planning to make too much progress on Cwtch during this time.<!-- --></li>\n<!-- --><li><strong>Weeks 7 - Week 10</strong> - As we approach March, we will be formally integrating Managed Groups in Cwtch, and planning a Cwtch 1.15 release which will feature the new group type. During this time we will also be updating\nCwtch <!-- --><a href=\"https://docs.cwtch.im/docs/category/groups\" target=\"_blank\" rel=\"noopener noreferrer\">Group Documentation</a> .<!-- --></li>\n<!-- --></ul>\n<!-- --><p>Once Managed Groups have been rolled out, we will assess what we have learned and proceed with similar steps for\nAugmented Groups in Q2 (more on that in a later devlog!).</p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"stay-up-to-date\">Stay up to date!<!-- --><a href=\"https://docs.cwtch.im/blog/path-to-hybrid-groups#stay-up-to-date\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>As always, we will be regularly updating this devlog <!-- --><a href=\"https://fosstodon.org/@cwtch\" target=\"_blank\" rel=\"noopener noreferrer\">and other channels</a> as we continue to make progress towards\nsurveillance resistant infrastructure!<!-- --></p>\n<!-- --><p>Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/path-to-hybrid-groups#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/path-to-hybrid-groups",
"title": "Path to Hybrid Groups",
"summary": "A look at how we plan on implementing the next generation of Cwtch multi-party messaging",
"date_modified": "2024-01-05T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"hybrid-groups"
]
},
{
"id": "https://docs.cwtch.im/blog/cwtch-1-13",
"content_html": "<p><a href=\"https://cwtch.im/download\" target=\"_blank\" rel=\"noopener noreferrer\">Cwtch 1.13 is now available for download</a>!<!-- --></p>\n<!-- --><p>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\nsecure, private, and resilient.</p>\n<!-- --><p>Cwtch 1.13 is the culmination of the last few years of effort by the Cwtch team, and is the first release that meets our bar to be labelled a <!-- --><a href=\"https://docs.cwtch.im/blog/path-to-cwtch-stable\">Cwtch Stable</a> candidate.<!-- --></p>\n<!-- --><p>While much more work remains, we are now very confident in the state of the Cwtch library, and the Cwtch UI. We are prepared to make certain commitments regarding peer-to-peer messaging, the UI,\nand experimental interfaces. In this post we will chart the journey that got us to this point, highlight what is in this new release, and talk about our next steps.</p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog14-3b9adf25edebfc8385b0b6fcc219d87b.png\" width=\"1004\" height=\"480\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"cwtch-stable-and-beyond\">Cwtch Stable and Beyond!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-1-13#cwtch-stable-and-beyond\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Over five years ago, on the 28th June 2018, we published the first official announcement of Cwtch. Throughout 2019 we published various Alpha releases of Cwtch. The original plan was to release a Cwtch Beta in 2020.</p>\n<!-- --><p>Like so many other projects in 2020, Cwtch Beta was delayed, and towards the end of 2020 it became clear that our original approach to a cross-platform UI was not sustainable long term.</p>\n<!-- --><p>Finally, in June 2021 we launched Cwtch Beta 1.0. We have spent the years since refining beta, adding features, and responding to feedback.</p>\n<!-- --><p>We have now reached a pivotal moment in Cwtch, one that the team has been working towards for many years. We now believe that Cwtch has reached a point where people can use core features, and enable\nexperimental features, with a confidence that any risks are well understood and appropriately mitigated. As such we are dropping the \"beta\" label.</p>\n<!-- --><p>Some features, like automatically downloading and displaying images, will always carry some risk - as such these will always remain off-by-default in Cwtch.</p>\n<!-- --><p>However, if approporate precautions are taken (like never accepting conversations from untrusted entities) then these features can be turned on and used without additional considerable risk.</p>\n<!-- --><p>Further, we believe that the API presented by libCwtch has reached a point where its core design is unlikely to require changes - and as such are prepared to make additional committements to the stability\nof that API going forward. Any new functionality will be provided by new interfaces, or otherwise be handled behind the scenes.</p>\n<!-- --><p>This is certainly not the end of Cwtch development. We have big plans for the future including the long-anticipated Hybrid Groups\nimplementation, a light client for restricted mobile operating systems, a return of the bulletin boards overlay, and much more.</p>\n<!-- --><p>We want to extend a huge thank you to everyone who helped Cwtch get this far. We could not have done it without you. If you\nhave helped in any way and would like to be listed in the contributor credits <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-call-for-credits\" target=\"_blank\" rel=\"noopener noreferrer\">please reach out</a>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"a-big-thank-you\">A Big Thank You<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-1-13#a-big-thank-you\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>On a personal note, as Executive Director of Open Privacy, and lead of the Cwtch project. I want to take this opportunity to thank the Cwtch core team across time: Dan Ballard, Erinn Atwater and Marcia Díaz Agudelo - this work isnt glamorous, and doesnt pay well,\nthere is no profit to be made in decentralizing power. A lack of funding means we don't all work together any more, but you all still contribute so much to this project.</p>\n<!-- --><p>It takes a special kind of person to be willing to spend a significant fraction of their lives devoted to working on something for the benefit of other people.\nThank you for believing in this mission.</p>\n<!-- --><p>I also want to say thank you to all the people who tested Cwtch over the years and provided invaluable feedback, bug reports and critique.\nYou have made Cwtch what it is today, and I am sure you will be making it even better in the coming weeks, months, and years.</p>\n<!-- --><p>Last, but certainly not least, I want to extend a big thank you to all of the supporters of Open Privacy around the world - without your donations\nand continued enthusiasm for the work that we do, none of this would be possible.</p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"download-cwtch-113\">Download Cwtch 1.13<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-1-13#download-cwtch-113\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>You can download Cwtch from <!-- --><a href=\"https://cwtch.im/download\" target=\"_blank\" rel=\"noopener noreferrer\">https://cwtch.im/download</a>.<!-- --></p>\n<!-- --><p>Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><p>Alternatively we also provide a <!-- --><a href=\"https://cwtch.im/releases/index.xml\" target=\"_blank\" rel=\"noopener noreferrer\">releases-only RSS feed</a>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"in-this-release\">In This Release<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-1-13#in-this-release\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><figure><p><a target=\"_blank\" href=\"https://docs.cwtch.im/assets/files/picnic1.13-726725011e7a5b02acf80130b7901db5.png\"><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/picnic1.13-726725011e7a5b02acf80130b7901db5.png\" width=\"1465\" height=\"731\" class=\"img_ev3q\"></a></p><figcaption>A screenshot of Cwtch 1.13</figcaption></figure>\n<!-- --><p>A special thanks to the <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/translate\" target=\"_blank\" rel=\"noopener noreferrer\">amazing volunteer translators</a> and <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing\" target=\"_blank\" rel=\"noopener noreferrer\">testers</a> who made this release possible.<!-- --></p>\n<!-- --><ul>\n<!-- --><li><strong>New Features:</strong>\n<!-- --><ul>\n<!-- --><li><strong>Conversation Search</strong> - Cwtch can now find messages based on their content.<!-- --></li>\n<!-- --><li><strong>Appear Offline Mode</strong> - in this mode Cwtch does not launch a listening service for inbound contacts, and allows a profile to be more selective in the contacts they connect to.<!-- --></li>\n<!-- --><li><strong>Whonix Support</strong> - new runtime flags make changes that allow Cwtch to <!-- --><a href=\"https://docs.cwtch.im/docs/platforms/whonix\" target=\"_blank\" rel=\"noopener noreferrer\">run on Whonix</a></li>\n<!-- --><li><strong>Save History Global Setting</strong> - by default Cwtch deletes all messages on shutdown unless a conversation is otherwise configured. This change allows a user to change this default behaviour.<!-- --></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li><strong>Bug Fixes / Improvements:</strong>\n<!-- --><ul>\n<!-- --><li>Based on Flutter 3.13.4</li>\n<!-- --><li>Updated Android Target to 33</li>\n<!-- --><li>Profile Status Menu now has many more options, including offline status, edit profile and enabling/disabling profile</li>\n<!-- --><li>File Sharing Bug Fixes<!-- -->\n<!-- --><ul>\n<!-- --><li>Manage shared files now supports re-enabling older file shares</li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li>Improvements towards <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-ui-reproducible-builds-linux\" target=\"_blank\" rel=\"noopener noreferrer\">UI Reproducible Builds</a></li>\n<!-- --><li>Server Info now propagates to the UI consistently</li>\n<!-- --><li>Prevent DBus Exceptions on platforms where it is unsupported</li>\n<!-- --><li>Packaged Emoji Font</li>\n<!-- --><li>Fixes to retry manager which have greater improved (re)connection efficacy</li>\n<!-- --><li>Allow deleting server info in Manage Servers</li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li><strong>Accessibility / UX:</strong>\n<!-- --><ul>\n<!-- --><li>Core translations for <!-- --><strong>Brazilian Portuguese</strong>, <!-- --><strong>Danish</strong> , <!-- --><strong>Dutch</strong>, <!-- --><strong>French</strong>, <!-- --><strong>German</strong>, <!-- --><strong>Italian</strong>, <!-- --><strong>Norwegian</strong> , <!-- --><strong>Romanian</strong> , <!-- --><strong>Russian</strong>, <!-- --><strong>Polish</strong>, <!-- --><strong>Slovak</strong>, <!-- --><strong>Spanish</strong>, <!-- --><strong>Swahili</strong>, <!-- --><strong>Swedish</strong>, <!-- --><strong>Turkish</strong>, and <!-- --><strong>Welsh</strong></li>\n<!-- --><li>Partial translations for <!-- --><strong>Korean</strong> (37%), <!-- --><strong>Japanese</strong> (27%), , <!-- --><strong>Luxembourgish</strong> (20%), <!-- --><strong>Greek</strong> (15%), <!-- --><strong>Uzbek</strong> (10%), and <!-- --><strong>Portuguese</strong> (5%)<!-- --></li>\n<!-- --><li>Font Scaling improvements on several screens</li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --></ul>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"reproducible-bindings\">Reproducible Bindings<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-1-13#reproducible-bindings\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Cwtch 1.13 is based on libCwtch version <!-- --><code>libCwtch-autobindings-2023-09-26-13-15-v0.0.10</code>.\nThe <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-bindings-reproducible#introducing-repliqate\" target=\"_blank\" rel=\"noopener noreferrer\">repliqate scripts</a> to reproduce these bindings from source\ncan be found at <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/repliqate-scripts/src/branch/main/cwtch-autobindings-v0.0.10\" target=\"_blank\" rel=\"noopener noreferrer\">https://git.openprivacy.ca/cwtch.im/repliqate-scripts/src/branch/main/cwtch-autobindings-v0.0.10</a></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-1-13#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-1-13",
"title": "Cwtch 1.13 Stable Release Candidate",
"summary": "Cwtch 1.13 (Stable Release Candidate)",
"date_modified": "2023-09-27T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"release"
]
},
{
"id": "https://docs.cwtch.im/blog/cwtch-stable-roadmap-update-sept",
"content_html": "<p>The next large step for the Cwtch project to take is a move from public <!-- --><strong>Beta</strong> to <!-- --><strong>Stable</strong> marking a point at which we consider\nCwtch to be secure and usable. We have been working hard towards that goal over the last year.<!-- --></p>\n<!-- --><p>Today, as we approach the release of Cwtch Stable we would like to provide another update on the ongoing work, and the remaining blockers to certifying a Cwtch Stable release. We also have a new nightly to\ntest out!</p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog1-53937adbfa7a7edf40d34660f71ed0fd.png\" width=\"1005\" height=\"480\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"stable-blocker-and-timelines\">Stable Blocker and Timelines<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-roadmap-update-sept#stable-blocker-and-timelines\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Back in January we set the ambitious goal of launching a Cwtch Stable in the Summer of 2023. We had planned to finish all of the work\nprior to the end of August. The vast majority of that work has now been completed - what remains is captured in <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch-ui/projects/15\" target=\"_blank\" rel=\"noopener noreferrer\">Stable Blockers</a> project which tracks the current state\nof work that we have marked as being critical to a Cwtch Stable release.<!-- --></p>\n<!-- --><p>Despite there being a large number of remaining issues, many of the outstanding work is inter-related, relies on common implementations or\nare tightly coupled together.</p>\n<!-- --><p>In summary the final few areas of concern are:</p>\n<!-- --><ul>\n<!-- --><li>The ability to delete or purge group conversation history. (For historical reasons storing group history was once considered necessary\nbut this is no longer the case. We plan on enabling this feature in the coming weeks)</li>\n<!-- --><li>Appropriate handling of less common system configurations. Cwtch current emits non-fatal exceptions if certain services are not available\ne.g. dbus. This is related to former 3rd party code for managing networking and notification.</li>\n<!-- --><li>A final UI pass. We have designs for better ways to convey certain information and functionality. We would like to implement these\nprior to a stable release.</li>\n<!-- --></ul>\n<!-- --><p>Because of this, we have set a goal of labelling a Cwtch Stable Release Candidate by <!-- --><strong>30th September 2023</strong>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"a-new-nightly\">A New Nightly<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-roadmap-update-sept#a-new-nightly\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>There is a <!-- --><a href=\"https://build.openprivacy.ca/files/flwtch-2023-09-06-21-25-v1.12.0-33-g05b1/\" target=\"_blank\" rel=\"noopener noreferrer\">new nightly version of Cwtch available for testing (2023-09-06-21-25-v1.12.0-33-g05b1)</a>. This version contains a few bug fixes related to file share management,\nin addition to a significant improvement in the connection management code.<!-- --></p>\n<!-- --><p>Additionally, thanks to volunteer testers <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch-ui/pulls/715\" target=\"_blank\" rel=\"noopener noreferrer\">and contributors</a> the installation instructions\nand packaged configurations for Whonix have been much improved. See <!-- --><a href=\"https://docs.cwtch.im/docs/platforms/whonix\" target=\"_blank\" rel=\"noopener noreferrer\">running Cwtch on Whonix</a> for more information.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"get-involved\">Get Involved<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-roadmap-update-sept#get-involved\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Staff and volunteer shortages have slightly extended our original estimates. In particular we are bottle-necked on review effort for new code. This is\nwhy we would like to encourage people to test out the latest nightlies and report any bugs/issues/improvements.</p>\n<!-- --><p>In order to help people get acclimated to our development flow we have created a new section on the main documentation site called <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/developing\">Developing Cwtch</a> - there you will find a collection of useful links and information about how to get started with Cwtch development, what libraries and tools we use, how pull requests are validated and verified, and how to choose an issue to work on.<!-- --></p>\n<!-- --><p>We also also updated our guides on <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/translate\">Translating Cwtch</a> and <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing\">Testing Cwtch</a>.<!-- --></p>\n<!-- --><p>If you are interested in getting started with Cwtch development then please check it out, and feel free to reach out to <!-- --><code>team@cwtch.im</code> (or open an issue) with any questions. All types of contributions <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/stickers\">are eligible for stickers</a>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-roadmap-update-sept#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-stable-roadmap-update-sept",
"title": "September Cwtch Stable Roadmap Update",
"summary": "Back in July we provided an update on several goals that we would have to hit on our way to Cwtch Stable, and the timelines to hit them. In this post we provide a new update on those goals",
"date_modified": "2023-09-06T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"planning"
]
},
{
"id": "https://docs.cwtch.im/blog/cwtch-nightly-preview-whonix-save-history",
"content_html": "<p>There is a <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing#cwtch-nightlies\" target=\"_blank\" rel=\"noopener noreferrer\">new Nightly build</a> are available from our build server. The latest nightly we recommend testing\nis <!-- --><a href=\"https://build.openprivacy.ca/files/flwtch-2023-08-22-23-27-v1.12.0-25-ge019f/\" target=\"_blank\" rel=\"noopener noreferrer\">2023-08-22-23-27-v1.12.0-25-ge019f</a>.<!-- --></p>\n<!-- --><p>This nightly contains a first cut of <!-- --><a href=\"https://docs.cwtch.im/docs/platforms/whonix\" target=\"_blank\" rel=\"noopener noreferrer\">support for Whonix</a>, a new global setting for managing how conversation\nhistory is preserved, in addition to several bug fixes reported in the last nightly.<!-- --></p>\n<!-- --><p>Please see the contribution documentation for advice on <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing#submitting-feedback\">submitting feedback</a></p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog10-160dd00841ab18c4fc41da81e8c6c133.png\" width=\"1005\" height=\"481\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"stay-up-to-date\">Stay up to date!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-preview-whonix-save-history#stay-up-to-date\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-preview-whonix-save-history#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-nightly-preview-whonix-save-history",
"title": "Nightly Preview: Whonix Support, Default Save History, Bug Fixes",
"summary": "A new Cwtch Nightly contains a first cut of support for Whonix, Default Save History, Bug Fixes",
"date_modified": "2023-08-18T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"nightly",
"whonix",
"preview"
]
},
{
"id": "https://docs.cwtch.im/blog/cwtch-nightly-preview-conversation-search",
"content_html": "<p>There is a <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing#cwtch-nightlies\" target=\"_blank\" rel=\"noopener noreferrer\">new Nightly build</a> are available from our build server. The latest nightly we recommend testing\nis <!-- --><a href=\"https://build.openprivacy.ca/files/flwtch-2023-08-02-20-24-v1.12.0-19-g75b7/\" target=\"_blank\" rel=\"noopener noreferrer\">2023-08-02-20-24-v1.12.0-19-g75b7</a>.<!-- --></p>\n<!-- --><p>This nightly contains a first cut of Conversation Search, in addition to several bug fixes impacting effectiveness of the contact retry plugin when combined with a large contact list, and an unstable network\nconnection. Finally we have made a few tweaks to the font scaling based on feedback.</p>\n<!-- --><p>Please see the contribution documentation for advice on <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing#submitting-feedback\">submitting feedback</a></p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/search-nightly-9b35c1459b05395a184e1b7ed2dd57b2.png\" width=\"637\" height=\"213\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"stay-up-to-date\">Stay up to date!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-preview-conversation-search#stay-up-to-date\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-preview-conversation-search#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-nightly-preview-conversation-search",
"title": "Nightly Preview: Conversation Search",
"summary": "A new Cwtch Nightly contains a first cut of Conversation Search.",
"date_modified": "2023-08-03T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"nightly",
"search",
"preview"
]
},
{
"id": "https://docs.cwtch.im/blog/cwtch-stable-call-for-credits",
"content_html": "<p>As we journey ever closer to a Cwtch Stable candidate we would like to take this opportunity to ensure that those who have contributed\nto Cwtch over the years have the option to be credited in some way.</p>\n<!-- --><p>If you have participated in the development process in any way e.g. protocol design, writing code, UI design, writing tests, testing release candidates, reporting issues,\ntranslating the application or documentation, promoting metadata resistant applications or any other meaningful contribution to the Cwtch ecosystem we want\nto offer you the option to have your name or handle credited in both the source code repository and the application itself.</p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog1-53937adbfa7a7edf40d34660f71ed0fd.png\" width=\"1005\" height=\"480\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"a-history-of-cwtch-contibutions-and-anonmymity\">A History of Cwtch Contibutions and Anonmymity<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-call-for-credits#a-history-of-cwtch-contibutions-and-anonmymity\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>In the early days of Cwtch we made the explicit decision to not include credits anywhere in the application, and to accept contributions\nanonymously over a variety of channels, including Cwtch itself.</p>\n<!-- --><p>Due to the nature of the application, and the privacy and metadata resistant space in general, we have always had a policy of\nevaluating contributions based on merit, and not on identity. This approach means that, while we do have contributors whose identity\nis known to us in some way, we have many who we know only by writing style, contribution type, or cwtch address.</p>\n<!-- --><p>We understand that many people much prefer it this way, and have no desire to have any identity linked to the Cwtch project. To those\npeople we offer our deep gratitude. Thank you. You have made Cwtch what it is. (And if you ever want Cwtch Stickers - please let us know!)</p>\n<!-- --><p>However, it would not be right of us to release Cwtch Stable without at least one final offer to all contributors. If you want\nto be credited for your contributions to Cwtch then, please, reach out to us and let us know of a way to appropriately credit\nyou.</p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"getting-in-touch\">Getting in Touch<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-call-for-credits#getting-in-touch\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>You can ask for credit via email (<!-- --><a href=\"mailto:team@cwtch.im\" target=\"_blank\" rel=\"noopener noreferrer\">team@cwtch.im</a>), or via Cwtch (either publicly via the <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing#join-the-cwtch-release-candidate-testers-group\" target=\"_blank\" rel=\"noopener noreferrer\">Cwtch Release Candidate Testers groups</a>, or privately\nin a message to Sarah: <!-- --><code>icyt7rvdsdci42h6si2ibtwucdmjrlcb2ezkecuagtquiiflbkxf2cqd</code>).<!-- --></p>\n<!-- --><p>You can also <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch-ui/issues/new\" target=\"_blank\" rel=\"noopener noreferrer\">open an issue</a>.<!-- --></p>\n<!-- --><p>When asking, please provide a name or handle, and if desired, a rough description of the contribution (e.g. development, design, documentation, translating, funding). Anyone who does\nnot provide a description will be grouped under a general thanks section.</p>\n<!-- --><p>This is an open offer. If at any time you change your mind and wish to have credit added (or removed) please let us know.</p>\n<!-- --><p>I want to take another opporunity to say, regardless of whether you wish to be publicly credited for your work on Cwtch, <!-- --><strong>thank you</strong>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"stay-up-to-date\">Stay up to date!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-call-for-credits#stay-up-to-date\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-call-for-credits#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-stable-call-for-credits",
"title": "Cwtch Call for Contributor Credits",
"summary": "As we journey ever closer to a Cwtch Stable candidate we would like to take this opportunity to ensure that those who have contributed to Cwtch over the years have the optiont to be credited.",
"date_modified": "2023-07-26T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"contributors",
"community"
]
},
{
"id": "https://docs.cwtch.im/blog/cwtch-ui-reproducible-builds-linux",
"content_html": "<p>Earlier this year we talked about the changes we have made to make <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-bindings-reproducible\" target=\"_blank\" rel=\"noopener noreferrer\">Cwtch Bindings Reproducible</a>.<!-- --></p>\n<!-- --><p>In this devlog we will talk about how the Cwtch UI are currently built, the changes we have made to Cwtch UI to make future distributions verifiable, and the next steps we will be taking to make all Cwtch builds reproducible.</p>\n<!-- --><p>This will be useful to anyone who is looking to reproduce Cwtch UI builds specifically, and to anyone who wants to start implementing reproducible builds in their own project.</p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog1-53937adbfa7a7edf40d34660f71ed0fd.png\" width=\"1005\" height=\"480\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"building-the-cwtch-ui\">Building the Cwtch UI<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-ui-reproducible-builds-linux#building-the-cwtch-ui\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>The official Cwtch UI project uses the FLutter framework. The Cwtch UI deliberately tracks the <!-- --><code>stable</code> channel.<!-- --></p>\n<!-- --><p>All builds are conducted through the <!-- --><code>flutter</code> tool e.g. <!-- --><code>flutter build</code>. We inject two build flags as part of the official build <!-- --><code>VERSION</code> and <!-- --><code>COMMIT_DATE</code>:<!-- --></p>\n<!-- --><p>flutter build linux --dart-define BUILD_VER=<!-- --><code>cat VERSION</code> --dart-define BUILD_DATE=<!-- --><code>cat COMMIT_DATE</code></p>\n<!-- --><p>These flags are defined to be identical to Cwtch Bindings. <!-- --><code>VERSION</code> is the latest git tag: <!-- --><code>git describe --tags --abbrev=1</code> and <!-- --><code>COMMIT_DATE</code> is the date of the latest commit on the branch <!-- --><code>echo `git log -1 --format=%cd --date=format:%G-%m-%d-%H-%M` &gt; COMMIT_DATE</code></p>\n<!-- --><p>All Cwtch UI builds also depend on two external dependencies not managed directly by the flutter project: Tor (implicit as part of the fetchTor scripts) and libCwtch (defined in <!-- --><code>LIBCWTCH-GO.version</code>, and fetched via the fetch-libcwtch scripts).<!-- --></p>\n<!-- --><p>The binaries are downloaded via their respective scripts prior to the build, and managed via a separate update process.</p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"changes-we-made-for-reproducible-builds\">Changes we made for reproducible builds<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-ui-reproducible-builds-linux#changes-we-made-for-reproducible-builds\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>For reproducible linux builds we had to modify the generated <!-- --><code>linux/CMakeLists.txt</code> file to include the following compiler and linker flags:<!-- --></p>\n<!-- --><ul>\n<!-- --><li><code>-fno-ident</code> - suppresses compiler identifying information from compiled artifacts. Without this small changes in compiler versions will result in different binaries.<!-- --></li>\n<!-- --><li><code>--hash-style=gnu</code> - asserts a standard hashing scheme to use across all compiled artifacts. Without this compilers that have been compiled with different default schemes will produce different artifacts<!-- --></li>\n<!-- --><li><code>--build-id=none</code> - suppresses build id generation. Without this each compiled artifact will have a section of effectively randomized data.<!-- --></li>\n<!-- --></ul>\n<!-- --><p>We have also defined a new <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch-ui/src/commit/3148a8e0642e51bc59d9eb00ca2b319a7097285a/elf_x86_64.x\" target=\"_blank\" rel=\"noopener noreferrer\">linker script</a> that differs from the default by removing all <!-- --><code>.comment</code> sections from object files. We do this because the linking process links in non-project artifacts like <!-- --><code>crtbeginS.o</code> which, in most systems, us compiled with a <!-- --><code>.comment</code> section (the default linking script already removes the <!-- --><code>.note.gnu*</code> sections.<!-- --></p>\n<!-- --><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"tar-archives\">Tar Archives<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-ui-reproducible-builds-linux#tar-archives\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h3>\n<!-- --><p>Finally, following the <!-- --><a href=\"https://reproducible-builds.org/docs/archives/\" target=\"_blank\" rel=\"noopener noreferrer\">guide at reproducible-builds.org</a> we have defined standard metadata for the generated Tar archives to make them also reproducible.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"limitations-and-next-steps\">Limitations and Next Steps<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-ui-reproducible-builds-linux#limitations-and-next-steps\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>The above changes mean that official linux builds of the same commit will now result in identical artifacts.</p>\n<!-- --><p>The next step is to roll these changes into <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-bindings-reproducible#introducing-repliqate\" target=\"_blank\" rel=\"noopener noreferrer\">repliqate</a> as we have done with our bindings builds.<!-- --></p>\n<!-- --><p>However, because Repliqate is based on Debian images and our official UI builds are based on an Ubuntu distribution the resulting archives differ by a single instruction at the start of a few sections - introduced because Ubuntu compiles and provides C Runtime (CRT) artifacts (e.g. <!-- --><code>crti.o</code> with full branch protection enabled. On 64-bit systems this results in an <!-- --><code>endcr64</code> instruction being inserted at the start of the <!-- --><code>.init</code> and <!-- --><code>.fini</code> sections, among others.<!-- --></p>\n<!-- --><p>In order to allow people to fully repliqate Cwtch builds in an isolated environment like repliqate, as we do for Cwtch Bindings, it will be necessary to provide instructions for setting up a hardened image that can work the same way in repliqate.</p>\n<!-- --><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"pinned-dependencies\">Pinned Dependencies<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-ui-reproducible-builds-linux#pinned-dependencies\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h3>\n<!-- --><p>Additionally, while our repliqate scripts pin several major dependencies like flutter and go, and the dependencies managed by these systems are locked to specific versions, there are still a few dependencies within the ecosystems that are not strictly pinned.</p>\n<!-- --><p>The major one is libc. Operating systems rarely make big changes to packaged libc versions for a specific distribution (typically because doing so in a non-breaking way would be a major undertaking).</p>\n<!-- --><p>However this does mean that Cwtch reproduciblility is implicitly tied to operating system practices - this is something we would like to begin decoupling ourselves from going forward.</p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"stay-up-to-date\">Stay up to date!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-ui-reproducible-builds-linux#stay-up-to-date\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We expect to make additional progress on this in the coming weeks and months. Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-ui-reproducible-builds-linux#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-ui-reproducible-builds-linux",
"title": "Progress Towards Reproducible UI Builds",
"date_modified": "2023-07-14T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"reproducible-builds",
"bindings",
"repliqate"
]
},
{
"id": "https://docs.cwtch.im/blog/cwtch-stable-roadmap-update-june",
"content_html": "<p>The next large step for the Cwtch project to take is a move from public <!-- --><strong>Beta</strong> to <!-- --><strong>Stable</strong> marking a point at which we consider Cwtch to be secure and usable. We have been working hard towards that goal over the last few months.<!-- --></p>\n<!-- --><p>This post <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-roadmap-update\">revisits the Cwtch Stable roadmap update</a> we provided back in March, and provides an overview of the next steps on our journey towards Cwtch Stable.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog1-53937adbfa7a7edf40d34660f71ed0fd.png\" width=\"1005\" height=\"480\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"update-on-the-cwtch-stable-roadmap\">Update on the Cwtch Stable Roadmap<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-roadmap-update-june#update-on-the-cwtch-stable-roadmap\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Back in March we extended and updated several goals from <!-- --><a href=\"https://docs.cwtch.im/blog/path-to-cwtch-stable\" target=\"_blank\" rel=\"noopener noreferrer\">our January roadmap</a> that we would have to hit on our way to Cwtch Stable, and the timelines for achieving them. Now that we have reached target date of many of these goals, we can look back and see how work is progressing.<!-- --></p>\n<!-- --><p>(✅ means complete, 🟡 means in-progress, 🕒 reprioritized)</p>\n<!-- --><ul>\n<!-- --><li>By <!-- --><strong>30th April 2023</strong> the Cwtch team will have written the remaining outstanding documentation from the January roadmap including:<!-- -->\n<!-- --><ul>\n<!-- --><li>A Cwtch Release Process Document ✅ - <!-- --><a href=\"https://docs.cwtch.im/developing/release/#official-releases\" target=\"_blank\" rel=\"noopener noreferrer\">Release Process</a></li>\n<!-- --><li>A Cwtch Packaging Document ✅ - <!-- --><a href=\"https://docs.cwtch.im/developing/release/\" target=\"_blank\" rel=\"noopener noreferrer\">Packaging Documentation</a></li>\n<!-- --><li>Completion of documentation of existing Cwtch features, including relevant screenshots. 🟡 - new features are documented to the standards outlined in new <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/documentation\">documentation style guide</a>, and many older feature documentation features have been updated to that standard. Work is ongoing to refine the standard.<!-- --></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li>By <!-- --><strong>30th April 2023</strong> the Cwtch team will have also released developer-centric documentation including:<!-- -->\n<!-- --><ul>\n<!-- --><li>A guide to building Cwtch-apps using official libraries ✅ - <!-- --><a href=\"https://docs.cwtch.im/developing/category/building-a-cwtch-app\" target=\"_blank\" rel=\"noopener noreferrer\">Building a Cwtch App</a></li>\n<!-- --><li>Automatically generated API documentation for libCwtch 🕒 - this effort has been delayed pending other higher priority work.</li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li>By <!-- --><strong>30th June 2023</strong> the Cwtch team will have released new Cwtch Beta releases (1.12+) featuring:<!-- -->\n<!-- --><ul>\n<!-- --><li>An implementation of <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch-ui/issues/129\" target=\"_blank\" rel=\"noopener noreferrer\">Conversation Search</a> 🟡 - currently in <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch/pulls/518\" target=\"_blank\" rel=\"noopener noreferrer\">active development</a></li>\n<!-- --><li><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch-ui/issues/27\" target=\"_blank\" rel=\"noopener noreferrer\">Profile statuses</a> and other associated information ✅ - released in <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-1-12\" target=\"_blank\" rel=\"noopener noreferrer\">Cwtch Beta 1.12</a></li>\n<!-- --><li>An update to the network handling code to allow for <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch-ui/issues/593\" target=\"_blank\" rel=\"noopener noreferrer\">better Protocol Engine management</a> 🟡🕒 - new Network Management code was released in <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-1-12\" target=\"_blank\" rel=\"noopener noreferrer\">Cwtch Beta 1.12</a>. We now believe these changes will be complete in Cwtch Beta 1.13.<!-- --></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li>By <!-- --><strong>31st July 2023</strong> the Cwtch team will have completed several infrastructure upgrades including:<!-- -->\n<!-- --><ul>\n<!-- --><li>Extended reproducible builds to cover the Cwtch UI, or document where the blockers to achieving this exist. 🟡 - we have recently made a few updates to <!-- --><a href=\"https://git.openprivacy.ca/openprivacy/repliqate\" target=\"_blank\" rel=\"noopener noreferrer\">Repliqate</a> to support this work, and expect to begin in-depth examination of build artifacts in the next couple of weeks.<!-- --></li>\n<!-- --><li>Integration of automated fuzzing into the build pipeline for all Cwtch dependencies maintained by the Cwtch team 🕒 - after some initial explorations into new Go fuzzing tools we reached the conclusion that it would be better to replace this effort with other assurance work (see below).</li>\n<!-- --><li>New testing environments for F-droid, Whonix, Raspberry Pi and other <!-- --><a href=\"https://docs.cwtch.im/docs/getting-started/supported_platforms\">partially supported systems</a> 🟡 - we have already launched an environment for testing <!-- --><a href=\"https://docs.cwtch.im/docs/platforms/tails\">Tails</a>. Other platforms are underway.<!-- --></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li>By <!-- --><strong>31st August 2023</strong> the Cwtch team will have a released Cwtch Stable Release Candidate:<!-- -->\n<!-- --><ul>\n<!-- --><li>At this point we expect that the Cwtch application and existing documentation will be robust and complete enough to be labeled as stable.</li>\n<!-- --><li>Along with this label comes a higher standard for how we consider all aspects of Cwtch development. The work we have done up to this point reflects a much stronger development pipeline, and an ongoing commitment to security.</li>\n<!-- --><li><strong>This does not mark an end to Cwtch development</strong>, or new Cwtch features. But it does denote the point at which we consider Cwtch to be appropriate for wider use.<!-- --></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --></ul>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"next-steps-refinements-additional-work\">Next Steps, Refinements, Additional Work<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-roadmap-update-june#next-steps-refinements-additional-work\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>As you may have noticed above we have reprioritized some work after initial investigations forced us to reevaluate the expected cost/benefit trade-off. This has allowed us to move up timelines for tasks e.g. reproducible UI builds and testing environments.</p>\n<!-- --><p>Other work has been reprioritized due to developer availability. Documentation work in particular has not progressed as fast as we would like.</p>\n<!-- --><p>However, <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-1-12\" target=\"_blank\" rel=\"noopener noreferrer\">Cwtch Beta 1.12</a> featured many new features alongside improved performance, more robust packaging, and several fixes impacting experimental features like file sharing.<!-- --></p>\n<!-- --><p>The work that we have done on reproducible and automatically generated bindings has considerably reduced the maintenance burden associated with updates and adding new features, and has allowed us to also tackle long standing issues related to Tor process managements and Cwtch startup.</p>\n<!-- --><p>We are still on track for releasing a Cwtch Stable release candidate in August 2023, with an official Cwtch Stable release expected shortly afterwards.</p>\n<!-- --><p>This is not all we have planned for the upcoming months. Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"get-involved\">Get Involved<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-roadmap-update-june#get-involved\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We have noticed an uptick in the number of people reaching out interested in contributing to Cwtch development. In order to help people get acclimated to our development flow we have created a new section on the main documentation site called <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/developing\">Developing Cwtch</a> - there you will find a collection of useful links and information about how to get started with Cwtch development, what libraries and tools we use, how pull requests are validated and verified, and how to choose an issue to work on.<!-- --></p>\n<!-- --><p>We also also updated our guides on <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/translate\">Translating Cwtch</a> and <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing\">Testing Cwtch</a>.<!-- --></p>\n<!-- --><p>If you are interested in getting started with Cwtch development then please check it out, and feel free to reach out to <!-- --><code>team@cwtch.im</code> (or open an issue) with any questions. All types of contributions <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/stickers\">are eligible for stickers</a>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-roadmap-update-june#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-stable-roadmap-update-june",
"title": "Cwtch Stable Roadmap Update",
"summary": "Back in March we provided an update on several goals that we would have to hit on our way to Cwtch Stable, and the timelines to hit them. In this post we provide a new update on those goals",
"date_modified": "2023-07-05T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"planning"
]
},
{
"id": "https://docs.cwtch.im/blog/cwtch-nightly-1-12",
"content_html": "<p><a href=\"https://cwtch.im/download\" target=\"_blank\" rel=\"noopener noreferrer\">Cwtch 1.12 is now available for download</a>!<!-- --></p>\n<!-- --><p>Cwtch 1.12 is the culmination of the last few months of effort by the Cwtch team, and includes many foundational changes that pave the way for <!-- --><a href=\"https://docs.cwtch.im/blog/path-to-cwtch-stable\">Cwtch Stable</a> including new features like <!-- --><a href=\"https://docs.cwtch.im/docs/profiles/profile-info\" target=\"_blank\" rel=\"noopener noreferrer\">profile attributes</a>, support for new platforms like <!-- --><a href=\"https://docs.cwtch.im/docs/platforms/tails\" target=\"_blank\" rel=\"noopener noreferrer\">Tails</a>, and multiple improvements to performance and stability.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog1-53937adbfa7a7edf40d34660f71ed0fd.png\" width=\"1005\" height=\"480\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"in-this-release\">In This Release<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-1-12#in-this-release\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><figure><p><a target=\"_blank\" href=\"https://docs.cwtch.im/assets/files/picnic1.12-a06a0594d75387abb048bc8009f595b2.png\"><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/picnic1.12-a06a0594d75387abb048bc8009f595b2.png\" width=\"1388\" height=\"828\" class=\"img_ev3q\"></a></p><figcaption>A screenshot of Cwtch 1.12</figcaption></figure>\n<!-- --><p>A special thanks to the <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/translate\" target=\"_blank\" rel=\"noopener noreferrer\">amazing volunteer translators</a> and <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing\" target=\"_blank\" rel=\"noopener noreferrer\">testers</a> who made this release possible.<!-- --></p>\n<!-- --><ul>\n<!-- --><li><strong>New Features:</strong>\n<!-- --><ul>\n<!-- --><li><strong>Profile Attributes</strong> - profiles can now be augmented with <!-- --><a href=\"https://docs.cwtch.im/docs/profiles/profile-info\" target=\"_blank\" rel=\"noopener noreferrer\">additional public information</a></li>\n<!-- --><li><strong>Availability Status</strong> - you can now notify contacts that you <!-- --><a href=\"https://docs.cwtch.im/docs/profiles/availability-status\" target=\"_blank\" rel=\"noopener noreferrer\">are <!-- --><strong>away</strong> or <!-- --><strong>busy</strong></a></li>\n<!-- --><li><strong>Five New Supported Localizations</strong>: <!-- --><strong>Japanese</strong>, <!-- --><strong>Korean</strong>, <!-- --><strong>Slovak</strong>, <!-- --><strong>Swahili</strong> and <!-- --><strong>Swedish</strong></li>\n<!-- --><li><strong>Support for Tails</strong> - adds an <!-- --><a href=\"https://docs.cwtch.im/docs/platforms/tails\" target=\"_blank\" rel=\"noopener noreferrer\">OnionGrater</a> configuration and a new <!-- --><code>CWTCH_TAILS</code> environment variable that enables special Tor behaviour.<!-- --></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li><strong>Bug Fixes / Improvements:</strong>\n<!-- --><ul>\n<!-- --><li>Based on Flutter 3.10</li>\n<!-- --><li>Inter is now the main UI font</li>\n<!-- --><li>New Font Scaling setting</li>\n<!-- --><li>New Network Management code to better manage Tor on unstable networks</li>\n<!-- --><li>File Sharing Experiment Fixes<!-- -->\n<!-- --><ul>\n<!-- --><li>Fix performance issues for file bubble</li>\n<!-- --><li>Allow restarting of file shares that have timed out</li>\n<!-- --><li>Fix NPE in FileBubble caused by deleting the underlying file</li>\n<!-- --><li>Move from RetVal to UpdateConversationAttributes to minimze UI thread issues</li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li>Updates to Linux install scripts to support more distributions</li>\n<!-- --><li>Add a Retry Peer connection to prioritize connection attempts for certain conversations</li>\n<!-- --><li>Updates to <!-- --><code>_FlDartProject</code> to allow custom setting of Flutter asset paths<!-- --></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li><strong>Accessibility / UX:</strong>\n<!-- --><ul>\n<!-- --><li>Full translations for <!-- --><strong>Brazilian Portuguese</strong>, <!-- --><strong>Dutch</strong>, <!-- --><strong>French</strong>, <!-- --><strong>German</strong>, <!-- --><strong>Italian</strong>, <!-- --><strong>Russian</strong>, <!-- --><strong>Polish</strong>, <!-- --><strong>Slovak</strong>, <!-- --><strong>Spanish</strong>, <!-- --><strong>Swahili</strong>, <!-- --><strong>Swedish</strong>, <!-- --><strong>Turkish</strong>, and <!-- --><strong>Welsh</strong></li>\n<!-- --><li>Core translations for <!-- --><strong>Danish</strong> (75%), <!-- --><strong>Norwegian</strong> (76%), and <!-- --><strong>Romanian</strong> (75%)<!-- --></li>\n<!-- --><li>Partial translations for <!-- --><strong>Japanese</strong> (29%), <!-- --><strong>Korean</strong> (23%), <!-- --><strong>Luxembourgish</strong> (22%), <!-- --><strong>Greek</strong> (16%), and <!-- --><strong>Portuguese</strong> (6%)<!-- --></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --></ul>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"reproducible-bindings\">Reproducible Bindings<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-1-12#reproducible-bindings\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Cwtch 1.12 is based on libCwtch version <!-- --><code>libCwtch-autobindings-2023-06-13-10-50-v0.0.5</code>. The <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-bindings-reproducible#introducing-repliqate\" target=\"_blank\" rel=\"noopener noreferrer\">repliqate scripts</a> to reproduce these bindings from source can be found at <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/repliqate-scripts/src/branch/main/cwtch-autobindings-v0.0.5\" target=\"_blank\" rel=\"noopener noreferrer\">https://git.openprivacy.ca/cwtch.im/repliqate-scripts/src/branch/main/cwtch-autobindings-v0.0.5</a></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"download-the-new-version\">Download the New Version<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-1-12#download-the-new-version\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>You can download Cwtch from <!-- --><a href=\"https://cwtch.im/download\" target=\"_blank\" rel=\"noopener noreferrer\">https://cwtch.im/download</a>.<!-- --></p>\n<!-- --><p>Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><p>Alternatively we also provide a <!-- --><a href=\"https://cwtch.im/releases/index.xml\" target=\"_blank\" rel=\"noopener noreferrer\">releases-only RSS feed</a>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-1-12#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-nightly-1-12",
"title": "Cwtch Beta 1.12",
"summary": "Cwtch Beta 1.12 is now available for download",
"date_modified": "2023-06-16T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"release"
]
},
{
"id": "https://docs.cwtch.im/blog/cwtch-nightly-v.11-74",
"content_html": "<p>We are getting close to a 1.12 release. This week we are drawing attention to the latest Cwtch Nightly (2023-06-05-17-36-v1.11.0-74-g0406) that is now available for wider testing.</p>\n<!-- --><p>As a reminder, the Open Privacy Research Society have <!-- --><a href=\"https://openprivacy.ca/discreet-log/38-march-2023/\" target=\"_blank\" rel=\"noopener noreferrer\">also announced they are want to raise $60,000 in 2023</a> to help move forward projects like Cwtch. Please help support projects like ours with a <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> or <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog10-160dd00841ab18c4fc41da81e8c6c133.png\" width=\"1005\" height=\"481\" class=\"img_ev3q\"></p>\n<!-- --><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"new-nightly\">New Nightly<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-v.11-74#new-nightly\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h3>\n<!-- --><p>There is a <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing#cwtch-nightlies\" target=\"_blank\" rel=\"noopener noreferrer\">new Nightly build</a> are available from our build server. The latest nightly we recommend testing is <!-- --><a href=\"https://build.openprivacy.ca/files/flwtch-2023-06-05-17-36-v1.11.0-74-g0406/\" target=\"_blank\" rel=\"noopener noreferrer\">2023-06-05-17-36-v1.11.0-74-g0406</a>.<!-- --></p>\n<!-- --><p>This version has a large number of improvements and bug fixes including:</p>\n<!-- --><ul>\n<!-- --><li>A new Font Scaling setting</li>\n<!-- --><li>Several networking and connection management improvements including automatic detection and response to network changes, and several bug fixes that impacted time-to-connection after a resetting Tor.</li>\n<!-- --><li>Updated UI font styles</li>\n<!-- --><li>Dependency updates, including a new base of Flutter 3.10.</li>\n<!-- --><li>A fix for stuck file downloading notifications on Android</li>\n<!-- --><li>A fix for missing profile images in certain edge cases on Android</li>\n<!-- --><li>Japanese, Swedish, and Swahili translation options</li>\n<!-- --><li>A new retry peer connection button for prompting Cwtch to prioritize specific connections</li>\n<!-- --><li><a href=\"https://docs.cwtch.im/docs/platforms/tails\">Tails support</a></li>\n<!-- --></ul>\n<!-- --><p>In addition, this nightly also includes a number of performance improvements that should fix reported rendering issues on less powerful devices.</p>\n<!-- --><p>Please see the contribution documentation for advice on <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing#submitting-feedback\">submitting feedback</a></p>\n<!-- --><p>Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-v.11-74#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-nightly-v.11-74",
"title": "New Cwtch Nightly (v1.11.0-74-g0406)",
"summary": "In this development log we take a look at the new Cwtch Nightly",
"date_modified": "2023-06-07T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"nightly"
]
},
{
"id": "https://docs.cwtch.im/blog/cwtch-developer-documentation",
"content_html": "<p>One of the larger remaining goals outlined in our <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-roadmap-update\">Cwtch Stable roadmap update</a> is comprehensive developer documentation. We have recently spent some time writing the foundation for these documents.<!-- --></p>\n<!-- --><p>In this devlog we will introduce some of them, and outline the next steps. We also have a new nightly Cwtch release available for testing!</p>\n<!-- --><p>We are very interested in getting feedback on these documents, and we encourage anyone who is excited to build a Cwtch Bot, or even an alternative UI, to read them over and reach out to us with comments, questions, and suggestions!</p>\n<!-- --><p>As a reminder, the Open Privacy Research Society have <!-- --><a href=\"https://openprivacy.ca/discreet-log/38-march-2023/\" target=\"_blank\" rel=\"noopener noreferrer\">also announced they are want to raise $60,000 in 2023</a> to help move forward projects like Cwtch. Please help support projects like ours with a <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> or <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog9-db5594c3b12bd5d3baf3fe06894e1a6f.png\" width=\"1005\" height=\"481\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"cwtch-development-handbook\">Cwtch Development Handbook<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-developer-documentation#cwtch-development-handbook\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We have created a new documentation section, <!-- --><a href=\"https://docs.cwtch.im/developing/intro\">the developers handbook</a>. This new section is targeted towards to people working on Cwtch projects (e.g. the official Cwtch library or the Cwtch UI), as well as people who want to build new Cwtch applications (e.g. chat bots or custom clients).<!-- --></p>\n<!-- --><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"release-and-packaging-process\">Release and Packaging Process<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-developer-documentation#release-and-packaging-process\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h3>\n<!-- --><p>The new handbook features a breakdown of <!-- --><a href=\"https://docs.cwtch.im/developing/release\">Cwtch release processes</a> - describing what, and how, build artifacts are created; the difference between nightly and official builds; how the official release process works; and how reproducible build scripts are created.<!-- --></p>\n<!-- --><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"cwtch-application-development-and-cwtchbot-v010\">Cwtch Application Development and Cwtchbot v0.1.0!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-developer-documentation#cwtch-application-development-and-cwtchbot-v010\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h3>\n<!-- --><p>For the first time ever we now have <!-- --><a href=\"https://docs.cwtch.im/developing/category/building-a-cwtch-app\">comprehensive documentation on how to build a Cwtch Application</a>. This section of the development handbook covers everything from <!-- --><a href=\"https://docs.cwtch.im/developing/building-a-cwtch-app/intro#choosing-a-cwtch-library\">choosing a Cwtch library</a>, to <!-- --><a href=\"https://docs.cwtch.im/developing/building-a-cwtch-app/building-an-echobot\">building your first application</a>.<!-- --></p>\n<!-- --><p>Together with this new documentation we have also <!-- --><a href=\"https://git.openprivacy.ca/sarah/cwtchbot\" target=\"_blank\" rel=\"noopener noreferrer\">released version 0.1 of the Cwtchbot framework</a>, updating calls to use the <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-api-design\">new Cwtch Stable API</a>.<!-- --></p>\n<!-- --><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"new-nightly\">New Nightly<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-developer-documentation#new-nightly\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h3>\n<!-- --><p>There is a <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing#cwtch-nightlies\" target=\"_blank\" rel=\"noopener noreferrer\">new Nightly build</a> are available from our build server. The latest nightly we recommend testing is <!-- --><a href=\"https://build.openprivacy.ca/files/flwtch-2023-04-26-20-57-v1.11.0-33-gb4371/\" target=\"_blank\" rel=\"noopener noreferrer\">2023-04-26-20-57-v1.11.0-33-gb4371</a>.<!-- --></p>\n<!-- --><p>This version has a number of fixes and updates to the file sharing and image previews/profile pictures experiment, and an update to the <!-- --><a href=\"https://docs.cwtch.im/docs/platforms/tails\">in-development Tails support</a>.<!-- --></p>\n<!-- --><p>In addition, this nightly also includes a number of performance improvements that should fix reported rendering issues on less powerful devices.</p>\n<!-- --><p>Please see the contribution documentation for advice on <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing#submitting-feedback\">submitting feedback</a></p>\n<!-- --><p>Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-developer-documentation#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-developer-documentation",
"title": "Cwtch Developer Documentation, Cwtchbot v0.1.0 and New Nightly.",
"summary": "In this development log we take a look at the new Cwtch developer docs!",
"date_modified": "2023-04-28T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"developer-documentation"
]
},
{
"id": "https://docs.cwtch.im/blog/availability-status-profile-attributes",
"content_html": "<p>Two new Cwtch features are now available to test in nightly: <!-- --><a href=\"https://docs.cwtch.im/docs/profiles/availability-status\">Availability Status</a> and <!-- --><a href=\"https://docs.cwtch.im/docs/profiles/profile-info\">Profile Information</a>.<!-- --></p>\n<!-- --><p>Additionally, we have also published draft guidance on <!-- --><a href=\"https://docs.cwtch.im/docs/platforms/tails\">running Cwtch on Tails</a> that we would like volunteers to test and report back on.<!-- --></p>\n<!-- --><p>The Open Privacy Research Society have <!-- --><a href=\"https://openprivacy.ca/discreet-log/38-march-2023/\" target=\"_blank\" rel=\"noopener noreferrer\">also announced they are want to raise $60,000 in 2023</a> to help move forward projects like Cwtch. Please help support projects like\nours with a <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> or <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"availability-status\">Availability Status<!-- --><a href=\"https://docs.cwtch.im/blog/availability-status-profile-attributes#availability-status\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>New in this nightly is the ability to notify your conversations that you are \"Away\" or \"Busy\".</p>\n<!-- --><figure><p><a target=\"_blank\" href=\"https://docs.cwtch.im/assets/files/status-tooltip-busy-set-5764389ebf8112a9a420c911c424abe5.png\"><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/status-tooltip-busy-set-5764389ebf8112a9a420c911c424abe5.png\" width=\"442\" height=\"233\" class=\"img_ev3q\"></a></p><figcaption></figcaption></figure>\n<!-- --><p>Read more: <!-- --><a href=\"https://docs.cwtch.im/docs/profiles/availability-status\">Availability Status</a></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"profile-attributes\">Profile Attributes<!-- --><a href=\"https://docs.cwtch.im/blog/availability-status-profile-attributes#profile-attributes\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Also new is the ability to augment your profile with a few small pieces of <!-- --><strong>public</strong> information.<!-- --></p>\n<!-- --><figure><p><a target=\"_blank\" href=\"https://docs.cwtch.im/assets/files/attributes-set-c412ff3d1c5116b11f01cbc56fe1f972.png\"><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/attributes-set-c412ff3d1c5116b11f01cbc56fe1f972.png\" width=\"730\" height=\"342\" class=\"img_ev3q\"></a></p><figcaption></figcaption></figure>\n<!-- --><p>Read more: <!-- --><a href=\"https://docs.cwtch.im/docs/profiles/profile-info\">Profile Information</a></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"downloading-the-nightly\">Downloading the Nightly<!-- --><a href=\"https://docs.cwtch.im/blog/availability-status-profile-attributes#downloading-the-nightly\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p><a href=\"https://docs.cwtch.im/docs/contribute/testing#cwtch-nightlies\" target=\"_blank\" rel=\"noopener noreferrer\">Nightly builds</a> are available from our build server. Download links for <!-- --><strong>2023-04-05-18-28-v1.11.0-7-g0290</strong> are available below.<!-- --></p>\n<!-- --><ul>\n<!-- --><li>Windows: <!-- --><a href=\"https://build.openprivacy.ca/files/flwtch-win-2023-04-05-18-28-v1.11.0-7-g0290/\" target=\"_blank\" rel=\"noopener noreferrer\">https://build.openprivacy.ca/files/flwtch-win-2023-04-05-18-28-v1.11.0-7-g0290/</a></li>\n<!-- --><li>Linux: <!-- --><a href=\"https://build.openprivacy.ca/files/flwtch-2023-04-05-18-27-v1.11.0-7-g0290/\" target=\"_blank\" rel=\"noopener noreferrer\">https://build.openprivacy.ca/files/flwtch-2023-04-05-18-27-v1.11.0-7-g0290/</a></li>\n<!-- --><li>Mac: <!-- --><a href=\"https://build.openprivacy.ca/files/flwtch-macos-2023-04-05-14-27-v1.11.0-7-g0290/\" target=\"_blank\" rel=\"noopener noreferrer\">https://build.openprivacy.ca/files/flwtch-macos-2023-04-05-14-27-v1.11.0-7-g0290/</a></li>\n<!-- --><li>Android: <!-- --><a href=\"https://build.openprivacy.ca/files/flwtch-2023-04-05-18-27-v1.11.0-7-g0290/\" target=\"_blank\" rel=\"noopener noreferrer\">https://build.openprivacy.ca/files/flwtch-2023-04-05-18-27-v1.11.0-7-g0290/</a></li>\n<!-- --></ul>\n<!-- --><p>Please see the contribution documentation for advice on <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing#submitting-feedback\">submitting feedback</a></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/availability-status-profile-attributes#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/availability-status-profile-attributes",
"title": "Availability Status and Profile Attributes",
"summary": "Two new Cwtch features are now available to test in nightly: Availability Status and Profile Information.",
"date_modified": "2023-04-06T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"nightly"
]
},
{
"id": "https://docs.cwtch.im/blog/cwtch-stable-roadmap-update",
"content_html": "<p>The next large step for the Cwtch project to take is a move from public <!-- --><strong>Beta</strong> to <!-- --><strong>Stable</strong> marking a point at which we consider Cwtch to be secure and usable. We have been working hard towards that goal over the last few months.<!-- --></p>\n<!-- --><p>This post <!-- --><a href=\"https://docs.cwtch.im/blog/path-to-cwtch-stable\">revisits the Cwtch Stable roadmap</a> we introduced at the start of the year, and provides an overview of the next steps on our journey towards Cwtch Stable.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog1-53937adbfa7a7edf40d34660f71ed0fd.png\" width=\"1005\" height=\"480\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"update-on-the-january-roadmap\">Update on the January Roadmap<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-roadmap-update#update-on-the-january-roadmap\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Back in January we outlined several goals that we would have to hit on our way to Cwtch Stable, and the timelines for achieving them. Now that we have reached target date of the last of these goals, we can look back and see how we did:</p>\n<!-- --><p>(✅ means complete, 🟡 means in-progress, ❌ not started.)</p>\n<!-- --><ul>\n<!-- --><li>By <!-- --><strong>1st February 2023</strong>, the Cwtch team will have reviewed all existing Cwtch issues in line with this document, and established a timeline for including them in upcoming releases (or specifically commit to not including them in upcoming releases). ✅<!-- --></li>\n<!-- --><li>By <!-- --><strong>1st February 2023</strong>, the Cwtch team will have <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-api-design\">finalized a feature set that defines Cwtch Stable</a> and established a timeline for including these features in upcoming Cwtch Beta releases. ✅<!-- --></li>\n<!-- --><li>By <!-- --><strong>1st February 2023</strong>, the Cwtch team will have expanded the Cwtch Documentation website to include a section for:<!-- -->\n<!-- --><ul>\n<!-- --><li><a href=\"https://docs.cwtch.im/security/intro\">Security and Design Documents</a> ✅<!-- --></li>\n<!-- --><li>Infrastructure and <!-- --><a href=\"https://docs.cwtch.im/docs/getting-started/supported_platforms\">Support</a> 🟡<!-- --></li>\n<!-- --><li>in addition to a new development blog. ✅</li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li>By <!-- --><strong>31st March 2023</strong>, the Cwtch team will have created:<!-- -->\n<!-- --><ul>\n<!-- --><li>a <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/documentation\">style guide for documentation</a>, and ✅<!-- --></li>\n<!-- --><li>have used it to ensure that all Cwtch features have consistent documentation available, 🟡</li>\n<!-- --><li>with at least one screenshot (where applicable). 🟡</li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li>By <!-- --><strong>31st March 2023</strong> the Cwtch team will have published:<!-- -->\n<!-- --><ul>\n<!-- --><li>a Cwtch <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-api-design\">Interface Specification Document</a> ✅<!-- --></li>\n<!-- --><li>a Cwtch Release Process Document 🟡</li>\n<!-- --><li>a Cwtch <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-platform-support\">Support Plan document</a> ✅<!-- --></li>\n<!-- --><li>a Cwtch Packaging Document 🟡</li>\n<!-- --><li>a document describing the <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-bindings-reproducible\">Reproducible Builds Process</a> ✅<!-- --></li>\n<!-- --><li>These documents will be available on the newly expanded Cwtch Documentation website 🟡</li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li>By <!-- --><strong>31st March 2023</strong> the Cwtch team will have integrated automated UI tests into the build pipeline for the cwtch-ui repository. ✅<!-- --></li>\n<!-- --><li>By <!-- --><strong>31st March 2023</strong> the Cwtch team will have integrated automated fuzzing into the build pipeline for all Cwtch dependencies maintained by the Cwtch team ❌<!-- --></li>\n<!-- --><li>By <!-- --><strong>31st March 2023</strong> the Cwtch team will have committed to a date, timeline, and roadmap for launching Cwtch Stable ✅ (this post!)<!-- --></li>\n<!-- --></ul>\n<!-- --><p>While we didn't hit all of our goals, we did make progress on nearly all of them, and in addition also made progress in a few other key areas:</p>\n<!-- --><ul>\n<!-- --><li><a href=\"https://docs.cwtch.im/blog/autobindings\">Cwtch Autobindings</a> with <!-- --><a href=\"https://docs.cwtch.im/blog/autobindings-ii\">compile-time optional experiments</a></li>\n<!-- --><li><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-1-11\">Cwtch 1.11</a> - with support for reproducible bindings, two new localizations (Slovak and Korean), in addition to a myriad of bug fixes and performance improvements.<!-- --></li>\n<!-- --><li><a href=\"https://git.openprivacy.ca/openprivacy/repliqate\" target=\"_blank\" rel=\"noopener noreferrer\">Repliqate</a> - a tool for testing and confirming reproducible builds processes based on Qemu, and a Debian Cloud image.<!-- --></li>\n<!-- --></ul>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"a-timeline-for-cwtch-stable\">A Timeline for Cwtch Stable<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-roadmap-update#a-timeline-for-cwtch-stable\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Now for the big news, we plan on releasing a candidate Cwtch Stable release during <!-- --><strong>Summer 2023</strong>. Here is our plan for getting there:<!-- --></p>\n<!-- --><ul>\n<!-- --><li>By <!-- --><strong>30th April 2023</strong> the Cwtch team will have written the remaining outstanding documentation from the January roadmap including:<!-- -->\n<!-- --><ul>\n<!-- --><li>A Cwtch Release Process Document</li>\n<!-- --><li>A Cwtch Packaging Document</li>\n<!-- --><li>Completion of documentation of existing Cwtch features, including relevant screenshots.</li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li>By <!-- --><strong>30th April 2023</strong> the Cwtch team will have also released developer-centric documentation including:<!-- -->\n<!-- --><ul>\n<!-- --><li>A guide to building Cwtch-apps using official libraries</li>\n<!-- --><li>Automatically generated API documentation for libCwtch</li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li>By <!-- --><strong>30th June 2023</strong> the Cwtch team will have released new Cwtch Beta releases (1.12+) featuring:<!-- -->\n<!-- --><ul>\n<!-- --><li>An implementation of <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch-ui/issues/129\" target=\"_blank\" rel=\"noopener noreferrer\">Conversation Search</a></li>\n<!-- --><li><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch-ui/issues/27\" target=\"_blank\" rel=\"noopener noreferrer\">Profile statuses</a> and other associated information<!-- --></li>\n<!-- --><li>An update to the network handling code to allow for <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch-ui/issues/593\" target=\"_blank\" rel=\"noopener noreferrer\">better Protocol Engine management</a></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li>By <!-- --><strong>31st July 2023</strong> the Cwtch team will have completed several infrastructure upgrades including:<!-- -->\n<!-- --><ul>\n<!-- --><li>Extended reproducible builds to cover the Cwtch UI, or document where the blockers to achieving this exist.</li>\n<!-- --><li>Integration of automated fuzzing into the build pipeline for all Cwtch dependencies maintained by the Cwtch team</li>\n<!-- --><li>New testing environments for F-droid, Whonix, Raspberry Pi and other <!-- --><a href=\"https://docs.cwtch.im/docs/getting-started/supported_platforms\">partially supported systems</a></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li>By <!-- --><strong>31st August 2023</strong> the Cwtch team will have a released Cwtch Stable Release Candidate:<!-- -->\n<!-- --><ul>\n<!-- --><li>At this point we expect that the Cwtch application and existing documentation will be robust and complete enough to be labelled as stable.</li>\n<!-- --><li>Along with this label comes a higher standard for how we consider all aspects of Cwtch development. The work we have done up to this point reflects a much stronger development pipeline, and an ongoing commitment to security.</li>\n<!-- --><li><strong>This does not mark an end to Cwtch development</strong>, or new Cwtch features. But it does denote the point at which we consider Cwtch to be appropriate for wider use.<!-- --></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --></ul>\n<!-- --><p>This is not all we have planned for the upcoming months. Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"get-involved\">Get Involved<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-roadmap-update#get-involved\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We have noticed an uptick in the number of people reaching out interested in contributing to Cwtch development. In order to help people get acclimated to our development flow we have created a new section on the main documentation site called <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/developing\">Developing Cwtch</a> - there you will find a collection of useful links and information about how to get started with Cwtch development, what libraries and tools we use, how pull requests are validated and verified, and how to choose an issue to work on.<!-- --></p>\n<!-- --><p>We also also updated our guides on <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/translate\">Translating Cwtch</a> and <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing\">Testing Cwtch</a>.<!-- --></p>\n<!-- --><p>If you are interested in getting started with Cwtch development then please check it out, and feel free to reach out to <!-- --><code>team@cwtch.im</code> (or open an issue) with any questions. All types of contributions <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/stickers\">are eligible for stickers</a>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-roadmap-update#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-stable-roadmap-update",
"title": "Cwtch Stable Roadmap Update",
"summary": "Back in january we outlined several goals that we would have to hit on our way to Cwtch Stable, and the timelines to hit them. In this post we revisit those and announce some more",
"date_modified": "2023-03-31T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"planning"
]
},
{
"id": "https://docs.cwtch.im/blog/cwtch-nightly-1-11",
"content_html": "<p><a href=\"https://cwtch.im/download\" target=\"_blank\" rel=\"noopener noreferrer\">Cwtch 1.11 is now available for download</a>!<!-- --></p>\n<!-- --><p>Cwtch 1.11 is the culmination of the last few months of effort by the Cwtch team, and includes many foundational changes that pave the way for <!-- --><a href=\"https://docs.cwtch.im/blog/path-to-cwtch-stable\">Cwtch Stable</a> including new <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-bindings-reproducible\" target=\"_blank\" rel=\"noopener noreferrer\">reproducible</a> and <!-- --><a href=\"https://docs.cwtch.im/blog/autobindings\" target=\"_blank\" rel=\"noopener noreferrer\">automatically generated</a> bindings, as well as support for two new languages (Slovak and Korean), in addition to several performance improvements and bug fixes.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog12-313b28c3f6bcc28a7df69b0f09ffa4f6.png\" width=\"1005\" height=\"481\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"in-this-release\">In This Release<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-1-11#in-this-release\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><figure><p><a target=\"_blank\" href=\"https://docs.cwtch.im/assets/files/picnic-96d07251e7d3691f4f5bd88eecb87e77.png\"><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/picnic-96d07251e7d3691f4f5bd88eecb87e77.png\" width=\"1341\" height=\"866\" class=\"img_ev3q\"></a></p><figcaption>A screenshot of Cwtch 1.11</figcaption></figure>\n<!-- --><p>A special thanks to the <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/translate\" target=\"_blank\" rel=\"noopener noreferrer\">amazing volunteer translators</a> and <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing\" target=\"_blank\" rel=\"noopener noreferrer\">testers</a> who made this release possible.<!-- --></p>\n<!-- --><ul>\n<!-- --><li><strong>New Features:</strong>\n<!-- --><ul>\n<!-- --><li><strong>Based on new Reproducible Cwtch Stable Autobuilds</strong> - this is the first release of cwtch based on <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-bindings-reproducible\" target=\"_blank\" rel=\"noopener noreferrer\">reproducible Cwtch bindings</a> in addition to our new <!-- --><a href=\"https://docs.cwtch.im/blog/autobindings\" target=\"_blank\" rel=\"noopener noreferrer\">automatically generated</a></li>\n<!-- --><li><strong>Two New Supported Localizations</strong>: <!-- --><strong>Slovak</strong> and <!-- --><strong>Korean</strong></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li><strong>Bug Fixes / Improvements:</strong>\n<!-- --><ul>\n<!-- --><li>When preserving a message draft, quoted messages are now also saved</li>\n<!-- --><li>Layout issues caused by pathological unicode are now prevented</li>\n<!-- --><li>Improved performance of message row rendering</li>\n<!-- --><li>Clickable Links: Links in replies are now selectable</li>\n<!-- --><li>Clickable Links: Fixed error when highlighting certain URIs</li>\n<!-- --><li>File Downloading: Fixes for file downloading and exporting on 32bit Android devices</li>\n<!-- --><li>Server Hosting: Fixes for several layout issues</li>\n<!-- --><li>Build pipeline now runs automated UI tests</li>\n<!-- --><li>Fix issues caused by scrollbar controller overriding</li>\n<!-- --><li>Initial support for the Blodeuwedd Assistant (currently compile-time disabled)</li>\n<!-- --><li>Cwtch Library:<!-- -->\n<!-- --><ul>\n<!-- --><li><a href=\"https://docs.cwtch.im/blog/cwtch-stable-api-design\">New Stable Cwtch Peer API</a></li>\n<!-- --><li>Ported File Downloading and Image Previews experiments into Cwtch</li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --><li><strong>Accessibility / UX:</strong>\n<!-- --><ul>\n<!-- --><li>Full translations for <!-- --><strong>Brazilian Portuguese</strong>, <!-- --><strong>Dutch</strong>, <!-- --><strong>French</strong>, <!-- --><strong>German</strong>, <!-- --><strong>Italian</strong>, <!-- --><strong>Russian</strong>, <!-- --><strong>Polish</strong>, <!-- --><strong>Spanish</strong>, <!-- --><strong>Turkish</strong>, and <!-- --><strong>Welsh</strong></li>\n<!-- --><li>Core translations for <!-- --><strong>Danish</strong> (75%), <!-- --><strong>Norwegian</strong> (76%), and <!-- --><strong>Romanian</strong> (75%)<!-- --></li>\n<!-- --><li>Partial translations for <!-- --><strong>Luxembourgish</strong> (22%), <!-- --><strong>Greek</strong> (16%), and <!-- --><strong>Portuguese</strong> (6%)<!-- --></li>\n<!-- --></ul>\n<!-- --></li>\n<!-- --></ul>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"reproducible-bindings\">Reproducible Bindings<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-1-11#reproducible-bindings\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Cwtch 1.11 is based on libCwtch version <!-- --><code>2023-03-16-15-07-v0.0.3-1-g50c853a</code>. The <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-bindings-reproducible#introducing-repliqate\" target=\"_blank\" rel=\"noopener noreferrer\">repliqate scripts</a> to reproduce these bindings from source can be found at <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/repliqate-scripts/src/branch/main/cwtch-autobindings-v0.0.3-1-g50c853a\" target=\"_blank\" rel=\"noopener noreferrer\">https://git.openprivacy.ca/cwtch.im/repliqate-scripts/src/branch/main/cwtch-autobindings-v0.0.3-1-g50c853a</a></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"download-the-new-version\">Download the New Version<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-1-11#download-the-new-version\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>You can download Cwtch from <!-- --><a href=\"https://cwtch.im/download\" target=\"_blank\" rel=\"noopener noreferrer\">https://cwtch.im/download</a>.<!-- --></p>\n<!-- --><p>Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><p>Alternatively we also provide a <!-- --><a href=\"https://cwtch.im/releases/index.xml\" target=\"_blank\" rel=\"noopener noreferrer\">releases-only RSS feed</a>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-nightly-1-11#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-nightly-1-11",
"title": "Cwtch Beta 1.11",
"summary": "Cwtch Beta 1.11 is now available for download",
"date_modified": "2023-03-29T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"release"
]
},
{
"id": "https://docs.cwtch.im/blog/cwtch-documentation",
"content_html": "<p>One of the main streams of work in the lead up to Cwtch Stable has been improving all aspects of Cwtch Documentation. In this development log we will highlight some of the major updates over the last few weeks.</p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog9-db5594c3b12bd5d3baf3fe06894e1a6f.png\" width=\"1005\" height=\"481\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"cwtch-secure-development-handbook\">Cwtch Secure Development Handbook<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-documentation#cwtch-secure-development-handbook\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>One of the earliest compendiums of Cwtch documentation was the Cwtch Secure Development Handbook. This handbook provided an overview of the various parts of the Cwtch ecosystem, the known risks, and any existing mitigations. The handbook was designed to serve as a guide to developers who were building or extending Cwtch, and over the years it also served as a permanent home for documenting long-standing design decisions.</p>\n<!-- --><p>We have <!-- --><a href=\"https://docs.cwtch.im/security/intro\">now ported the the handbook to this documentation site</a>, along with updating some of the contents. Over the next few months we will be expanding this section to include new sections on fuzzing, plugins, and client implementation.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"volunteer-development\">Volunteer Development<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-documentation#volunteer-development\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We have noticed an uptick in the number of people reaching out interested in contributing to Cwtch development. In order to help people get acclimated to our development flow we have created a new section on the main documentation site called <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/developing\">Developing Cwtch</a> - there you will find a collection of useful links and information about how to get started with Cwtch development, what libraries and tools we use, how pull requests are validated and verified, and how to choose an issue to work on.<!-- --></p>\n<!-- --><p>We also also updated our guides on <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/translate\">Translating Cwtch</a> and <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing\">Testing Cwtch</a>.<!-- --></p>\n<!-- --><p>If you are interested in getting started with Cwtch development then please check it out, and feel free to reach out to <!-- --><code>team@cwtch.im</code> (or open an issue) with any questions. All types of contributions <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/stickers\">are eligible for stickers</a>.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"next-steps\">Next Steps<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-documentation#next-steps\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We still have more work to do on the documentation front:</p>\n<!-- --><ul>\n<!-- --><li>Ensuring all pages <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/documentation\">implement the new documentation style guide</a>, and include appropriate screenshots and descriptions.<!-- --></li>\n<!-- --><li>Expanding the security handbook to provide information on <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-bindings-reproducible\">reproducible builds</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-api-design\">the new Cwtch Stable API</a> and upcoming improvements around fuzz testing.<!-- --></li>\n<!-- --><li>Creating new documentation sections on the <!-- --><a href=\"https://docs.cwtch.im/blog/autobindings\">libCwtch autobindings API</a> and building applications on top of Cwtch.<!-- --></li>\n<!-- --></ul>\n<!-- --><p>As these changes are made, and these goals met we will be posting about them here! Subscribe to our <!-- --><a href=\"https://docs.cwtch.im/blog/rss.xml\">RSS feed</a>, <!-- --><a href=\"https://docs.cwtch.im/blog/atom.xml\">Atom feed</a>, or <!-- --><a href=\"https://docs.cwtch.im/blog/feed.json\">JSON feed</a> to stay up to date, and get the latest on, all aspects of Cwtch development.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-documentation#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-documentation",
"title": "Updates to Cwtch Documentation",
"summary": " In this development log we will highlight some of the major documentation updates over the last few weeks.",
"date_modified": "2023-03-10T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"documentation",
"security-handbook"
]
},
{
"id": "https://docs.cwtch.im/blog/autobindings-ii",
"content_html": "<p><a href=\"https://docs.cwtch.im/blog/autobindings\" target=\"_blank\" rel=\"noopener noreferrer\">Last time we looked at autobindings</a> we mentioned that one of the next steps was introducing support for <!-- --><strong><a href=\"https://docs.cwtch.im/blog/cwtch-stable-api-design#application-experiments\" target=\"_blank\" rel=\"noopener noreferrer\">Application-level experiments</a></strong>. In this development log we will explore what application-level experiments are (technically), and how we added (optional) autobindings support for them.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog8-97ac031095f463e4b5172ac973677415.png\" width=\"1005\" height=\"481\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"the-structure-of-an-application-experiment\">The Structure of an Application Experiment<!-- --><a href=\"https://docs.cwtch.im/blog/autobindings-ii#the-structure-of-an-application-experiment\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>An application-level experiment consists of:</p>\n<!-- --><ol>\n<!-- --><li>A set of top-level APIs, e.g. <!-- --><code>CreateServer</code>, <!-- --><code>LoadServer</code>, <!-- --><code>DeleteServer</code> - these are the APIs that we want to expose to calling applications.<!-- --></li>\n<!-- --><li>An encapsulating structure for the set of APIs, e.g. <!-- --><code>ServersFunctionality</code> - it is much easy to manage a cohesive set of functionality if it is wrapped up in a single entity.<!-- --></li>\n<!-- --><li>A global variable that exists at the top level of libCwtch, e.g. <!-- --><code>var serverExperiment *servers.ServersFunctionality servers</code> - our single pointer to the underlying functionality.<!-- --></li>\n<!-- --><li>A set of management-related APIs, e.g. <!-- --><code>Init</code>, <!-- --><code>UpdateSettings</code>, <!-- --><code>OnACNEvent</code> - in the case of the server hosting experiment we need to perform specific actions when we start up (e.g. loading unencrypted hosted servers), and when settings are\nchanged (e.g. if the server hosting experiment is disabled we need to tear down all active servers).<!-- --></li>\n<!-- --><li>Management code within <!-- --><code>_startCwtch</code> and <!-- --><code>_reconnectCwtch</code> that calls the management APIs on the global variable.<!-- --></li>\n<!-- --></ol>\n<!-- --><p>From a code generation perspective we already have most of the functionality is place to support (1) - the one major difference being that we need to wrap function calls on the global variable associated with the experiment, instead\nof on <!-- --><code>application</code> or a specific <!-- --><code>profile</code>.<!-- --></p>\n<!-- --><p>Most of the effort required to support optional experiments was focused on optionally weaving experiment management code within the template.</p>\n<!-- --><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"new-required-management-apis\">New Required Management APIs<!-- --><a href=\"https://docs.cwtch.im/blog/autobindings-ii#new-required-management-apis\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h3>\n<!-- --><p>To achieve this weaving, we now require application-level experiments to implement an <!-- --><code>EventHandlerInterface</code> interface and expose itself via an\ninitialize constructor <!-- --><code>Init(acn, appDir) -&gt; EventHandlerInterface</code>, and <!-- --><code>Enable(app, acn)</code>.<!-- --></p>\n<!-- --><p>For now this interface is rather minimal, and has been mapped almost exactly to how the server hosting experiment already worked. If, or when, a new application experiment is required we will likely revisit this interface.</p>\n<!-- --><p>We can then generate, and optionally include blocks of code like:</p>\n<!-- --><div class=\"codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#F8F8F2;--prism-background-color:#282A36\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#F8F8F2;background-color:#282A36\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t&lt;experimentGlobal&gt; = &lt;experimentPackage&gt;.Init(&amp;globalACN, appDir)</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\teventHandler.AddModule(&lt;experimentGlobal&gt;)</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t&lt;experimentGlobal&gt;.Enable(application, &amp;globalACN)</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"Copy code to clipboard\" title=\"Copy\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<!-- --><p>and place them at specific points in the code. <!-- --><code>EventHandler</code> has also been extended to maintain a collection of <!-- --><code>modules</code> so that it can\npass on interesting events.<!-- --></p>\n<!-- --><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"adding-support-for-application-experiments-in-the-spec-file\">Adding Support for Application Experiments in the Spec File<!-- --><a href=\"https://docs.cwtch.im/blog/autobindings-ii#adding-support-for-application-experiments-in-the-spec-file\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h3>\n<!-- --><p>We have introduced a new <!-- --><code>!</code> operator which can be used to gate APIs behind a configured experiment. Along with a new\ntemplating option <!-- --><code>exp</code> which will call the function on the configured experiment, and <!-- --><code>global</code> to allow the setting up\nof a global functionality within the library.<!-- --></p>\n<!-- --><div class=\"codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#F8F8F2;--prism-background-color:#282A36\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#F8F8F2;background-color:#282A36\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t# Server Hosting Experiment</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t!serverExperiment import \"git.openprivacy.ca/cwtch.im/cwtch-autobindings/experiments/servers\"</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t!serverExperiment global serverExperiment *servers.ServersFunctionality servers</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t!serverExperiment exp CreateServer application password string:description bool:autostart</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t!serverExperiment exp SetServerAttribute application string:handle string:key string:val</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t!serverExperiment exp LoadServers application acn password</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t!serverExperiment exp LaunchServers application acn</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t!serverExperiment exp LaunchServer application string:handle</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t!serverExperiment exp StopServer application string:handle</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t!serverExperiment exp StopServers application</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t!serverExperiment exp DestroyServers</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t!serverExperiment exp DeleteServer application string:handle password</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"Copy code to clipboard\" title=\"Copy\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<!-- --><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"generation-time-inclusion\">Generation-Time Inclusion<!-- --><a href=\"https://docs.cwtch.im/blog/autobindings-ii#generation-time-inclusion\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h3>\n<!-- --><p>Without any arguments provided <!-- --><code>generate-bindings</code> will not generate code for any experiments.<!-- --></p>\n<!-- --><p>In order to determine what experimental code to generate, <!-- --><code>generate-bindings</code> now interprets arguments as enabled compile time experiments, e.g. <!-- --><code>generate-bindings serverExperiment</code> will turn on\ngeneration of server hosting code, per the spec file above.<!-- --></p>\n<!-- --><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"cwtch-ui-integration\">Cwtch UI Integration<!-- --><a href=\"https://docs.cwtch.im/blog/autobindings-ii#cwtch-ui-integration\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h3>\n<!-- --><p>The UI, and other downstream applications, can now check for support for server hosting by simply checking if the loaded library provides the expected symbols, e.g. <!-- --><code>c_LoadServers</code> - if it doesn't then the UI is safe to assume the\nfeature is not available.<!-- --></p>\n<!-- --><figure><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/dev9-host-disabled-3d95df692e95765ccc97b4da4e35b23e.png\" width=\"1290\" height=\"754\" class=\"img_ev3q\"></p><figcaption>A screenshot of the Cwtch UI Settings Pane demonstrating how the Server Hosting experiment option looks when the UI is pointed to a libCwtch compiled without server hosting support.</figcaption></figure>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"nightlies--next-steps\">Nightlies &amp; Next Steps<!-- --><a href=\"https://docs.cwtch.im/blog/autobindings-ii#nightlies--next-steps\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We are now publishing <!-- --><a href=\"https://build.openprivacy.ca/files/libCwtch-autobindings-v0.0.2/\" target=\"_blank\" rel=\"noopener noreferrer\">nightlies</a> of autobinding derived libCwtch-go, along with <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/repliqate-scripts/src/branch/main/cwtch-autobindings-v0.0.2\" target=\"_blank\" rel=\"noopener noreferrer\">Repliqate scripts</a> for reproducibility.<!-- --></p>\n<!-- --><p>With application experiments supported, this phase of autobindings comes to a close. The immediate next steps involve extensive testing and release candidates proving out the new bindings to ensure that no bugs have been introduced\nin the migration from libCwtch-go. These candidates will form the basis for Cwtch Beta 1.11.</p>\n<!-- --><p>However, there is still more work to do, and we expect to make progress on a few areas over the next few months, including:</p>\n<!-- --><ul>\n<!-- --><li><strong>Dart Library generation</strong>: since we now have a formal description of the bindings interface, we can move ahead with also autogenerating the <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch-ui/src/branch/trunk/lib/cwtch\" target=\"_blank\" rel=\"noopener noreferrer\">Dart side</a> of the bindings interface, giving a boost to UI integration of new features, and allowing us to generate tailored versions of the UI interface, e.g. one compiled without experiment support. We can also extend the same logic to other downstream interfaces, e.g. <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/libcwtch-rs\" target=\"_blank\" rel=\"noopener noreferrer\">libcwtch-rs</a>.<!-- --></li>\n<!-- --><li><strong>Documentation generation</strong>: as another benefit of a formal description of the bindings interface, we can easily generate documentation compatible with <!-- --><a href=\"https://cwtch.im/\" target=\"_blank\" rel=\"noopener noreferrer\">docs.cwtch.im</a>.<!-- --></li>\n<!-- --></ul>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/autobindings-ii#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/autobindings-ii",
"title": "Compile-time Optional Application Experiments (Autobindings)",
"summary": "In this development log we document how we added compile-time optional application-level experiments to Cwtch autobindings.",
"date_modified": "2023-03-03T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"bindings",
"autobindings",
"libcwtch"
]
},
{
"id": "https://docs.cwtch.im/blog/autobindings",
"content_html": "<p>The C-bindings for Cwtch evolved as part of Cwtch UI development. After two years of prototyping, development, new features, and revisiting first-implementations we have reached the point where we have a good understanding of\nwhat the bindings need to do, and how they should do it. To that end we have produced a first-cut of a workflow to <!-- --><strong>automatically generate</strong> these bindings: <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/autobindings\" target=\"_blank\" rel=\"noopener noreferrer\">cwtch-autobindings</a>.<!-- --></p>\n<!-- --><p>This this development log we will introduced autobindings, the motivation behind them, and how we plan to use them on the <!-- --><a href=\"https://docs.cwtch.im/blog/path-to-cwtch-stable\" target=\"_blank\" rel=\"noopener noreferrer\">path to Cwtch Stable</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog8-97ac031095f463e4b5172ac973677415.png\" width=\"1005\" height=\"481\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"a-brief-history-of-cwtch-bindings\">A Brief History of Cwtch Bindings<!-- --><a href=\"https://docs.cwtch.im/blog/autobindings#a-brief-history-of-cwtch-bindings\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Prior to the modern Flutter-based UI application, the first Cwtch UI prototype was based on Qt, with the bindings automatically generated by <!-- --><a href=\"https://github.com/therecipe/qt\" target=\"_blank\" rel=\"noopener noreferrer\">therecipe/qt</a>. However, after encountering numerous\ncrash-bugs on the compiled Arm version for Android, and a few weeks of prototyping different approaches, we settled on Flutter as a replacement UI framework.<!-- --></p>\n<!-- --><p>As part of early prototyping efforts for Flutter we built out a first version of <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/libcwtch-go\" target=\"_blank\" rel=\"noopener noreferrer\">libCwtch-go</a>, and over the two years of beta development we have evolved that prototype into a functional set of Cwtch bindings.<!-- --></p>\n<!-- --><p>This approach has not been without side effects. There is still code from those early prototypes floating around in libCwtch-go, inconsistencies in how functions - in particular <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-api-design#the-cwtch-experiment-landscape\" target=\"_blank\" rel=\"noopener noreferrer\">experimental features</a> - handle settings, <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-api-design#bindings\" target=\"_blank\" rel=\"noopener noreferrer\">duplication of logic between Cwtch and libCwtch-go</a>, and <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-api-design#appendix-a-special-behaviour-defined-by-libcwtch-go\" target=\"_blank\" rel=\"noopener noreferrer\">special behaviour in libCwtch-go that better belongs in the core Cwtch library</a>.<!-- --></p>\n<!-- --><p>As part of a broader effort to <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-api-design\" target=\"_blank\" rel=\"noopener noreferrer\">refine the Cwtch API in preparation for Cwtch Stable</a> we have taken the opportunity to fix many of these problems.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"cwtch-autobindings\">Cwtch Autobindings<!-- --><a href=\"https://docs.cwtch.im/blog/autobindings#cwtch-autobindings\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>The current <!-- --><code>lib.go</code> file that encapsulates the vast majority of libCwtch-go currently sits at 1500+ lines of code. However, much of that code is boilerplate calling conventions e.g. the <!-- --><code>BlockContact</code> API implementation is:<!-- --></p>\n<!-- --><div class=\"codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#F8F8F2;--prism-background-color:#282A36\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#F8F8F2;background-color:#282A36\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t//export c_BlockContact</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\tfunc c_BlockContact(profilePtr *C.char, profileLen C.int, conversation_id C.int) {</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\tBlockContact(C.GoStringN(profilePtr, profileLen), int(conversation_id))</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t}</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\tfunc BlockContact(profileOnion string, conversationID int) {</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\tprofile := application.GetPeer(profileOnion)</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\tif profile != nil {</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t\tprofile.BlockConversation(conversationID)</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t\t}</span><br></span><span class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">\t}</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"Copy code to clipboard\" title=\"Copy\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<!-- --><p>All that code is doing is defining a C-compatible API, performing some basic checking of parameters, and passing the result into the core Cwtch library. The two functions themselves support the C-bindings and Java-bindings respectively.</p>\n<!-- --><p>In the new <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/autobindings\" target=\"_blank\" rel=\"noopener noreferrer\">cwtch-autobindings</a> we reduce these multiple lines to <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/autobindings/src/branch/main/spec#L19\" target=\"_blank\" rel=\"noopener noreferrer\">a single one</a>:<!-- --></p>\n<!-- --><p>profile BlockConversation conversation</p>\n<!-- --><p>Defining a <!-- --><code>profile</code>-level function, called <!-- --><code>BlockConversation</code> which takes in a single parameter of type <!-- --><code>conversation</code>.<!-- --></p>\n<!-- --><p>Using a similar boilerplate-reduction for the reset of <!-- --><code>lib.go</code> yields <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/autobindings/src/branch/main/README.md#spec-file-format\" target=\"_blank\" rel=\"noopener noreferrer\">5-basic function prototypes</a>:<!-- --></p>\n<!-- --><ul>\n<!-- --><li>Application-level functions e.g. <!-- --><code>CreateProfile</code></li>\n<!-- --><li>Profile-level functions e.g. <!-- --><code>BlockConversation</code></li>\n<!-- --><li>Profile-level functions that return data e.g. <!-- --><code>GetMessage</code></li>\n<!-- --><li>Experimental Profile-level feature functions e.g. <!-- --><code>DownloadFile</code></li>\n<!-- --><li>Experimental Profile-level feature functions that return data e.g. <!-- --><code>ShareFile</code></li>\n<!-- --></ul>\n<!-- --><p>Once aggregated and itemized the full set of bindings for Cwtch applications, profile interactions, and experiments can be <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/autobindings/src/branch/main/spec\" target=\"_blank\" rel=\"noopener noreferrer\">described in fewer than 50 lines, including comments</a>. Even including the code necessary to generate the bindings from this specification file (~400 lines), and the code needed to initialize the bindings themselves (~300 lines). This cuts the amount of coded needed by 60%, and eliminates many classes of error and inconsistencies associated with maintaining bindings (e.g. regularizing function calls / checking experiment status / handling error conditions etc.).<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"next-steps\">Next Steps<!-- --><a href=\"https://docs.cwtch.im/blog/autobindings#next-steps\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Cwtch autobindings work today, are API-compatible with the existing libCwtch-go implements, and can be fully integrated into an existing Cwtch application with minimal effort. However, there are a few areas which need to be addressed prior to a full rollout:</p>\n<!-- --><ul>\n<!-- --><li><strong><a href=\"https://docs.cwtch.im/blog/cwtch-stable-api-design#application-experiments\" target=\"_blank\" rel=\"noopener noreferrer\">Application-level experiments</a></strong> (of which there is only one: Desktop Server Hosting) are not currently supported. This functionality is only tangentially related to the rest of the Cwtch bindings, and necessarily introduces additional dependencies (e.g. on <!-- --><code>cwtch-server</code>). In the coming weeks we will allow optional application experiments to be enabled at compile time, to allow us to produce smaller bindings for platforms that don't support the experiment, and to allow us to build new kinds of platform-targeted experiments that can take advantage of platform specific features.<!-- --></li>\n<!-- --><li><strong>Dart Library generation</strong>: since we now have a formal description of the bindings interface, we can move ahead with also autogenerating the <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch-ui/src/branch/trunk/lib/cwtch\" target=\"_blank\" rel=\"noopener noreferrer\">Dart-side</a> of the bindings interface, giving a boost to UI integration of new features, and allowing us to generate tailored versions of the UI interface e.g. one compiled without experiment support. We can also extend the same logic to other downstream interfaces e.g. <!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/libcwtch-rs\" target=\"_blank\" rel=\"noopener noreferrer\">libcwtch-rs</a></li>\n<!-- --><li><strong>Documentation generation</strong>: another benefit of a formal description of the bindings interface, we can easily generate documentation compatible with <!-- --><a href=\"https://cwtch.im/\" target=\"_blank\" rel=\"noopener noreferrer\">docs.cwtch.im</a>.<!-- --></li>\n<!-- --><li><strong>Cwtch API</strong>: This first cut of autobindings is based on an unreleased version of the core Cwtch library that implements much of the <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-stable-api-design\" target=\"_blank\" rel=\"noopener noreferrer\">Cwtch Stable API redesign</a>. In a short while we will be merging these features into Cwtch, in preparation for Cwtch 1.11, and beyond.<!-- --></li>\n<!-- --></ul>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/autobindings#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/autobindings",
"title": "Autogenerating Cwtch Bindings",
"summary": "In this development log we describe a first-cut of a workflow to automatically generate Cwtch C and Java bindings from a high-level specification.",
"date_modified": "2023-02-24T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"bindings",
"autobindings",
"libcwtch"
]
},
{
"id": "https://docs.cwtch.im/blog/cwtch-testing-ii",
"content_html": "<p>In this development log, we investigate some text-based UI bugs encountered by <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing#running-fuzzbot\" target=\"_blank\" rel=\"noopener noreferrer\">Fuzzbot</a>, add more <!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-testing-i\">automated UI tests</a> to the pipeline, and announce a new release of the Cwtchbot library.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/devlog7-ddd3206f988a859af98340268befb0fa.png\" width=\"1005\" height=\"481\" class=\"img_ev3q\"></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"constraining-cwtch-ui-fields\">Constraining Cwtch UI Fields<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-testing-ii#constraining-cwtch-ui-fields\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>Fuzzbot identified a few bugs relating to UI layout and text clipping. Certain strings would violate the bounds of their containers and overlap with other UI elements. While this\ndoesn't pose a safety issue, it is unsightly.</p>\n<!-- --><figure><p><a target=\"_blank\" href=\"https://docs.cwtch.im/assets/files/dl7-before-38cd04ba78b67745560d72a1872e4443.png\"><img loading=\"lazy\" src=\"https://docs.cwtch.im/assets/images/dl7-before-38cd04ba78b67745560d72a1872e4443.png\" width=\"410\" height=\"90\" class=\"img_ev3q\"></a></p><figcaption>Screenshot demonstrating how certain strings would violate the bounds of their containers.</figcaption></figure>\n<!-- --><p>These cases were fixed by parenting impacted elements in a <!-- --><code>Container</code> with <!-- --><code>clip: hardEdge</code> and <!-- --><code>decoration:BoxDecoration()</code> (note that both of these are required as Container widgets in Flutter cannot set clipping logic\nwithout an associated decoration).<!-- --></p>\n<!-- --><figure><p><a target=\"_blank\" href=\"https://docs.cwtch.im/assets/files/dl7-after-452769c3b44432627b4533b37b3e9053.png\"><img loading=\"lazy\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAasAAABMCAIAAABcRQ+0AAAAA3NCSVQICAjb4U/gAAAgAElEQVR4nO2deUBU57n/n3Nm34cBZhiYYVhkXwURxAV0kLggauK1McSkadIm2i1tr/mV5N70Nm1q9zXVtvc2aWLV2zSrsTFBiGiMYECibAIjwjBsMwPD7Ps55/4xhhIYYVhC7C/vR/+YOed93+/zDMzDe97lebHnD+4FBAKB+PxR06nFP2sbEAgE4jMDRUAEAvH5BUVABALx+QVFQAQC8fkFRUAEAvH5hf7pNS2JUUkUKpEsRhApE4RL2QIhmy+iMRgAQPh8brvFbbPaxg02o96iHzINak1D2k/PGAQCgZjJEkdABostT8mUrUiTxidLE5Jvq8pk8iWRfElkhCpx8qLhZo+hr0d/4/pId7vP415awxAIBGImSxYBxXJFbHaBMitPGn8r8Fmt1qampra2tp6eHq1Wq9frLRaL2+0GADabLRKJoqKiYmNjk5OTc3JyioqKpAnJ0oTkTHWFoa9H19Yy0NpkHhlcKvMQCARiJksQASUxqvj84ri8ImFkFADodLrTp0/X1tZevnz5dlXcbjeO426X++rVq3Q6vXRtiQQTSIQSM9glsvCY+GRpfHLSmtL+lsa+K5fQ0zECgfiUWFQEZPH4SWs2Jq0pFUcpAKCuru748eM1NTVzVuRxeU8+/sSHHzW9eea0ShH75aqHaGZK3zfYbun56R9+UVS8pqqqSq1WZ9+1KzZnlaahXtNwzuOwL8ZUBAKBmMnCI6AiIzd5bZkqpwAA6urqjhw5Mkunbyo4hlduqViZkD1hmWCz2dvLt0VwJGatEaPhToeDpKiampqamprCwsKDBw+q1eqC3fdLE1J6Pqgd7Li6YGsRCARiJguKgBiWXro1vXSrIEKq0+kOHz586tSp0Guz2exdm7a7BqxZaZkRYeEbVq91jdpJH0HDMLvdQVJkoNjly5cvX75cWVlZXV2tyimQxKg668901p8BilqIzQgEAjGDea8H5AhEBburCvc8KIiQnjx5ctOmTfMKfwCQkZrO93AoP8VhsMPDw8P4Iq/NAwCAgZ/wU58McKdOndq0adPJkycFEdLCPQ8W7K7iCETztRmBQCCCMr8IKIiQ5e/cl6neAQDV1dWHDh1yuVzzlcxITfdYXEABHaOnJaXQKBrpJwAAo+Eur5skyGnlXS7XoUOHqqurASBTvSN/5z5BhGy+oggEAjGTeURAQYRs5bY9SWs2Wq3WqqqqY8eOLUySz+H53X4KKBrQlDEK0k9SBAUANB5DNzro8/uC1jp27FhVVZXVak1as3Hltj0oCCIQiMUTagTkCEQ5W3YnFm4wGAz79u07f/78wjUxAIoCCiiSxHEa6SOAojAa7mX4R8f0JDm9DzjJ+fPn9+3bZzAYEgs35GzZjR6HEQjEIgktAmJY5uYdgd7fQw89dO3atcVIerwenEEHDEggHQ4H4fYDAI1B09uMo0b97HWvXbv20EMPBXqCmZt3AIYtxhIEAvE5J6S54PTSrYGxvwMHDiwy/AFAt6Zne5Ka9GMYEzebLaSfBAAan3GpsdFiscxZ/dq1awcOHDh+/HimeodjwtR57u1F2rMMVBx6Vhgpsxr1vU3vX69/Z9rdtJIteTv2ep1OfW9Xa80bQXfCzN5CgHt//CegqHFdf9f7Nbq2KzMLhCK0/oGvxmbnO80Tuo6W5tePf7ZCc3q9bEKheB2KEOJOA5szS74iI7do78OCCGl1dfWCx/5uiWFYrCK2vFR9f8W9gGMjFsMrb7zy8Ob9jhGrV0z+6MVftF/vCLGp/fv3Hz582DZmaHz5z2idIAKBWAA1nVrazoKMWUqwePyV2/dKE5JPnjz585//fDFiXA73sS9++dDXvpOfk8fksegsukDAz8/Jo9yE3+Vr13efOV/j9XlDbK21tVUul+cXFtGZ7OGuViLkistP6vry9Q9+NXX9ZtuY3jamX1v1aNHehzQN50i/P1Bgyzf+M0NdIU/O6P+okS0Q3f2fvxRFxejaW0JvAQDWVj2at+PepMKSnkvvAcC2b39/RVHpjcb6qZbMKcQWiHY88aPU9Zs5QvGopjNx9YZtj3/PaTFNDA0sv1AoXi+b0JxehyKEuNPoNVrmGAdMWrNRlVOg0+mefvrpxSiJheIfP/3DL+z+NwGfz2AwAhdpOI3D4fAVIjyKdfGjBvs89709/fTTOp1OlVOQtGbjYmz7tJEmJBn7NKTfF5dXlLxWHZ9frO/t9rn/uYqIIwrrvlgrT84AgI0PP85gc9rOnppXCwAgUcR1XXhXEBmlylldtPehyPik/pbGaZbMKaTIyPV53KbB/pj03AhVYl7FXrvJ2Pvh+5+JUCheL5vQnF6HIoS4A5mtDyiJUeVVfoHNF1ZXV3d0hPp8OhOhQPCT7z27MnsljUabeRej4Xaf4/W33xwzjc+rWb/fbzQat2/fzguTGHq7Xba5xxA/E5xWszIzT5aYQni9SWtKR7ra6v/866kFuCJx2oa7KJJMXb+ZFxZ++dUXRzWd82oBACiCSN1QzhWJBREyRUZux3v/aH33jWll5hQyDWplK9Jis1f5ve7U9eUep+3Ci8+5P/nBLptQKF4vm9CcXocihLjT6DVaZpsJic8vFkcp6urq5rvrYyocNuc/vl2dlZ6F47f6myRFulwuDpszeSVCEpGfk9d9Q0PNc8fbqVOn7rnnHrVaHZ9ffMemkDH2aVg8vtflwOn05jdPzBxod1ktDA7H63Qa+28EHc6fswUA0DTW5++6z+d2eV3O+ud/E3Sofk6hj6FwnKZpPBd0OH/ZhELxetmEQvF6TiHEHchtn4LFckVcXhEAHDlyZOGt43jllor83Lypvb9uTc+2vZVdvT2TV+h0+oqEFRw2ZwESAfPi8orEcsWC7fy0Of2zp0488cjpnz0V9NsVt7KQ8PkmhgcuvPicY2L8337w3NqqR6cWYAtEbL6AJIjRno7r9e8krl5f9fPnpz37p67fTBEESRKaS+/p2q4U7/vy3mePMD75kYYiJEtMIXw+XduV5tePL1goLFrp93r9Xs+FF58zjwxu+9b3t3/nmWle8yURhM9nG9M3v36cwebMNCZ1/WaeWOL3edvPnrpe/86nJxTKx1u878sUSXoc9rNHDuvarixMCHEHctsIGJtdIIyMqqurmyXjC5POwD4Gx3E6bXqPUiQUbd5YxuVwp14Ml0iy0jP5XN4nmmIwJ7uE8+Ly5ct1dXXCyKjY7IIFVA+Rgrv3P/T7v2WoKyavMBYUr4Miliu73j8rW5EKABsf+RaLyw8Mt0+SuGotRZLGPk10WrZQKs/dtsdlNWsazk0tI0/NGh/s97ndsTmr4vOLE1atHdfenDaYtWxCssRUTcM5niQicfWG/J37IhOSZs7Xz2nMsgmF4vWSCCHuQIKPAzJY7LwdX+CFhf/whz/s7e0NWpNBZ5Tnlo5M6EVcEZvBihSFKyNi9GbjZAEMw1TK2B2bttK8OI1Fn9z7wePytm3eKhJ+YkfHlWstzVev+HzBt8TNjtPp3LlzJ53J7L/SQBL+uSvcntIvfXPjI9/O2lzZc+k9v9czeT0mLUeakDx0vdXY1wMA6+5/rOSL3+AIRIMdHy1GLoAwUhafX4wBJKxaFxYde+XNkwPXmqYWMI8OylMyZStSCa83ZZ0aKOrCS793mk1Ty5B+nzw5U6JQEV5v0pqN47q+s0cOf1ZCTDZXtbKIKxKzuLz4vCLNpXPNb56YrzHLJhSK10sihLjTuO04oDwlUxqfrNPpZkl3KuYKB8dHwngiuUTOoNH8pL9d2zW1AIvB5DO5tkELU4AzeEygKDqbEbQpDIMNGzb0Dw+8U/Ouw+GYrxs1NTU6nU4ZnyxPyRxobZ5v9alExie57TY2X5Cprmh+47ZDOSRBkISfJInFaE0yMayLW1nkdTmshuELL/5u5mCWz+1y26wUSQJAf0vjh6++NLORgdbm7PJdHocdp9Gv/uPvHcEWii+bUGvNG2mlW1wWMwDUP/+boD+UOY1ZNqFQvF4SIcQdSPAV0QV3789UVxw9evTZZ5+9XU0eiwsAHp/HTxLKiJgwnqhD1018HBQwwBh0RkJs3H8eeiohLp4iKYqiaIxgc8EYxuaxxZFhhjHj95/5QcPlhgmLeZbdwUF56qmnDhw40F53uum1ha/ZTly9YcMDBzvqz6SsVZtHBt/66ZOTtwIfyIevHeuoO73g9hEIxCJRZuZt+OLXZxuDoqih69fOHvlxKK3VdGqD9wEDpx3V1tbOUtnhcU6+HhofzkvLHTbrxyy3VrRQQPkJvzRalpieyKaxvG5vIAXWNDAMY3JYwnARRsNFAtG3HvtGcV5h7du1A/pBrUHnI0J9KK6trT1w4MDkIU0LI2FVsd/n7ag9LUtMDYtW8sThDvP8FujMl9xtexJXr+cIRDQG0+tyWEaHm988YbjZPbXM+ge+Kk/OYPH4GIZ7nHb9jesfnPjT1OGwcGV8we77xXIFi8snCL/bbu1rvnTl1MlPuFawLqtsBy8snMHh+t1uh3m84723pw11LZvQkni9bEKheL0kQoiQwDAAwD5+MZP5ricJMg4oiVHlV95rtVqffPLJoHVmguO0L6mrGrubHe5/PsNSQK1cuXLLXVuEYSIGk4HTaDgGGAYYjuM4TqPRmGwmT8QXSIR0Bt3v8o1r9DQ6TRUbmx6elB2TzsDpPcO9IfozNDT0yCOPSKKiB641LXhhYOGeBy36kY73TovlClliKgA1dL01cGvaOGDB3fvv+tpTPo878BYAMtUV6x84uGrXfbnb7klZV8bkcAML01YUlZR88RsFu+/P2bI7Pr/YY7OaR4cCVdbc+0iWugIADH09Y9peoEAan6TMzu9rvjT5xdj+nWeUWfkeh83Q220eHWSyufLkDHlyxuQQO1sg2vat/5JEx1oNI/ob151mE18SochYyRNLJldsrCgqWVv1KJsvHBu4abzZ7XW5JApVbHaBc2LcNNi/zEJL4vWyCYXi9ZIIIULEahhpq3kTp9GiVqTNvGsbN5x44uGbTRdDbC34OKBEoQKApqYgg7gsBksiCJuwmT0+T2D+N1oSpTMOifnCmNgYu3v6EN7Q0LDX66WJaBwBl83jUCRJEiQFt4IajU7HaTiGgc/pHWrp9xE+tpRPo9NkGTHimHAhV9A9fKNjoGuGFcFpampSq9UShWphCwOzNley+cLui7UA0HWhJnXd5qik9BDr5lfuy9y8w2oY7WtpoDOYQqnc7/MCQOLq9cX3PmI3jd24fJ7OZCszVxbf92XT8IDVMMIWiBJWrXXZrbVHfzKmvTXXtPqeBzI2bc/fdd+Fv/wOAFLXl0fGJ49pe6c+j299/HuyFWmp68u73q8BgMJ7HuCKwjQN5y7+9Q+BAoII2dZvPh2XV/Tha8cC38CMTdsxDG98+fmAdwAQl1e04YGvpW/cqmmsX06hpfJ62YTm9HqphBCfFUEWoIhkMQDQ1tY28xaHxU5XJCdGqVYmZCXI4nLjMyMEEsDgi/seEIaLD3zpK4poBYP+z+kOl8tFkiSGAYYBTsNoDBqDzWCwmEw2k8li0ug4hgHhJQxdI5aRCZxFx2k4ANA5DF6UICJOujo9Hws5/1XA4IDxC0CZme9zuwJ7qqyGEYthWCxXhJKHlcHmJK/dZNWPvP6Db188drT++d+c+vF322reBIBMdYXP7Xr7V//V8L9/fv+l3ze/cYLJ5WdtrgQAZcZKJoc72N4y+bUBgA9ffclls4hl0YG30oRkDMMCTU1y9cyrGIZFxq0IvBVFKTwO2+T3EwBsY3pdewuTw1Nm5Qeu8CWRpsH+yWABAP0tjeO6m3xJ5DILLZXXyyY0p9dLJYT4rAjSBxREygCgp6dn5i2/3+/xe8dtE06PM4wvlvDF73c2UhRVuqGUB9zKrRXFq4v6tP3Xe7qGRoa5XO72u7byeXygAg/uH0NRgGEURQWiG+EjTH1jOJvOELAAA6CAAgrDMGG85AsP3vth/9WOrpA25AUMDhg/X9gCkUQZ57Ka8ypuzQt5XU4ag5leuuXyKy/OXjc+bw2bL+xrvjTzllAqNw32T/6Wu2wWn9spCJcCgFAmBwCLYaTi0LNh0cqJYd3pnz0FAB67jcUTBMpzhGLC7/N53Hu+/1u2QKRru3L+hd+OdLf7vR6OKCxQhsXjue223G170jaUA4Zfrz9z9cyrZv0QAITJFQDAYHOYbI7TMlH6pW8qMlZ6nPb3Xzoyqul0mici45PZApHbZlk2oSXxetmEQvF6qYQQnxXBImC4FAC02iDPkk6P63J3M0GSJEV6/F6nx+32eQCg+4OOtqFOVXLCuqLiNQVFq1bmE34Cx3Emk2nXW3wmN1fCp7PogGE4HSP9BE6n+VxeigS73uq2OAmfz2vxskRsBp/lGLYKYkV0DhOn417Ce+PmjRA9CRgcMH6+ZJXtYLDYjMio9I3bpl6XrZj7QTgsWgkATsvEtOsRqkQ6kyVNSCl77IlP3MAwAHDbbQAQrojjhYU3vf7Xor1fUmbl69qukIQfp99aK+5zu2g0etKaUpfNou/tVmTkBq6TBEGj3/rB+b1eJoerzMofaG2WKOMVGSuvnnnV7/EAAJ3JCjRC+H1MLk8cldz0+l/zKvYmrFo7qukkCD+GYRyhyG2zLJvQkni9bEKheL1UQojPiiA/ALZACAB6fZB0zSRFTp5k5PF5x3zjgf5aJFPyRu1p77u+438/cf/eqvVFxXweHwAoijJeH3UZ7BiG0ZgMDAcmj9XVc1Mg5HExJpvJYgvZOIcuTpVatSazZgwoABwEKnFAok/b75myLHl2AgYHjJ8v8pQsr9Nx/NCXpl7c+eRPxfIYoVRuNYzMUtfrcgIAVyyZdn1M20v4fKbB/tM//4+ZtfqvNKzadR9bIHKYxgr3fJGiSJOuf1qZiRGdKne13+flCETSuCTbuGFmOw6TUZSafbPp4orCDWyBaKgzSKpEp2VCECEd6W4vuHs/g8WeOVO0bEJL5fWyCc3p9VIJIeYF9zZ9ZwZr3ju1gowDsvkiAAglXfOtOQ0KXqg9YXFYXW7XTW3fj3/9k8f+/evvvFfjcDr8Th9OYkABRsO9To/b4jIOjz3/xitHThzXG8YooMLSZMKEMDqXIUqMYIdxSYIEDAscnAQAVrstdE8CBgeMnxfhyvgwuWL84znESYx9GhqdkV66dfJK0H17+t5ukiTkKZkzb9lNxrCY2Ljcwpm3HOZxt80qiJB2f1BHkcSYtnfmypvBjo+Aonji8KHOa4Bhw11BRmYt+mEMx0mSsBpHSZK4ESwdk2NinCsM63r/rNflcNss7bVvfVZCS+X1sgnN6fVSCSHmhSzYRDAAsHn83G175tXU9D4gTqPTGAwAcLvdITZBAXW+44NbrynK4/X29vX+8Oc/kkvlD27fv/WebQwZVxAlcgxZTd16sZC3d/s2h8eTvjadJ+VRtFtjhDQmLSwtksLBqbfpm3V2iZchYB9/ZfrGo1kIGExjBN92MgtpJXfhdPrMP++axvqk4o2BbZ7OiXEAiM1eRZLktEXRw12toz2d0alZO5/82WhPO+H3SxRxoz0drTVvtNedLtr70NqqR2NzCiz6YUGETCSTf3DiT4HdAm67VSxXFN/7iMdpb3rtrzMNM/ZpfB63LDElOiVzTNt76eR/zywzMawDgPTSrXQmS9NQH3QdgNNswnB888HvYhje/MbxmWvQlk1oqbxeNqFQvF4SIUQoMNicFYUlyWs3CSOjgpfAsKzNlbyw8N4P35+WJ+12hDQMwWFycuIzbE6bZqTPR/hSFUl8FtdgHR8cGyYpksNkS0URTo9LzBPRcPz6oIaiKD9BOK3e02fqm5s6FdFycYSYw2fTSVwVpizasprDZc/sT2E4Pu60vnOxXszl/e3yyw/ed39Pb6iDgItBlpjqdTqmZdYEAGOfxmbUi2UxYTGxHefejssriohNFETIej6om1by3d/9cOPD35IlpaWW3EX6/U6zaQQoAOj5oI7weTPLdigz8+JXFRNer21MLwiXBiKg3+vBcZrZMNT48vPTVs9OQvi8DJZwqKvt3P/8MmgBx8Q4AGAYfv38u40vPx+0jM/jDshdPfPq7Q7BWDahJfF62YRC8XpJhBChkLW5MmfL3bOXoTNZycWb5CmZrzz99VDaDLIrbv+vjtGZzKSkpMnT0MU8UWZs2pBpWMAR8FhcwEDAEdwc7ZOHRdndjhiJvN84MDox6vX5IoXhvXotANBp9F2F29anrdNZjG2abrvDwefxKRqFAQYYJhYLv/zYfTw+FwAIggAA0u23DZgtw+Y/nXpFbx4fsfV7KIdrPivmORyORqPxe73HvrU/9FoIBOJfhbwdX5gzAgawjRtCiYDBd8W57Ra+JFIkEgUiIIZhXr+3TdvpI/wDxiEcwwUcPo7jE3az1jBIARUbqRi3ToxZJwDA6rqV6V4eJtuQXRwtkSpk0tWJaeMWy5jFzIrkuq1unoRPY9Id3RNevsND+j648pFSFBkjiqAIkoHT0lSJ4zZzOEfWPxHqWugAIpEoYPy8aiEQiH8VWt76W/f7n9iqm1VemVayxT5ufPuX35t6nQg5R1SwCGiz8iWRMplsdHQUACiKcnpcALe6YwQQJvvE5GsAqPnoPZf3E4OGDBojOy5j3GSz273x0dFMBjM6WhYVGY4z6DQ5nUbHSYIk/CRh99Hp2Nq0bMLlB5ICDAOKSlclfNjV6ifYAlaY2T0WohsAIJPJAsaHXgWBQPxrMW2iKZDRhwJqwVv4g0xuBmbrVSpViE1MC38AECkKX5dW1Nnfe+1Gl8ftZQvY/AgBjUGnCNI1YbcbrWaD2WQw2SfsLpPDPeH0ON2EnwCKAoBwkYjL5mCASbhSHJtHztSAwWipAQKBCJ0gfUCbUQ8AyckLzLPCpDPyE3NVUkUYX+Lxer0+H0mRkSlyl9XlmXAAgM/vr7/aPDRmyEtOV0RIO7W941bL6tRMeXgEBsCg0fKS0t776DILuAJmmMUTamgPGBwwHoFAIEIhSAS06IcAICsra2EthvHFG7PWEQTJpNFrWxspitrF2eSt66Azb2kNj49d6rhKUuSIySgLCx80jpIUhWP49qJ1NBwHgBRF3IXWK36CCOfJbN4JkgopV2DA4IDxCAQCEQpBHjNNg1oAKChYyLEbTDojPzHHanfXtlwes5jj5THFWbksFhMoivARgQXUfoKgKBIA3F6PVj9MfJwMdTIPlkQoDBMIAYCOM1m0UBd5BwwOGI9AIBChEKQPaBrSGm72SBOSCwsLZzkmKSh8Dn9LXpnT5fMTpIjPj4uSs8VceYbSMmSyjVoCiQ9iIiJlkshR0z9PFOGzuamxcXTarXBMw/GcxKTrgx02j8VLhLQrrrCwUCgUGm72LCw1VlhMbP6Oe6NTs9rOnvroH39XZuZllu0Qy5VMLtfv8Yxpe8//5XfTzn5Vf+XfY3P++UfCbbOc/O5XAq+T1mzMVFfwwsJxOt1pNl098+qNxvMLsAqBQHzaBF8RbejrkSYkl5WVzSsCMmj0NamrpKIIUkDFRESyGEwMA9JHep0eu9E2uYmOxWRWFpe+dal+dGIMAPgcblleUVxU9NSmkhQqi3fM6XUGFZpJWVlZwOzQrZ1kw4Nfi81e5bSYJrPO0ugMj8P+0emX7SZDTHpuYsG6dVWP1v7hp1Nr0RgM05D2zR89Ma211PWbC+7eP9LT0XHubZ/LGZORa9EPL8AqBAIxJzevXFJkrNS2LvxEquARUH/jeqa6oqKiYpZzQmZCAVgdtjZtpzIiRsgVBOKJz+UdadNRJPVxEcAAosMj9paWX77ebjCbSnNXRYdHMj+ZJCNcIE6OTrjW3xFijuiKioqA2aFbO5VrZ15rqz11/y/+Enjbf/Vy/9VboX+w46owMmpm4gOcziD9QdYcJa8tM/Zpao/+JPC2r6VhYSYhEIg5MfZpXv3+44tpIXgEHOluN/T1KOOTy8vLZzkubhoE4W/sbr7a185hsiWCsCR5YnJMYmykIlIczqQxPg6CAAA4hkkEorK8Qh/h57BYOIYBAIWBw+WwOGy6saE+vVZvNoYY/srLy5VKpaGvZ6S7PURTp3Lhxedud0uZla/MzItQrei+eBYAssp35my5+/r5d668eZLGYBDBzvYMi1E2nPyfBZiBQCCWn+AR0Odx69papPHJVVVVoUdACsBH+H0uu81lN1rHe0f661rP8zi8Xz7zU5lCSbgJiqT8Lp/f7QMKAmlTMQxoLDqdy8RomMVp++mvnuu5qfETfh/h94e8qruqqgoAdG0tge2iS8WO/3c4IjYBAAx9PYHTEd02q8syEVh0TaMzwpTKB393gvD5bGOGjvdO32g8H5dXhGM4i8vf8/3fckUSn8fV13yp8e8vLKFVCARiCbltZoSB1qakNaVqtXoB8yEAQFGUj/D5CJ/L6/6wtVkVr2JzuXArA/Qni2K3/nXoum8O9Vud88iIBQCFhYVqtdpqHB1YxFhAUN76SbVYrojNXpW6bnPpw4+/8vTXNQ3nJk8j66w/4/d6xgf6lJl5aSV3Fezer7/RxQ+LIClyxZrSnkvv6dpbssoqU9ZvHtf1BQ6vQCAQdxq33XRhHhnsb2kEgIMHDy5GgKKoV956zWKzAhbo9GEY/sn/GAYYuNyut945bbaY59t+wLz+lsZP44Bq88hg67tvNL3+V0G4NGnNxqm3bjSe729ptI3pO+vPfHDiT2wePz5/jcUwguO0znNvt777xsTQwIUXn3NaTEFTByIQiDuB2bad9V25ZB4dVKvVlZWVi9EY0Y++9Ldj7ts/olIUdeHSxQ8+vDTfg9IrKyvVarV5dLDvSpBjOpYKt8MGFOW/vf2E30cB+D0eXdsVn9sVeHaexB9ymmsEArHMzJYf0DSk1TTUF+y+v7q6+uzZs5PJshbA66dPpSSmbFGX0+l0AKCA8nq9LCYLACiKuq7peuHEi/p/rJQAAAUuSURBVDa7fV5tcjic6upqANA01C9sGeDtWLWrSqJQjXS3m0cG5ckZyqx8m8nY19Kwoqgku3xn14WznfVn1I8eMvZrDDd7xFExaSVbnBZT4FF3uKstPr/YaZkYut6aun4zi8tH08EIxB3LHBlSNQ3npAkpqpyCZ5555tChQwuW8RP+Xx79DZvNKllbwqDTKZKaMJujpDKSJG/09f741z/r1807hD3zzDNKpVJ7rWlybG6pcFnNbH529l276SwW4fWaRwavnnkFALjCMF5YBFcs4YnDmRxupnoHo4Lj93gs+uHmN08EMhW/99+/KHvsibSSLdnluxzm8Y9Ov7ywGWoEArEMBMmQOg1FRm7R3ocFEdLq6upjx44tRozNYn3z0a/v3r7T7/d39lzPTMvQDmiffPZ7fdq++Ta1f//+w4cP28YMjS//ebAjyKk9CAQCMTs1ndq5008NdlztrD8DAIcPHy4pKVmMntvj+c0fnyMIgiRJ49iY2+0+8vwfFxD+SkpKDh8+DACd9WdQ+EMgEAsmpAR8nfVn2uveAoCjR4/m5OQsRk8oEOI47vF6hoYHcRxfEZ843xZycnKOHj0KAO11bwVCMwKBQCyM0FKQUlT72bc0DeeEQuELL7ywmCC4tnANAHR0dXZpuul0elFBIYfNDr16Tk7OCy+8IBQKNQ3n2s++BaFtGkEgEIighJqE2WWzXHvn9d7LF6RS6cmTJxfwOMxiMpUxyrsrdlEUdfrdt691tE2YzcoY5arcfB6XF/Qo3mmUlJScPHlSKpX2Xr5w7Z3XZ56TjUAgEPOCtrMgI8SiXqfDNDTAYLOjV6Tec889RqOxtbU1lIpMJrNo1epd23fuu/sLSYkrRg36o3/5o8vtjlOq0pJS8nJWxilVIqHYOG6c5XC4/fv3HzlyhMViaRrOXT3zmm0M5YJGIBCLotdomUcEBACv02Hs0wAG0oSUsrIyuVx+8eJFf7AUKVNhs9n377kvXhXvdruaWq688L8v9Wn7SZLs6ulyezwMOiNcIomSRfUP9OuNQU754HA4hw8ffvzxxwGgve6ta2+/uuBTURAIBGKSXqNl7tUwQcCw9NKt6aVbBRFSnU53+PDhU6emHzc+FTqdLuQLGEym3+93u1wOl/PjZjAGg8HjcJlMJklRNpvV7Zm+faKysrK6ulqpVNrGDJ31Zzrrz6CxPwQCsSTUdGoXFAEBAECRkZu8tkyVUwAAdXV1R44cWUAChVkoLCw8ePCgWq0GAO21pp4PatHCFwQCsYQsKgICAIvHT1qzMWlNqThKAQB1dXXHjx8PPZvW7SgvL6+qqgrEPvPooKahXtNwzuOY3545BAKBmJ3FRsAAkhhVfH5xXF6RMDIKAHQ63enTp2tra+fbJSwsLCwrK6uoqFAqlQBgNY72tzT2Xbm0tHt+EQgEIsDSRMAAYrkiNrtAmZUnjb910LDVam1qampra+vp6dFqtXq93mKxuN1uAGCz2SKRSCaTqVSq5OTkrKysgoICoVAYqGjo69G1tQy0Nn0aCa8QCAQiwFJGwAAMFluekilbkSaNT5YmzO/MdcPNHkNfj/7G9ZHu9qXN9oxAIBAzqenUzpEbZr74PO6B1uZATnlJjEqiUIlkMYJImSBcyhYI2XwRjcEAAMLnc9stbpvVNm6wGfUW/ZBpUIuedhEIxDKzxBFwKqahIEENp9EBgAz5DBAEAoH49PgUI2BQUOxDIBB3DqHuC0YgEIj//0AREIFAfH5BERCBQHx+QREQgUB8fvk/oU/HigH/qfEAAAAASUVORK5CYII=\" width=\"427\" height=\"76\" class=\"img_ev3q\"></a></p><figcaption>Now these clipped strings are tightly constrained to their container bounds.</figcaption></figure>\n<!-- --><p>These fixes are available in the <!-- --><a href=\"https://docs.cwtch.im/docs/contribute/testing#cwtch-nightlies\">latest Cwtch Nightly</a>, and will be officially released in Cwtch 1.11.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"more-automated-ui-tests\">More Automated UI Tests<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-testing-ii#more-automated-ui-tests\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We have added two new sets of automated UI tests to our pipeline:</p>\n<!-- --><ul>\n<!-- --><li><em>02: Global Settings</em> - these tests check that certain global settings like languages, theme, unknown contacts blocking, and streamer mode work as expected. (<!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch-ui/pulls/628\" target=\"_blank\" rel=\"noopener noreferrer\">PR: 628</a>)<!-- --></li>\n<!-- --><li><em>04: Profile Management</em> - these tests check that creating, unlocking, and deleting a profile work as expected. (<!-- --><a href=\"https://git.openprivacy.ca/cwtch.im/cwtch-ui/pulls/632\" target=\"_blank\" rel=\"noopener noreferrer\">PR: 632</a>)<!-- --></li>\n<!-- --></ul>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"new-release-of-cwtchbot\">New Release of Cwtchbot<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-testing-ii#new-release-of-cwtchbot\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p><a href=\"https://git.openprivacy.ca/sarah/cwtchbot\" target=\"_blank\" rel=\"noopener noreferrer\">Cwtchbot</a> has been updated to use the latest Cwtch 0.18.10 API.<!-- --></p>\n<!-- --><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"help-us-go-further\">Help us go further!<!-- --><a href=\"https://docs.cwtch.im/blog/cwtch-testing-ii#help-us-go-further\" class=\"hash-link\" aria-label=\"Direct link to heading\" title=\"Direct link to heading\"></a></h2>\n<!-- --><p>We couldn't do what we do without all the wonderful community support we get, from <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">one-off donations</a> to <!-- --><a href=\"https://www.patreon.com/openprivacy\" target=\"_blank\" rel=\"noopener noreferrer\">recurring support via Patreon</a>.<!-- --></p>\n<!-- --><p>If you want to see us move faster on some of these goals and are in a position to, please <!-- --><a href=\"https://openprivacy.ca/donate\" target=\"_blank\" rel=\"noopener noreferrer\">donate</a>. 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.<!-- --></p>\n<!-- --><p>Donations of <!-- --><strong>$5 or more</strong> can opt to receive stickers as a thank-you gift!<!-- --></p>\n<!-- --><p>For more information about donating to Open Privacy and claiming a thank you gift <!-- --><a href=\"https://openprivacy.ca/donate/\" target=\"_blank\" rel=\"noopener noreferrer\">please visit the Open Privacy Donate page</a>.<!-- --></p>\n<!-- --><p><img loading=\"lazy\" alt=\"A Photo of Cwtch Stickers\" src=\"https://docs.cwtch.im/assets/images/stickers-new-1e9b14bdd638b4907cce833e813a09ad.jpg\" width=\"1024\" height=\"768\" class=\"img_ev3q\"></p>",
"url": "https://docs.cwtch.im/blog/cwtch-testing-ii",
"title": "Notes on Cwtch UI Testing (II)",
"summary": "In this development log we provide more updates on automated UI integration testing!",
"date_modified": "2023-02-17T00:00:00.000Z",
"author": {
"name": "Sarah Jamie Lewis"
},
"tags": [
"cwtch",
"cwtch-stable",
"support",
"testing"
]
}
]
}