# My Journey Through Open Source

Why I find working on open source so rewarding and a breakdown of some of my favorite projects.

Canonical URL: https://www.transitivebullsh.it/my-journey-through-open-source

Author: Travis Fischer

Published: 2018-08-06

Updated: 2026-08-24T07:18:00.000Z

Tags: OSS

![My Journey Through Open Source](<https://assets.cultural-alignment.com/personal-site/media/3bf1b2c17c7382b11794279fb7839f7382c82f0e4f5973bd79c86e69a2f071fb.jpg>)

<a id="1ac385a54014476aa0a9f8616831f4c9"></a>

## Intro

The feeling of working on open source is strangely unique and fulfilling. You feel as though you’re contributing to a **greater good** comprised of a network of brilliant people from all around the world. It’s a sensation that I rarely feel in my general work as a software engineer, and it reminds me of why I got into programming in the first place.

Towards that end, I’d love to share some of the open source projects that I’ve worked on, with the hope that they will inspire someone out there to do the same!

Whether it’s finding a cool project that you’re interested in, forking it, and [contributing back](<https://opensource.guide/how-to-contribute/>), or if you want to get better at publishing your own open source projects, I encourage you to get out there and start committing!

<a id="2c2c6280e8c4439b91076b9ef9f9ef86"></a>

## Categories

<a id="5d78b37882a9411f9284f401f77559b1"></a>

### **Node.js**

![](<https://assets.cultural-alignment.com/personal-site/media/30a90ddd7825acd291625dcd8dbb2ef8592974ee5eed6a18a77792ab21dbd1f4.png>)

- [webtorrent](<https://github.com/webtorrent/webtorrent>) — Streaming torrent client for the web. ⚡️ ([demo](<https://webtorrent.io/>)) (*contributor*)
- [ow](<https://github.com/sindresorhus/ow>) — Function argument validation for humans. (*contributor*)
- [awesome-lint](<https://github.com/sindresorhus/awesome-lint>) — Linter for [Awesome](<https://awesome.re/>) lists. (*contributor*)
- [update-markdown-jsdoc](<https://github.com/transitive-bullshit/update-markdown-jsdoc>) — Updates a markdown document section with jsdoc documentation. Useful to automatically update a library’s readme with API docs.
- [update-markdown-usage](<https://github.com/transitive-bullshit/update-markdown-usage>) — Updates a markdown document section with CLI usage info via ` --help `. Useful to automatically update a CLI’s readme with Usage docs.
- [abstract-object-storage](<https://github.com/transitive-bullshit/abstract-object-storage>) — Collection of useful utilities for working with Google Cloud Storage.
- [p-cache](<https://github.com/transitive-bullshit/p-cache>) — Decorator to memoize the results of async functions via lru-cache.
- [random](<https://github.com/transitive-bullshit/random>) — Seedable random number generator supporting many common distributions.
- [id-shortener](<https://github.com/transitive-bullshit/id-shortener>) — Efficient id / url shortener for Node.js backed by pluggable storage defaulting to redis.
- [node-compat-require](<https://github.com/transitive-bullshit/node-compat-require>) — Easily allow your Node program to run in a target node version range to maximize compatibility.
- [async-await-parallel](<https://github.com/transitive-bullshit/async-await-parallel>) — Node.js module with simple concurrency control for awaiting an array of async results.
- [snapchat](<https://github.com/transitive-bullshit/snapchat>) — Node.js client for the unofficial Snapchat API
- [ip-set](<https://github.com/transitive-bullshit/ip-set>) — Efficient mutable set data structure optimized for use with IPv4 and IPv6 addresses. The primary use case is for working with potentially large IP blacklists.
- [rect-cover](<https://github.com/transitive-bullshit/rect-cover>) — Computes a transform between two rects just like ` background-size: cover `. ([demo](<https://transitive-bullshit.github.io/rect-cover/>))
- [rect-contain](<https://github.com/transitive-bullshit/rect-contain>) — Computes a transform between two rects just like ` background-size: contain `. ([demo](<https://transitive-bullshit.github.io/rect-contain/>))
- [github-is-starred](<https://github.com/transitive-bullshit/github-is-starred>) — Checks if a user has starred a particular GitHub repo.
- [github-is-starred-cli](<https://github.com/transitive-bullshit/github-is-starred-cli>) — CLI to check if a user has starred a particular GitHub repo.

<a id="151115ec6dd54c758cc986d0829c8269"></a>

### **React**

![](<https://assets.cultural-alignment.com/personal-site/media/744d65b0440cf397932cd1f0786e234762dc6439b34236678bf3078bf2c2e285.png>)

- [create-react-library](<https://github.com/transitive-bullshit/create-react-library>) — CLI for easily publishing modern react libraries. ⚡

Create React Library (CRL) is easily one of my favorite and most used open source projects. It’s kind of like Create React App (CRA)’s younger sibling. It even uses CRA under the hood for example usage and local component development.

![Example of using create-react-library to create a reusable React component npm package.](<https://assets.cultural-alignment.com/personal-site/media/22eff7fb9cb72e99b834f95d7bad279e24c7deeb49d063681e35f1de6939503b.gif>)

Example of using [create-react-library](<https://github.com/transitive-bullshit/create-react-library>) to create a reusable React component npm package.

- [react-modern-library-boilerplate](<https://github.com/transitive-bullshit/react-modern-library-boilerplate>) — Boilerplate and CLI [create-react-library](<https://github.com/transitive-bullshit/create-react-library>) for publishing modern React modules with Rollup and example usage via create-react-app.
- [react-background-slideshow](<https://github.com/transitive-bullshit/react-background-slideshow>) — Sexy tiled background slideshow for React 🔥 ([demo](<https://transitive-bullshit.github.io/react-background-slideshow/>))
- [react-starfield-animation](<https://github.com/transitive-bullshit/react-starfield-animation>) – Canvas-based starfield animation for React ✨ ([demo](<https://transitive-bullshit.github.io/react-starfield-animation/>))
- [react-particle-effect-button](<https://github.com/transitive-bullshit/react-particle-effect-button>) — Bursting particle effect buttons for React 🎉 ([demo](<https://transitive-bullshit.github.io/react-particle-effect-button/>))
- [react-particle-animation](<https://github.com/transitive-bullshit/react-particle-animation>) — Canvas-based particle animation for React 🌐 ([demo](<https://transitive-bullshit.github.io/react-particle-animation/>))
- [react-block-image](<https://github.com/transitive-bullshit/react-block-image>) — React replacement for img with more control + fallback support. 🌃 ([demo](<https://transitive-bullshit.github.io/react-block-image/>))
- [react-mp3-recorder](<https://github.com/transitive-bullshit/react-mp3-recorder>) — Microphone recorder for React that captures mp3 audio 🎵 ([demo](<https://transitive-bullshit.github.io/react-mp3-recorder/>))
- [react-before-after-slider](<https://github.com/transitive-bullshit/react-before-after-slider>) — A sexy image comparison slider for React. ([demo](<https://transitive-bullshit.github.io/react-before-after-slider/>))

<a id="b311189dbba54aa0bac58712fe7988aa"></a>

### **Puppeteer**

![](<https://assets.cultural-alignment.com/personal-site/media/582e96d3a10fd38ad366db7f969b38a204fef7cbdc7e5538ca7866aa5a77fd6a.png>)

- [awesome-puppeteer](<https://github.com/transitive-bullshit/awesome-puppeteer>) — A curated list of awesome [puppeteer](<https://developers.google.com/web/tools/puppeteer/>) resources.
- [puppeteer-render-text](<https://github.com/transitive-bullshit/puppeteer-render-text>) — Robust text renderer using headless chrome.
- [puppeteer-render-text-cli](<https://github.com/transitive-bullshit/puppeteer-render-text-cli>) — CLI for robust text renderer using headless chrome.

![Example output png produced by puppeteer-render-text.](<https://assets.cultural-alignment.com/personal-site/media/a22f91c31c4b13027549d8dcd9605a9eee1c66064ab81853c846c6274638595b.png>)

Example output png produced by [puppeteer-render-text](<https://github.com/transitive-bullshit/puppeteer-render-text>).

- [puppeteer-email](<https://github.com/transitive-bullshit/puppeteer-email>) — Email automation driven by headless chrome.
- [puppeteer-email-cli](<https://github.com/transitive-bullshit/puppeteer-email/tree/master/packages/puppeteer-email-cli>) — CLI for email automation driven by headless chrome.
- [puppeteer-instagram](<https://github.com/transitive-bullshit/puppeteer-instagram>) — Instagram automation driven by headless chrome.
- [puppeteer-instagram-cli](<https://github.com/transitive-bullshit/puppeteer-instagram-cli>) — CLI for Instagram automation driven by headless chrome.
- [puppeteer-github](<https://github.com/transitive-bullshit/puppeteer-github>) — GitHub automation driven by headless chrome.
- [puppeteer-github-cli](<https://github.com/transitive-bullshit/puppeteer-github-cli>) — CLI for GitHub automation driven by headless chrome.

<a id="132120769597459d9187dbbbaf4c69cd"></a>

### **FFmpeg**

![](<https://assets.cultural-alignment.com/personal-site/media/8b0eb7a648e356363260138cd7497cdb82f0bdb3e1de00d4fe1245fed55e1e45.png>)

- [awesome-ffmpeg](<https://github.com/transitive-bullshit/awesome-ffmpeg>) — Curated list of awesome [ffmpeg](<http://ffmpeg.org/>) resources with a focus on JavaScript. 👻
- [ffmpeg-concat](<https://github.com/transitive-bullshit/ffmpeg-concat>) — Concats a list of videos together using ffmpeg with sexy OpenGL transitions.
- [ffmpeg-gl-transition](<https://github.com/transitive-bullshit/ffmpeg-gl-transition>) — FFmpeg filter for applying GLSL transitions between video streams ([gl-transitions](<https://gl-transitions.com/>)). This is a more low-level C++ version of [ffmpeg-concat](<https://github.com/transitive-bullshit/ffmpeg-concat>) that extends ffmpeg itself.

![ffmpeg-concat OpenGL transitions demo (also applies to ffmpeg-gl-transition)](<https://assets.cultural-alignment.com/personal-site/media/d8bfbcb7728935b34b08c6245537e9c9c673eda3afbf0e0d2ad38280a437dcf1.gif>)

[ffmpeg-concat](<https://github.com/transitive-bullshit/ffmpeg-concat>) OpenGL transitions demo (also applies to [ffmpeg-gl-transition](<https://github.com/transitive-bullshit/ffmpeg-gl-transition>))

- [ffmpeg-probe](<https://github.com/transitive-bullshit/ffmpeg-probe>) — Wrapper around ffprobe for getting info about media files.
- [ffmpeg-generate-video-preview](<https://github.com/transitive-bullshit/ffmpeg-generate-video-preview>) — Generates an attractive image strip or GIF preview from a video.

![GIF created with ffmpeg-generate-video-preview.](<https://assets.cultural-alignment.com/personal-site/media/ebefe5db0be86ccf68f806914e50f5b90cbe444955d5b3582f9cc0a25983e289.gif>)

GIF created with [ffmpeg-generate-video-preview](<https://github.com/transitive-bullshit/ffmpeg-generate-video-preview>).

- [ffmpeg-extract-frame](<https://github.com/transitive-bullshit/ffmpeg-extract-frame>) — Extracts a single frame from a video.
- [ffmpeg-extract-frames](<https://github.com/transitive-bullshit/ffmpeg-extract-frames>) — Extracts screenshots from a video using ffmpeg.
- [ffmpeg-extract-audio](<https://github.com/transitive-bullshit/ffmpeg-extract-audio>) — Extracts an audio stream from a media file.
- [ffmpeg-on-progress](<https://github.com/transitive-bullshit/ffmpeg-on-progress>) — Utility for robustly reporting progress with fluent-ffmpeg.
- [ffmpeg-cli-flags](<https://github.com/transitive-bullshit/ffmpeg-cli-flags>) — A comprehensive list of all ffmpeg commandline flags.
- [get-mp3-duration](<https://github.com/transitive-bullshit/get-mp3-duration>) — Computes the duration of an mp3 buffer in node or browser. ([demo](<https://transitive-bullshit.github.io/react-mp3-recorder/>))
- [p-exiftool](<https://github.com/transitive-bullshit/p-exiftool>) — Wrapper around [exiftool](<https://www.sno.phy.queensu.ca/~phil/exiftool/>) for reading metadata from many different file types.
- [gif-extract-frames](<https://github.com/transitive-bullshit/gif-extract-frames>) — Extracts frames from GIFs including inter-frame coalescing.

![Example extracted frames from a GIF via gif-extract-frames.](<https://assets.cultural-alignment.com/personal-site/media/7e5842dc2adc9edb946e9926f047d5a18c93e7da79ae8862282942d9b5aeb165.png>)

Example extracted frames from a GIF via [gif-extract-frames](<https://github.com/transitive-bullshit/gif-extract-frames>).

<a id="779be3c0f7ad4a17bd8b70f43dc585ed"></a>

### **Crawling**

![captcha-solver handles many different types of captchas, including Google’s reCAPTCHA v2.](<https://assets.cultural-alignment.com/personal-site/media/d7d67565999d2639995a214aa04a6546a542d6e79300997a0c6ee26c1e08cd49.gif>)

[captcha-solver](<https://github.com/transitive-bullshit/captcha-solver>) handles many different types of captchas, including Google’s reCAPTCHA v2.

- [captcha-solver](<https://github.com/transitive-bullshit/captcha-solver>) — Library and CLI for automating captcha verification across multiple providers.
- [parse-email](<https://github.com/transitive-bullshit/parse-email>) — Parses mime-encoded email messages.
- [parse-otp-message](<https://github.com/transitive-bullshit/parse-otp-message>) — Parses OTP messages for a verification code and service provider.
- [sms-number-verifier](<https://github.com/transitive-bullshit/sms-number-verifier>) — Allows you to spoof SMS number verification.
- [getsmscode](<https://github.com/transitive-bullshit/getsmscode>) — API client for [getsmscode.com](<http://www.getsmscode.com/>).

<a id="1d09a1c4f5e54aec8631bf2ff8638d81"></a>

### **Graphics**

![Before & After demo of the primitive algorithm reconstructing an image with 500 random shapes.](<https://assets.cultural-alignment.com/personal-site/media/4957db8649072a6e482129c2edf4aea148aa9a40a0d2167c68d6ffbf5582283c.jpg>)

Before & After demo of the [primitive](<https://github.com/transitive-bullshit/primitive>) algorithm reconstructing an image with 500 random shapes.

- [primitive](<https://github.com/transitive-bullshit/primitive>) — Reproduce images from geometric primitives. ([demo](<https://transitive-bullshit.github.io/primitive-web/>))
- [primitive-cli](<https://github.com/transitive-bullshit/primitive-cli>) — CLI to reproduce images from geometric primitives.
- [phash-im](<https://github.com/transitive-bullshit/phash-im>) — Perceptual image hashing via [imagemagick](<http://www.fmwconcepts.com/misc_tests/perceptual_hash_test_results_510/index.html>).
- [phash-gif](<https://github.com/transitive-bullshit/phash-gif>) — Perceptual GIF hashing for easily finding near-duplicate GIFs.
- [dissolve](<https://github.com/transitive-bullshit/dissolve-generator>) — Retro 2D dissolve effect generator. ([demo](<https://transitive-bullshit.github.io/dissolve-generator/demo>))

![Demo of dissolve effect generator.](<https://assets.cultural-alignment.com/personal-site/media/9c7f4205bf292fb4d64aee0686cec33473c7e103c847e586087179ab370856b0.gif>)

Demo of [dissolve](<https://github.com/transitive-bullshit/dissolve-generator>) effect generator.

<a id="6407801f2960468c8922707c0e222802"></a>

### **Koa**

![](<https://assets.cultural-alignment.com/personal-site/media/d47cd2c8fa1eeac7332169598693b3395f1e2d2595328954a15c26d116ce05b6.png>)

- [koa2-mongoose-crud](<https://github.com/transitive-bullshit/koa2-mongoose-crud>) — [Koa 2](<http://koajs.com/>) CRUD middleware for Mongoose models.
- [koa-micro](<https://github.com/transitive-bullshit/koa-micro>) — [Koa 2](<http://koajs.com/>) microservices with batteries included.
- [koa-api-boilerplate](<https://github.com/transitive-bullshit/koa-api-boilerplate>) — [Koa 2](<http://koajs.com/>) API boilerplate with batteries-included.

<a id="4c5d5bac686e4d8baa1ba81610565533"></a>

### **Misc**

- [Milton](<https://github.com/transitive-bullshit/Milton>) — C++ Rendering Framework w/ MLT, bidi path tracing, etc. and OpenGL Previews (undergrad thesis project from Brown ‘09).

![(Milton) The same scene rendered using ray tracing (top left), path tracing (top right), bidirectional path tracing (bottom left), and MLT (bottom right). The brute force path traced version in the top right should be seen as a correct, reference image. Note the lack of caustics on the floor and lack of indirect illumination in the ray traced version. Discrepancies in the bidirectional path tracing and MLT renders are due to differences in tone mapping as well as implementation issues with correctly handling specular paths.](<https://assets.cultural-alignment.com/personal-site/media/c28a0d54c8162b448185167df746a19d645019b9efeaa4ec177f73af710c69a9.png>)

([Milton](<https://github.com/transitive-bullshit/Milton>)) The same scene rendered using ray tracing (top left), path tracing (top right), bidirectional path tracing (bottom left), and MLT (bottom right). The brute force path traced version in the top right should be seen as a correct, reference image. Note the lack of caustics on the floor and lack of indirect illumination in the ray traced version. Discrepancies in the bidirectional path tracing and MLT renders are due to differences in tone mapping as well as implementation issues with correctly handling specular paths.

- [Mipscope](<https://github.com/transitive-bullshit/mipscope>) — Cross-platform IDE for students learning assembly on the MIPS architecture. The focus is on a convenient debugging environment, including a visual, reversible debugger.
- [Gravity-spritekit](<https://github.com/transitive-bullshit/Gravity-spritekit>) — iOS n-body simulation visualized with metaballs. Physics and graphics provided by SpriteKit.
- [Gravity-cocos2d](<https://github.com/transitive-bullshit/Gravity-cocos2d>) — iOS n-body simulation combined visualized with metaballs. Physics and graphics provided by cocos2d.

![Gravity visualization demo (Gravity-spritekit, Gravity-cocos2d).](<https://assets.cultural-alignment.com/personal-site/media/3f3491ba6e35c653828ab7aa102551946d41632750715a00ad66666b0383ed98.gif>)

Gravity visualization demo ([Gravity-spritekit](<https://github.com/transitive-bullshit/Gravity-spritekit>), [Gravity-cocos2d](<https://github.com/transitive-bullshit/Gravity-cocos2d>)).

<a id="f51f1afef5da4f53aea28ed77e769dd3"></a>

## **Conclusion**

I’ve had a **lot** of fun creating all of these open source modules & demos. The open source community is thriving, especially for JavaScript & NPM.

Hopefully, one or more of these projects will spark your curiosity to fork & experiment… or you’ll go on to create your own open source projects that are wildly different! 😜

You can [find me on GitHub](<https://github.com/transitive-bullshit>) if you want to follow my open source journey.
