<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Soatok Dreamseeker</title>
    <description>The latest articles on DEV Community by Soatok Dreamseeker (@soatokdhole).</description>
    <link>https://dev.to/soatokdhole</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F224031%2Fa4220adc-9e88-481d-8b14-d95d2a510af7.jpg</url>
      <title>DEV Community: Soatok Dreamseeker</title>
      <link>https://dev.to/soatokdhole</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/soatokdhole"/>
    <language>en</language>
    <item>
      <title>FAQ Off: An Open Source Project to Defeat Harassment Mobs and Anti-Intellectualism</title>
      <dc:creator>Soatok Dreamseeker</dc:creator>
      <pubDate>Mon, 13 Apr 2020 09:23:23 +0000</pubDate>
      <link>https://dev.to/soatokdhole/faq-off-an-open-source-project-to-defeat-harassment-mobs-and-anti-intellectualism-27jk</link>
      <guid>https://dev.to/soatokdhole/faq-off-an-open-source-project-to-defeat-harassment-mobs-and-anti-intellectualism-27jk</guid>
      <description>&lt;p&gt;&lt;strong&gt;Social media is inherently asymmetric.&lt;/strong&gt; That observation shouldn't surprise anyone. After all, most of us have a very small number of followers, but some people command the attention of hundreds of thousands or even millions.&lt;/p&gt;

&lt;p&gt;But the asymmetry of social media cuts both ways. Ask anyone who has ever been the target of a harassment mob, and they'll tell you all about it.&lt;/p&gt;

&lt;p&gt;A popular technique used by Internet trolls and mob-harassers is called &lt;a href="https://en.wikipedia.org/wiki/Sealioning" rel="noopener noreferrer"&gt;Sea-Lioning&lt;/a&gt;, which involves (often multiple) throwaway accounts demanding answers to a tired line of loaded questions, usually while maintaining the veneer of civility.&lt;/p&gt;

&lt;p&gt;Even when a victim is successful dealing with sea-lioning, it can be very exhausting and draining for them to do so.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fwondermark.com%2Fc%2F2014-09-19-1062sea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fwondermark.com%2Fc%2F2014-09-19-1062sea.png" alt="Sea-lioning from Wondermark"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which brings us to &lt;strong&gt;&lt;a href="https://github.com/soatok/faq-off#faq-off-features-at-a-glance" rel="noopener noreferrer"&gt;FAQ Off&lt;/a&gt;&lt;/strong&gt;, an open source toolkit for undermining the tactics of trolls and harassment mobs.&lt;/p&gt;

&lt;h1&gt;
  
  
  FAQ Off Aims to Invert the Exploitable Asymmetry of Social Media
&lt;/h1&gt;

&lt;p&gt;It used to be the case that you had two options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Engaging with a (potentially large) number of boring Internet trolls who are not acting in good faith.&lt;/li&gt;
&lt;li&gt;Say nothing and let their replies pollute your community with their toxicity, thereby tacitly endorsing &lt;a href="https://www.youtube.com/watch?v=P55t6eryY3g" rel="noopener noreferrer"&gt;the radicalization of your friends&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With &lt;em&gt;FAQ Off&lt;/em&gt;, you're given a third choice: &lt;strong&gt;Take control of the narrative&lt;/strong&gt; by writing responses to their questions, and the obvious follow-ups to those questions, and so on recursively. And then, all current and future iterations of the same tired line of questioning can be answered by a simple hyperlink instead of wasting your time again.&lt;/p&gt;

&lt;p&gt;If this sounds confusing, how about a demonstration? &lt;strong&gt;Here's a URL you can link people in response to them saying, "I hate furries."&lt;/strong&gt;: &lt;a href="https://faq.dhol.es/@Soatok/furry-fandom/i-hate-furries" rel="noopener noreferrer"&gt;https://faq.dhol.es/@Soatok/furry-fandom/i-hate-furries&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;FAQ Off&lt;/em&gt; is the cross-product of Q&amp;amp;A sessions with text adventure games&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's another demo. This one deals with common misconceptions about VPN services: &lt;a href="https://faq.dhol.es/@Soatok/cryptography/which-vpn-service-will-protect-me-from-hackers" rel="noopener noreferrer"&gt;https://faq.dhol.es/@Soatok/cryptography/which-vpn-service-will-protect-me-from-hackers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Of course, if you'd prefer the dog-fooded explanation for this project, &lt;a href="https://faq.dhol.es/@Soatok/public-beta/what-is-faq-off" rel="noopener noreferrer"&gt;read here&lt;/a&gt; instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write once, link &lt;em&gt;ad nauseum&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;If you're in touch with the news and recent events, you may be concerned by the trend of anti-intellectualism that's taken hold for the past decade or so.&lt;/p&gt;

&lt;p&gt;If nothing else, FAQ Off may provide a platform for experts to automate the uninteresting conversations debunking common myths and falsehoods that perpetuate the 24-hour breaking news cycle and tabloid journalism so they can focus instead on providing &lt;em&gt;actual&lt;/em&gt; insight into their area of expertise.&lt;/p&gt;

&lt;p&gt;The sky is the limit.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are FAQ Off's Features?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Question and Answer Website&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Guide your readers to the answers to their question.&lt;/li&gt;
&lt;li&gt;Short-circuit common lines of disruptive discourse.
&lt;em&gt;Write once, answer ad nauseum!&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;HTML and Markdown Support&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Troll and Spam Defense&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Administrators can enable "invite only" mode, which requires an invitation code
from an existing user to sign up.&lt;/li&gt;
&lt;li&gt;The invitation tree: Administrators can see who invited who, to identify common
entry points of misbehaving users to curate their own community.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Collaboration&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Users can share an &lt;strong&gt;Author&lt;/strong&gt; profile with colleagues and publish as a group.&lt;/li&gt;
&lt;li&gt;Users can belong to an unlimited number of &lt;strong&gt;Authors&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Authors can share access to an unlimited number of users, or just one.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Security&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Entries are written in HTML / Markdown and processed by &lt;a href="http://htmlpurifier.org" rel="noopener noreferrer"&gt;HTML Purifier&lt;/a&gt;
to protect against cross-site scripting attacks.&lt;/li&gt;
&lt;li&gt;Passwords are &lt;a href="https://github.com/soatok/dhole-cryptography#password-storage" rel="noopener noreferrer"&gt;stored securely&lt;/a&gt;, or you can use Twitter. &lt;/li&gt;
&lt;li&gt;Your username or Twitter handle is only knowable by &lt;em&gt;administrators&lt;/em&gt;.
A randomly generated &lt;code&gt;Public ID&lt;/code&gt; is provided to keep your login handle
and/or Twitter handle anonymous to everyone else.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where Can I Find It?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;FAQ Off is on Github: &lt;a href="https://github.com/soatok/faq-off" rel="noopener noreferrer"&gt;https://github.com/soatok/faq-off&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>php</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Secure Automatic Updates for Electron Apps</title>
      <dc:creator>Soatok Dreamseeker</dc:creator>
      <pubDate>Thu, 05 Sep 2019 12:54:27 +0000</pubDate>
      <link>https://dev.to/soatokdhole/secure-automatic-updates-for-electron-apps-5blk</link>
      <guid>https://dev.to/soatokdhole/secure-automatic-updates-for-electron-apps-5blk</guid>
      <description>&lt;p&gt;There are a lot of popular desktop applications today written in Javascript and HTML, thanks to frameworks like &lt;a href="https://electronjs.org" rel="noopener noreferrer"&gt;Electron&lt;/a&gt;. The most noteworthy example that comes to mind is &lt;a href="https://streamlabs.com/streamlabs-obs" rel="noopener noreferrer"&gt;Streamlabs OBS&lt;/a&gt;, which is popular among Twitch streamers.&lt;/p&gt;

&lt;p&gt;A lot of these apps even include a self-update mechanism for ensuring users are always on a recent version of the software. However, self-updaters are a land mine (or a gold mine, depending on your perspective) of security risks.&lt;/p&gt;

&lt;p&gt;However, &lt;a href="https://dev.to/paragonie/the-case-for-automatic-updates-477a"&gt;they're definitely worth the risk&lt;/a&gt;. It's just important to do them right.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Risks Inherent to Automatic Updates
&lt;/h2&gt;

&lt;p&gt;In general, the best way to understand security risks is to &lt;strong&gt;think like a bad guy&lt;/strong&gt;, then try to outsmart yourself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsoatok.com%2Fstatic%2Fstickers%2FSoatok_STICKERPACK-HACKER.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsoatok.com%2Fstatic%2Fstickers%2FSoatok_STICKERPACK-HACKER.png" alt="Soatok hacking"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you wanted to install malware on thousands (or millions) of computers, and all of the targets you were interested in were running some software that has a self-update mechanism, wouldn't it make perfect sense to attack the update server and replace the update file with your malware?&lt;/p&gt;

&lt;p&gt;This isn't just a theoretical risk. Both &lt;a href="https://www.bleepingcomputer.com/news/security/hacker-compromised-official-phpbb-download-links" rel="noopener noreferrer"&gt;download links&lt;/a&gt; and &lt;a href="https://www.theregister.co.uk/2017/06/28/petya_notpetya_ransomware/" rel="noopener noreferrer"&gt;self-updaters&lt;/a&gt; have historically been used to spread malware in the past.&lt;/p&gt;

&lt;p&gt;Let's assume someone hacks into your update server and publishes a fake update for your app that contains their malware of choice. How can we stop them from infecting our users?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can we use cryptographic hash functions?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://dev.to/paragonie/you-wouldnt-base64-a-password-cryptography-terms-and-concepts-for-developers#download-verification"&gt;&lt;strong&gt;No!&lt;/strong&gt; Hash functions don't help us here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's a lot of "old school" ideas about download authenticity. The idea of "just verify hashes/checksums" doesn't work because &lt;em&gt;there are no secrets&lt;/em&gt; the attacker cannot access.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Isn't HTTPS (HTTP over TLS) enough?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;TLS is good, and I would argue, &lt;em&gt;necessary&lt;/em&gt; for solving this problem. But it is, in and of itself, inadequate.&lt;/p&gt;

&lt;p&gt;As the name &lt;strong&gt;T&lt;/strong&gt;ransport-&lt;strong&gt;L&lt;/strong&gt;ayer &lt;strong&gt;S&lt;/strong&gt;ecurity implies, TLS protects data in-transit. It provides no at-rest authenticity for the update file sitting on the server. If someone can hack the other endpoint, TLS doesn't help you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsoatok.com%2Fstatic%2Fstickers%2FSoatok_STICKERPACK-FACEPAW.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsoatok.com%2Fstatic%2Fstickers%2FSoatok_STICKERPACK-FACEPAW.png" alt="I know this can seem frustrating, bear with me please"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What Actually Works?
&lt;/h3&gt;

&lt;p&gt;Digital Signatures work!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsoatok.com%2Fstatic%2Femotes%2Fidea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsoatok.com%2Fstatic%2Femotes%2Fidea.png" alt="Eureka!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Digital Signatures are a class of asymmetric cryptography algorithms that compute a &lt;strong&gt;signature&lt;/strong&gt; of a &lt;strong&gt;message&lt;/strong&gt;, generated by a secret &lt;strong&gt;signing key&lt;/strong&gt; (or "private key" in Academic Speak), which can be verified by a publicly known &lt;strong&gt;verification key&lt;/strong&gt; (a.k.a. "public key").&lt;/p&gt;

&lt;p&gt;Due to the nature of asymmetric cryptography, only your signing key needs to remain secret.&lt;/p&gt;

&lt;p&gt;So what you have to do is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generate a digital signature of your update files, offline.&lt;/li&gt;
&lt;li&gt;Upload the signature alongside your update files to the update server.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And viola! Now even if someone hacks into the update server, they cannot push malware onto your users without further attacks in order to steal your signing key. If you keep this key in a computer that is never connected to the Internet, stealing it becomes prohibitively expensive for most attackers.&lt;/p&gt;

&lt;p&gt;But is a digital signature by itself adequate for developing a secure automatic update system?&lt;/p&gt;

&lt;p&gt;The experts say, "No."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://defuse.ca/triangle-of-secure-code-delivery.htm" rel="noopener noreferrer"&gt;The Triangle of Secure Code Delivery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://paragonie.com/blog/2016/10/guide-automatic-security-updates-for-php-developers" rel="noopener noreferrer"&gt;Guide to Automatic Security Updates (For PHP Developers)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://go.googlesource.com/proposal/+/master/design/25530-sumdb.md" rel="noopener noreferrer"&gt;Proposal to secure Go's module ecosystem&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That being said, digital signatures are a &lt;em&gt;fundamental&lt;/em&gt; component to any effort to secure software updates. You cannot remove them from the equation without making the system less secure.&lt;/p&gt;

&lt;p&gt;The full solution consists of each of the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Digital signatures&lt;/li&gt;
&lt;li&gt;Reproducible builds&lt;/li&gt;
&lt;li&gt;Binary transparency (a.k.a. Userbase Consistency Verification)

&lt;ul&gt;
&lt;li&gt;This uses cryptographic ledgers, but be wary of anything with "blockchain" in its sales brochure&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Transport-Layer Security (to prevent Man-in-the-Middle replay attacks to keep targeted systems vulnerable forever)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That might sound daunting, but I didn't just write this post to talk about the theory of secure automatic updates with respect to Electron apps. Experts have already talked about the problems and solutions at length before.&lt;/p&gt;

&lt;p&gt;Today, I'd like to introduce you to &lt;strong&gt;my solution to the problem&lt;/strong&gt; (which was based off &lt;a href="https://core.trac.wordpress.org/ticket/39309" rel="noopener noreferrer"&gt;the work done to secure WordPress's auto-updater&lt;/a&gt;).&lt;/p&gt;

&lt;h1&gt;
  
  
  Project Valence
&lt;/h1&gt;

&lt;p&gt;Project Valence (named after valence electrons) is my framework for self-updating Electron apps. It consists of three main projects.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://github.com/soatok/libvalence" rel="noopener noreferrer"&gt;libvalence&lt;/a&gt; is the component you would add to an existing Electron.js project in order to facilitate secure updates&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/soatok/valence-devtools" rel="noopener noreferrer"&gt;valence-devtools&lt;/a&gt; is a &lt;code&gt;npm&lt;/code&gt; package you'll want to install globally in order to package, sign, and release updates&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/soatok/valence-updateserver" rel="noopener noreferrer"&gt;valence-updateserver&lt;/a&gt; is a web application that exposes an API that the other two projects can communicate with in order to upload/download updates and signatures&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The cryptography used by Valence is &lt;a href="https://dholecrypto.com" rel="noopener noreferrer"&gt;Dhole cryptography&lt;/a&gt;, an easy-to-use libsodium wrapper.&lt;/p&gt;

&lt;p&gt;For signatures, Dhole uses Ed25519 (with an additional 256-bit random nonce to make &lt;a href="https://research.kudelskisecurity.com/2017/10/04/defeating-eddsa-with-faults/" rel="noopener noreferrer"&gt;fault attacks&lt;/a&gt; more difficult if reimplemented in embedded systems).&lt;/p&gt;

&lt;h2&gt;
  
  
  Valence Update Server
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/soatok/valence-updateserver#install--setup-instructions" rel="noopener noreferrer"&gt;install/setup instructions&lt;/a&gt; are available on Github.&lt;/p&gt;

&lt;p&gt;This exposes a REST + JSON API that the other components communicate with. In order to publish anything on the update server, you will need a publisher account and at least one project. You will need &lt;a href="https://github.com/soatok/valence-updateserver#creating-publisher-tokens" rel="noopener noreferrer"&gt;a publisher token&lt;/a&gt; to use the dev tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Valence Dev Tools
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/soatok/valence-devtools#valence-dev-tools" rel="noopener noreferrer"&gt;dev tools documentation&lt;/a&gt; fits well within the README on Github.&lt;/p&gt;

&lt;p&gt;The devtools were designed so that you can quickly run the &lt;code&gt;ship&lt;/code&gt; command to build, sign, and upload a new release all in one fell swoop, or break each step into an atomic command (i.e. to facilitate offline signatures with an airgapped machine).&lt;/p&gt;

&lt;h2&gt;
  
  
  Libvalence
&lt;/h2&gt;

&lt;p&gt;This is the meat and potatoes of this post: Making your code self-update.&lt;/p&gt;

&lt;p&gt;My goal with this project was to ensure you don't need a cryptography engineering background to set this up properly. Once you have access to an update server and the dev tools installed, the rest of the work should just be using a simple API to solve this problem.&lt;/p&gt;

&lt;p&gt;The API looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { Bond, Utility } = require('libvalence');

let bond = Bond.fromConfig(
  'Project Name',
  __dirname + "/app", // Path
  ['https://valence.example.com'],
  [] // Serialized public keys (generated by dhole-crypto)
);

/**
 * @param {string} channel
 * @param {string|null} accessToken
 */
async function autoUpdate(channel = 'public', accessToken = null) {
  if (accessToken) {
    bond.setAccessToken(accessToken);
  }
  let obj = await bond.getUpdateList(channel);
  if (obj.updates.length &amp;lt; 1) {
    // No updates available
    return;
  }
  let mirror = obj.mirror;
  let update = obj.updates.shift();
  let updateInfo = await fetch.fetchUpdate(update.url, mirror, bond.verifier);
  if (updateInfo.verified) {
    await bond.applier.unzipRelease(updateInfo);
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also &lt;a href="https://github.com/soatok/libvalence#usage" rel="noopener noreferrer"&gt;ensure all updates are published on a cryptographic ledger&lt;/a&gt;, specify your own automatic update policy (the default policy is semver: patch updates are auto-installed, minor/major updates are not).&lt;/p&gt;

&lt;p&gt;An important (but easily overlooked) feature is the concept of &lt;strong&gt;release channels&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can, from the update server, generate access tokens that have access to a specific subset of channels (e.g. &lt;code&gt;public&lt;/code&gt; and &lt;code&gt;beta&lt;/code&gt; releases but not &lt;code&gt;alpha&lt;/code&gt; or &lt;code&gt;nightly&lt;/code&gt; releases).&lt;/p&gt;

&lt;p&gt;This concept is implemented so that developers can offer exclusive access to early releases to their paid supporters (e.g. via Patreon), and bake that access directly into their automatic updates.&lt;/p&gt;

&lt;h1&gt;
  
  
  Want to Contribute?
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsoatok.com%2Fstatic%2Fstickers%2FSoatok_STICKERPACK-HEART.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsoatok.com%2Fstatic%2Fstickers%2FSoatok_STICKERPACK-HEART.png" alt="Soatok appreciates you"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All of these projects are open source on Github, but my development efforts are funded &lt;a href="https://www.patreon.com/soatok" rel="noopener noreferrer"&gt;through Patreon supporters&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I also stream most of my open source development &lt;a href="https://www.twitch.tv/soatok" rel="noopener noreferrer"&gt;on my Twitch channel&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>security</category>
      <category>node</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
