About Sindre Sorhus

66 apps 12 years of app craft 1.2K+ repos 15 years of open source
Hi, I’m Sindre (hear how to say it). I make apps and open-source software, full time and on my own. In 2014, I quit my office job to backpack around Southeast Asia and work on open source. The backpacking ended, but the open source never did.
The apps are small, focused tools for Apple devices that each solve one problem well, and many of them are free. You can read what people say about them.
In open source, I maintain many npm packages and popular projects, from Node.js libraries to CLI tools and Swift packages.
NowTraveling in Vietnam. Drinking Cà phê muối. Working on a new secret Mac app. Trying to fix all bugs in my open-source projects (yes, really).Some Things About Me
- Grew up in Norway
- Started with LEGO, then made simple websites at nine
- My LEGO city took up almost the whole bedroom
- Didn’t learn programming properly until my twenties
- Before that, I copied PHP and JavaScript without quite understanding them
- Got into open source by contributing to TodoMVC, and later became one of its maintainers
- Speak Swift, JavaScript, English, and Norwegian, in that order
- Not a company, just me
- Coined the term “ponyfill”
- Started Awesome, one of the most-starred repos on GitHub
- Love Cà phê muối, Es yen, and Kaeng khiao wan
- Vietnamese salt coffee, Thai iced espresso, and Thai green curry
- Once coded for 43 hours straight. Would not recommend
- Unicorns everywhere. Open source is hard work, so it should also be fun
- On tabs since the ’90s
- Permanent dark mode
How I Learned to Make Things
At school, we watched Flash movies and played Flash games in every break. I wanted to know how they were made, but unlike websites, they had no “View Source”. So I decompiled them. Nobody obfuscated their files back then, so everything was there to see.
Then I started to change them. I redrew the characters, added new enemies, and put in high scores. I didn’t really understand the code. I changed things, broke them, and changed them back until the game did what I wanted. The first time other people played a game I had glued together, I was very proud.
That is still how I learn. I take something apart to see how it works, and then I make my own. Today, it’s macOS internals instead of Flash games.
The Apps That Made Me Want to Make Apps
In 2007, I left Windows for my first Mac, a 17-inch MacBook Pro, right in the middle of what people called the “Delicious Generation”. The name came from Delicious Library, an app that put your books and movies on a realistic wooden shelf. Independent developers were making Mac apps that felt more like crafted objects than software, and Coda and Things were my favorites. Coda put a whole web workflow (editor, preview, file transfer, and terminal) into one beautiful window. Things made a to-do list feel calm. Small teams made them, and every detail felt cared for.
I remember thinking: “One day, I’m going to make an app on that level.”
Then, for a long time, nothing happened. My biggest blocker was Objective-C. It never clicked with me: the square brackets, the manual memory management, the header files. So I made websites, and then open source, and then much more open source. In 2014, Apple released Swift, and that changed everything. I started learning it the same day.
The first app still took three more years. In January 2017, I got an idea for a small Mac app and had some free time, so I jumped right in and learned what I needed as I went. A month later, I released my first Mac app. It was a battery indicator. Not exactly Coda. But after ten years of dreaming, it took one month to make.
That era is mostly gone. Even Delicious Library shut down in 2024. But the goal is still the same: make apps that would wow the younger me who opened Coda for the first time. Apple has featured some of them, but none of them are on that level yet. I’m slowly getting there.
Changelog
- 2026
- Added Awesome hit 500K stars on GitHub
- Changed Rewrote this website in Swift
- 2025
- Added Released my 60th app
- 2024
- Added 5 million users of my apps
- Added Love for Vietnam
- Added Supercharge app
- 2023
- 2022
- Added Velja, One Thing, and Pure Paste apps
- 2021
- 2020
- Added Released my 10th app
- 2019
- Added My 1000th repo
- Added Dato app
- Added type-fest
- 2018
- 2017
- Added Released my first Mac app
- Added My first app on Setapp
- 2016
- Removed Being broke
- Added More unicorns, with eslint-plugin-unicorn
- 2015
- 2014
- 2013
- Changed Laptop, to a 15-inch MacBook Pro
- Added Released my first iPhone app
- Added Released my first popular project, Chalk
- 2012
- Added 2 months as a contractor for Google, on Yeoman
- Added My first contribution to jQuery
- Added My first npm package, grunt-recess
- 2011
- Added My first open-source repo, for this website
- Added My first contribution to TodoMVC, because I liked its logo
- Added Python and Django, where real coding started
- Removed PHP
- 2010
- Added Twitter account
- 2009
- Added GitHub account
- Added My first iPhone, a 3GS
- 2008
- Removed School
- 2007
- Added My first Mac, a 17-inch MacBook Pro
- Added A dream of making apps like Coda and Things
- Removed Windows
- 2005
- Added My first laptop, a 17-inch Dell Inspiron 9300
- 2000
- Added My second website, made in PowerPoint
- 1999
- Removed My first website. I crashed Dad’s computer with thousands of nested folders, and he had to reformat it
- 1998
- Added My first website, made in Notepad and uploaded with FTP
- 1997
- Added Internet access, which changed everything
- 1996
- Added A family computer with Windows 95, at seven
- 1989
- Added Initial release, in Norway
Some Things I Believe
- I’m all in on AI, but I don’t vibe code
- It’s the biggest shift in how software gets made in my lifetime, and I use it every day
- It makes me faster, not sloppier. I use it to brainstorm, fix bugs, and write the first version of a feature, which I then polish by hand
- I read every line of code. More than a decade of experience tells me when the AI is wrong, and the design, the decisions, and the quality bar stay mine
- The bottleneck is no longer writing code. It’s taste, judgment, and knowing what to build
- With AI, I can make, verify, and ship a fix faster than I can review a pull request for it
- I make things for fun, and to solve my own problems
- The easiest way to build a great app is to be your own customer
- Enthusiasm is an input. It’s easier to do great work on things that excite you
- Optimize for Monthly Happiness Percentage, not monthly recurring revenue. If some apps earn money, that’s a bonus
- Focus is a feature
- An app should do one thing well. Every “yes” makes the next “no” harder
- Bloat doesn’t arrive in one release. It arrives one reasonable feature at a time
- Focus lets me go deeper than the screenshot. A surface idea gets cloned in weeks, but taste, trust, and depth are hard to copy
- Small, focused modules are LEGO bricks. Build big things out of small, finished pieces
- One person can still make things that matter
- From Apple’s “Think Different” ad: “The people who are crazy enough to think they can change the world are the ones who do.” It’s at the bottom of every page on this site
- The real cost of software is supporting it
- Every feature is a promise to maintain it
- Hacks break with the next OS update, and then they turn into support email
- Free APIs go away, so I don’t depend on them
- A platform feature that makes my package obsolete is a win. Node.js made seven of them obsolete
- Native apps are better
- Faster, smaller, and at home on the platform. Most of my apps are below 4 MB
- Fit in, don’t stand out. The best app feels like it came with the system
- I support only the latest macOS and iOS, and spend the time on making the apps better instead
- Redesign only when it helps
- Change for the sake of change creates work for everyone and value for no one
- The people who use my apps deserve respect
- No ads, no tracking, and no personal data
- Pay once, own forever
- Prices in whole dollars, not $4.99. I have no wish to manipulate my users. Small ethical choices compound
- Behind every issue and support email is a real person. Empathy and kindness matter as much as code
- Readability beats cleverness
- Code is read far more often than it’s written
- Silent on success, loud on failure
By the Numbers
Apps
- 66 apps
- 32 free apps
- 6M+ users
- 12 years of craft
- 2.4K+ App Store ratings
- 4.7 average rating
- 10K+ support emails answered
Open Source
- 15 years of open source
- 1.2K+ repos
- 1.1M+ stars on my repos
- 85K+ followers
- 26K+ issues closed
- 15K+ pull requests merged from others
- 50K+ contributions
- 38K+ commits
- 2.5K+ pull requests opened
- 4.7K+ code reviews
- 71K+ comments
- 82 days in a row with contributions
- 388 busiest day, February 8, 2015
- Fri busiest weekday
npm
- 1K+ packages
- 700K+ dependents
- 5 of the 10 most-downloaded packages
- 23B+ downloads a week
- 38K+ downloads a second
- 8% of all npm downloads
Discover
Package of the Day
Repo of the Day
How I Make an App
- Write down every idea. Most of them are boring or bad, and that’s fine. It takes a lot of bad ideas to get to the good ones
- Start with the idea, and learn what I need to make it
- Design the app myself, and build it with AI as my tireless pair programmer
- Ship it, and let reality decide. Some of my most popular apps are weekend projects, and some I spent months on went nowhere
- Read every support email and reply myself
- After every WWDC, go through all my apps to see how they can use the new features
- But wait a year before trusting a brand-new API
What I Use
The things I use every day.
- 16-inch MacBook Pro
- M4 Pro, with 48 GB of memory
- iPhone 17 Pro, Apple Watch 7, and AirPods Pro 2
- Desk: my lap. External displays: none
- I travel light: the laptop, the phone, some T-shirts, shorts, and boxers. That’s it
- The apps in my Dock, for code
- Sublime Text, Xcode, iTerm2, Tower, Hopper, and VirtualBuddy. Sublime Text because it’s instant. Tower because Git history is easier to see than to remember
- The apps in my Dock, for everything else
- Safari, Notes, Reminders, and ChatGPT
- Claude Code and Codex in the terminal
- My own apps, every day
- Lungo, Dato, and Supercharge in the menu bar
- Dracula and JetBrains Mono in Sublime Text
- Dark, of course, and tabs. Default dark theme in Xcode
- Synthwave and chillstep while I code
- Apple’s Passwords app, Gmail in Safari, and Google for search
Where My Code Ended Up
Open source travels. I write a small package to solve my own problem, and years later, it turns up in places I never imagined.
- Three of the big AI coding agents started on Ink, which I maintain
- Claude Code and Gemini CLI draw their terminal UI with it, and Codex did too, before the Rust rewrite
- Apple ships my code
- The Books app on iOS includes
object-assign, and the Report a Problem website usesquery-string. Both list me in their acknowledgements
- The Books app on iOS includes
- The native ChatGPT app for Mac used my KeyboardShortcuts package
- Until OpenAI rewrote the app in Electron
- Google’s Gemini dictation demo for Mac uses KeyboardShortcuts for push-to-talk
- Hold a key, speak, and it types
- Got once powered Segment’s main backend API
- And the RPC client for all their microservices. That’s a long journey for a package with a three-letter name
- Chalk prints NASA’s green checkmarks
- NASA’s app generator for Terra UI uses it for its build messages, and Google’s zx colors its output with it
- NASA, Wikimedia, and the BBC lint their code with unicorns
- My code-quality plugin,
eslint-plugin-unicorn, is in NASA’s Cumulus and Open MCT, Wikimedia’s ESLint config, and the BBC’s TV player. Somewhere between space science and encyclopedic seriousness sits a mythical horse
- My code-quality plugin,
Some Fun Facts
- My name means “to sparkle”
- My namesake made Thor’s hammer, so I was destined to make tools
- It shipped with a bug: Loki, as a fly, bit the smith at the bellows, and the handle came out too short
- The web and I were born the same year
- Tim Berners-Lee proposed it at CERN in 1989. My release notes were shorter
- GIF is older than me
- CompuServe made it in 1987, and my Gifski app still helps it look good
- Velja means “to choose” in Nynorsk
- A fitting name for an app that chooses your browser
- Imago is Latin for “image”
- In biology, it’s also the adult stage of an insect, like a butterfly
- My package that does nothing gets thousands of downloads a week
- noop3 is “Supreme nothingness”, now at version 1000.0.0
Popular Projects
- chalkTerminal string styling done right23K+ stars
- type-festA collection of essential TypeScript types17K+ stars
- kyTiny & elegant JavaScript HTTP client based on the Fetch API17K+ stars
- gotHuman-friendly and powerful HTTP request library for Node.js14K+ stars
- purePretty, minimal and fast ZSH prompt14K+ stars
- oraElegant terminal spinner9.7K+ stars
- GifskiConvert videos to high-quality GIFs on your Mac8.5K+ stars
- xoJavaScript/TypeScript linter (ESLint wrapper) with great defaults7.9K+ stars
Support My Work
If what I make is useful to you, you can sponsor me or donate, buy one of my paid apps, or leave a nice review on the App Store. These people and companies already support me. Thank you!
More
- Interview with Indie Dev Monday (2021)
- Interview with Between the Wires (2017)
- Answering Anything & Everything, my old Q&A about anything people asked (PDF, 22 MB)