<oembed><type>rich</type><version>1.0</version><author_name>hodlbod (npub1jl…jynqn)</author_name><author_url>https://nostr.ae/npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>Flotilla 1.9.1 is out — this release is the first release in which I do not resent the clankers for helping me:&#xA;&#xA;1. re-write welshman&#39;s app framework&#xA;2. migrate flotilla to the new version&#xA;3. fix many arcane and subtle bugs I would never have found&#xA;4. synchronize implementations across flotilla, zooid, caravel, and welshman&#xA;5. keep my documentation and skills up to date&#xA;&#xA;The main highlight this time is the addition of long-form articles. I added this because they&#39;re really useful as a basis for a content library and pinned messages, which were added last release.&#xA;&#xA;Also, it&#39;s worth mentioning that Welshman 0.9.0 (and 0.9.1) is out as well. This includes a complete re-write of the app framework to prevent mixing user data in the case of multiple logins. I also added @welshman/domain, which includes a very nice framework (inspired by applesauce&#39;s factories) for parsing, validating, and writing nostr events. For example:&#xA;&#xA;```const reader = ProfileKind.reader(event).parse()```&#xA;```reader.name()            // string | undefined```&#xA;```reader.display()         // best-effort display name, falls back to a short npub&#xA;```&#xA;```const template = await ProfileKind.writer(reader)```&#xA;```  .setName(&#34;alice&#34;)```&#xA;```  .setAbout(&#34;hello nostr&#34;)```&#xA;```  .renderTemplate()```&#xA;&#xA;The welshman/app module is deeply integrated with the domain module, giving you nice stuff like this:&#xA;&#xA;```import {FollowList} from &#34;@welshman/domain&#34;```&#xA;```import {Domain} from &#34;@welshman/app&#34;```&#xA;``````&#xA;```// Load the user&#39;s follow list```&#xA;```const reader = await app.use(FollowLists).forceLoad(user.pubkey)```&#xA;```&#xA;// Modify the user&#39;s follow list```&#xA;```const writer = app.use(Domain)```&#xA;```  .writer(FollowList, reader)```&#xA;```  .follow(otherPubkey)```&#xA;```&#xA;// Publish the updated event to relay selections defined by the writer class```&#xA;```const command = await app.use(Domain).command(writer)&#xA;await command.publish()```&#xA;&#xA;You can read more at https://welshman.coracle.social/ or point your clanker at my welshman skills: https://gitea.coracle.social/coracle/welshman/src/branch/master/skills&#xA;&#xA;Other changes:&#xA;&#xA;* Re-work how claims work under the hood&#xA;* Fix storage and synchronization bugs&#xA;* Update welshman library to 0.9.0&#xA;* And long-form articles&#xA;* Fix quote loading, rendering, and comments&#xA;* Add &#34;create thread&#34; from chat message&#xA;* Fix voice chat bugs&#xA;* Fix notification bugs&#xA;* Improve video tiling and chrome&#xA;* Add ability to send logs to developer&#xA;* Add theme selector&#xA;* Add native sharing registration</html></oembed>