<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Antonio Stoilkov</title>
    <description>The latest articles on DEV Community by Antonio Stoilkov (@astoilkov).</description>
    <link>https://dev.to/astoilkov</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F884095%2F46663308-9d70-4f72-a0dc-833daba6cec1.png</url>
      <title>DEV Community: Antonio Stoilkov</title>
      <link>https://dev.to/astoilkov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/astoilkov"/>
    <language>en</language>
    <item>
      <title>Better npm search proposal</title>
      <dc:creator>Antonio Stoilkov</dc:creator>
      <pubDate>Tue, 19 Jul 2022 13:59:51 +0000</pubDate>
      <link>https://dev.to/astoilkov/better-npm-search-proposal-ka9</link>
      <guid>https://dev.to/astoilkov/better-npm-search-proposal-ka9</guid>
      <description>&lt;p&gt;TL;DR; Current npm search engines aren't great. I explore a npm search algorithm that gives fewer points for popularity and more for consistency of commits, releases, and responses in issues/discussions. This way I want to: 1) save a lot of developer time,  2) give visibility to conscientious developers who don't promote their work, 3) and more 👇.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with finding a good npm package
&lt;/h2&gt;

&lt;p&gt;I have constant issues with finding good npm packages:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://npms.io/"&gt;&lt;strong&gt;npms.io&lt;/strong&gt;&lt;/a&gt; is the best-performing algorithm for me. However, sometimes it's slow, other times I get an error and no results. Some checks no longer work — this results in older packages having higher scores because the index is updated only when a new version is published. If you go through the implementation, you will find a lot of the ranking is determined by some things that don't correlate well with how good the library is &lt;sup id="fnref1"&gt;1&lt;/sup&gt;. All this reminds me of &lt;a href="https://twitter.com/paulg/status/1512045289401683969"&gt;Bogus rankings damage what they rank. Especially if those being ranked play along.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/"&gt;&lt;strong&gt;npmjs.com&lt;/strong&gt;&lt;/a&gt; search is bad. For example, one of my libraries that shows &lt;a href="https://npms.io/search?q=use+local+storage"&gt;at the top on npms.io&lt;/a&gt; shows in &lt;a href="https://www.npmjs.com/search?q=use%20local%20storage"&gt;13th place on npmjs.com&lt;/a&gt;. The library is the most downloaded &lt;code&gt;localStorage&lt;/code&gt; hook and I had consistent commits and releases for the past 2 years. I don't know what happened with &lt;a href="https://blog.npmjs.org/post/154912817335/better-search-is-here"&gt;npm Blog Archive: Better search is here!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Others.&lt;/strong&gt; I have hopes for the future of &lt;a href="https://socket.dev/"&gt;socket.dev&lt;/a&gt; — it often has good results. However, the UX still has some issues and sometimes the results aren't optimal. &lt;a href="https://libraries.io"&gt;libraries.io&lt;/a&gt; search quality is sporadic. I also use &lt;a href="https://github.com/search"&gt;GitHub search&lt;/a&gt; and Google.&lt;/p&gt;

&lt;p&gt;Currently, I use the bash script below to search, the places I mentioned, all at once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;
&lt;span class="nv"&gt;encodedValue&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;node &lt;span class="nt"&gt;--eval&lt;/span&gt; &lt;span class="s2"&gt;"process.stdout.write(encodeURIComponent(&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="nv"&gt;$args&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;))"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

open &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="s2"&gt;"Google Chrome"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://npms.io/search?q=&lt;/span&gt;&lt;span class="nv"&gt;$encodedValue&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://socket.dev/search?q=&lt;/span&gt;&lt;span class="nv"&gt;$encodedValue&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://github.com/search?l=TypeScript&amp;amp;q=&lt;/span&gt;&lt;span class="nv"&gt;$encodedValue&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;type=Repositories"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://github.com/search?l=JavaScript&amp;amp;q=&lt;/span&gt;&lt;span class="nv"&gt;$encodedValue&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;type=Repositories"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://libraries.io/search?languages=&amp;amp;platforms=NPM&amp;amp;q=&lt;/span&gt;&lt;span class="nv"&gt;$encodedValue&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://www.google.com/search?q=site:npmjs.org+&lt;/span&gt;&lt;span class="nv"&gt;$encodedValue&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The bash script helps. However, this workflow is time-consuming and frustrating. My experience is: I open 10-20 tabs, close duplicates, close all irrelevant, close all without any activity, dive deep in those that are left. It seems &lt;a href="https://stackoverflow.com/questions/10568512/how-to-find-search-find-npm-packages"&gt;a lot of other people have my problem&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  My proposed solution
&lt;/h2&gt;

&lt;p&gt;The main question I ask myself when I think about a solution is: If you open-source the algorithm and people try to optimize for it, does it yield better libraries? Here are the things I'm proposing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Commit, release, response consistency.&lt;/strong&gt; Most points are given for consistency of releases, commits, and issue responses (excluding non-maintainers). The longer the period of consistency, the better — libraries that have existed for a lot of time and have been consistently updated should have the highest scores. Think about it, if a library has been consistently updated for a lot of time, don't you want to see it regardless of the download count? More points for evenly spread activity, fewer points for occasional bursts &lt;sup id="fnref2"&gt;2&lt;/sup&gt;. Optionally, if a library is over a threshold, show an icon/badge for consistency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Account consistency.&lt;/strong&gt; Some people go directly to &lt;a href="https://github.com/sindresorhus?tab=repositories&amp;amp;q=&amp;amp;type=&amp;amp;language=&amp;amp;sort=stargazers"&gt;Sindre Sorhus's repositories page&lt;/a&gt; and search there. If a person spends a big amount of time contributing, that's valuable. Give points to consistent accounts. Optionally, if a user is over a threshold, show an icon/badge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Popularity.&lt;/strong&gt; You can't ignore stars and downloads. That's an important factor. However, give it fewer points. This is a key aspect of this algorithm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Give more points to.&lt;/strong&gt; Most search engines have a "Sort by" option. This doesn't work. This is why I'm proposing an alternative "Give more points to" option that just switches the magnitude for specific criteria. Possible values will be "Repo consistency", "Account consistency" and "Popularity". "Repo consistency" will be selected by default. Selecting "Popularity" will make it work more like existing search engines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exclude bots.&lt;/strong&gt; Bots activity should be excluded, otherwise, the search will probably get a lot worse. Also, it opens an opportunity for easy manipulation. For example, a version bump by a bot shouldn't count at all. Similar to how GitHub's repo &lt;a href="https://github.com/astoilkov/main-thread-scheduling/graphs/contributors"&gt;contributions page&lt;/a&gt; work.&lt;/p&gt;

&lt;h2&gt;
  
  
  A possible pitfall in the idea
&lt;/h2&gt;

&lt;p&gt;A big portion of repos will have a low consistency rating. A good fallback may be needed to account for that. I'm not sure if popularity is good enough of a fallback.&lt;/p&gt;

&lt;p&gt;Is it possible the strange and opinionated scores used by other search engines needed? — I would bet on "no" but I'm very cautious with that guess.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I've done to move the idea forward
&lt;/h2&gt;

&lt;p&gt;I contacted Algolia and they gave me access to their &lt;a href="https://github.com/algolia/npm-search"&gt;npm index&lt;/a&gt;. I can use it for a basic implementation of my idea because it includes the history of all the releases. Also, the API returns sorted search results that can be used as a fallback or a base score. Not sure if this will be enough to produce consistently better results compared to other search engines.&lt;/p&gt;

&lt;p&gt;I created &lt;a href="https://github.com/npm/feedback/discussions/718"&gt;a new discussion in the npm/feedback repo&lt;/a&gt; to share my idea. I also mentioned my idea in relevant discussions: &lt;a href="https://github.com/npm/feedback/discussions/66"&gt;npm scores&lt;/a&gt;, &lt;a href="https://github.com/npm/feedback/discussions/685"&gt;Weird search behavior with stats&lt;/a&gt;, and &lt;a href="https://github.com/npm/feedback/discussions/682"&gt;Improve search functionality on npmjs.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you are a person that can move this idea forward, please write to me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I wrote this article
&lt;/h2&gt;

&lt;p&gt;At first, I wanted a better search. However, after researching and exploring the topic I now like it more for the opportunity it can create:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;save a lot of developer time &lt;sup id="fnref3"&gt;3&lt;/sup&gt;
&lt;/li&gt;
&lt;li&gt;allow non-vocal but conscientious developers be recognized&lt;/li&gt;
&lt;li&gt;when incentivizing the right thing, in theory, the quality of libraries and the ecosystem as a whole should improve&lt;/li&gt;
&lt;li&gt;in a utopian future, when the ecosystem improves and more rely on open-source, open-source developers get paid better&lt;/li&gt;
&lt;/ol&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;Some of the considered things for the ranking are: badges count in the readme, readme length, &lt;code&gt;.npmignore&lt;/code&gt; or &lt;code&gt;package.json&lt;/code&gt;'s &lt;code&gt;files&lt;/code&gt; property, existence of &lt;code&gt;changelog.md&lt;/code&gt; file, does it use a linter. Some of the checks aren't implemented well and incorrectly return &lt;code&gt;false&lt;/code&gt;. &lt;a href="https://npms.io/about"&gt;npms.io ranking algorithm explained&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;I'm not entirely sure what the specific implementation should look like. I think it should calculate evenness. Something like this — &lt;a href="https://stats.stackexchange.com/questions/122668/is-there-a-measure-of-evenness-of-spread"&gt;Is there a measure of 'evenness' of spread?&lt;/a&gt;. However, if you understand the algorithm/maths behind it, write to me so I can add it to the article. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;Reminds me of a Steve Jobs story — &lt;a href="https://www.folklore.org/StoryView.py?story=Saving_Lives.txt#:~:text=%22Well%2C%20let%27s%20say%20you%20can%20shave%2010%20seconds%20off%20of%20the%20boot%20time.%20Multiply%20that%20by%20five%20million%20users%20and%20thats%2050%20million%20seconds%2C%20every%20single%20day."&gt;Well, let's say you can shave 10 seconds off of the boot time. Multiply that by five million users and thats 50 million seconds, every single day.&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>npm</category>
      <category>node</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>My open-source principles</title>
      <dc:creator>Antonio Stoilkov</dc:creator>
      <pubDate>Thu, 14 Jul 2022 11:52:56 +0000</pubDate>
      <link>https://dev.to/astoilkov/my-open-source-principles-395</link>
      <guid>https://dev.to/astoilkov/my-open-source-principles-395</guid>
      <description>&lt;p&gt;Open-source is amazing but you can't fully rely on it. Repos are abounded, removed, introduce vulnerabilities, become bloated over time, and won't make the fix you need. My goal is to avoid this.&lt;/p&gt;

&lt;p&gt;I wish that other developers may see this, like some of my principles, and apply them to their work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Principles
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;My strategy against project abandonment.&lt;/strong&gt; I don't open-source often because it's hard to determine the things that you won't abandon. I've made that mistake before and I believe it's destroying more value than it's creating. I test if a repo is worth open-sourcing by privately using it for 6 to 12 months. If I continue using it, I put it in a list of candidates. I have over 150 local modules waiting and around 20 in the list of candidates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Activity.&lt;/strong&gt; Most of my responses are within 24 hours. I hate stale bots. I am conscientious enough to keep track of my issues. I am quite consistent at working on my libraries. Here are more than 2 years of contributions for &lt;a href="https://github.com/astoilkov/use-local-storage-state"&gt;&lt;code&gt;use-local-storage-state&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zKvU55PF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tokoc7jbx0ezw8le3ocr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zKvU55PF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tokoc7jbx0ezw8le3ocr.png" alt="Commits over time" width="880" height="324"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Helping you choose.&lt;/strong&gt; npm search engines aren't great. Finding the right library isn't trivial. I often struggle with this. That's why, at the end of each readme, I will list repos that, support something my library doesn't, have some advantage over it, or have a smaller bundle size. The only requirement is that they are actively maintained. I will remove any library that becomes stale. If there is a repo that's better than mine, I will put it on top of the readme.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reliable.&lt;/strong&gt; I do a few things to ensure that the library is reliable and works well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100% test coverage.&lt;/li&gt;
&lt;li&gt;My super strict ESLint rules — &lt;a href="https://github.com/astoilkov/eslint-config-strictest"&gt;eslint-config-strictest&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If there is a bug, when fixing it, I also create a test for it.&lt;/li&gt;
&lt;li&gt;Every repo I open-source is used in my own products. Either &lt;a href="https://nota.md"&gt;Nota&lt;/a&gt; or &lt;a href="https://ibar.app/"&gt;iBar&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;TypeScript with all strict options enabled (including &lt;a href="https://www.typescriptlang.org/tsconfig#noUncheckedIndexedAccess"&gt;&lt;code&gt;noUncheckedIndexedAccess&lt;/code&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;No bloat.&lt;/strong&gt; I am inspired by &lt;a href="https://sindresorhus.com/"&gt;Sindre Sorhus&lt;/a&gt;. I aim to create small and focused modules. I commonly decline feature requests and propose an alternative ad-hoc solution to the user. When the request is valid and can't be implemented outside the library, I usually refactor enough so the bundle size remains almost the same. Take a look at the history of &lt;a href="https://github.com/astoilkov/use-local-storage-state"&gt;&lt;code&gt;use-local-storage-state&lt;/code&gt;&lt;/a&gt; through the last versions. The size got smaller! If the feature is too big, I may consider splitting the problems into two repos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mg49djPI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pcd9xe07eyx021kea0xn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mg49djPI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pcd9xe07eyx021kea0xn.png" alt="Size over time" width="400" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn from the code.&lt;/strong&gt; I commonly read and learn from the code of other libraries. That's why I decided to write a lot of comments — &lt;a href="https://github.com/astoilkov/use-local-storage-state/blob/main/src/useLocalStorageState.ts"&gt;example&lt;/a&gt;. This way you can learn more about the domain and implement a custom solution if you need it.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>career</category>
    </item>
    <item>
      <title>Open-source contributors worth sponsoring</title>
      <dc:creator>Antonio Stoilkov</dc:creator>
      <pubDate>Thu, 30 Jun 2022 07:55:58 +0000</pubDate>
      <link>https://dev.to/astoilkov/open-source-contributors-worth-sponsoring-2ml4</link>
      <guid>https://dev.to/astoilkov/open-source-contributors-worth-sponsoring-2ml4</guid>
      <description>&lt;p&gt;Open-source creators are underpaid. Their passion for OOS makes businesses rich. This isn't an equal distribution. &lt;sup id="fnref1"&gt;1&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;GitHub Sponsors made it easier to monetize your open-source work. Being willing to give your money to support an open-source creator is rare — let's not make it harder. This is why I decided to create this list.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/sponsors/wooorm"&gt;Titus — @wooorm&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;25 sponsors.&lt;/li&gt;
&lt;li&gt;Titus has created an entire ecosystem of libraries around text processing. I have used many of his repos. Markdown, MDX, NLP, HTML, language section.&lt;/li&gt;
&lt;li&gt;I feel like he doesn't promote himself enough.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/sponsors/getify"&gt;Kyle Simpson — @getify&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;10 sponsors.&lt;/li&gt;
&lt;li&gt;The hugely popular book You Don't Know JS with 140k stars (the 7th most starred repo on GitHub).&lt;/li&gt;
&lt;li&gt;Personally, I am astonished how Kyle Simpson may have only 9 sponsors. It feels like he has done so much for the community to get better at JavaScript.&lt;/li&gt;
&lt;li&gt;Note that it is unknown how much he makes by selling his books. It is possible he successfully monetizes his content.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/sponsors/feross"&gt;Feross Aboukhadijeh — @feross&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;42 sponsors.&lt;/li&gt;
&lt;li&gt;He also searches for ways for open-source creators to monetize their work so they are more motivated. He created &lt;a href="https://feross.org/introducing-thanks/"&gt;thanks&lt;/a&gt; and &lt;a href="https://feross.org/funding-experiment-recap/"&gt;funding&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;He makes amazing stuff. I have tried Standard, used WebTorrent Desktop. He also recently launched &lt;a href="https://wormhole.app/"&gt;Wormhole - Simple, private file sharing&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/sponsors/fabiospampinato"&gt;Fabio Spampinato — @fabiospampinato&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;31 sponsors.&lt;/li&gt;
&lt;li&gt;If you are a VSCode user, you definitely should consider him. He made more than &lt;a href="https://github.com/fabiospampinato?utf8=%E2%9C%93&amp;amp;tab=repositories&amp;amp;q=vscode&amp;amp;type=source&amp;amp;language="&gt;30+ VSCode extensions&lt;/a&gt;. When I was using VSCode, I have unnoticeable been using his extensions.&lt;/li&gt;
&lt;li&gt;In the sponsor page he writes "This would allow me to pay rent each month without eating up my savings, and lower the stress level considerably.". These are the people who need help the most.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/sponsors/sdras"&gt;Sarah Drasner — @sdras&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;52 sponsors.&lt;/li&gt;
&lt;li&gt;Awesome creator with multiple popular repositories that create a lot of value.&lt;/li&gt;
&lt;li&gt;If you use Vue — she is a maintainer of their documentation.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/sponsors/tj"&gt;TJ Holowaychuk — @tj&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;27 sponsors.&lt;/li&gt;
&lt;li&gt;The creator of Express.js, Koa, Mocha, Commander, Apex, Up, ReworkCSS, PostCSS. I feel like he has created so much value for the community.&lt;/li&gt;
&lt;li&gt;He has 39 sponsors but with only one tire of $400 per month. He may had smaller tiers in the past. However, if he has 39 sponsors paying $400 per month this means he makes a lot.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/sponsors/nzakas"&gt;Nicholas C. Zakas — @nzakas&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;77 sponsors.&lt;/li&gt;
&lt;li&gt;The creator of ESLint. The writer of Understanding ECMAScript 6. The cool &lt;a href="https://github.com/humanwhocodes/computer-science-in-javascript"&gt;Computer Science in JavaScript&lt;/a&gt; and many more. Note that ESLint is sponsored separately — &lt;a href="https://github.com/sponsors/eslint"&gt;https://github.com/sponsors/eslint&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&amp;gt; In 2016, I had to give up all full-time and part-time work as I became very ill with Lyme disease. I've been working my way back to health ever since and truly hope I'll be back to full strength sometime during 2020. In the meantime, I contribute to various projects as my health allows, so it's not uncommon to see bursts of activity followed by time where I'm not active.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to sponsor the people you depend on, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="https://github.com/sponsors/community"&gt;https://github.com/sponsors/community&lt;/a&gt; and see all repos you depend on that also have a sponsor option.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;npx thanks&lt;/code&gt; in the root of your repository and see who to sponsor based on your repo and not your entire user or organization — &lt;a href="https://github.com/feross/thanks"&gt;thanks&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This list isn't complete as I probably don't know a lot of worthy people. If you have a suggestion, please write to me at &lt;a href="//mailto:hello@astoilkov.com"&gt;hello@astoilkov.com&lt;/a&gt; so I can add them.&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;You can also see &lt;a href="https://news.ycombinator.com/item?id=27252066"&gt;Monetizing open-source is problematic&lt;/a&gt; if you are interested in the topic of funding your open-source work. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
