My open-source principles

Open-source is amazing but you can't fully rely on it. Repos are abounded, removed, introduce vulnerabilities, become bloated over time, won't make the fix you need. I fully understand that — this is voluntary work by passionate people. I don't think it should be different. I just want to give a promise to the people who use my open-source work that they can rely on it.

I don't open-source often because it's hard to determine the things that you wouldn'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 giving it 6 to 12 months to see if it's still useful after that. I have over 150 local modules that are potential candidates.

Principles

These principles are things I do naturally. I've written them down because they are actionable. You can confirm them instead of believing my promises.

  • Helping you choose. I want to solve your problem and sometimes my library won't be the best approach.
    • README has an "Alternatives" section listing similar repos or alternative ways to solve the problem.
    • If my repo isn't the best alternative I will write the better one at the top of the README
  • Maintenance.
    • Fast responses. Response in 24 hours (holidays and personal issues are an exception).
    • No stale bot (I hate stale bots).
  • Reliable:
    • 100% test coverage. No instanbul ignore.
    • ESLint super strict rules. Using eslint-config-strictest.
    • TypeScript with all strict options enabled (including noUncheckedIndexedAccess).
    • Test for every bug.
  • Used in production. Every repo I open-source is used in my own products:
    • Nota — pro notes app designed for local Markdown files.
    • Historie — a super-fast way to search your browser history.
  • No bloat. I am inspired by @sindresorhus. I aim to create small and focused modules.
  • Learn from the code. Comments in the source code answering the "Why?" questions in your head. Example — https://github.com/astoilkov/use-local-storage-state/blob/master/src/storage.ts.

My repos

👋 If you like this article, there is a chance you will like a future one. You can subscribe to my infrequent newsletter ↓ or follow me on Twitter. If you aren't sure yet, you can read more about me on the home page.