{
  "description": "Browse aymeric's, an independent, searchable archive of readable snapshots from followed feeds, preserved in Git with aggr.",
  "feed_url": "https://aggr.aymericbeaumet.com/sources/gleam.run/feed.json",
  "home_page_url": "https://aggr.aymericbeaumet.com/sources/gleam.run/",
  "items": [
    {
      "authors": [
        {
          "name": "gleam.run via novedevo"
        }
      ],
      "content_html": "<p>Gleam is a type-safe and scalable language for the Erlang virtual machine and JavaScript runtimes. Today Gleam <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/gleam-lang/gleam/releases/tag/v1.19.0\">v1.19.0</a> has been published, so let's go over what's new.</p>\n<h2>A new compilation target</h2>\n<p>Over the last few months <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/giacomocavalieri\">Giacomo Cavalieri</a> has entirely rewritten Gleam's Erlang code generator that has an entirely different design, and most notably, outputs a different format. Previously Gleam generated Erlang source code, now it generates <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.erlang.org/doc/apps/erts/absform.html\"><em>Erlang abstract forms</em></a>.</p>\n<p>&quot;Erlang abstract forms&quot; is an intermediate representation used by the Erlang compiler. It is a metadata-annotated tree that represents Erlang syntax, and it is normally produced by running Erlang's tokeniser and parser. It has a binary encoding using Erlang's <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.erlang.org/doc/apps/erts/erl_ext_dist.html\"><em>external term format</em></a>, and with this binary format we can load our generated code directly, skipping the front-half of the Erlang compiler.</p>\n<p>This new Erlang code generator brings several benefits:</p>\n<ul>\n<li>\n<p>The performance of the compiler has been improved, significantly reducing the build times for Gleam projects running on Erlang.</p>\n</li>\n<li>\n<p>The location metadata available to the runtime is now accurate to original Gleam source code, rather than to the Erlang source code the compiler would generate. This means, for example, the line numbers in BEAM crash reports and stacktraces are perfectly accurate, while previously they could be inaccurate, only pointing to the nearest function. This metadata could also enable full support for Gleam in debuggers such as <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/WhatsApp/edb\">edb</a>, though we have not done any work on this ourselves.</p>\n</li>\n<li>\n<p>The code-quality of the Gleam compiler has been improved. The Erlang code generator was one of the oldest and most stable parts of the Gleam codebase, so while it wasn't causing us any problems it wasn't conforming to the standards and conventions we have today. This new replacement is excellent, and arguably raising the bar for the compiler as whole.</p>\n</li>\n<li>\n<p>We never have to hear someone use the word &quot;transpiler&quot; as a pejorative ever again.<sup class=\"footnote-ref\"><a href=\"#fn-1\" id=\"fnref-1\" data-footnote-ref>1</a></sup></p>\n</li>\n</ul>\n<h2>Ok, so how fast is it?</h2>\n<p>I'm going to show you some numbers in a moment, but please remember that benchmarks are always contrived and never tell the full story. This data could be a good introduction or jumping-off point, but a good understanding requires the person to do further research and experience.</p>\n<p>The <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/lpil/langcompilebench\">benchmark</a> is based on José Valim's <code>langcompilebench</code> project. Thank you José! It is a measure of the time taken to compile 100 modules that each contain 100 functions that return a &quot;hello world&quot; string. This is practical as this shape of test project can be easily replicated across different languages to produce the most like-for-like test projects, but it is limited in what it can tell us as only a small subset of the features of each language get compiled. In real projects code will be greatly more varied, and different features will have different compilation costs in different languages.</p>\n<p>The first stage of the code generator rewrite was released in v1.18.0, the previous release, so let's compare v1.17.0 to the newly released v1.19.0. This chart shows the time taken to compile the benchmark project, lower is better.</p>\n<p>As you can see, a considerable improvement! This is a full build from scratch, without any caching. Gleam's compilation is incremental, so during typical development it would be much faster as it will not be compiling the entire project.</p>\n<p>The original <code>langcompilebench</code> includes only Erlang, Elixir, and Gleam, but I have extended it an assortment of other popular programming languages, to help folks get a rough feel for how fast Gleam compiles compared to a language they are familiar with. I've also included Gleam when compiling to JavaScript. Here's the results:</p>\n<p>Remember: This is a contrived benchmark and is this alone is insufficient to draw any hard conclusions about these languages. That said, these results do suggest that Gleam's compilation is nice and fast, and as a Gleam programmer I can say that Gleam development is very enjoyable, with little time spent waiting for the computer.</p>\n<h2>Why not target BEAM bytecode directly?</h2>\n<p>We have moved from from compiling from source code that is fed to the Erlang compiler to an intermediate-representation that is fed into the Erlang compiler, but why not bypass the Erlang compiler altogether? Couldn't we make a BEAM bytecode generator that outperforms the Erlang compiler? Perhaps we could also use Gleam's type information to generate more optimised code too.</p>\n<p>While it is possible to achieve these benefits, it's unlikely we would be able to. Unlike Erlang source and Erlang abstract forms, BEAM bytecode is not fixed and unchanging. Each new release of the virtual machine can evolve and improve the bytecode, adding new functionality and sometimes removing functionality that has been made redundant. We would need to commit to forever keeping up-to-date with this evolution, working closely with the Erlang maintainers to be ready for up-coming changes, and to have new versions of Gleam ready for new releases of the virtual machine. It would also be a significant effort to reproduce all the existing optimisations that have been implemented in the Erlang compiler over the decades, even with the help we might have from Gleam's more capable static analysis.</p>\n<p>Gleam is a community project supported by <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://gleam.run/sponsor/\">sponsorship</a>. We have only a fraction of the finances of languages that are backed by corporations or academic institutions, so we need to think carefully about the most efficient and sustainable ways to use our resources. Gleam is a reliable foundation for software development, every decision we make has to work for years and decades to come. Compiling to Erlang abstract forms is the cost-benefit sweet-spot for Gleam today.</p>\n<p>We're also in great company with this decision. Our much-loved older-sibling language Elixir also compiles to Erlang via abstract forms. If it's good enough for Elixir, then it's good enough for Gleam!</p>\n<p>Alright, enough about that. There's plenty more in Gleam v1.19.0 to go-over.</p>\n<h2>JavaScript decision tree assignment optimisation</h2>\n<p>It's not just the Erlang code generation that has seen some love, there's some good improvements for JavaScript too.</p>\n<p>In Gleam flow control is done with pattern matching using a <code>case</code> expression, and it gets compiled to nested <code>if</code> statements. Because pattern matching is declarative the compiler is able to reorder and optimise the runtime logic, using a divide-and-conquer approach to find the right branch as quickly as possible.</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jtdowney\">John Downey</a> has improved this process to generate flatter code, with nested <code>if</code> statements collapsed into a single condition and fewer intermediate variables. For example, take this Gleam code:</p>\n<pre><code><span class=\"code-snippet\">pub fn go(x) {\n  case x {\n    Wibble(1, 2) -&gt; 1\n    _ -&gt; 2\n  }\n}\n</span></code></pre>\n<p>Previously this small bit of Gleam would compile to this surprisingly large bit of JavaScript<sup class=\"footnote-ref\"><a href=\"#fn-2\" id=\"fnref-2\" data-footnote-ref>2</a></sup>:</p>\n<pre><code><span class=\"code-snippet\" data-language=\"CSS\"><span class=\"syntax-source syntax-css\"><span class=\"syntax-meta syntax-selector syntax-css\">export function go(x</span>) <span class=\"syntax-meta syntax-property-list syntax-css\"><span class=\"syntax-punctuation syntax-section syntax-property-list syntax-css\">{</span>\n  <span class=\"syntax-meta syntax-property-name syntax-css\">if</span> (<span class=\"syntax-meta syntax-property-name syntax-css\">is</span>W<span class=\"syntax-meta syntax-property-name syntax-css\">ibble</span>(<span class=\"syntax-meta syntax-property-name syntax-css\">x</span>)) {\n    <span class=\"syntax-meta syntax-property-name syntax-css\">let</span> $ = <span class=\"syntax-meta syntax-property-name syntax-css\">x</span>[0];\n    <span class=\"syntax-meta syntax-property-name syntax-css\">if</span> ($ === 1) {\n      <span class=\"syntax-meta syntax-property-name syntax-css\">let</span> $1 = <span class=\"syntax-meta syntax-property-name syntax-css\">x</span>[1];\n      <span class=\"syntax-meta syntax-property-name syntax-css\">if</span> ($1 === 2) {\n        <span class=\"syntax-meta syntax-property-name syntax-css\">return</span> 1;\n</span>      <span class=\"syntax-punctuation syntax-section syntax-property-list syntax-css\">}</span><span class=\"syntax-meta syntax-selector syntax-css\"> else </span><span class=\"syntax-meta syntax-property-list syntax-css\"><span class=\"syntax-punctuation syntax-section syntax-property-list syntax-css\">{</span>\n        <span class=\"syntax-meta syntax-property-name syntax-css\">return</span> 2;\n</span>      <span class=\"syntax-punctuation syntax-section syntax-property-list syntax-css\">}</span>\n    }<span class=\"syntax-meta syntax-selector syntax-css\"> else </span><span class=\"syntax-meta syntax-property-list syntax-css\"><span class=\"syntax-punctuation syntax-section syntax-property-list syntax-css\">{</span>\n      <span class=\"syntax-meta syntax-property-name syntax-css\">return</span> 2;\n</span>    <span class=\"syntax-punctuation syntax-section syntax-property-list syntax-css\">}</span>\n  }<span class=\"syntax-meta syntax-selector syntax-css\"> else </span><span class=\"syntax-meta syntax-property-list syntax-css\"><span class=\"syntax-punctuation syntax-section syntax-property-list syntax-css\">{</span>\n    <span class=\"syntax-meta syntax-property-name syntax-css\">return</span> 2;\n</span>  <span class=\"syntax-punctuation syntax-section syntax-property-list syntax-css\">}</span>\n}\n</span></span></code></pre>\n<p>But now it generates this:</p>\n<pre><code><span class=\"code-snippet\" data-language=\"CSS\"><span class=\"syntax-source syntax-css\"><span class=\"syntax-meta syntax-selector syntax-css\">export function go(x</span>) <span class=\"syntax-meta syntax-property-list syntax-css\"><span class=\"syntax-punctuation syntax-section syntax-property-list syntax-css\">{</span>\n  <span class=\"syntax-meta syntax-property-name syntax-css\">if</span> (<span class=\"syntax-meta syntax-property-name syntax-css\">is</span>W<span class=\"syntax-meta syntax-property-name syntax-css\">ibble</span>(<span class=\"syntax-meta syntax-property-name syntax-css\">x</span>) &amp;&amp; <span class=\"syntax-meta syntax-property-name syntax-css\">x</span>[0] === 1 &amp;&amp; <span class=\"syntax-meta syntax-property-name syntax-css\">x</span>[1] === 2) {\n    <span class=\"syntax-meta syntax-property-name syntax-css\">return</span> 1;\n</span>  <span class=\"syntax-punctuation syntax-section syntax-property-list syntax-css\">}</span><span class=\"syntax-meta syntax-selector syntax-css\"> else </span><span class=\"syntax-meta syntax-property-list syntax-css\"><span class=\"syntax-punctuation syntax-section syntax-property-list syntax-css\">{</span>\n    <span class=\"syntax-meta syntax-property-name syntax-css\">return</span> 2;\n</span>  <span class=\"syntax-punctuation syntax-section syntax-property-list syntax-css\">}</span>\n}\n</span></span></code></pre>\n<p>A nice improvement, I'm sure you'll agree! Surprisingly this makes little-to-no change to the size of code bundles once minified and compressed (gzip really is magic), but the resulting code has fewer branches for JavaScript engines to optimise.</p>\n<p>Thank you John!</p>\n<h2>List literal optimisation</h2>\n<p>While they share a syntax in their respective languages, Gleam's immutable persistent list type is not the same as the JavaScript mutable contiguous array type. When Gleam code is compiled to JavaScript any list literal has to be compiled to JavaScript code that constructs the runtime data structures. For example, take this Gleam code:</p>\n<pre><code><span class=\"code-snippet\">let numbers = [1, 2, 3]\n</span></code></pre>\n<p>This would compile to JavaScript code<sup class=\"footnote-ref\"><a href=\"#fn-2\" id=\"fnref-2-2\" data-footnote-ref>2</a></sup> like this, where a JavaScript array is constructed and passed to a function to convert it to a Gleam list.</p>\n<pre><code><span class=\"code-snippet\">const numbers = arrayToList([1, 2, 3])\n</span></code></pre>\n<p>With this release the compile will now generate different code for short list literals, generating more direct code that does not convert from an array.</p>\n<pre><code><span class=\"code-snippet\">const numbers = prepend(1, prepend(2, prepend(3, empty)))\n</span></code></pre>\n<p>With modern JavaScript engines this results in a nice performance improvement, and it is especially impactful for projects that use lots of short lists, like those using the <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://lustre.hexdocs.pm\">Lustre</a> library. We recorded no improvement for longer lists, so the array-to-list approach is still used for those.</p>\n<p>Thank you <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/giacomocavalieri\">Giacomo Cavalieri</a> for this!</p>\n<h2>TypeScript API overloads</h2>\n<p>When compiling to JavaScript the Gleam compiler will also generate <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://gleam.run/documentation/externals/#Gleam-data-in-JavaScript\">functions</a> for working with the programmer-defined data structures from JavaScript. Alongside this the compiler can also provide TypeScript declaration files, enabling full integration between TypeScript and Gleam in a single project.</p>\n<p>One of the functions provided for each custom type is a function to check whether a value is a particular variant or not. For example, given the following type:</p>\n<pre><code><span class=\"code-snippet\">pub type Box(value) {\n  Full(value)\n  Empty\n}\n</span></code></pre>\n<p>The generated function would have this TypeScript declaration:</p>\n<pre><code><span class=\"code-snippet\">export function Box$isFull(value: any): value is Full&lt;unknown&gt;;\n</span></code></pre>\n<p>The keen-eyed TypeScript programmer readers may notice a problem here. If the value is already known to be of type <code>Box&lt;number&gt;</code>, then this function can be used to refine the container type to <code>Full</code>, but the type parameter of <code>number</code> is generalised to <code>unknown</code>, causing type information loss. This is very cumbersome.</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/giacomocavalieri\">Giacomo Cavalieri</a> has added an overload to the definition, so the type is preserved whenever possible.</p>\n<pre><code><span class=\"code-snippet\" data-language=\"JavaScript\"><span class=\"syntax-source syntax-js\"><span class=\"syntax-meta syntax-export syntax-js\"><span class=\"syntax-keyword syntax-control syntax-import-export syntax-js\">export</span> <span class=\"syntax-variable syntax-other syntax-readwrite syntax-js\">function</span> </span><span class=\"syntax-variable syntax-other syntax-readwrite syntax-js\">Box$isFull</span><span class=\"syntax-keyword syntax-operator syntax-relational syntax-js\">&lt;</span><span class=\"syntax-variable syntax-other syntax-constant syntax-js\">I</span><span class=\"syntax-keyword syntax-operator syntax-relational syntax-js\">&gt;</span><span class=\"syntax-meta syntax-group syntax-js\"><span class=\"syntax-punctuation syntax-section syntax-group syntax-js\">(</span><span class=\"syntax-variable syntax-other syntax-readwrite syntax-js\">value</span>: <span class=\"syntax-variable syntax-other syntax-readwrite syntax-js\">Box$</span><span class=\"syntax-keyword syntax-operator syntax-relational syntax-js\">&lt;</span><span class=\"syntax-variable syntax-other syntax-constant syntax-js\">I</span><span class=\"syntax-keyword syntax-operator syntax-relational syntax-js\">&gt;</span><span class=\"syntax-invalid syntax-illegal syntax-stray-bracket-end syntax-js\">)</span>: <span class=\"syntax-variable syntax-other syntax-readwrite syntax-js\">value</span> <span class=\"syntax-variable syntax-other syntax-readwrite syntax-js\">is</span> <span class=\"syntax-variable syntax-other syntax-readwrite syntax-js\">Full</span><span class=\"syntax-keyword syntax-operator syntax-relational syntax-js\">&lt;</span><span class=\"syntax-variable syntax-other syntax-constant syntax-js\">I</span><span class=\"syntax-keyword syntax-operator syntax-relational syntax-js\">&gt;</span>;\n<span class=\"syntax-variable syntax-other syntax-readwrite syntax-js\">export</span> <span class=\"syntax-meta syntax-function syntax-declaration syntax-js\"><span class=\"syntax-storage syntax-type syntax-function syntax-js\">function</span> <span class=\"syntax-entity syntax-name syntax-function syntax-js\">Box$isFull</span><span class=\"syntax-punctuation syntax-section syntax-group syntax-begin syntax-js\">(</span><span class=\"syntax-variable syntax-parameter syntax-function syntax-js\">value</span>: <span class=\"syntax-variable syntax-parameter syntax-function syntax-js\">any</span><span class=\"syntax-punctuation syntax-section syntax-group syntax-end syntax-js\">)</span></span>: <span class=\"syntax-variable syntax-other syntax-readwrite syntax-js\">value</span> <span class=\"syntax-variable syntax-other syntax-readwrite syntax-js\">is</span> <span class=\"syntax-variable syntax-other syntax-readwrite syntax-js\">Full</span><span class=\"syntax-keyword syntax-operator syntax-relational syntax-js\">&lt;</span><span class=\"syntax-variable syntax-other syntax-readwrite syntax-js\">unknown</span><span class=\"syntax-keyword syntax-operator syntax-relational syntax-js\">&gt;</span>;\n</span></span></span></code></pre>\n<p>Thank you Giacomo!!</p>\n<h2>Improvements for other build tools</h2>\n<p>Gleam users will typically use the official build tool that is part of the <code>gleam</code> executable, but sometimes folks will want to compile and use Gleam code in other contexts. For example, an Elixir or Erlang programmer may want to use a dependency package that is written in Gleam. This works fantastically at runtime as these three BEAM languages have excellent zero-cost interop, but getting to this point can be tricky, as Elixir and Erlang's main build tools do not have built-in support for Gleam.</p>\n<p>The <code>gleam</code> executable offers several commands that expose compiler functionality, for use by other build tools. This release includes several improvements to these commands, with the intent of getting Gleam support in Elixir's Mix and Erlang's rebar3.</p>\n<p>The Erlang virtual machine requires all packages too have a <code>.app</code> resource file along with the compiler bytecode. Previously these Gleam-supporting build tools would be expected to provide these, but now <code>gleam</code> will generate the files for them when compiling to BEAM.</p>\n<p>The <code>compile-package</code> command gains a <code>--no-dev</code> flag, which will have the compiler only load code from the <code>src</code> directory and to skip packages listed as <code>dev_dependencies</code>.</p>\n<p>The <code>export package-information</code> and <code>export package-interface</code> commands can now print their information to stdout, while previously they would have to write to a file. Alongside that, the <code>export javascript-prelude</code> and <code>export typescript-prelude</code> commands can now write to a file.</p>\n<p>Thank you <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Papipo\">Rodrigo Álvarez</a> for these additions! Hopefully we will see Gleam support in Elixir's Mix build tool soon.</p>\n<h2>Language server label support</h2>\n<p>Gleam has an excellent language server built-in, providing IDE functionality to all editors that support the language server protocol. Possibly the last piece of major functionality was full support for labels of fields and arguments. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/alii\">Alistair Smith</a> has fixed this, adding support for go-to-definition, find-references and renaming of labels! Thank you Alistair, I know many people will be absolutely delighted by this time-saving feature.</p>\n<h2>Formatting Gleam code in the browser</h2>\n<p>There is a WebAssembly build of the compiler, used by <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://tour.gleam.run\">the language tour</a> and <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://playground.gleam.run\">the playground</a> to compile Gleam in the web browser. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jtdowney\">John Downey</a> has added a new <code>format_source</code> function, enabling people to run the Gleam code formatter inside the browser. We will add this functionality to the playground in the near future. Thank you John!</p>\n<h2>As always, better error messages</h2>\n<p>Making error messages as clear and as helpful as possible is very important to us. It's all very well for a tool to be nice to use when things are going well, it is when things are going badly that the experience can really help or hurt the programmer's stress levels.</p>\n<p>Small accidental syntax errors can be a pain, especially if you're not sure what and where the mistake is.</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/0xda157\">0xda157</a> has added a special error for when a git merge conflict marker is found in the code, and another for when the <code>User(..lucy, score: 10)</code> record update syntax is written with the original record in the wrong position like <code>User(score: 10, ..lucy)</code>. She has also added an errors for procedural operators that do not exist in Gleam, such as <code>+=</code> and <code>*=</code>.</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/n0kk23\">n0kk23</a> has added a custom helpful error message for when <code>|</code> is used in pattern matching in a way that is not valid syntax in Gleam, but is valid in other languages, such as Java.</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/giacomocavalieri\">Giacomo Cavalieri</a> has added a helpful error message for binary operators that are not permitted in constant expressions, and at the same time he has improved the fault tolerance<sup class=\"footnote-ref\"><a href=\"#fn-3\" id=\"fnref-3\" data-footnote-ref>3</a></sup> of the compiler in the presence of these mistakes.</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ankddev\">Andrey Kozhev</a> has added extra context to the error message for when a module tries to use a private type or value from another module within the same package, letting them know that while it does exist, it is private. We do not offer this for modules from dependency packages, to avoid leaking information about code the programmer does not maintain.</p>\n<p>And lastly, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jamesdolan16\">James Dolan</a> has improved the type checker such that an invalid type alias definition can no longer cause a cascade of further errors through all usages of the alias.</p>\n<p>Thank you all for making Gleam debugging easier and easier.</p>\n<h2>And the rest</h2>\n<p>And thank you to the bug fixers and experience polishers:</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/0xda157\">0xda157</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Amrkadry\">Amr Kadry</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ankddev\">Andrey Kozhev</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/giacomocavalieri\">Giacomo Cavalieri</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/seafoamteal\">Hari Mohan</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ian-h-chamberlain\">Ian Chamberlain</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jackprogramsjp\">Jack Programs</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jtdowney\">John Downey</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/khalidbelk\">Khalid Belkassmi E.H.</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/lillianrubyrose\">Lillian Rose</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/strawmelonjuice\">Mar Bloeiman</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/mmustafasenoglu\">mmustafasenoglu</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/naomieow\">Naomi Roberts</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Papipo\">Rodrigo Álvarez</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ssenthilnathan3\">Senthilnathan</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/GearsDatapacks\">Surya Rose</a>, and <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/absolutely-vivid\">Vivid</a>.</p>\n<p>For full details of the many fixes and improvements they've implemented see <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/gleam-lang/gleam/blob/main/changelog/v1.19.md\">the changelog</a>.</p>\n<h2>A call for support</h2>\n<p>Gleam is not owned by a corporation; instead it is entirely supported by sponsors, most of which contribute between $5 and $20 USD per month, and Gleam is my sole source of income.</p>\n<p>We have made great progress towards our goal of being able to appropriately pay the core team members, but we still have further to go. Please consider supporting <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://gleam.run/sponsor/\">the project or core team members</a>.</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/sponsors/gleam-lang\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://gleam.run/images/community/github.svg\" alt=\"GitHub Sponsors\" loading=\"eager\" decoding=\"async\" fetchpriority=\"high\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></a></p>\n<p>Thank you to all our sponsors! And special thanks to our top sponsor:</p>\n<ul>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ninanomenon\"># &lt;h1&gt;NinaLovesToPutLongTextIntoNameFields.GitHubNamesArePrettyFun(IThinkThereAreOnlyAFewAnnoyingBugsAndOneFormThatStoppedWorkingCompletely).AnywayCheckOutGleam!ItIsAReallyCoolLanguageWithALovelyCommunity.BLM!CovidIsNotOver!TransRightsAreHumanRights!&lt;/h1&gt;</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/0xda157\">0xda157</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/aazuspan\">Aaron Zuspan</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/abeljim\">Abel Jimenez</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/aboio-labs\">Aboio</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/AdamBrodzinski\">Adam Brodzinski</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/adam12\">Adam Daniels</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/adjohnston\">Adam Johnston</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/thebugcatcher\">Adi Iyengar</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/amouat\">Adrian Mouat</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/JitPackJoyride\">Ajit Krishna</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/albertchae\">albertchae</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Guria\">Aleksei Gurianov</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ahouseago\">Alex Houseago</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/adkelley\">Alex Kelley</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/rawhat\">Alex Manning</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/muonoum\">Alexander Stensrud</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/defgenx\">Alexandre Del Vecchio</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/GomZik\">Aliaksiej Homza</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/alii\">Alistair Smith</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ankddev\">Andrey</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/andremw\">André Mazoni</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ayoung19\">Andy Young</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/amscotti\">Anthony Scotti</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/afarinetti\">Antonio Farinetti</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/arconyx\">ArcOnyx</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/aweagel\">Arthur Weagel</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/artob\">Arto Bendiken</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/aryairani\">Arya Irani</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/atuinsh\">Atuin</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/chiroptical\">Barry Moore II</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/requestben\">Ben Martin</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/bbkane\">Benjamin Kane</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/drteeth\">Benjamin Moss</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/bgwdotdev\">bgw</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Billuc\">Billuc</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/blurrcat\">blurrcat</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/bmehder\">Brad Mehder</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/brettcannon\">Brett Cannon</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/brettkolodny\">Brett Kolodny</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/bglusman\">Brian Glusman</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/bruce\">Bruce Williams</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/brunoskonrad\">Bruno Konrad</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/bucsi\">bucsi</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/csfalcione\">Caleb Falcione</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/cameronpresley\">Cameron Presley</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/carlomunguia\">Carlo Munguia</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/csaltos\">Carlos Saltos</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/chadselph\">Chad Selph</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/choonkeat\">Chew Choon Keat</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/chrislloyd\">Chris Lloyd</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/utilForever\">Chris Ohk</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/cvincent\">Chris Vincent</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/veeso\">Christian Visintin</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/devries\">Christopher De Vries</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/christhekeele\">Christopher Keele</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/CliffordAnderson\">Clifford Anderson</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/coder\">Coder</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/colelawrence\">Cole Lawrence</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Comamoca\">Comamoca</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Lucostus\">Constantin (Cleo) Winkler</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jcorentin\">Corentin J.</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/charlie-n01r\">Cyphernil</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/dagi3d\">dagi3d</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/d2718\">Dan</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ddresselhaus\">Dan Dresselhaus</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Giesch\">Dan Gieschen Knutson</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/danpiths\">Dan Piths</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/strongoose\">Dan Strong</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/lupodevelop\">Daniele</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/daniellionel01\">daniellionel01</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ndan\">Daniil Nevdah</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/pinnet\">Danny Arnold</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/despairblue\">Danny Martini</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/dar5hak\">Darshak Parikh</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/dbernheisel\">David Bernheisel</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/davidcornu\">David Cornu</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/dpen2000\">David Pendray</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/diemogebhardt\">Diemo Gebhardt</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/djordjedjukic\">Djordje Djukic</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/dbanty\">Dylan Anthony</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/gdcrisp\">Dylan Carlson</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/EdRW\">Ed Rosewright</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/lostbean\">Edgar Gomes</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/edongashi\">Edon Gashi</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/enoonan\">Eileen Noonan</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/eleinah\">Eleina Mironia</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ekosz\">Eric Koslow</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Nimok\">Erik Ohlsson</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/eterps\">Erik Terpstra</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://liberapay.com/erikareads/\">erikareads</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ErikML\">ErikML</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/erlend-axelsson\">erlend-axelsson</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/oberernst\">Ernesto Malave</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/EthanOlpin\">Ethan Olpin</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/evaldobratti\">Evaldo Bratti</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/evanj2357\">Evan Johnson</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/evanasse\">evanasse</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/fabridamicelli\">Fabrizio Damicelli</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/fpauser\">Falk Pauser</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/fmesteban\">Fede Esteban</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Fei-Sheng-Wu\">FeiShengWu</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/yerTools\">Felix</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/bird-dancer\">Felix Dumbeck</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ffigiel\">Filip Figiel</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/floriank\">Florian Kraft</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/francishamel\">Francis Hamel</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Frank-III\">frankwang</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/gvrooyen\">G-J van Rooyen</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/gabriela-sartori\">Gabriela Sartori</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/GearsDatapacks\">Gears</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/gahjelle\">Geir Arne Hjelle</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/giacomocavalieri\">Giacomo Cavalieri</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ginkogruen\">ginkogruen</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/giovannibonetti\">Giovanni Kock Bonetti</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/YoyoSaur\">Grant Everett</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/graphiteisaac\">graphiteisaac</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Ummon\">Greg Burri</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Guflly\">Guflly</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/nirev\">Guilherme de Maio</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/guillheu\">Guillaume Heu</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/kwando\">Hannes Nevalainen</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/oderwat\">Hans Raaf</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/seafoamteal\">Hari Mohan</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/HarryET\">Harry Bairstow</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/hibachrach\">Hazel Bachrach</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/hdahlheim\">Henning Dahlheim</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/tudborg\">Henrik Tudborg</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/henrysdev\">Henry Warren</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/losfair\">Heyang Zhou</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://liberapay.com/Hizuru3/\">Hizuru3</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/hubertmalkowski\">Hubert Małkowski</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/iainh\">Iain H</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ian-h-chamberlain\">Ian Chamberlain</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Ian-GL\">Ian González</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/igordsm\">Igor Montagner</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ImmemorConsultrixContrarie\">ImmConCon</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/inoas\">inoas</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/imcquee\">Isaac McQueen</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/iskrisis\">iskrisis</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ivarvong\">Ivar Vong</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jachin\">Jachin Rupe</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jvalinsky\">Jack Valinsky</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jackprogramsjp\">JackProgramsJP</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jakecleary\">Jake Cleary</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jzwood\">Jake Wood</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jamesdolan16\">James</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jamesbirtles\">James Birtles</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jamesmacaulay\">James MacAulay</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/janvhs\">Jan Fooken</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/janpieper\">Jan Pieper</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/monzool\">Jan Skriver Sørensen</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/hypirion\">Jean Niklas L'orange</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/MightyGoldenOctopus\">Jean-Adrien Ducastaing</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jlgeering\">Jean-Luc Geering</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/okkdev\">Jen Stehlik</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/shepherdjerred\">Jerred Shepherd</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/joeykilpatrick\">Joey Kilpatrick</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/joeytrapp\">Joey Trapp</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/johan-st\">Johan Strand</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/joladev\">Johanna Larsson</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/JohnBjrk\">John Björk</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jtdowney\">John Downey</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jrstrunk\">John Strunk</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/xjojorx\">Jojor</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jmcharter\">Jon Charter</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jonlambert\">Jon Lambert</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/igern\">Jonas E. P</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/JonasHedEng\">Jonas Hedman Engström</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jooaf\">jooaf</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/joshocalico\">Joshua Steele</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/czepluch\">jstcz</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/nineluj\">Julian Hirn</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://liberapay.com/d2quadra/\">Julian Lukwata</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/schurhammer\">Julian Schurhammer</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/justinlubin\">Justin Lubin</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Neofox\">Jérôme Schaeffer</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jorg1piano\">Jørgen Andersen</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Kamila-P\">KamilaP</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jkbrinso\">Kemp Brinson</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/keroami\">Kero van Gelder</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/kevinschweikert\">Kevin Schweikert</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/khalidbelk\">khalidbelk</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Aurenos\">Kile Deal</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/kirillmorozov\">Kirill Morozov</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/bytesofpie\">Kramer Hampton</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/krig\">Kristoffer Grönlund</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://liberapay.com/krig/\">Kristoffer Grönlund</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/krzysztofgb\">Krzysztof Gasienica-Bednarz</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/km-tr\">Kuma Taro</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jly36963\">Landon</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/leah-u\">Leah Ulmschneider</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/rcoder\">Lennon Day-Reynolds</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/leonqadirie\">Leon Qadirie</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/LeartS\">Leonardo Donelli</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/lexx27\">Lexx</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/defp\">lidashuang</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/lillianrubyrose\">Lillian Rose</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/lbjarre\">Lukas Bjarre</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/lamdor\">Luke Amdor</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/manuel-rubio\">Manuel Rubio</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/mariuskalvo\">Marius Kalvø</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/markholmes\">Mark Holmes</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/markmark206\">Mark Markaryan</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/m4reko\">Markus Wesslén</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/martinfojtik\">Martin Fojtík</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Janiczek\">Martin Janiczek</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/poelstra\">Martin Poelstra</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/rechsteiner\">Martin Rechsteiner</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/matiascr\">matiascr</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/mhheise\">Matt Heise</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/m\">Matt Mullenweg</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/matt-savvy\">Matt Savoia</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/mattvanhorn\">Matt Van Horn</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/matthewj-dev\">Matthew Jackson</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/mxdvl\">Max Duval</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/maxmcd\">Max McDonnell</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/metatexx\">METATEXX GmbH</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/mgruen\">Michael G</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/michaeljones\">Michael Jones</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/monocursive\">Michael Mazurczak</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/tymak\">Michal Timko</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/karlsson\">Mikael Karlsson</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/mroach\">Mike Roach</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://liberapay.com/mikej/\">Mikey J</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Nicd\">Mikko Ahlroth</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/strawmelonjuice\">MLC Bloeiman</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/MoeDevelops\">MoeDev</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://liberapay.com/mhm/\">Moin</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/mmustafasenoglu\">Mustafa Senoglu</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ngscheurich\">N. G. Scheurich</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/n0kk23\">n0kk23</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/n8nio\">n8n - Workflow Automation</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/naomieow\">Naomi Roberts</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/nataliethistime\">Natalie Rose</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/nessamurmur\">Nessa Jane Marin</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/nick-leslie\">Nick Leslie</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/spacerumsfeld-code\">Nick Papadakis</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/NicklasXYZ\">Nicklas Sindlev Andersen</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/NicoVIII\">NicoVIII</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Resonious\">Nigel Baillie</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/mrniket\">Niket Shah</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/blink1415\">Nikolai Steen Kjosnes</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Willyboar\">Nikolas</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"http://www.ninefx.com\">NineFX</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/nomio\">Nomio</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/nunulk\">nunulk</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/osebelin\">Olaf Sebelin</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/OldhamMade\">OldhamMade</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/CanadaHonk\">Oliver Medhurst</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/otosky\">Oliver Tosky</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ollie-dot-earth\">ollie</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/optizio\">Optizio</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://liberapay.com/P./\">P.</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Davorak\">Patrick Wheeler</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/pguse\">Paul Guse</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Tulkdan\">Pedro Correa</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/petejodo\">Pete Jodo</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/pvsr\">Peter Rice</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/philpax\">Philpax</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/qdentity\">Qdentity</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/rykawamu\">R.Kawamura</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/raquentin\">Race</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/rdmchr\">Radmacher</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/stoft\">Rasmus</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/chouzar\">Raúl Chouza</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/yoshi-monster\">rebecca</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/redmar\">Redmar Kerkhoff</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/reillysiemens\">Reilly Tucker Siemens</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/renatomassaro\">Renato Massaro</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/renovatorruler\">Renovator</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/rico\">Rico Leuthold</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/rinx\">Rintaro Okamura</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ripta\">Ripta Pasay</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/robertDurst\">Rob Durst</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/TanklesXL\">Robert Attard</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/rellen\">Robert Ellen</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/malkomalko\">Robert Malko</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ilovept\">Rocka Nutrition GmbH</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Papipo\">Rodrigo Álvarez</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/genericrohan\">Rohan</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/rotabull\">Rotabull</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/reinefjord\">Rupus Reinefjord</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ustitc\">Ruslan Ustitc</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/rclarey\">Russell Clarey</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/sbergen\">Sakari Bergen</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/samaaron\">Sam Aaron</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/bkspace\">Sammy Isseyegh</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/castletaste\">Savva</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/sasa1977\">Saša Jurić</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/scotttrinh\">Scott Trinh</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/scottwey\">Scott Wey</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/seancribbs\">Sean Cribbs</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Seangle\">Sean van den Eijnden</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/sporto\">Sebastian Porto</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ssenthilnathan3\">Senthilnathan</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/tehprofessor\">Seve Salazar</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Sgregory42\">Sgregory42</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/codemonkey76\">Shane Poppleton</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/shawndrape\">Shawn Drape</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/shunjilin\">Shunji Lin</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/shxdow\">shxdow</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/sigmasternchen\">Sigma</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/simonewebdesign\">simone</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/bytesource\">Stefan</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/steinareliassen\">Steinar Eliassen</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/stephanerangaya\">Stephane Rangaya</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Strandinator\">Strandinator</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/slafs\">Sławomir Ehlert</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/thomaswhyyou\">Thomas</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/tcoopman\">Thomas Coopman</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/trescenzi\">Thomas Crescenzi</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/tmbrwn\">Tim Brown</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/timgluz\">Timo Sulg</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/betabrain\">Tobias Ammann</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/vemolista\">Tomas Vemola</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/tomekowal\">Tomasz Kowal</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/tommaisey\">tommaisey</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/tsloughter\">Tristan Sloughter</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/tudorluca\">Tudor Luca</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/upsidedownsweetfood\">upsidedowncake</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/bondiano\">Vassiliy Kuzenkov</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/PerpetualPossum\">Viv Verner</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/absolutely-vivid\">Vivid</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/yelps\">Volker Rabe</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/vshakitskiy\">vshakitskiy</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/willramirezdev\">Will Ramirez</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ghostdevv\">Willow (GHOST)</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/HymanZHAN\">Xucong Zhan</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/yamen\">Yamen Sader</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Yasuo-Higano\">Yasuo Higano</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/zwubs\">ZWubs</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://liberapay.com/~1814730/\">~1814730</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://liberapay.com/~1847917/\">~1847917</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://liberapay.com/~1867501/\">~1867501</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/eberfreitas\">Éber Freitas Dias</a></li>\n</ul>\n<section class=\"footnotes\" data-footnotes>\n<ol>\n<li id=\"fn-1\">\n<p>&quot;Transpiler&quot; means a compiler that outputs a human-readable format, such as source code. It's a cool sounding word, but most the time people use it to imply that a given compiler is in some way inferior. This is very silly, as there is nothing about compiling to a human-readable format that makes a compiler easier to implement. If you care about that output being nicely formatted it might even be harder than using a binary format. <a href=\"#fnref-1\" class=\"footnote-backref\" data-footnote-backref data-footnote-backref-idx=\"1\" aria-label=\"Back to reference 1\">↩</a></p>\n</li>\n<li id=\"fn-2\">\n<p>The code has been slightly edited for clarity, but the parts related to this improvement are unchanged. <a href=\"#fnref-2\" class=\"footnote-backref\" data-footnote-backref data-footnote-backref-idx=\"2\" aria-label=\"Back to reference 2\">↩</a> <a href=\"#fnref-2-2\" class=\"footnote-backref\" data-footnote-backref data-footnote-backref-idx=\"2-2\" aria-label=\"Back to reference 2-2\">↩<sup class=\"footnote-ref\">2</sup></a></p>\n</li>\n<li id=\"fn-3\">\n<p>Gleam's compiler is the heart of the Gleam language server, so unlike traditional compilers it needs to be able to provide information about code even when it is in invalid state. If only valid code could be fully analysed then the language server would provide a degraded experience to the programmer when they are half-way-through a refactoring or other large edit. <a href=\"#fnref-3\" class=\"footnote-backref\" data-footnote-backref data-footnote-backref-idx=\"3\" aria-label=\"Back to reference 3\">↩</a></p>\n</li>\n</ol>\n</section>\n",
      "date_modified": "2026-10-05T17:29:17+00:00",
      "date_published": "2026-10-05T17:29:17+00:00",
      "external_url": "https://gleam.run/news/gleam-doesnt-compile-to-erlang-source-anymore/",
      "id": "urn:aggr:item:90fcd67fb0fb68b2c95fded13b2aebd042422515",
      "summary": "Comments",
      "tags": [
        "news",
        "compilers",
        "erlang",
        "gleam"
      ],
      "title": "Gleam doesn't compile to Erlang source anymore",
      "url": "https://aggr.aymericbeaumet.com/items/lobste-rs/2026-10-05-gleam-doesn-t-compile-to-erlang-source-anymore/"
    }
  ],
  "language": "en",
  "title": "gleam.run",
  "version": "https://jsonfeed.org/version/1.1"
}