<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Brenner Cruvinel - benchmark</title>
    <subtitle>AI researcher and product designer building at the edge of computer science and mental health.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://brennercruvinel.blog/en/tags/benchmark/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://brennercruvinel.blog"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-09-12T00:00:00+00:00</updated>
    <id>https://brennercruvinel.blog/en/tags/benchmark/atom.xml</id>
    <entry xml:lang="en">
        <title>Validating on disk the benchmark I wrote in the middle of the night</title>
        <published>2026-09-12T00:00:00+00:00</published>
        <updated>2026-09-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            Brenner Cruvinel
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://brennercruvinel.blog/en/blog/validando-no-disco-o-benchmark-que-escrevi-de-madrugada/"/>
        <id>https://brennercruvinel.blog/en/blog/validando-no-disco-o-benchmark-que-escrevi-de-madrugada/</id>
        
        <content type="html" xml:base="https://brennercruvinel.blog/en/blog/validando-no-disco-o-benchmark-que-escrevi-de-madrugada/">&lt;p&gt;I opened a new session, with no context at all, and asked as if I were someone who had just cloned the repo: how do you use Nest, does it have an interface? The first command the answer suggested returned &lt;code&gt;command not found&lt;/code&gt; on my own machine. The second one showed a default model I was sure I had swapped out weeks earlier. Two holes no test catches, found in five minutes, and that&#39;s when I realized the topic of the week wasn&#39;t compression.&lt;/p&gt;
&lt;p&gt;The benchmark was just the place where it became visible. So, before publishing any number from the &lt;a href=&quot;https://brennercruvinel.blog/en/blog/nest-archiver-de-cartas-de-magic/&quot;&gt;series&lt;/a&gt;, I spent a whole day validating: every number against the file on disk.&lt;/p&gt;
&lt;h2 id=&quot;what-was-wrong&quot;&gt;What was wrong&lt;/h2&gt;
&lt;p&gt;The first thing that didn&#39;t match wasn&#39;t even a number. I ran &lt;code&gt;strings&lt;/code&gt; on the release file and out came &quot;Spellbook MTG corpus&quot;. The file is called mtgdataset. The rename from a week earlier, which swapped Felipe&#39;s app name for the generic name in every text file, never made it into the binary. The lock next to the release described a file with the new name while the file had the old name inside, and no tool flagged it, because validation checks the file against itself. I rebuilt both releases with the right name inside, and the media bytes came out identical, which at least proved the encode is reproducible.&lt;/p&gt;
&lt;p&gt;The sizes of the three most aggressive builds were in mebibytes labeled as gigabytes. &lt;code&gt;du&lt;/code&gt; talks in MiB and I pasted it as GB. The difference is five percent per row, but the ratio inherits the error: the search build I had announced as 7.8 times smaller than the source is 7.5. The AVIF I said was 20% smaller than the recommended build is 13%. No conclusion changes, and it still made me ashamed, because it&#39;s the kind of mistake I&#39;d point out in someone else&#39;s report.&lt;/p&gt;
&lt;p&gt;The strangest one was the manifest of the AVIF build, which records a 21 GB source. The source is 4. I couldn&#39;t make sense of it until I divided by the number of cards: it gives the size of an uncompressed image, which is what the encoder receives midway through. The backend counted the intermediate instead of the JPEG. One line to fix, one test to write, and until then the ratio in that manifest was made up.&lt;/p&gt;
&lt;p&gt;And there&#39;s what can no longer be verified. I deleted the first full build when the disk filled up, so the sentence &quot;the three builds share the same hash&quot; is now two-thirds checkable. The CapCut experiment and the reprint matrix left no artifacts, only text. I told it to delete them myself, to free up space. Disk space is cheaper than trust and I should have known that.&lt;/p&gt;
&lt;h2 id=&quot;the-other-times-i-read-the-summary-and-not-the-file&quot;&gt;The other times I read the summary and not the file&lt;/h2&gt;
&lt;p&gt;The 200-card summary. I asked for the whole dataset, got a summary that talked about the corpus as if it were the corpus, and it was a pilot. I noticed with a meeting already scheduled. The agent didn&#39;t lie, it summarized the scope without saying so, and I read the summary instead of the disk. Since then every build delivery comes with validation of the real file, and this post exists for the same reason.&lt;/p&gt;
&lt;p&gt;My machine&#39;s paths. Days after the benchmark I found my home directory path in dozens of files headed for GitHub, inside manifests, locks, specs. The fix was an environment variable and a script that rewrites the sidecars before committing. And before that the agent had wanted to store my preferences in a local memory file. I asked it to delete it. If the workflow depends on what it remembers about my machine, it won&#39;t run in the next repo, and it won&#39;t run on the machine of whoever clones it.&lt;/p&gt;
&lt;p&gt;The five-gig repo. At some point I asked how ML engineers deal with this, because GitHub won&#39;t take it. The answer I adopted: not a single image byte goes into git. Each sample is a list of ids with the rule that generated it, and whoever has the SQLite database rebuilds the exact sample. The &lt;code&gt;.nest&lt;/code&gt; files go to Hugging Face with a hash alongside, and the repo keeps the lock, the clean manifest and the hash. The whole report is generated from each experiment&#39;s JSON, and a CI check fails if the markdown differs from the JSON. I can no longer paste a wrong number into a report without CI complaining, which is the kind of protection I needed against myself.&lt;/p&gt;
&lt;p&gt;The commits. The agent prefers one fat commit at the end of the day. I asked for sixteen, separate, with descriptions, because the history has to be readable for whoever comes later. And the plans: I rejected three in a row because they treated the model comparison as a footnote to a build already decided. The model list that exists in Nest today only exists because I insisted that research becomes a feature, never a footnote.&lt;/p&gt;
&lt;p&gt;What these episodes have in common is just one thing: in all of them I accepted a layer between me and the file. Summary, manifest, memory, fat commit. And the layer was wrong and didn&#39;t say so.&lt;/p&gt;
&lt;h2 id=&quot;what-i-ll-try-next-time&quot;&gt;What I&#39;ll try next time&lt;/h2&gt;
&lt;p&gt;Something that put me more at ease, in the middle of the validation, was finding out that the two findings I liked most already had names. The redundancy between images in a collection, which inter exploits, has been called set redundancy since &lt;a rel=&quot;external&quot; href=&quot;https://repository.lsu.edu/gradschool_disstheses/6258/&quot;&gt;Kosmas Karadimitriou&#39;s 1996 doctoral thesis&lt;/a&gt;, and the trick of lining images up as a pseudo-video has a decade of literature behind it. And the distinction between visual quality, vector stability and search usefulness, which I thought I had invented, is everyday business in the field the standards call coding for machines: it evaluates with task metrics, like mAP, precisely because &lt;a rel=&quot;external&quot; href=&quot;https://arxiv.org/abs/2110.09241&quot;&gt;feature fidelity and task performance can drift apart&lt;/a&gt;. I didn&#39;t discover anything. I confirmed two things on a corpus nobody had looked at, and that makes me calmer about publishing than if it were something new.&lt;/p&gt;
&lt;p&gt;The 1.3 GB file is already in the pasta.cards repo, waiting for the screen that will use it. What&#39;s left of the benchmark fits in a paragraph: measure search with WeMM, build the full reprint corpus, decide whether AVIF becomes the default. None of the three has a date.&lt;/p&gt;
&lt;p&gt;What I&#39;ll try is the cheapest thing of all: open a clean session as a user before every release and type the first command in the readme. Five minutes, and it found two holes a week of agents didn&#39;t. I don&#39;t know if I&#39;ll remember to do it. But now it&#39;s written down, and I trust what&#39;s written more than what I remember.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Raising the CRF until search breaks</title>
        <published>2026-09-05T00:00:00+00:00</published>
        <updated>2026-09-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            Brenner Cruvinel
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://brennercruvinel.blog/en/blog/subindo-o-crf-ate-a-busca-bugar/"/>
        <id>https://brennercruvinel.blog/en/blog/subindo-o-crf-ate-a-busca-bugar/</id>
        
        <content type="html" xml:base="https://brennercruvinel.blog/en/blog/subindo-o-crf-ate-a-busca-bugar/">&lt;p&gt;The question from the &lt;a href=&quot;https://brennercruvinel.blog/en/blog/no-final-do-dia-ta-a-mesma-coisa-1-3-gb/&quot;&gt;previous night&lt;/a&gt; was simple to ask and I took my time asking it. The app keeps every card&#39;s JPEG cached for display. The &lt;code&gt;.nest&lt;/code&gt; doesn&#39;t need to be pretty, it needs to answer which card it is. So the CRF, the codec&#39;s quality setting, can go up until the vector breaks, and the vector breaks well after the eye does. If that were true, it would even be worth thinking about two tiers: a thumbnail inside Nest for search, and the full card on demand when the app needs to show it.&lt;/p&gt;
&lt;p&gt;I had a way to measure this, or thought I did. Nest&#39;s quality gate has two sides: a visual metric, which compares the decoded frame with the source, and vector drift, which measures how much the CLIP vector moves between the original image and the decoded one. The idea behind drift is that an image can look fine and still have moved in search space. I trusted that metric. It was mine, I had insisted on it in the plan, and for good reason: on dermoscopy it had caught a case where the image passed by eye and search by clinical text dropped by half.&lt;/p&gt;
&lt;h2 id=&quot;the-gate-rejected-the-whole-ladder&quot;&gt;The gate rejected the whole ladder&lt;/h2&gt;
&lt;p&gt;I took the visual side out of the gate and left only drift, with the floor Nest has used since dermoscopy. I had the CRF climb a ladder from 40 to 60. The gate rejected the whole ladder, including the first rung, and fell back to the most conservative one because it had nowhere else to go. Drift was already below the floor at CRF 40 and only got worse. And the visual metric, which I had taken out of the gate but kept computing, told the same story from another angle: from CRF fifty on it gave negative values on some cards, something I didn&#39;t even know it could do.&lt;/p&gt;
&lt;p&gt;The file the gate delivered, at CRF 40, the lowest on the ladder, came out close to one gig, four times smaller than the source. It was already smaller than the recommended build, and the gate had rejected it too, it just had nowhere lower to fall.&lt;/p&gt;
&lt;p&gt;By the gate&#39;s logic, none of these files was usable. I built one at CRF fifty anyway, no gate, just to see the size. Half a gig. Seven and a half times smaller than the source, and the cards turned into a blur, rules text unreadable, the art recognizable only from a distance. A file I wouldn&#39;t show anyone.&lt;/p&gt;
&lt;p&gt;Then I ran the metric that actually matters, which I hadn&#39;t run before because I was too lazy to set it up: search by name. A hundred queries like &quot;the art of such-and-such card&quot;, on the five files I had of the full corpus, from the 3.6 GB lossless one down to the half-gig blur. The first round gave zero hits on two of the five files, the lossless and the recommended one, and for a minute I thought I had broken search. It was the bench: it matched results by the card&#39;s position in the stream, and the two files with similarity sorting have a different order. Nest has a content id per item for exactly this, and once the bench matched on that, all five files answered again.&lt;/p&gt;
&lt;p&gt;And accuracy stayed within the noise on all of them. The half-gig file finds the right card as well as the 1.3 GB one, and both stay within the noise of the lossless file.&lt;/p&gt;
&lt;h2 id=&quot;search-survives-far-more-compression-than-the-eye&quot;&gt;Search survives far more compression than the eye&lt;/h2&gt;
&lt;p&gt;I stared at that on screen for a while. Cosine drift measures whether the vector moved. Search measures whether the vector still finds. I was using the first as if it were the second, and it would have vetoed a file that works. The vector does move, and it still stays closer to the right card than to any other. How far it travels doesn&#39;t matter if its neighbors don&#39;t change. A gate that&#39;s any good for this use needs hit@k as its floor, the fraction of queries where the right card shows up in the top k results, not cosine.&lt;/p&gt;
&lt;p&gt;That became a profile in Nest, &lt;code&gt;retrieval-only&lt;/code&gt;, which writes into the manifest that the file serves search and never display. And AVIF, which in the benchmark had come out about 12% smaller than AV1 at the same quality, held up on the full corpus: 13% smaller than the recommended build. It&#39;s the candidate to become the default backend for stills, and I haven&#39;t decided yet, because AVIF takes four to ten times longer to build and embed.&lt;/p&gt;
&lt;p&gt;There&#39;s a third metric I ran alongside that&#39;s worth nothing, and it&#39;s worth saying why. Identity: give the image itself as the query and see if it finds itself. It gave a hundred percent on every file, even the blur. Looks great and says nothing, because the query is the very image that produced the frame, and the uncompressed control also gives a hundred. It only proves the codec didn&#39;t destroy the data. I left it in the bench so nobody confuses pipeline stability with usefulness, which is exactly the confusion I made with drift.&lt;/p&gt;
&lt;p&gt;The metric is weak and I know it. It&#39;s a hundred queries with a model that does poorly on this corpus, CLIP, which only looks at the art. &quot;Didn&#39;t drop&quot; means &quot;I couldn&#39;t measure a drop&quot;, not &quot;it&#39;s the same&quot;. And WeMM, which reads the name printed on the card and gets nine in ten right, might suffer far more from the blur than CLIP, because what it reads is exactly what the CRF destroys first. I didn&#39;t measure it. That&#39;s next, along with the full reprint corpus, which is where inter has something to predict.&lt;/p&gt;
&lt;p&gt;What stuck with me that week was less about compression and more about what I choose to measure. I had a metric I designed myself, one that looked rigorous, and it answered a question I wasn&#39;t asking. And before publishing any of these numbers, I wanted to validate each one against the disk, because a report written in the middle of the night gets things wrong.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>At the end of the day it&#39;s the same thing, 1.3 GB</title>
        <published>2026-09-03T00:00:00+00:00</published>
        <updated>2026-09-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            Brenner Cruvinel
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://brennercruvinel.blog/en/blog/no-final-do-dia-ta-a-mesma-coisa-1-3-gb/"/>
        <id>https://brennercruvinel.blog/en/blog/no-final-do-dia-ta-a-mesma-coisa-1-3-gb/</id>
        
        <content type="html" xml:base="https://brennercruvinel.blog/en/blog/no-final-do-dia-ta-a-mesma-coisa-1-3-gb/">&lt;p&gt;I was sure. Sorting the cards by similarity before encoding would multiply the compression, because similar neighboring frames are exactly what video codecs love. I had written it in the bets, I had repeated it to the agent, and the &lt;a href=&quot;https://brennercruvinel.blog/en/blog/encoder-ignorou-o-tune-still-desde-o-primeiro-build/&quot;&gt;benchmark&lt;/a&gt; had handed me back a strange row: the variant with inter came out bigger than the one without. The configuration was wrong, scene cut detection was on, and different card after different card is one scene cut per frame. The encoder was burning cycles looking for a scene that didn&#39;t exist. I turned it off and put together a second corpus, almost three thousand real reprints of the same art, grouped together.&lt;/p&gt;
&lt;p&gt;That did it. With prediction in groups of sixteen frames, the file came out 29% smaller than without prediction. Groups of sixteen beat a single keyframe for the whole stream, which surprised me, and they still keep any card reachable by decoding at most sixteen frames. And a detail I didn&#39;t expect: shuffling the reprints instead of grouping them cost only two points. Part of the gain comes from the frame every card shares, not from the repeated art. The codec was exploiting the chrome, as I had suspected on day one, and that held for any order.&lt;/p&gt;
&lt;h2 id=&quot;building-the-whole-corpus-at-night&quot;&gt;Building the whole corpus at night&lt;/h2&gt;
&lt;p&gt;With 29% in hand, I built the full corpus with similarity sorting and prediction on, and next to it the same corpus with none of that, to compare. And I built it with the media inside the file, because by then I no longer accepted MP4s sitting next to the database. Before getting there I opened the folder of an intermediate build and found &lt;code&gt;.build&lt;/code&gt;, &lt;code&gt;.cache&lt;/code&gt;, &lt;code&gt;.forge-state&lt;/code&gt;, &lt;code&gt;.tmp&lt;/code&gt;, a lock, a manifest, all next to a &lt;code&gt;.nest&lt;/code&gt; of a few megabytes. What is all this for? I asked, and the honest answer was that every piece had a reason and none of them needed to be there once the build finished. Media inside the file was half the answer, the other half was cleaning up the output.&lt;/p&gt;
&lt;p&gt;A &lt;code&gt;.nest&lt;/code&gt; is a container of sections, each with its own hash. The new section is the simplest of all: a table of offsets and the raw bytes of the videos, glued one after another. An MP4 stays an MP4, nothing is re-encoded to fit. Opening the file doesn&#39;t touch the media, the system only maps the slice when someone asks for a card, and you can export the original MP4 back out with the hash checked before writing.&lt;/p&gt;
&lt;p&gt;That section doesn&#39;t count toward Nest&#39;s content hash, and this matters more than it seems. The content hash is computed over what&#39;s inside the file, not over the packaging, and it&#39;s what makes a Nest citation point to a piece of knowledge instead of a place on disk. The same corpus built with the media inside and with the media outside gives the same hash. It cost three percent: the indexes, the card text and the vectors add up to about forty megabytes on top of 1.3 GB of video.&lt;/p&gt;
&lt;p&gt;The builds ran overnight, and the night was rough. Two died with a full disk, because macOS was taking system snapshots in waves, eating and releasing gigabytes without warning, and at one point I was down to a hundred and thirty megabytes free. And in the middle of that I read a summary from the agent saying the corpus had 200 cards. I had a client meeting in a few hours.&lt;/p&gt;
&lt;p&gt;&quot;Seriously, you used 200 demo cards? I have a client meeting and I still don&#39;t have the dataset.&quot; I had it run validation on the 1.3 GB file. All 38 thousand blobs checked out, one by one. The corpus was complete, the summary was describing the pilot, and I had read the summary instead of the disk. After the encoder that wasn&#39;t using the tune the manifest claimed, it was the second time that week that what I read wasn&#39;t what was actually there.&lt;/p&gt;
&lt;h2 id=&quot;at-the-end-of-the-day&quot;&gt;At the end of the day&lt;/h2&gt;
&lt;p&gt;The sorted build sat next to the plain build. 1.3 GB both, no difference at all. I sent it to the agent at four in the morning: at the end of the day it&#39;s the same thing, right, 1.3 GB.&lt;/p&gt;
&lt;p&gt;The reason was in the manifest, correct this time. Nest decides per segment whether to use prediction, encoding a sample both ways. On the real corpus, made of unique cards, the probe vetoed prediction in every segment. There&#39;s nothing to predict: the next card is another card, with other art, and the shared chrome doesn&#39;t pay for the cost. The 29% gain only exists on the reprint corpus, and I haven&#39;t built that one in full yet.&lt;/p&gt;
&lt;p&gt;There was a worse part, which I only understood later. In an earlier version of the probe, it decided on bytes alone, and in a build of the sample it picked prediction for every segment because it tied on size. Median quality dropped sixteen points. The encoder compresses predicted frames with coarser quantization, and with unique cards a predicted frame is just a worse keyframe in disguise. Equal bytes aren&#39;t equal quality. The probe now measures both sides, accepts losing at most two points, and records the reason when it vetoes. The 29% matrix also compares bytes only, so the number is real but it isn&#39;t equivalent quality. I&#39;m putting that down here because I forgot it myself for a whole day.&lt;/p&gt;
&lt;h2 id=&quot;what-if-the-file-doesn-t-need-to-be-pretty&quot;&gt;What if the file doesn&#39;t need to be pretty&lt;/h2&gt;
&lt;p&gt;What I take from that night isn&#39;t the 1.3 GB. It&#39;s that my intuition about codecs was wrong twice, and that I read summaries when I should read files. Now I only turn sorting on when the corpus has near-duplicates, and no build goes in without validation of the real file running alongside it.&lt;/p&gt;
&lt;p&gt;And one question was left over that seemed more promising than any sorting. Nest&#39;s quality gate locks the codec at a conservative level because the visual metrics never pass on small cards with tiny print. But Felipe&#39;s app keeps every card&#39;s JPEG cached for display. The &lt;code&gt;.nest&lt;/code&gt; only needs to answer which card it is. If the file doesn&#39;t need to be pretty, how far can you push the setting before search starts complaining?&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The encoder had ignored tune=still since the first build</title>
        <published>2026-09-02T00:00:00+00:00</published>
        <updated>2026-09-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            Brenner Cruvinel
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://brennercruvinel.blog/en/blog/encoder-ignorou-o-tune-still-desde-o-primeiro-build/"/>
        <id>https://brennercruvinel.blog/en/blog/encoder-ignorou-o-tune-still-desde-o-primeiro-build/</id>
        
        <content type="html" xml:base="https://brennercruvinel.blog/en/blog/encoder-ignorou-o-tune-still-desde-o-primeiro-build/">&lt;p&gt;The symptom was a number that didn&#39;t add up. I had a battery of encoders running in parallel: nineteen configurations across AV1, AVIF, x264, x265, WebP and lossy JPEG XL. Even VVC got in, more out of curiosity than hope. Each one calibrated to the same visual quality, to find out whether Nest&#39;s AV1 was the most compact option or just the one closest to home. One of the agents reproduced the Nest build by hand, with the same parameters, and the file came out a different size. Same card, same CRF, same preset, different bytes. I read that in the morning and my first reaction was that the agent had gotten the command wrong.&lt;/p&gt;
&lt;h2 id=&quot;the-probe-failed-and-nobody-said-a-word&quot;&gt;The probe failed and nobody said a word&lt;/h2&gt;
&lt;p&gt;It hadn&#39;t. The &lt;code&gt;forge&lt;/code&gt; asks the encoder for &lt;code&gt;tune=still&lt;/code&gt;, the still-picture mode, which is the right one for a stream where every frame is an independent photo. Before asking, it runs a probe to check whether the encoder accepts that mode. The probe ran without a parameter the mode requires, failed, and the code fell back to a generic mode without telling anyone. The manifest recorded the spec, which said &quot;still&quot;, not what the encoder had actually done. Since the &lt;a href=&quot;https://brennercruvinel.blog/en/blog/nest-archiver-de-cartas-de-magic/&quot;&gt;first build&lt;/a&gt; I had been reading a manifest that didn&#39;t match the binary, and the only place that recorded the mode was the wrong place.&lt;/p&gt;
&lt;p&gt;The difference measured eleven points of visual quality for ten percent more bytes, at the same CRF. The old build was the worst point on the curve: smaller, but ugly in a way that isn&#39;t worth it. And nobody would have caught it by watching the video, because what a frame looks like in the player doesn&#39;t tell you which tune was used. Only bytes against the bytes of an independent encode.&lt;/p&gt;
&lt;p&gt;And it was by chance. The encoder battery existed to answer a different question, and the manual baseline encode was just its reference point. If I had calibrated the battery against the manifest instead of against an encode done from scratch, the bug would have stayed invisible, and every number in the series would have come out ten percent optimistic on bytes and eleven points pessimistic on quality. Now the manifest records the mode the encoder actually used, and the probe passes the right parameter.&lt;/p&gt;
&lt;p&gt;Even after the fix there was a second layer. SVT-AV1 has &lt;a rel=&quot;external&quot; href=&quot;https://gitlab.com/AOMediaCodec/SVT-AV1/-/blob/master/Docs/Parameters.md&quot;&gt;two modes&lt;/a&gt; you could call &quot;still&quot;: &lt;code&gt;tune=2&lt;/code&gt;, optimized for a structural similarity metric, which is what the fixed probe started picking, and &lt;code&gt;tune=3&lt;/code&gt;, called image quality, which the documentation itself marks as still images only. The second one gives one more point of quality for one percent more bytes. Not much, but it&#39;s the right mode for still pictures, and the recommended build of the full corpus went out with it. The manifest now says which of the two, by number, because &quot;still&quot; on its own already fooled me once.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Variant on the same 2,048 cards&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt;&lt;th&gt;Visual quality&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;JPEG XL repack, lossless&lt;/td&gt;&lt;td&gt;1.12x smaller&lt;/td&gt;&lt;td&gt;same as source&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;AV1 from the first build&lt;/td&gt;&lt;td&gt;3.3x smaller&lt;/td&gt;&lt;td&gt;52&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;AV1 with tune=still&lt;/td&gt;&lt;td&gt;3.0x smaller&lt;/td&gt;&lt;td&gt;63&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;AV1 with inter&lt;/td&gt;&lt;td&gt;2.5x smaller&lt;/td&gt;&lt;td&gt;62&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;AVIF&lt;/td&gt;&lt;td&gt;5.5x smaller&lt;/td&gt;&lt;td&gt;43&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The AVIF row looks like the winner and it isn&#39;t. It sits at a much lower point on the quality curve, so you can&#39;t compare it on the same number. Calibrated to the same quality as AV1, it comes out about 12% smaller, and that left an open question about which backend to use for stills. And inter, my favorite bet, came out bigger than &lt;code&gt;tune=still&lt;/code&gt;. I explain that in the next post, because the configuration was wrong and the problem was something else.&lt;/p&gt;
&lt;p&gt;I won&#39;t table the rest of the nineteen, but three findings stayed with me. x264, the encoder for a 2003 standard, was the fastest inside the quality window by an enormous margin, and VVC, the newest codec on the list, cost a hundred times x264&#39;s time to land in the middle of the table.&lt;/p&gt;
&lt;p&gt;Two different SVT-AV1 presets spat out byte-for-byte identical streams, because the version I use maps both to the same internal mode when the stream is all keyframes. One more case of a parameter I was passing and the encoder was ignoring, this time documented. And lossy JPEG XL, which I expected to compete, only competes at high quality, well above the window that matters for a deck tile. It&#39;s a good codec for a target this corpus doesn&#39;t ask for.&lt;/p&gt;
&lt;h2 id=&quot;capcut-was-throwing-cards-away&quot;&gt;CapCut was throwing cards away&lt;/h2&gt;
&lt;p&gt;I had written in the &lt;a href=&quot;https://brennercruvinel.blog/en/blog/apostas-antes-de-comprimir-as-cartas/&quot;&gt;bets&lt;/a&gt; that speeding up the video cut bytes, because I had done it in CapCut and the file came out half the size. I reproduced it programmatically: speed it up sixty times, export at thirty frames per second in H.264, the way the editor does. The file came out with half the bytes. And half the cards.&lt;/p&gt;
&lt;p&gt;The export samples the sped-up timeline and drops whatever falls between one frame and the next. Of the 2,048 cards, 993 disappeared. What was left got re-encoded to H.264 on top of AV1 that was already lossy. CapCut didn&#39;t compress anything, it threw half the dataset away and called it optimization, and I looked at the file size and believed it. Changing only the fps, without speeding up, doesn&#39;t change a single byte. It&#39;s a timestamp annotation in the container, as &lt;code&gt;ffprobe&lt;/code&gt; had already told me on day one and I hadn&#39;t properly written down.&lt;/p&gt;
&lt;p&gt;The wrong bet yielded a real bug. With an fps other than one in the manifest, the code that fetches a frame by index asked for an instant that didn&#39;t exist, because it assumed ordinal and timestamp were the same thing. Fixed, and tested with the fps I never should have changed. The real gain CapCut was pointing at, redundancy between neighboring frames, does exist. It just has to be measured with inter, without losing cards, and that&#39;s the subject of the next late night.&lt;/p&gt;
&lt;h2 id=&quot;what-else-is-the-manifest-getting-wrong&quot;&gt;What else is the manifest getting wrong&lt;/h2&gt;
&lt;p&gt;I closed the day with two things validated by hash and a bigger doubt than when I started. The encoder mode was a constant I thought was on, and it had been off since the beginning. CapCut was a number I thought was compression, and it was data loss. Both lived in a manifest or an export I had read and accepted without checking against anything.&lt;/p&gt;
&lt;p&gt;If the encoder wasn&#39;t doing what the manifest said, the question left over was what else I was reading as a summary instead of validating on disk. I didn&#39;t know yet that the answer would come in the middle of the night, with a meeting on the calendar.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The open source Rust ecosystem: what runs in production</title>
        <published>2025-06-30T00:00:00+00:00</published>
        <updated>2025-06-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            Brenner Cruvinel
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://brennercruvinel.blog/en/blog/ecossistema-rust-open-source/"/>
        <id>https://brennercruvinel.blog/en/blog/ecossistema-rust-open-source/</id>
        
        <content type="html" xml:base="https://brennercruvinel.blog/en/blog/ecossistema-rust-open-source/">&lt;p&gt;I put this survey together with the &lt;a href=&quot;https://brennercruvinel.blog/en/blog/templates-prompt-pesquisa-agentica/&quot;&gt;research templates for agents&lt;/a&gt;, to decide what to bet on in my Rust projects. The first version had a good rule, &quot;a benchmark number only goes in with a source&quot;, that it did not follow itself: several sources were just a site&#39;s home page, with no article, and the stars came rounded from third-party rankings.&lt;/p&gt;
&lt;p&gt;All stars below were read from the GitHub API on 13 October 2026.&lt;/p&gt;
&lt;h2 id=&quot;the-core-by-stars&quot;&gt;The core, by stars&lt;/h2&gt;
&lt;p&gt;Repositories with more than 20 thousand stars where Rust is the main language, according to GitHub. Where a description carries a performance number, it is what the project itself claims in its README.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Repository&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Stars&lt;/th&gt;&lt;th&gt;What it is&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/openai/codex&quot;&gt;openai/codex&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;129,042&lt;/td&gt;&lt;td&gt;OpenAI&#39;s coding agent that runs in the terminal&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rustdesk/rustdesk&quot;&gt;rustdesk/rustdesk&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;125,720&lt;/td&gt;&lt;td&gt;Self-hosted remote desktop, client and server&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust&quot;&gt;rust-lang/rust&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;119,904&lt;/td&gt;&lt;td&gt;The language&#39;s compiler and standard library&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tauri-apps/tauri&quot;&gt;tauri-apps/tauri&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;111,870&lt;/td&gt;&lt;td&gt;Desktop apps with a web front end and a Rust back end, smaller binaries than Electron&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/denoland/deno&quot;&gt;denoland/deno&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;108,774&lt;/td&gt;&lt;td&gt;JavaScript and TypeScript runtime, secure by default, with explicit permissions&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/oven-sh/bun&quot;&gt;oven-sh/bun&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;96,222&lt;/td&gt;&lt;td&gt;JavaScript runtime, bundler and test runner in one binary&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/zed-industries/zed&quot;&gt;zed-industries/zed&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;91,688&lt;/td&gt;&lt;td&gt;Native editor with collaborative editing&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/astral-sh/uv&quot;&gt;astral-sh/uv&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;90,720&lt;/td&gt;&lt;td&gt;Python package and project manager; the README says 10 to 100 times faster than pip&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/BurntSushi/ripgrep&quot;&gt;BurntSushi/ripgrep&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;69,112&lt;/td&gt;&lt;td&gt;Recursive regex search that respects .gitignore&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/dani-garcia/vaultwarden&quot;&gt;dani-garcia/vaultwarden&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;68,985&lt;/td&gt;&lt;td&gt;Lightweight Bitwarden-compatible server, popular for self-hosting&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/alacritty/alacritty&quot;&gt;alacritty/alacritty&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;65,955&lt;/td&gt;&lt;td&gt;OpenGL-accelerated terminal&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/warpdotdev/warp&quot;&gt;warpdotdev/warp&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;65,452&lt;/td&gt;&lt;td&gt;Terminal with built-in AI&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rustlings&quot;&gt;rust-lang/rustlings&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;64,339&lt;/td&gt;&lt;td&gt;Short exercises to learn Rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tw93/Pake&quot;&gt;tw93/Pake&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;62,056&lt;/td&gt;&lt;td&gt;Turns a web page into a desktop app with one command&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/FuelLabs/sway&quot;&gt;FuelLabs/sway&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;61,391&lt;/td&gt;&lt;td&gt;Smart contract language for the Fuel network&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/sharkdp/bat&quot;&gt;sharkdp/bat&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;60,789&lt;/td&gt;&lt;td&gt;cat with syntax highlighting and git integration&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/starship/starship&quot;&gt;starship/starship&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;60,251&lt;/td&gt;&lt;td&gt;One shell prompt for bash, zsh, fish and others&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/meilisearch/meilisearch&quot;&gt;meilisearch/meilisearch&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;59,558&lt;/td&gt;&lt;td&gt;HTTP search engine with relevance out of the box&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/typst/typst&quot;&gt;typst/typst&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;56,601&lt;/td&gt;&lt;td&gt;Markup-based typesetting, a modern alternative to LaTeX&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/aaif-goose/goose&quot;&gt;aaif-goose/goose&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;55,248&lt;/td&gt;&lt;td&gt;Extensible AI agent for software development&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/astral-sh/ruff&quot;&gt;astral-sh/ruff&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;50,053&lt;/td&gt;&lt;td&gt;Python linter and formatter; the README says 10 to 100 times faster than Flake8 and Black&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/bevyengine/bevy&quot;&gt;bevyengine/bevy&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;48,973&lt;/td&gt;&lt;td&gt;Data-driven game engine with ECS&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/helix-editor/helix&quot;&gt;helix-editor/helix&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;46,576&lt;/td&gt;&lt;td&gt;Modal terminal editor with built-in LSP and tree-sitter&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/juspay/hyperswitch&quot;&gt;juspay/hyperswitch&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;45,313&lt;/td&gt;&lt;td&gt;Payments platform with routing across processors&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/sharkdp/fd&quot;&gt;sharkdp/fd&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;44,781&lt;/td&gt;&lt;td&gt;A simple, fast alternative to find&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/sxyazi/yazi&quot;&gt;sxyazi/yazi&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;42,808&lt;/td&gt;&lt;td&gt;Terminal file manager with async I/O&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/GyulyVGC/sniffnet&quot;&gt;GyulyVGC/sniffnet&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;41,503&lt;/td&gt;&lt;td&gt;Network traffic monitor with a graphical interface&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/nushell/nushell&quot;&gt;nushell/nushell&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;40,657&lt;/td&gt;&lt;td&gt;Shell with structured data pipelines&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/pola-rs/polars&quot;&gt;pola-rs/polars&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;40,120&lt;/td&gt;&lt;td&gt;Columnar DataFrames with Python bindings&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/ajeetdsouza/zoxide&quot;&gt;ajeetdsouza/zoxide&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;40,087&lt;/td&gt;&lt;td&gt;A cd that learns your most-used directories&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/DioxusLabs/dioxus&quot;&gt;DioxusLabs/dioxus&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;39,383&lt;/td&gt;&lt;td&gt;App framework for web, desktop and mobile, with a React-like API&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/spacedriveapp/spacedrive&quot;&gt;spacedriveapp/spacedrive&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;39,158&lt;/td&gt;&lt;td&gt;Cross-platform file explorer&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/lapce/lapce&quot;&gt;lapce/lapce&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;38,917&lt;/td&gt;&lt;td&gt;Lightweight native editor with remote mode&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/servo/servo&quot;&gt;servo/servo&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;38,145&lt;/td&gt;&lt;td&gt;Embeddable browser engine, born at Mozilla&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/firecracker-microvm/firecracker&quot;&gt;firecracker-microvm/firecracker&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;37,349&lt;/td&gt;&lt;td&gt;AWS microVMs; the README says it runs Lambda and Fargate&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/pnpm/pnpm&quot;&gt;pnpm/pnpm&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;36,803&lt;/td&gt;&lt;td&gt;JavaScript package manager with shared storage&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/casey/just&quot;&gt;casey/just&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;36,256&lt;/td&gt;&lt;td&gt;Task runner with simple syntax, in the spirit of make&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/zellij-org/zellij&quot;&gt;zellij-org/zellij&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;35,723&lt;/td&gt;&lt;td&gt;Terminal multiplexer with WebAssembly plugins&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/qdrant/qdrant&quot;&gt;qdrant/qdrant&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;35,065&lt;/td&gt;&lt;td&gt;Vector database with HNSW, filters and replication, common in RAG&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/jdx/mise&quot;&gt;jdx/mise&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;34,971&lt;/td&gt;&lt;td&gt;Tool version, environment variable and task manager&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rustfs/rustfs&quot;&gt;rustfs/rustfs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;34,870&lt;/td&gt;&lt;td&gt;S3-compatible object storage&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/fish-shell/fish-shell&quot;&gt;fish-shell/fish-shell&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;34,296&lt;/td&gt;&lt;td&gt;Interactive shell, rewritten in Rust from version 4&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/swc-project/swc&quot;&gt;swc-project/swc&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;34,204&lt;/td&gt;&lt;td&gt;JavaScript and TypeScript compiler and bundler&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/TabbyML/tabby&quot;&gt;TabbyML/tabby&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;33,911&lt;/td&gt;&lt;td&gt;Self-hosted coding assistant&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tokio-rs/tokio&quot;&gt;tokio-rs/tokio&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;33,440&lt;/td&gt;&lt;td&gt;Async runtime underlying most Rust servers&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/surrealdb/surrealdb&quot;&gt;surrealdb/surrealdb&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;33,128&lt;/td&gt;&lt;td&gt;Multi-model database, document and graph, with real-time queries&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/yewstack/yew&quot;&gt;yewstack/yew&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;32,821&lt;/td&gt;&lt;td&gt;WebAssembly front-end framework inspired by React and Elm&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/dandavison/delta&quot;&gt;dandavison/delta&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;32,487&lt;/td&gt;&lt;td&gt;Syntax-highlighting pager for git diff&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/jj-vcs/jj&quot;&gt;jj-vcs/jj&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;32,023&lt;/td&gt;&lt;td&gt;Git-compatible version control with a simpler model&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/ankitects/anki&quot;&gt;ankitects/anki&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;31,988&lt;/td&gt;&lt;td&gt;Spaced-repetition flashcards, core in Rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/atuinsh/atuin&quot;&gt;atuinsh/atuin&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;31,986&lt;/td&gt;&lt;td&gt;Shell history with search and encrypted sync&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/influxdata/influxdb&quot;&gt;influxdata/influxdb&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;31,763&lt;/td&gt;&lt;td&gt;Time-series database; version 3 is in Rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/iced-rs/iced&quot;&gt;iced-rs/iced&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;31,755&lt;/td&gt;&lt;td&gt;Cross-platform GUI library inspired by Elm&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/emilk/egui&quot;&gt;emilk/egui&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;31,400&lt;/td&gt;&lt;td&gt;Immediate-mode GUI, native and on the web&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/vercel/turborepo&quot;&gt;vercel/turborepo&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;31,198&lt;/td&gt;&lt;td&gt;Incremental build for many packages in one repository, moved from Go to Rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/nautechsystems/nautilus_trader&quot;&gt;nautechsystems/nautilus_trader&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;29,938&lt;/td&gt;&lt;td&gt;Event-driven trading platform, backtest and production in the same code&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/chroma-core/chroma&quot;&gt;chroma-core/chroma&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;29,495&lt;/td&gt;&lt;td&gt;Vector database for LLM applications&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/wezterm/wezterm&quot;&gt;wezterm/wezterm&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;29,220&lt;/td&gt;&lt;td&gt;GPU-accelerated terminal with a multiplexer&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/sharkdp/hyperfine&quot;&gt;sharkdp/hyperfine&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;29,084&lt;/td&gt;&lt;td&gt;Command-line benchmarking tool with statistics&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/niri-wm/niri&quot;&gt;niri-wm/niri&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;28,390&lt;/td&gt;&lt;td&gt;Wayland compositor with scrollable tiling&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/cloudflare/pingora&quot;&gt;cloudflare/pingora&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;27,614&lt;/td&gt;&lt;td&gt;Cloudflare&#39;s HTTP proxy framework, open-sourced in February 2024&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/GraphiteEditor/Graphite&quot;&gt;GraphiteEditor/Graphite&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;27,572&lt;/td&gt;&lt;td&gt;2D graphics editor with a node-based procedural engine&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tokio-rs/axum&quot;&gt;tokio-rs/axum&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;27,465&lt;/td&gt;&lt;td&gt;Web framework on tokio and tower&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tree-sitter/tree-sitter&quot;&gt;tree-sitter/tree-sitter&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;27,177&lt;/td&gt;&lt;td&gt;Incremental parser generator used in editors&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Schniz/fnm&quot;&gt;Schniz/fnm&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;27,093&lt;/td&gt;&lt;td&gt;Node version manager&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Wilfred/difftastic&quot;&gt;Wilfred/difftastic&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;26,007&lt;/td&gt;&lt;td&gt;Structural diff that understands language syntax&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/biomejs/biome&quot;&gt;biomejs/biome&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;25,945&lt;/td&gt;&lt;td&gt;Formatter and linter for web projects&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rwf2/Rocket&quot;&gt;rwf2/Rocket&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;25,780&lt;/td&gt;&lt;td&gt;Web framework focused on type safety and ergonomics&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/clockworklabs/SpacetimeDB&quot;&gt;clockworklabs/SpacetimeDB&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;25,288&lt;/td&gt;&lt;td&gt;Database with built-in server logic, for real-time apps&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/actix/actix-web&quot;&gt;actix/actix-web&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;24,858&lt;/td&gt;&lt;td&gt;Performance-focused web framework&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/ogham/exa&quot;&gt;ogham/exa&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;24,450&lt;/td&gt;&lt;td&gt;ls replacement, unmaintained; the README points to the eza fork&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/uutils/coreutils&quot;&gt;uutils/coreutils&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;24,233&lt;/td&gt;&lt;td&gt;Cross-platform rewrite of GNU coreutils&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/slint-ui/slint&quot;&gt;slint-ui/slint&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;24,168&lt;/td&gt;&lt;td&gt;Declarative GUI toolkit for Rust, C++, JavaScript and Python&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/eza-community/eza&quot;&gt;eza-community/eza&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;23,548&lt;/td&gt;&lt;td&gt;Maintained fork of exa&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;by-domain&quot;&gt;By domain&lt;/h2&gt;
&lt;h3 id=&quot;command-line-tools&quot;&gt;Command-line tools&lt;/h3&gt;
&lt;p&gt;The ripgrep, fd, bat, delta and just tools are already in the core. Below them:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Repository&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Stars&lt;/th&gt;&lt;th&gt;What it is&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/mdBook&quot;&gt;rust-lang/mdBook&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;22,213&lt;/td&gt;&lt;td&gt;Books in Markdown, used for the official Rust book&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/getzola/zola&quot;&gt;getzola/zola&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;17,511&lt;/td&gt;&lt;td&gt;Static site generator, the one behind this blog&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/XAMPPRocky/tokei&quot;&gt;XAMPPRocky/tokei&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;14,994&lt;/td&gt;&lt;td&gt;Counts lines of code by language&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/ClementTsang/bottom&quot;&gt;ClementTsang/bottom&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;14,101&lt;/td&gt;&lt;td&gt;Terminal system monitor&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/bootandy/dust&quot;&gt;bootandy/dust&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;12,497&lt;/td&gt;&lt;td&gt;Disk usage, in the spirit of du&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/imsnif/bandwhich&quot;&gt;imsnif/bandwhich&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;12,001&lt;/td&gt;&lt;td&gt;Bandwidth use per process&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/sharkdp/hexyl&quot;&gt;sharkdp/hexyl&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;10,291&lt;/td&gt;&lt;td&gt;Hex viewer&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/pemistahl/grex&quot;&gt;pemistahl/grex&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;8,219&lt;/td&gt;&lt;td&gt;Generates regex from examples&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/svenstaro/miniserve&quot;&gt;svenstaro/miniserve&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;7,898&lt;/td&gt;&lt;td&gt;HTTP file server&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tealdeer-rs/tealdeer&quot;&gt;tealdeer-rs/tealdeer&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;6,590&lt;/td&gt;&lt;td&gt;tldr client&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/sharkdp/pastel&quot;&gt;sharkdp/pastel&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;6,516&lt;/td&gt;&lt;td&gt;Color manipulation in the terminal&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/dalance/procs&quot;&gt;dalance/procs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;6,193&lt;/td&gt;&lt;td&gt;Modern ps replacement&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/ouch-org/ouch&quot;&gt;ouch-org/ouch&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,786&lt;/td&gt;&lt;td&gt;Compresses and decompresses many formats&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/cgag/loc&quot;&gt;cgag/loc&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,456&lt;/td&gt;&lt;td&gt;Lines-of-code counter&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;git-build-and-binary-size&quot;&gt;Git, build and binary size&lt;/h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Repository&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Stars&lt;/th&gt;&lt;th&gt;What it is&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/gitbutlerapp/gitbutler&quot;&gt;gitbutlerapp/gitbutler&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;21,806&lt;/td&gt;&lt;td&gt;Visual Git client&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rui314/mold&quot;&gt;rui314/mold&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;17,633&lt;/td&gt;&lt;td&gt;Fast linker, works with Rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/GitoxideLabs/gitoxide&quot;&gt;GitoxideLabs/gitoxide&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;12,012&lt;/td&gt;&lt;td&gt;Pure Rust implementation of Git&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/johnthagen/min-sized-rust&quot;&gt;johnthagen/min-sized-rust&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;9,857&lt;/td&gt;&lt;td&gt;Techniques to shrink Rust binaries&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/mozilla/sccache&quot;&gt;mozilla/sccache&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;7,778&lt;/td&gt;&lt;td&gt;Distributed compilation cache&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/flamegraph-rs/flamegraph&quot;&gt;flamegraph-rs/flamegraph&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;6,047&lt;/td&gt;&lt;td&gt;Generates flamegraphs from perf and dtrace&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/RazrFalcon/cargo-bloat&quot;&gt;RazrFalcon/cargo-bloat&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,774&lt;/td&gt;&lt;td&gt;Shows what takes up space in an executable&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/git2-rs&quot;&gt;rust-lang/git2-rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,114&lt;/td&gt;&lt;td&gt;libgit2 bindings&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/AlexEne/twiggy&quot;&gt;AlexEne/twiggy&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,427&lt;/td&gt;&lt;td&gt;Shows what takes up space in a .wasm binary&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/matklad/cargo-xtask&quot;&gt;matklad/cargo-xtask&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,338&lt;/td&gt;&lt;td&gt;Build automation pattern with cargo&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/nnethercote/dhat-rs&quot;&gt;nnethercote/dhat-rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,010&lt;/td&gt;&lt;td&gt;Heap profiling&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;runtimes-and-platforms&quot;&gt;Runtimes and platforms&lt;/h3&gt;
&lt;p&gt;Deno, Bun, Tauri, pnpm and tokio are in the core. The smaller async runtimes and the WebAssembly platforms:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Repository&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Stars&lt;/th&gt;&lt;th&gt;What it is&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/vercel/turborepo&quot;&gt;vercel/turborepo&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;31,198&lt;/td&gt;&lt;td&gt;Incremental build for many packages in one repository&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/shuttle-hq/shuttle&quot;&gt;shuttle-hq/shuttle&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;6,916&lt;/td&gt;&lt;td&gt;Deployment platform for Rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/spinframework/spin&quot;&gt;spinframework/spin&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;6,525&lt;/td&gt;&lt;td&gt;Serverless microservices in WebAssembly&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/extism/extism&quot;&gt;extism/extism&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;5,794&lt;/td&gt;&lt;td&gt;WebAssembly plugin system&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/monoio-rs/monoio&quot;&gt;monoio-rs/monoio&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;5,126&lt;/td&gt;&lt;td&gt;Thread-per-core async runtime on io_uring, from ByteDance&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/smol-rs/smol&quot;&gt;smol-rs/smol&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;5,082&lt;/td&gt;&lt;td&gt;Small async runtime&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/async-rs/async-std&quot;&gt;async-rs/async-std&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,062&lt;/td&gt;&lt;td&gt;Async runtime with a std-like API&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/DataDog/glommio&quot;&gt;DataDog/glommio&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,663&lt;/td&gt;&lt;td&gt;Thread-per-core runtime on io_uring&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/compio-rs/compio&quot;&gt;compio-rs/compio&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,916&lt;/td&gt;&lt;td&gt;Completion-based I/O runtime&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;infrastructure-databases-and-search&quot;&gt;Infrastructure, databases and search&lt;/h3&gt;
&lt;p&gt;Meilisearch, Qdrant, InfluxDB, SurrealDB, Polars and SpacetimeDB are in the core.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Repository&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Stars&lt;/th&gt;&lt;th&gt;What it is&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/neondatabase/neon&quot;&gt;neondatabase/neon&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;23,197&lt;/td&gt;&lt;td&gt;Serverless Postgres with storage separated from compute&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/vectordotdev/vector&quot;&gt;vectordotdev/vector&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;22,697&lt;/td&gt;&lt;td&gt;Logs and metrics pipeline, maintained by Datadog&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/valeriansaliou/sonic&quot;&gt;valeriansaliou/sonic&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;21,358&lt;/td&gt;&lt;td&gt;Lightweight search back end&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tikv/tikv&quot;&gt;tikv/tikv&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;16,908&lt;/td&gt;&lt;td&gt;Distributed key-value store, the base of TiDB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/quickwit-oss/tantivy&quot;&gt;quickwit-oss/tantivy&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;16,211&lt;/td&gt;&lt;td&gt;Full-text search library inspired by Lucene&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/microsoft/windows-rs&quot;&gt;microsoft/windows-rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;12,817&lt;/td&gt;&lt;td&gt;Bindings for the Windows APIs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/quickwit-oss/quickwit&quot;&gt;quickwit-oss/quickwit&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;11,713&lt;/td&gt;&lt;td&gt;Cloud-native search and observability&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/bottlerocket-os/bottlerocket&quot;&gt;bottlerocket-os/bottlerocket&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;9,678&lt;/td&gt;&lt;td&gt;Operating system for containers, from AWS&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/databendlabs/databend&quot;&gt;databendlabs/databend&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;9,466&lt;/td&gt;&lt;td&gt;Cloud data warehouse&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/apache/datafusion&quot;&gt;apache/datafusion&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;9,444&lt;/td&gt;&lt;td&gt;Analytical SQL query engine&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/risingwavelabs/risingwave&quot;&gt;risingwavelabs/risingwave&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;9,369&lt;/td&gt;&lt;td&gt;Streaming database with SQL&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/spacejam/sled&quot;&gt;spacejam/sled&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;9,095&lt;/td&gt;&lt;td&gt;Embedded database&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/youki-dev/youki&quot;&gt;youki-dev/youki&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;7,629&lt;/td&gt;&lt;td&gt;OCI container runtime&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/GreptimeTeam/greptimedb&quot;&gt;GreptimeTeam/greptimedb&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;6,734&lt;/td&gt;&lt;td&gt;Cloud-native time-series database&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/MaterializeInc/materialize&quot;&gt;MaterializeInc/materialize&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;6,382&lt;/td&gt;&lt;td&gt;SQL over data streams&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/apache/opendal&quot;&gt;apache/opendal&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;5,412&lt;/td&gt;&lt;td&gt;Unified access to storage services&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/fluvio-community/fluvio&quot;&gt;fluvio-community/fluvio&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;5,256&lt;/td&gt;&lt;td&gt;Streaming platform&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/cberner/redb&quot;&gt;cberner/redb&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,847&lt;/td&gt;&lt;td&gt;Embedded key-value database in pure Rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/kube-rs/kube&quot;&gt;kube-rs/kube&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,844&lt;/td&gt;&lt;td&gt;Kubernetes client&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/apache/arrow-rs&quot;&gt;apache/arrow-rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,641&lt;/td&gt;&lt;td&gt;Official Apache Arrow implementation in Rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/delta-io/delta-rs&quot;&gt;delta-io/delta-rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,341&lt;/td&gt;&lt;td&gt;Native Delta Lake&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/eclipse-zenoh/zenoh&quot;&gt;eclipse-zenoh/zenoh&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,256&lt;/td&gt;&lt;td&gt;Pub/sub and query for IoT and robotics&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/fjall-rs/fjall&quot;&gt;fjall-rs/fjall&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,377&lt;/td&gt;&lt;td&gt;Embedded LSM tree&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/apache/datafusion-ballista&quot;&gt;apache/datafusion-ballista&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,146&lt;/td&gt;&lt;td&gt;Distributed DataFusion&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/databendlabs/openraft&quot;&gt;databendlabs/openraft&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,089&lt;/td&gt;&lt;td&gt;Raft implementation&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/lnx-search/lnx&quot;&gt;lnx-search/lnx&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,456&lt;/td&gt;&lt;td&gt;Search server built on tantivy&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/GlareDB/glaredb&quot;&gt;GlareDB/glaredb&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,024&lt;/td&gt;&lt;td&gt;Analytical SQL over many sources&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/meilisearch/heed&quot;&gt;meilisearch/heed&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;921&lt;/td&gt;&lt;td&gt;Typed LMDB wrapper&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;web-and-apis&quot;&gt;Web and APIs&lt;/h3&gt;
&lt;p&gt;Axum, Actix Web and Rocket are in the core.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Repository&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Stars&lt;/th&gt;&lt;th&gt;What it is&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/leptos-rs/leptos&quot;&gt;leptos-rs/leptos&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;21,388&lt;/td&gt;&lt;td&gt;Full-stack framework with fine-grained reactivity&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/transact-rs/sqlx&quot;&gt;transact-rs/sqlx&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;17,563&lt;/td&gt;&lt;td&gt;Async SQL with compile-time checked queries&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/diesel-rs/diesel&quot;&gt;diesel-rs/diesel&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;14,202&lt;/td&gt;&lt;td&gt;ORM and query builder&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/grpc/grpc-rust&quot;&gt;grpc/grpc-rust&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;12,491&lt;/td&gt;&lt;td&gt;gRPC implementation&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/seanmonstar/warp&quot;&gt;seanmonstar/warp&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;10,378&lt;/td&gt;&lt;td&gt;Web framework built from filters&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/SeaQL/sea-orm&quot;&gt;SeaQL/sea-orm&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;9,924&lt;/td&gt;&lt;td&gt;Async ORM&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/loco-rs/loco&quot;&gt;loco-rs/loco&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;9,439&lt;/td&gt;&lt;td&gt;Rails-style framework&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/poem-web/poem&quot;&gt;poem-web/poem&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,448&lt;/td&gt;&lt;td&gt;Web framework with OpenAPI generation&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/salvo-rs/salvo&quot;&gt;salvo-rs/salvo&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,447&lt;/td&gt;&lt;td&gt;Web framework&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tower-rs/tower&quot;&gt;tower-rs/tower&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,320&lt;/td&gt;&lt;td&gt;Middleware and service abstractions&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/ntex-rs/ntex&quot;&gt;ntex-rs/ntex&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,541&lt;/td&gt;&lt;td&gt;Network and web framework&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;security-and-cryptography&quot;&gt;Security and cryptography&lt;/h3&gt;
&lt;p&gt;Vaultwarden is in the core.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Repository&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Stars&lt;/th&gt;&lt;th&gt;What it is&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/firezone/firezone&quot;&gt;firezone/firezone&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;9,113&lt;/td&gt;&lt;td&gt;Zero-trust access over WireGuard; the repository&#39;s main language is Elixir&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rustls/rustls&quot;&gt;rustls/rustls&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;7,672&lt;/td&gt;&lt;td&gt;TLS in pure Rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/mullvad/mullvadvpn-app&quot;&gt;mullvad/mullvadvpn-app&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;7,665&lt;/td&gt;&lt;td&gt;Mullvad VPN app, daemon in Rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/cloudflare/boringtun&quot;&gt;cloudflare/boringtun&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;7,218&lt;/td&gt;&lt;td&gt;Userspace WireGuard&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/briansmith/ring&quot;&gt;briansmith/ring&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,107&lt;/td&gt;&lt;td&gt;Cryptographic primitives focused on TLS&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/str4d/rage&quot;&gt;str4d/rage&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,682&lt;/td&gt;&lt;td&gt;File encryption in the age format&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/EmbarkStudios/cargo-deny&quot;&gt;EmbarkStudios/cargo-deny&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,452&lt;/td&gt;&lt;td&gt;Checks licenses, advisories and dependencies&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Keats/jsonwebtoken&quot;&gt;Keats/jsonwebtoken&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,100&lt;/td&gt;&lt;td&gt;JWT&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rustsec/rustsec&quot;&gt;rustsec/rustsec&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,966&lt;/td&gt;&lt;td&gt;Security advisory database for crates&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/ramosbugs/oauth2-rs&quot;&gt;ramosbugs/oauth2-rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,211&lt;/td&gt;&lt;td&gt;OAuth2 client&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/RustCrypto/password-hashes&quot;&gt;RustCrypto/password-hashes&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;914&lt;/td&gt;&lt;td&gt;Argon2, bcrypt, scrypt and the like&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-bitcoin/rust-secp256k1&quot;&gt;rust-bitcoin/rust-secp256k1&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;430&lt;/td&gt;&lt;td&gt;libsecp256k1 bindings&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;ai-ml-and-llm-infrastructure&quot;&gt;AI, ML and LLM infrastructure&lt;/h3&gt;
&lt;p&gt;Qdrant, Chroma, Polars and Tabby are in the core.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Repository&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Stars&lt;/th&gt;&lt;th&gt;What it is&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/huggingface/candle&quot;&gt;huggingface/candle&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;21,168&lt;/td&gt;&lt;td&gt;Minimalist ML framework&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tracel-ai/burn&quot;&gt;tracel-ai/burn&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;16,107&lt;/td&gt;&lt;td&gt;Deep learning portable across back ends&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/lancedb/lancedb&quot;&gt;lancedb/lancedb&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;11,665&lt;/td&gt;&lt;td&gt;Serverless vector database on the Lance format&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/huggingface/tokenizers&quot;&gt;huggingface/tokenizers&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;11,168&lt;/td&gt;&lt;td&gt;Fast tokenizers&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/0xPlaygrounds/rig&quot;&gt;0xPlaygrounds/rig&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;8,870&lt;/td&gt;&lt;td&gt;Framework for LLM agents&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/EricLBuehler/mistral.rs&quot;&gt;EricLBuehler/mistral.rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;7,743&lt;/td&gt;&lt;td&gt;LLM inference with quantization&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rustformers/llm&quot;&gt;rustformers/llm&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;6,153&lt;/td&gt;&lt;td&gt;LLM inference&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/LaurentMazare/tch-rs&quot;&gt;LaurentMazare/tch-rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;5,503&lt;/td&gt;&lt;td&gt;libtorch bindings&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Rust-GPU/rust-cuda&quot;&gt;Rust-GPU/rust-cuda&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;5,407&lt;/td&gt;&lt;td&gt;Rust compiled for NVIDIA GPUs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-ml/linfa&quot;&gt;rust-ml/linfa&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,759&lt;/td&gt;&lt;td&gt;Classic ML algorithms, in the spirit of scikit-learn&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/safetensors/safetensors&quot;&gt;safetensors/safetensors&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,917&lt;/td&gt;&lt;td&gt;Safe tensor format&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/sonos/tract&quot;&gt;sonos/tract&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,087&lt;/td&gt;&lt;td&gt;ONNX and TensorFlow inference&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/pykeio/ort&quot;&gt;pykeio/ort&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,559&lt;/td&gt;&lt;td&gt;ONNX Runtime bindings&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/64bit/async-openai&quot;&gt;64bit/async-openai&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,017&lt;/td&gt;&lt;td&gt;Async client for the OpenAI API&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/sobelio/llm-chain&quot;&gt;sobelio/llm-chain&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,603&lt;/td&gt;&lt;td&gt;Chaining LLM calls&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/chelsea0x3b/cudarc&quot;&gt;chelsea0x3b/cudarc&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,231&lt;/td&gt;&lt;td&gt;CUDA bindings&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/srush/llama2.rs&quot;&gt;srush/llama2.rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,063&lt;/td&gt;&lt;td&gt;Llama 2 in Rust, for teaching&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/pepperoni21/ollama-rs&quot;&gt;pepperoni21/ollama-rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,061&lt;/td&gt;&lt;td&gt;Ollama client&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/smartcorelib/smartcore&quot;&gt;smartcorelib/smartcore&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;964&lt;/td&gt;&lt;td&gt;ML library&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/utilityai/llama-cpp-rs&quot;&gt;utilityai/llama-cpp-rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;657&lt;/td&gt;&lt;td&gt;llama.cpp bindings&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;embedded-and-low-level-systems&quot;&gt;Embedded and low-level systems&lt;/h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Repository&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Stars&lt;/th&gt;&lt;th&gt;What it is&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/redox-os/redox&quot;&gt;redox-os/redox&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;16,620&lt;/td&gt;&lt;td&gt;Unix-like operating system written in Rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/embassy-rs/embassy&quot;&gt;embassy-rs/embassy&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;9,957&lt;/td&gt;&lt;td&gt;Async embedded&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tock/tock&quot;&gt;tock/tock&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;6,464&lt;/td&gt;&lt;td&gt;Secure operating system for microcontrollers&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/oxidecomputer/hubris&quot;&gt;oxidecomputer/hubris&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,631&lt;/td&gt;&lt;td&gt;Oxide&#39;s embedded operating system&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/theseus-os/Theseus&quot;&gt;theseus-os/Theseus&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,212&lt;/td&gt;&lt;td&gt;Research operating system that uses Rust&#39;s type system&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/nix-rust/nix&quot;&gt;nix-rust/nix&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,079&lt;/td&gt;&lt;td&gt;POSIX bindings&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/probe-rs/probe-rs&quot;&gt;probe-rs/probe-rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,975&lt;/td&gt;&lt;td&gt;Debugging and flashing microcontrollers&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/libc&quot;&gt;rust-lang/libc&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,628&lt;/td&gt;&lt;td&gt;libc bindings&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rtic-rs/rtic&quot;&gt;rtic-rs/rtic&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,420&lt;/td&gt;&lt;td&gt;Real-time concurrency for microcontrollers&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/seL4/rust-sel4&quot;&gt;seL4/rust-sel4&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;216&lt;/td&gt;&lt;td&gt;Rust support for the verified seL4 microkernel&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Outside GitHub, &lt;a rel=&quot;external&quot; href=&quot;https://ferrocene.dev&quot;&gt;Ferrocene&lt;/a&gt; is a Rust compiler qualified for safety-critical software, such as automotive.&lt;/p&gt;
&lt;h3 id=&quot;graphics-gui-games-and-audio&quot;&gt;Graphics, GUI, games and audio&lt;/h3&gt;
&lt;p&gt;Bevy, egui, iced and Slint are in the core. The physics in &lt;a rel=&quot;external&quot; href=&quot;https://github.com/dimforge/rapier&quot;&gt;rapier&lt;/a&gt; is the same idea of simulation that shows up, at another scale, in the &lt;a href=&quot;https://brennercruvinel.blog/en/blog/z-machine-fisica-hed/&quot;&gt;Z machine&lt;/a&gt;.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Repository&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Stars&lt;/th&gt;&lt;th&gt;What it is&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/ratatui/ratatui&quot;&gt;ratatui/ratatui&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;22,965&lt;/td&gt;&lt;td&gt;Text user interfaces in the terminal&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/gfx-rs/wgpu&quot;&gt;gfx-rs/wgpu&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;18,278&lt;/td&gt;&lt;td&gt;Cross-platform WebGPU, native and on the web&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/linebender/druid&quot;&gt;linebender/druid&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;9,702&lt;/td&gt;&lt;td&gt;UI toolkit, predecessor of xilem&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/veloren/veloren&quot;&gt;veloren/veloren&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;7,621&lt;/td&gt;&lt;td&gt;Open-world voxel RPG&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/makepad/makepad&quot;&gt;makepad/makepad&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;7,170&lt;/td&gt;&lt;td&gt;UI framework and creative environment&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-windowing/winit&quot;&gt;rust-windowing/winit&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;6,204&lt;/td&gt;&lt;td&gt;Cross-platform window creation&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/fschutt/azul&quot;&gt;fschutt/azul&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;6,129&lt;/td&gt;&lt;td&gt;GUI on WebRender&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/dimforge/rapier&quot;&gt;dimforge/rapier&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;5,853&lt;/td&gt;&lt;td&gt;2D and 3D physics, with JavaScript and WebAssembly bindings&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/linebender/xilem&quot;&gt;linebender/xilem&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;5,570&lt;/td&gt;&lt;td&gt;Experimental UI framework&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/dimforge/nalgebra&quot;&gt;dimforge/nalgebra&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,801&lt;/td&gt;&lt;td&gt;Linear algebra&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/ggez/ggez&quot;&gt;ggez/ggez&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,703&lt;/td&gt;&lt;td&gt;2D game framework&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/not-fl3/macroquad&quot;&gt;not-fl3/macroquad&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,662&lt;/td&gt;&lt;td&gt;Simple 2D games, including on the web&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/linebender/vello&quot;&gt;linebender/vello&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,417&lt;/td&gt;&lt;td&gt;2D renderer on the GPU&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/lapce/floem&quot;&gt;lapce/floem&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,296&lt;/td&gt;&lt;td&gt;GUI with fine-grained reactivity&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/crossterm-rs/crossterm&quot;&gt;crossterm-rs/crossterm&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,242&lt;/td&gt;&lt;td&gt;Cross-platform terminal manipulation&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/RustAudio/cpal&quot;&gt;RustAudio/cpal&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,966&lt;/td&gt;&lt;td&gt;Audio input and output&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/pdeljanov/Symphonia&quot;&gt;pdeljanov/Symphonia&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,434&lt;/td&gt;&lt;td&gt;Pure Rust audio decoder&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/imgui-rs/imgui-rs&quot;&gt;imgui-rs/imgui-rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,058&lt;/td&gt;&lt;td&gt;Dear ImGui bindings&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Rust-SDL2/rust-sdl2&quot;&gt;Rust-SDL2/rust-sdl2&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,952&lt;/td&gt;&lt;td&gt;SDL2 bindings&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/RustAudio/rodio&quot;&gt;RustAudio/rodio&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,488&lt;/td&gt;&lt;td&gt;Audio playback&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/bitshifter/glam-rs&quot;&gt;bitshifter/glam-rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,077&lt;/td&gt;&lt;td&gt;SIMD vector math for games and graphics&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/gfx-rs/naga&quot;&gt;gfx-rs/naga&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,565&lt;/td&gt;&lt;td&gt;Shader translator, now inside the wgpu repository&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tesselode/kira&quot;&gt;tesselode/kira&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,071&lt;/td&gt;&lt;td&gt;Audio for games&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/dimforge/parry&quot;&gt;dimforge/parry&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;880&lt;/td&gt;&lt;td&gt;Collision detection&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;blockchain-and-zero-knowledge-proofs&quot;&gt;Blockchain and zero-knowledge proofs&lt;/h3&gt;
&lt;p&gt;Sway is in the core.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Repository&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Stars&lt;/th&gt;&lt;th&gt;What it is&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/solana-labs/solana&quot;&gt;solana-labs/solana&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;14,950&lt;/td&gt;&lt;td&gt;Solana blockchain; the old repository was archived&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/paritytech/substrate&quot;&gt;paritytech/substrate&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;8,386&lt;/td&gt;&lt;td&gt;Polkadot&#39;s blockchain framework; archived&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/paradigmxyz/reth&quot;&gt;paradigmxyz/reth&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;5,825&lt;/td&gt;&lt;td&gt;Ethereum execution client&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/sigp/lighthouse&quot;&gt;sigp/lighthouse&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,484&lt;/td&gt;&lt;td&gt;Ethereum consensus client&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-bitcoin/rust-bitcoin&quot;&gt;rust-bitcoin/rust-bitcoin&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,684&lt;/td&gt;&lt;td&gt;Bitcoin types and serialization&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/near/nearcore&quot;&gt;near/nearcore&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,620&lt;/td&gt;&lt;td&gt;NEAR network node&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/namada-net/namada&quot;&gt;namada-net/namada&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,517&lt;/td&gt;&lt;td&gt;Privacy-focused blockchain&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/risc0/risc0&quot;&gt;risc0/risc0&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,203&lt;/td&gt;&lt;td&gt;zk virtual machine&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/succinctlabs/sp1&quot;&gt;succinctlabs/sp1&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,747&lt;/td&gt;&lt;td&gt;zk virtual machine on RISC-V&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/noir-lang/noir&quot;&gt;noir-lang/noir&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,410&lt;/td&gt;&lt;td&gt;Language for zk circuits&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/alloy-rs/alloy&quot;&gt;alloy-rs/alloy&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,337&lt;/td&gt;&lt;td&gt;Ethereum tooling, successor to ethers-rs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/zcash/halo2&quot;&gt;zcash/halo2&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;920&lt;/td&gt;&lt;td&gt;Proof system&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/0xPolygonZero/plonky2&quot;&gt;0xPolygonZero/plonky2&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;859&lt;/td&gt;&lt;td&gt;Recursive proof system&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/ZcashFoundation/zebra&quot;&gt;ZcashFoundation/zebra&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;622&lt;/td&gt;&lt;td&gt;Zcash node&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;benchmarks-with-a-source&quot;&gt;Benchmarks with a source&lt;/h2&gt;
&lt;p&gt;I kept only the benchmarks with a primary source, code or methodology. Out went the async runtime ones (a post with no code or raw data), the WebAssembly runtime ones (the repository itself marked the numbers as placeholders), and the gitoxide and Redis-style server ones (the sources were only a site&#39;s home page, or a site that is down).&lt;/p&gt;
&lt;h3 id=&quot;ripgrep-versus-grep-and-friends&quot;&gt;Ripgrep versus grep and friends&lt;/h3&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;https://github.com/BurntSushi/ripgrep&quot;&gt;ripgrep README&lt;/a&gt; has tables measured by the author on an Intel i9-12900K. Searching for &lt;code&gt;[A-Z]+_SUSPEND&lt;/code&gt; as a word in the Linux kernel source:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Tool&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Time&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Ratio&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;ripgrep&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;0.082 s&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1.00x&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;git grep&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;0.273 s&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3.34x&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;The Silver Searcher&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;0.443 s&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;5.43x&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;ugrep&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;0.639 s&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;7.82x&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Ignoring &lt;code&gt;.gitignore&lt;/code&gt; and filtering by file type, ripgrep takes 0.063 s and GNU grep 0.674 s. On a single file of about 13 GB already cached, the search &lt;code&gt;Sherlock [A-Z]\w+&lt;/code&gt; takes 1.042 s in ripgrep, 1.339 s in ugrep and 6.577 s in GNU grep. The same README shows the limits: on a pattern with no literal, like &lt;code&gt;[A-Za-z]{30}&lt;/code&gt;, the lead over GNU grep drops to about 2x, and there are patterns where another tool falls off a cliff and ripgrep does not. The first version of this post cited these numbers from ripgrep.dev, which is an unofficial site.&lt;/p&gt;
&lt;h3 id=&quot;web-frameworks&quot;&gt;Web frameworks&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://sharkbench.dev/web/rust&quot;&gt;Sharkbench&lt;/a&gt; measures concurrent requests with I/O and JSON on an Intel Core Ultra 5 325 running Linux. The page was updated on 5 October 2026:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Framework&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Req/s&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Median latency&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Memory&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Hyper&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;27,372&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1.2 ms&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4.6 MB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Axum&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;26,909&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1.2 ms&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;5.7 MB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Actix&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;23,833&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1.3 ms&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;6.9 MB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Rocket&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;21,365&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1.5 ms&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;7.1 MB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;ASP.NET Core&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;17,561&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1.5 ms&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;46.6 MB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Express&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;7,670&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3.7 ms&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;84.8 MB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Gin&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,652&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3.3 ms&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;13.5 MB&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Two caveats. The order changes between updates: in the first version of this post, with numbers from another run, Actix was first. And the page does not describe the load generator or concurrency, so Gin behind Express is a result I would not take as a rule without reading the test code.&lt;/p&gt;
&lt;h3 id=&quot;javascript-runtimes&quot;&gt;JavaScript runtimes&lt;/h3&gt;
&lt;p&gt;I removed the Bun, Deno and Node numbers: the sources were author profile pages, with no article. What stays is the warning that applies to any comparison of this kind. In a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/denoland/deno/discussions/15121&quot;&gt;discussion in the Deno repository&lt;/a&gt;, Luca Casonato, from the Deno team, answers that you cannot compare two systems with a single HTTP benchmark, because that test does no routing, serves no static files and ignores the rest of what a server does.&lt;/p&gt;
&lt;h3 id=&quot;pingora-versus-nginx-in-production&quot;&gt;Pingora versus NGINX, in production&lt;/h3&gt;
&lt;p&gt;In &lt;a rel=&quot;external&quot; href=&quot;https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet/&quot;&gt;Cloudflare&#39;s September 2022 post&lt;/a&gt;, Pingora serves more than a trillion requests a day and, under the same load, uses about 70% less CPU and 67% less memory than the previous NGINX-based service. Median TTFB dropped by 5 ms and p95 by 80 ms. For one large customer, the connection reuse ratio went from 87.1% to 99.92%, which cut new connections to the origin by 160 times. Much of the gain comes from sharing the connection pool across threads, which NGINX&#39;s process model does not allow.&lt;/p&gt;
&lt;h3 id=&quot;polars-pandas-and-plain-rust&quot;&gt;Polars, pandas and plain Rust&lt;/h3&gt;
&lt;p&gt;Haixuan Tao compared the three &lt;a rel=&quot;external&quot; href=&quot;https://haixuantao.github.io/pandas-polars/24-conculsion.html&quot;&gt;on a 4.2 GB dataset&lt;/a&gt; from Stack Overflow, on an Intel i7-8750H with 12 threads, with &lt;a rel=&quot;external&quot; href=&quot;https://github.com/haixuanTao/dataframe-python-rust&quot;&gt;open code&lt;/a&gt;:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Implementation&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Total time&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Versus pandas&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;pandas&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;80 s&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1x&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Polars, single thread&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;30 s&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2.6x&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Polars, multithreaded&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;17 s&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4.7x&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Polars, lazy and multithreaded&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;16.5 s&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4.8x&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Plain Rust, single thread&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;24 s&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3.3x&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Plain Rust, multithreaded&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;13.7 s&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;5.8x&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Leaving out reading the file, multithreaded Rust takes 1.7 s against 40 s for pandas, about 23x. His advice: Polars for the API and for merges and group-bys, pandas when performance and memory do not matter.&lt;/p&gt;
&lt;h3 id=&quot;webassembly-runtimes&quot;&gt;WebAssembly runtimes&lt;/h3&gt;
&lt;p&gt;I found no reproducible, current comparison. If you want to go through the literature, &lt;a rel=&quot;external&quot; href=&quot;https://doi.org/10.1145/3491204.3527477&quot;&gt;Hockley and Williamson&lt;/a&gt; measured scripting performance in Wasmer at the ICPE 2022 conference.&lt;/p&gt;
&lt;h2 id=&quot;who-uses-it-in-production&quot;&gt;Who uses it in production&lt;/h2&gt;
&lt;p&gt;Only the cases with a source from the company itself stayed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS Code search &lt;a rel=&quot;external&quot; href=&quot;https://code.visualstudio.com/updates/v1_11&quot;&gt;switched to ripgrep&lt;/a&gt; in version 1.11, in 2017&lt;/li&gt;
&lt;li&gt;Cloudflare &lt;a rel=&quot;external&quot; href=&quot;https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet/&quot;&gt;replaced NGINX with Pingora&lt;/a&gt; in the proxy that connects its network to the internet&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/firecracker-microvm/firecracker&quot;&gt;Firecracker&lt;/a&gt; runs AWS Lambda and AWS Fargate, according to its README&lt;/li&gt;
&lt;li&gt;Discord &lt;a rel=&quot;external&quot; href=&quot;https://discord.com/blog/why-discord-is-switching-from-go-to-rust&quot;&gt;moved its Read States service from Go to Rust&lt;/a&gt; in 2020, because of latency spikes from Go&#39;s garbage collector&lt;/li&gt;
&lt;li&gt;Vercel &lt;a rel=&quot;external&quot; href=&quot;https://vercel.com/blog/finishing-turborepos-migration-from-go-to-rust&quot;&gt;finished porting Turborepo from Go to Rust&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first version had more cases and a list of market statistics, such as &quot;45% of the Fortune 500 run Rust&quot;, taken from blogs with no source. I removed everything I could not tie to a primary source, including &quot;Discord cut memory by 8 times&quot;, which Discord&#39;s post does not say.&lt;/p&gt;
&lt;h2 id=&quot;what-i-take-from-it&quot;&gt;What I take from it&lt;/h2&gt;
&lt;p&gt;Most of the top is developer tooling: search, terminals, shells, editors, package managers. It makes sense, because the first Rust adopters were developers writing tools for themselves, where speed, resource use and the command-line experience decide. Right behind come infrastructure and data: proxies, vector databases, search, time series, DataFrames.&lt;/p&gt;
&lt;p&gt;The technical patterns repeat. Servers are async on tokio. The most common shape is a single binary configured by file or command line. WebAssembly plugins show up where cheap runtime extension is wanted, as in Zellij. And the foundation is almost always the same: serde, clap, anyhow and thiserror, rayon, reqwest, hyper.&lt;/p&gt;
&lt;p&gt;Where there is a serious benchmark, the advantage holds, but with limits. On the Linux kernel, ripgrep is 3 to 11 times ahead of the other tools, and loses its margin on patterns with no literal. Pingora shows a production gain, with CPU and memory measured by the operator itself. Outside those cases, the gain over optimized C or Go is often small, and what weighs in the choice is memory safety, the type system and tooling.&lt;/p&gt;
&lt;p&gt;The gaps I see: a full-stack web framework with a plugin ecosystem at the level of Django or Rails, a complete data engineering stack at the level of Spark and Airflow, GUI that competes with Electron and Qt, and native ML that competes with PyTorch. Burn and Candle exist, but are still smaller.&lt;/p&gt;
&lt;h2 id=&quot;rust-and-webassembly-books-and-resources&quot;&gt;Rust and WebAssembly books and resources&lt;/h2&gt;
&lt;p&gt;The starting point changed in 2025: the rustwasm organization on GitHub &lt;a rel=&quot;external&quot; href=&quot;https://blog.rust-lang.org/inside-rust/2025/07/21/sunsetting-the-rustwasm-github-org/&quot;&gt;was sunset&lt;/a&gt;, and &quot;The Rust and WebAssembly Book&quot; was frozen. wasm-bindgen and wasm-pack moved to a new organization, &lt;a rel=&quot;external&quot; href=&quot;https://github.com/wasm-bindgen&quot;&gt;wasm-bindgen&lt;/a&gt;. The old book is still good as an introduction, it just stopped in time.&lt;/p&gt;
&lt;h3 id=&quot;rust-foundations&quot;&gt;Rust foundations&lt;/h3&gt;
&lt;p&gt;WebAssembly demands ownership and borrowing (there is no garbage collector in the browser), interop with JavaScript, async and &lt;code&gt;no_std&lt;/code&gt;, because many environments do not have the full standard library.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Book&lt;/th&gt;&lt;th&gt;Authors&lt;/th&gt;&lt;th&gt;Edition&lt;/th&gt;&lt;th&gt;What for&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://nostarch.com/rust-programming-language-3e&quot;&gt;The Rust Programming Language, 3rd edition&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Steve Klabnik, Carol Nichols, Chris Krycho&lt;/td&gt;&lt;td&gt;No Starch, March 2026&lt;/td&gt;&lt;td&gt;The starting point; covers the 2024 edition and has a new async chapter&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.oreilly.com/library/view/programming-rust-3rd/9781098176228/&quot;&gt;Programming Rust, 3rd edition&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Jim Blandy, Jason Orendorff, Leonora Tindall&lt;/td&gt;&lt;td&gt;O&#39;Reilly, due October to November 2026, 748 pages&lt;/td&gt;&lt;td&gt;Intermediate to advanced; the FFI part helps you understand WebAssembly underneath&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://rust-for-rustaceans.com&quot;&gt;Rust for Rustaceans&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Jon Gjengset&lt;/td&gt;&lt;td&gt;No Starch, 2021&lt;/td&gt;&lt;td&gt;The step after the official book: unsafe, traits, reusable crates&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.manning.com/books/rust-in-action&quot;&gt;Rust in Action&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Tim McNamara&lt;/td&gt;&lt;td&gt;Manning, 2021&lt;/td&gt;&lt;td&gt;Practical systems cases&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://zero2prod.com&quot;&gt;Zero to Production in Rust&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Luca Palmieri&lt;/td&gt;&lt;td&gt;Self-published&lt;/td&gt;&lt;td&gt;Back-end architecture for production&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://marabos.nl/atomics&quot;&gt;Rust Atomics and Locks&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Mara Bos&lt;/td&gt;&lt;td&gt;O&#39;Reilly, 2023, with a free online version&lt;/td&gt;&lt;td&gt;Concurrency, useful for WebAssembly with threads&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://doc.rust-lang.org/nomicon&quot;&gt;The Rustonomicon&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The Rust team&lt;/td&gt;&lt;td&gt;Online, ongoing&lt;/td&gt;&lt;td&gt;Unsafe, aliasing, FFI&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Command-Line Rust&lt;/td&gt;&lt;td&gt;Ken Youens-Clark&lt;/td&gt;&lt;td&gt;O&#39;Reilly, 2022&lt;/td&gt;&lt;td&gt;Command-line tools&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Asynchronous Programming in Rust&lt;/td&gt;&lt;td&gt;Carl Fredrik Samson&lt;/td&gt;&lt;td&gt;Packt, February 2024&lt;/td&gt;&lt;td&gt;Futures, executors, epoll, kqueue and IOCP&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Hands-On Concurrency with Rust&lt;/td&gt;&lt;td&gt;Brian L. Troutwine&lt;/td&gt;&lt;td&gt;Packt, 2018&lt;/td&gt;&lt;td&gt;Concurrency&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;rust-and-webassembly&quot;&gt;Rust and WebAssembly&lt;/h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Book&lt;/th&gt;&lt;th&gt;Authors&lt;/th&gt;&lt;th&gt;Edition&lt;/th&gt;&lt;th&gt;Scope&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://rustwasm.github.io/book&quot;&gt;The Rust and WebAssembly Book&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Rust and WebAssembly Working Group&lt;/td&gt;&lt;td&gt;Online, archived in 2025&lt;/td&gt;&lt;td&gt;Browser: Game of Life, wasm-bindgen, wasm-pack&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://pragprog.com/titles/khrust&quot;&gt;Programming WebAssembly with Rust&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Kevin Hoffman&lt;/td&gt;&lt;td&gt;PragProg, 2019&lt;/td&gt;&lt;td&gt;Browser and custom hosts; does not cover the component model or WASI 0.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Practical WebAssembly&lt;/td&gt;&lt;td&gt;Sendil Kumar Nellaiyapen&lt;/td&gt;&lt;td&gt;Packt, 2022&lt;/td&gt;&lt;td&gt;Rust and WebAssembly in the browser&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Practical WebAssembly&lt;/td&gt;&lt;td&gt;Kassian Wren&lt;/td&gt;&lt;td&gt;O&#39;Reilly, 2024&lt;/td&gt;&lt;td&gt;WebAssembly for web developers; same title, different book&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://leanpub.com/webassembly&quot;&gt;WebAssembly with Rust&lt;/a&gt;&lt;/td&gt;&lt;td&gt;sendilkumarn&lt;/td&gt;&lt;td&gt;Leanpub&lt;/td&gt;&lt;td&gt;WAT, wabt, binaryen and toolchain&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Game Development with Rust and WebAssembly&lt;/td&gt;&lt;td&gt;Eric Smith&lt;/td&gt;&lt;td&gt;Packt, 2022&lt;/td&gt;&lt;td&gt;A 2D game in the browser&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Creative Projects for Rust Programmers&lt;/td&gt;&lt;td&gt;Carlo Milanesi&lt;/td&gt;&lt;td&gt;Packt, 2020&lt;/td&gt;&lt;td&gt;Yew, WebAssembly games, REST&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://bpbonline.com/products/building-and-deploying-webassembly-apps&quot;&gt;Building and Deploying WebAssembly Apps&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Peter Salomonsen&lt;/td&gt;&lt;td&gt;BPB, 2025&lt;/td&gt;&lt;td&gt;AssemblyScript, C, C++, Rust and Kubernetes&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Watch out for the flood of AI-generated self-published books since 2023, with titles like &quot;Rust for WebAssembly&quot; and authors with dozens of books a year. Before buying, it is worth checking the publisher and whether the author has public code.&lt;/p&gt;
&lt;h3 id=&quot;webassembly-in-general&quot;&gt;WebAssembly in general&lt;/h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Book&lt;/th&gt;&lt;th&gt;Authors&lt;/th&gt;&lt;th&gt;Edition&lt;/th&gt;&lt;th&gt;Relevance for Rust users&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;WebAssembly: The Definitive Guide&lt;/td&gt;&lt;td&gt;Brian Sletten&lt;/td&gt;&lt;td&gt;O&#39;Reilly, 2021&lt;/td&gt;&lt;td&gt;High: language-independent fundamentals, WASI&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://nostarch.com/art-webassembly&quot;&gt;The Art of WebAssembly&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Rick Battagline&lt;/td&gt;&lt;td&gt;No Starch, 2021&lt;/td&gt;&lt;td&gt;High: WAT in depth, to read what Rust generates&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.manning.com/books/server-side-webassembly&quot;&gt;Server-Side WebAssembly&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Danilo Chiarlone&lt;/td&gt;&lt;td&gt;Manning&lt;/td&gt;&lt;td&gt;High: WASI on the server, Spin, edge&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.manning.com/books/webassembly-in-action&quot;&gt;WebAssembly in Action&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Gerard Gallant&lt;/td&gt;&lt;td&gt;Manning, 2019&lt;/td&gt;&lt;td&gt;Medium: focus on C and C++ with Emscripten&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Learn WebAssembly&lt;/td&gt;&lt;td&gt;Mike Rourke&lt;/td&gt;&lt;td&gt;Packt, 2018&lt;/td&gt;&lt;td&gt;Low: C and C++&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;What Is WebAssembly?&lt;/td&gt;&lt;td&gt;Colin Eberhardt&lt;/td&gt;&lt;td&gt;O&#39;Reilly&lt;/td&gt;&lt;td&gt;Medium: overview&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://nextpublishing.jp/book/18115.html&quot;&gt;WebAssembly System Interface入門&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Asuka Yagi&lt;/td&gt;&lt;td&gt;Impress NextPublishing, 2024&lt;/td&gt;&lt;td&gt;Medium: WASI 0.1 and 0.2, with examples in Go&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;in-portuguese&quot;&gt;In Portuguese&lt;/h3&gt;
&lt;p&gt;The only Brazilian book on WebAssembly with Rust I found is &lt;a rel=&quot;external&quot; href=&quot;https://casadocodigo.com.br/products/livro-webassembly&quot;&gt;Desmistificando WebAssembly&lt;/a&gt;, by Raphael Amorim, from Casa do Código, with &lt;a rel=&quot;external&quot; href=&quot;https://github.com/raphamorim/livro-webassembly-exemplos&quot;&gt;examples on GitHub&lt;/a&gt;. For Rust in general, there is the &lt;a rel=&quot;external&quot; href=&quot;https://novatec.com.br/livros/programacao-em-rust-2ed/&quot;&gt;translation of the 2nd edition of Programming Rust&lt;/a&gt;, from Novatec in 2023, and &lt;a rel=&quot;external&quot; href=&quot;https://novatec.com.br/livros/primeiros-passos-linguagem-rust/&quot;&gt;Primeiros Passos com a Linguagem Rust&lt;/a&gt;, by José Augusto Manzano, also from Novatec, from 2018. The community maintains a &lt;a rel=&quot;external&quot; href=&quot;https://rust-br.github.io/rust-book-pt-br&quot;&gt;translation of the official book&lt;/a&gt;. The rest depends on English.&lt;/p&gt;
&lt;h3 id=&quot;documentation-with-the-depth-of-a-book&quot;&gt;Documentation with the depth of a book&lt;/h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Resource&lt;/th&gt;&lt;th&gt;Organization&lt;/th&gt;&lt;th&gt;Topics&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://wasm-bindgen.github.io/wasm-bindgen/&quot;&gt;wasm-bindgen Guide&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasm-bindgen&lt;/td&gt;&lt;td&gt;Interop between Rust and JavaScript&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://wasm-bindgen.github.io/wasm-pack/&quot;&gt;wasm-pack&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasm-bindgen&lt;/td&gt;&lt;td&gt;Build, test and publish to npm&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://book.leptos.dev&quot;&gt;Leptos Book&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Leptos&lt;/td&gt;&lt;td&gt;Reactive UI, signals, SSR&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://dioxuslabs.com/learn/0.7/&quot;&gt;Dioxus&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Dioxus Labs&lt;/td&gt;&lt;td&gt;UI for web, desktop and mobile&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://yew.rs&quot;&gt;Yew&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Yew&lt;/td&gt;&lt;td&gt;Components, hooks, routing&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://sycamore.dev/&quot;&gt;Sycamore&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Sycamore&lt;/td&gt;&lt;td&gt;Reactive framework with SSR&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://trunk-rs.github.io/trunk/&quot;&gt;Trunk&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trunk&lt;/td&gt;&lt;td&gt;Build and bundling with hot reload&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://docs.wasmtime.dev&quot;&gt;Wasmtime&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Bytecode Alliance&lt;/td&gt;&lt;td&gt;WASI, embedding, fuel&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://component-model.bytecodealliance.org&quot;&gt;Component Model&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Bytecode Alliance&lt;/td&gt;&lt;td&gt;Component model, WIT, WASI 0.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://developer.fermyon.com/spin&quot;&gt;Spin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Fermyon&lt;/td&gt;&lt;td&gt;Serverless WebAssembly&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://extism.org/docs/overview&quot;&gt;Extism&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Extism&lt;/td&gt;&lt;td&gt;WebAssembly plugins&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://docs.wasmer.io&quot;&gt;Wasmer&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Wasmer&lt;/td&gt;&lt;td&gt;Runtime, WASI, embedding&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://developer.mozilla.org/en-US/docs/WebAssembly/Guides/Rust_to_Wasm&quot;&gt;Compiling Rust to WebAssembly&lt;/a&gt;&lt;/td&gt;&lt;td&gt;MDN&lt;/td&gt;&lt;td&gt;First steps in the browser&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://embedded-wasm.github.io/book&quot;&gt;Embedded WebAssembly Book&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Community&lt;/td&gt;&lt;td&gt;IoT and embedded&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;There is still no book on WASI 0.2 and the component model (only the Bytecode Alliance documentation), on the new frameworks like Leptos and Dioxus, or on security and fuzzing of WebAssembly modules, which today lives in academic papers, like &lt;a rel=&quot;external&quot; href=&quot;https://arxiv.org/abs/2407.12297&quot;&gt;this one from 2024&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;people-and-visualization-projects-in-rust-and-webassembly&quot;&gt;People and visualization projects in Rust and WebAssembly&lt;/h2&gt;
&lt;h3 id=&quot;people&quot;&gt;People&lt;/h3&gt;
&lt;p&gt;The first version had each person&#39;s country and role, and errors: it attributed wgpu to two people as if they were one, gave another the wrong name, and listed two profiles that do not exist. I removed the country, which is personal data and which the source itself contradicted. I also removed the role, because what can be checked without depending on anyone&#39;s word is the contribution. In the table, each project was checked against the GitHub contributor list. Anyone with no confirmed link was left out.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Person&lt;/th&gt;&lt;th&gt;Projects where they appear as a contributor&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/alexcrichton&quot;&gt;Alex Crichton&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasmtime, wasm-bindgen, cargo&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/fitzgen&quot;&gt;Nick Fitzgerald&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasmtime, wasm-bindgen, walrus, wasm-tools&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/ashleygwilliams&quot;&gt;Ashley Williams&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasm-pack&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tschneidereit&quot;&gt;Till Schneidereit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasmtime, WASI&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/lukewagner&quot;&gt;Luke Wagner&lt;/a&gt;&lt;/td&gt;&lt;td&gt;component-model&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/sunfishcode&quot;&gt;Dan Gohman&lt;/a&gt;&lt;/td&gt;&lt;td&gt;WASI, wasi-libc, wasmtime&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/cfallin&quot;&gt;Chris Fallin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasmtime&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/pchickey&quot;&gt;Pat Hickey&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasmtime, wit-bindgen&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/peterhuene&quot;&gt;Peter Huene&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasm-tools, wit-bindgen&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/daxpedda&quot;&gt;daxpedda&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasm-bindgen&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/guybedford&quot;&gt;Guy Bedford&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasm-bindgen, workers-rs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/drager&quot;&gt;Jesper Håkansson&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasm-pack&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/syrusakbary&quot;&gt;Syrus Akbary&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasmer&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/withoutboats&quot;&gt;withoutboats&lt;/a&gt;&lt;/td&gt;&lt;td&gt;fehler&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/aturon&quot;&gt;Aaron Turon&lt;/a&gt;&lt;/td&gt;&lt;td&gt;tokio, rfcs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/nikomatsakis&quot;&gt;Niko Matsakis&lt;/a&gt;&lt;/td&gt;&lt;td&gt;rust, polonius, chalk&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/steveklabnik&quot;&gt;Steve Klabnik&lt;/a&gt;&lt;/td&gt;&lt;td&gt;book&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/carols10cents&quot;&gt;Carol Nichols&lt;/a&gt;&lt;/td&gt;&lt;td&gt;book, crates.io&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/shepmaster&quot;&gt;Jake Goulding&lt;/a&gt;&lt;/td&gt;&lt;td&gt;rust-playground&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/manishearth&quot;&gt;Manish Goregaokar&lt;/a&gt;&lt;/td&gt;&lt;td&gt;rust-clippy, unicode-segmentation, servo&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/pnkfelix&quot;&gt;Felix S Klock II&lt;/a&gt;&lt;/td&gt;&lt;td&gt;rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/abrown&quot;&gt;Andrew Brown&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasmtime, wasi-nn&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/xtuc&quot;&gt;Sven Sauleau&lt;/a&gt;&lt;/td&gt;&lt;td&gt;workers-rs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/RReverser&quot;&gt;Ingvar Stepanyan&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasm-bindgen&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/jasonwilliams&quot;&gt;Jason Williams&lt;/a&gt;&lt;/td&gt;&lt;td&gt;boa&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/bnjbvr&quot;&gt;Benjamin Bouvier&lt;/a&gt;&lt;/td&gt;&lt;td&gt;matrix-rust-sdk&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/hsivonen&quot;&gt;Henri Sivonen&lt;/a&gt;&lt;/td&gt;&lt;td&gt;encoding_rs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/eddyb&quot;&gt;Eduard-Mihai Burtescu&lt;/a&gt;&lt;/td&gt;&lt;td&gt;rust, rust-gpu&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/surma&quot;&gt;Surma&lt;/a&gt;&lt;/td&gt;&lt;td&gt;comlink, squoosh&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/gbj&quot;&gt;Greg Johnston&lt;/a&gt;&lt;/td&gt;&lt;td&gt;leptos&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/jkelleyrtp&quot;&gt;Jonathan Kelley&lt;/a&gt;&lt;/td&gt;&lt;td&gt;dioxus&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/futursolo&quot;&gt;Kaede Hoshikawa&lt;/a&gt;&lt;/td&gt;&lt;td&gt;yew&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/emilk&quot;&gt;Emil Ernerfeldt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;egui, rerun&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/jonhoo&quot;&gt;Jon Gjengset&lt;/a&gt;&lt;/td&gt;&lt;td&gt;haphazard&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/LukeMathWalker&quot;&gt;Luca Palmieri&lt;/a&gt;&lt;/td&gt;&lt;td&gt;zero-to-production, cargo-chef&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/yoshuawuyts&quot;&gt;Yosh Wuyts&lt;/a&gt;&lt;/td&gt;&lt;td&gt;async-std, http-types, surf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/killercup&quot;&gt;Pascal Hertleif&lt;/a&gt;&lt;/td&gt;&lt;td&gt;rust-cli book, diesel&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/cart&quot;&gt;Carter Anderson&lt;/a&gt;&lt;/td&gt;&lt;td&gt;bevy&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/mockersf&quot;&gt;François Mockers&lt;/a&gt;&lt;/td&gt;&lt;td&gt;bevy&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Frizi&quot;&gt;Frizi&lt;/a&gt;&lt;/td&gt;&lt;td&gt;bevy&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/kvark&quot;&gt;Dzmitry Malyshau&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wgpu&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/raphlinus&quot;&gt;Raph Levien&lt;/a&gt;&lt;/td&gt;&lt;td&gt;xilem, druid, kurbo, piet, vello&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/38&quot;&gt;Hao Hou&lt;/a&gt;&lt;/td&gt;&lt;td&gt;plotters&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/blitzarx1&quot;&gt;blitzarx1&lt;/a&gt;&lt;/td&gt;&lt;td&gt;egui_graphs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/grantshandy&quot;&gt;Grant Handy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;fdg&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/RazrFalcon&quot;&gt;Yevhenii Reizner&lt;/a&gt;&lt;/td&gt;&lt;td&gt;resvg, tiny-skia, rustybuzz&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/japaric&quot;&gt;Jorge Aparicio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;cross, cortex-m&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/dtolnay&quot;&gt;David Tolnay&lt;/a&gt;&lt;/td&gt;&lt;td&gt;serde, syn, cxx, thiserror&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/seanmonstar&quot;&gt;Sean McArthur&lt;/a&gt;&lt;/td&gt;&lt;td&gt;hyper, reqwest&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/MattiasBuelens&quot;&gt;Mattias Buelens&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasm-streams&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/torch2424&quot;&gt;Aaron Turner&lt;/a&gt;&lt;/td&gt;&lt;td&gt;assemblyscript, wasm-by-example&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/michaelsproul&quot;&gt;Michael Sproul&lt;/a&gt;&lt;/td&gt;&lt;td&gt;lighthouse&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/SimonSapin&quot;&gt;Simon Sapin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;servo&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/BurntSushi&quot;&gt;Andrew Gallant&lt;/a&gt;&lt;/td&gt;&lt;td&gt;ripgrep, regex&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/passcod&quot;&gt;Félix Saparelli&lt;/a&gt;&lt;/td&gt;&lt;td&gt;watchexec&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/badboy&quot;&gt;Jan-Erik Rediger&lt;/a&gt;&lt;/td&gt;&lt;td&gt;glean&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/ipetkov&quot;&gt;Ivan Petkov&lt;/a&gt;&lt;/td&gt;&lt;td&gt;crane&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;graph-chart-and-visualization-projects&quot;&gt;Graph, chart and visualization projects&lt;/h3&gt;
&lt;p&gt;The projects on GitHub, with stars from the API. Renamed ones already show their new name.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Repository&lt;/th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Stars&lt;/th&gt;&lt;th&gt;What it is&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/GoogleChromeLabs/squoosh&quot;&gt;GoogleChromeLabs/squoosh&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;26,021&lt;/td&gt;&lt;td&gt;In-browser image optimization with WebAssembly codecs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/wasmerio/wasmer&quot;&gt;wasmerio/wasmer&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;21,152&lt;/td&gt;&lt;td&gt;WebAssembly runtime&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/bytecodealliance/wasmtime&quot;&gt;bytecodealliance/wasmtime&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;18,718&lt;/td&gt;&lt;td&gt;The Bytecode Alliance&#39;s WebAssembly runtime&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/jacomyal/sigma.js&quot;&gt;jacomyal/sigma.js&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;12,187&lt;/td&gt;&lt;td&gt;WebGL rendering of large graphs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rerun-io/rerun&quot;&gt;rerun-io/rerun&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;11,590&lt;/td&gt;&lt;td&gt;Multimodal visualization for scientific and robotics data&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/perspective-dev/perspective&quot;&gt;perspective-dev/perspective&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;11,295&lt;/td&gt;&lt;td&gt;Interactive analytics and visualization with a WebAssembly core&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/cytoscape/cytoscape.js&quot;&gt;cytoscape/cytoscape.js&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;11,237&lt;/td&gt;&lt;td&gt;Graph visualization in JavaScript&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/apache/datafusion&quot;&gt;apache/datafusion&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;9,444&lt;/td&gt;&lt;td&gt;Analytical query engine&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/wasm-bindgen/wasm-bindgen&quot;&gt;wasm-bindgen/wasm-bindgen&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;9,187&lt;/td&gt;&lt;td&gt;Interop between Rust, WebAssembly and JavaScript&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/EmbarkStudios/rust-gpu&quot;&gt;EmbarkStudios/rust-gpu&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;7,559&lt;/td&gt;&lt;td&gt;Rust compiled to SPIR-V; Embark&#39;s repository was archived&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/wasm-bindgen/wasm-pack&quot;&gt;wasm-bindgen/wasm-pack&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;7,286&lt;/td&gt;&lt;td&gt;Packages Rust as an npm package&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/nannou-org/nannou&quot;&gt;nannou-org/nannou&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;6,766&lt;/td&gt;&lt;td&gt;Creative coding&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/observablehq/plot&quot;&gt;observablehq/plot&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;5,403&lt;/td&gt;&lt;td&gt;Statistical charts from Observable&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/plotters-rs/plotters&quot;&gt;plotters-rs/plotters&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,631&lt;/td&gt;&lt;td&gt;Charts with canvas, SVG and bitmap back ends&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/mdaines/viz-js&quot;&gt;mdaines/viz-js&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,353&lt;/td&gt;&lt;td&gt;Graphviz compiled to WebAssembly&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/linebender/resvg&quot;&gt;linebender/resvg&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,123&lt;/td&gt;&lt;td&gt;SVG renderer in pure Rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/petgraph/petgraph&quot;&gt;petgraph/petgraph&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;4,029&lt;/td&gt;&lt;td&gt;Graph data structures, the base of egui_graphs and fdg&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/silvia-odwyer/photon&quot;&gt;silvia-odwyer/photon&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,909&lt;/td&gt;&lt;td&gt;Image processing in WebAssembly&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/servo/pathfinder&quot;&gt;servo/pathfinder&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;3,895&lt;/td&gt;&lt;td&gt;GPU font and vector rendering&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/yuankunzhang/charming&quot;&gt;yuankunzhang/charming&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,601&lt;/td&gt;&lt;td&gt;Rust charts on Apache ECharts&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tgdwyer/WebCola&quot;&gt;tgdwyer/WebCola&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;2,099&lt;/td&gt;&lt;td&gt;Constraint-based graph layout&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/thx/resvg-js&quot;&gt;thx/resvg-js&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,998&lt;/td&gt;&lt;td&gt;resvg bindings for Node and the browser&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/dimforge/kiss3d&quot;&gt;dimforge/kiss3d&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,784&lt;/td&gt;&lt;td&gt;Simple 3D library&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/asny/three-d&quot;&gt;asny/three-d&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,678&lt;/td&gt;&lt;td&gt;3D renderer that compiles to WebAssembly&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/linebender/tiny-skia&quot;&gt;linebender/tiny-skia&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,657&lt;/td&gt;&lt;td&gt;Skia port in pure Rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/plotly/plotly.rs&quot;&gt;plotly/plotly.rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,457&lt;/td&gt;&lt;td&gt;Plotly for Rust&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/linebender/piet&quot;&gt;linebender/piet&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,376&lt;/td&gt;&lt;td&gt;2D rendering abstraction with several back ends&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/cosmosgl/graph&quot;&gt;cosmosgl/graph&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,296&lt;/td&gt;&lt;td&gt;GPU visualization of large graphs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/chartshq/muze&quot;&gt;chartshq/muze&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;1,184&lt;/td&gt;&lt;td&gt;Composable data visualization; archived&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tremor-rs/tremor-runtime&quot;&gt;tremor-rs/tremor-runtime&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;933&lt;/td&gt;&lt;td&gt;Event stream processing&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/blitzarx1/egui_graphs&quot;&gt;blitzarx1/egui_graphs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;708&lt;/td&gt;&lt;td&gt;Interactive graph widget for egui, on petgraph&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/alceal/plotlars&quot;&gt;alceal/plotlars&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;671&lt;/td&gt;&lt;td&gt;Bridges Polars and Plotly&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rosslh/Mandelbrot.site&quot;&gt;rosslh/Mandelbrot.site&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;330&lt;/td&gt;&lt;td&gt;Mandelbrot set explorer in the browser&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rustwasm/wasm_game_of_life&quot;&gt;rustwasm/wasm_game_of_life&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;288&lt;/td&gt;&lt;td&gt;Game of Life tutorial in Rust and WebAssembly; archived&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/grantshandy/fdg&quot;&gt;grantshandy/fdg&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;232&lt;/td&gt;&lt;td&gt;Force-directed graph layout&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Joylei/plotters-iced&quot;&gt;Joylei/plotters-iced&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;205&lt;/td&gt;&lt;td&gt;plotters back end for iced apps&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/mazznoer/colorgrad-js&quot;&gt;mazznoer/colorgrad-js&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;172&lt;/td&gt;&lt;td&gt;Color gradients in Rust and WebAssembly&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/feral-dot-io/leptos-chartistry&quot;&gt;feral-dot-io/leptos-chartistry&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;147&lt;/td&gt;&lt;td&gt;Charts for Leptos&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/brson/wasm-opt-rs&quot;&gt;brson/wasm-opt-rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;100&lt;/td&gt;&lt;td&gt;Bindings for the wasm-opt optimizer&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/angular-rust/ux-charts&quot;&gt;angular-rust/ux-charts&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;39&lt;/td&gt;&lt;td&gt;Responsive canvas charts&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/plotters-rs/plotters-canvas&quot;&gt;plotters-rs/plotters-canvas&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;38&lt;/td&gt;&lt;td&gt;HTML5 canvas back end for plotters&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Billy-Sheppard/chart-js-rs&quot;&gt;Billy-Sheppard/chart-js-rs&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right&quot;&gt;28&lt;/td&gt;&lt;td&gt;Chart.js bindings&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Outside GitHub, as crates: &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/forge-charts&quot;&gt;forge-charts&lt;/a&gt; makes interactive SVG charts for Leptos without JavaScript; &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/mermaid-rs-renderer&quot;&gt;mermaid-rs-renderer&lt;/a&gt; renders Mermaid diagrams in pure Rust and claims to be 100 to 1,400 times faster than mermaid-cli; &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/dagre&quot;&gt;dagre&lt;/a&gt; ports dagre&#39;s Sugiyama layout; and &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/web-sys&quot;&gt;web-sys&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/js-sys&quot;&gt;js-sys&lt;/a&gt; are the bindings for web APIs and JavaScript objects, maintained inside wasm-bindgen. On the commercial side, &lt;a rel=&quot;external&quot; href=&quot;https://ogma.linkurious.com&quot;&gt;Ogma&lt;/a&gt;, from Linkurious, is a WebGL graph engine.&lt;/p&gt;
&lt;h3 id=&quot;what-i-take-from-it-1&quot;&gt;What I take from it&lt;/h3&gt;
&lt;p&gt;Visualization in Rust and WebAssembly splits into four groups. GPU rendering: wgpu, vello, three-d, bevy. Charts and dashboards tied to web frameworks: plotters, plotlars, charming, leptos-chartistry. Graphs: petgraph, egui_graphs, fdg, dagre. And scientific visualization: rerun, resvg, tiny-skia.&lt;/p&gt;
&lt;p&gt;Graphs are the weakest group. There is no mature equivalent of networkx or d3-force in Rust with WebAssembly, and advanced layout, hierarchical or Sugiyama, is still rare. For large, dynamic graphs in the browser, JavaScript is still ahead with sigma.js and cytoscape.js. And there is little material in Portuguese linking Rust and WebAssembly to data visualization. A Portuguese-speaking community exists, like the &lt;a rel=&quot;external&quot; href=&quot;https://t.me/rustlangbr&quot;&gt;Rust Brasil group on Telegram&lt;/a&gt;, but I found no Brazilian visualization project with international traction.&lt;/p&gt;
</content>
        
    </entry>
</feed>
