This repository is a compilation of well-written, step-by-step guides for re-creating our favorite technologies from scratch.
What I cannot create, I do not understand — Richard Feynman.
It's a great way to learn.
3D Renderer
Augmented Reality
BitTorrent Client
Blockchain / Cryptocurrency
Bot
Command-Line Tool
Database
Docker
Emulator / Virtual Machine
Front-end Framework / Library
Game
Git
Network Stack
Neural Network
Operating System
Physics Engine
Programming Language
Regex Engine
Search Engine
Shell
Template Engine
Text Editor
Visual Recognition System
Voxel Engine
Web Browser
Web Server
Uncategorized
3D Renderer
C++: Introduction to Ray Tracing: a Simple Method for Creating 3D Images
C++: How OpenGL works: software rendering in 500 lines of code
C++: Raycasting engine of Wolfenstein 3D
C++: Physically Based Rendering:From Theory To Implementation
C++: Ray Tracing in One Weekend
C++: Rasterization: a Practical Implementation
C# / TypeScript / JavaScript: Learning how to write a 3D soft engine from scratch in C#, TypeScript or JavaScript
Java / JavaScript: Build your own 3D renderer
Java: How to create your own simple 3D render engine in pure Java
JavaScript / Pseudocode: Computer Graphics from scratch
Python: A 3D Modeller
Augmented Reality
C#: How To: Augmented Reality App Tutorial for Beginners with Vuforia and Unity 3D [video]
C#: How To Unity ARCore [video]
C#: AR Portal Tutorial with Unity [video]
C#: How to create a Dragon in Augmented Reality in Unity ARCore [video]
C#: How to Augmented Reality AR Tutorial: ARKit Portal to the Upside Down [video]
Python: Augmented Reality with Python and OpenCV
BitTorrent Client
C#: Building a BitTorrent client from scratch in C#
Go: Building a BitTorrent client from the ground up in Go
Nim: Writing a Bencode Parser
Node.js: Write your own bittorrent client
Python: A BitTorrent client in Python 3.5
Blockchain / Cryptocurrency
ATS: Functional Blockchain
C#: Programming The Blockchain in C#
Crystal: Write your own blockchain and PoW algorithm using Crystal
Go: Building Blockchain in Go
Go: Code your own blockchain in less than 200 lines of Go
Java: Creating Your First Blockchain with Java
JavaScript: A cryptocurrency implementation in less than 1500 lines of code
JavaScript: Build your own Blockchain in JavaScript
JavaScript: Learn & Build a JavaScript Blockchain
JavaScript: Creating a blockchain with JavaScript
JavaScript: How To Launch Your Own Production-Ready Cryptocurrency
JavaScript: Writing a Blockchain in Node.js
Kotlin: Let’s implement a cryptocurrency in Kotlin
Python: Learn Blockchains by Building One
Python: Build your own blockchain: a Python tutorial
Python: A Practical Introduction to Blockchain with Python
Python: Let’s Build the Tiniest Blockchain
Ruby: Programming Blockchains Step-by-Step (Manuscripts Book Edition)
Scala: How to build a simple actor-based blockchain
TypeScript: Naivecoin: a tutorial for building a cryptocurrency
TypeScript: NaivecoinStake: a tutorial for building a cryptocurrency with the Proof of Stake consensus
Rust: Building A Blockchain in Rust & Substrate
Bot
Haskell: Roll your own IRC bot
Node.js: Creating a Simple Facebook Messenger AI Bot with API.ai in Node.js
Node.js: How to make a responsive telegram bot
Node.js: Create a Discord bot
Node.js: gifbot - Building a GitHub App
Node.js: Building A Simple AI Chatbot With Web Speech API And Node.js
Python: How to Build Your First Slack Bot with Python
Python: How to build a Slack Bot with Python using Slack Events API & Django under 20 minute
Python: Build a Reddit Bot
Python: How To Make A Reddit Bot [video]
Python: How To Create a Telegram Bot Using Python
Python: Create a Twitter Bot in Python Using Tweepy
Python: Creating Reddit Bot with Python & PRAW [video]
R: Build A Cryptocurrency Trading Bot with R
Rust: A bot for Starcraft in Rust, C or any other language
Command-Line Tool
Go: Visualize your local git contributions with Go
Go: Build a command line app with Go: lolcat
Go: Building a cli command with Go: cowsay
Go: Go CLI tutorial: fortune clone
Nim: Writing a stow alternative to manage dotfiles
Node.js: Create a CLI tool in Javascript
Rust: Command line apps in Rust
Rust: Writing a Command Line Tool in Rust
Database
C: Let's Build a Simple Database
C++: Build Your Own Redis from Scratch
C#: Build Your Own Database
Clojure: An Archaeology-Inspired Database
Crystal: Why you should build your own NoSQL Database
Go: Build Your Own Database from Scratch: Persistence, Indexing, Concurrency
Go: Build Your Own Redis from Scratch
JavaScript: Dagoba: an in-memory graph database
Python: DBDB: Dog Bed Database
Python: Write your own miniature Redis with Python
Ruby: Build your own fast, persistent KV store in Ruby
Rust: Build your own Redis client and server
Docker
C: Linux containers in 500 lines of code
Go: Build Your Own Container Using Less than 100 Lines of Go
Go: Building a container from scratch in Go [video]
Python: A workshop on Linux containers: Rebuild Docker from Scratch
Python: A proof-of-concept imitation of Docker, written in 100% Python
Shell: Docker implemented in around 100 lines of bash
Emulator / Virtual Machine
C: Home-grown bytecode interpreters
C: Virtual machine in C
C: Write your Own Virtual Machine
C: Writing a Game Boy emulator, Cinoop
C++: How to write an emulator (CHIP-8 interpreter)
C++: Emulation tutorial (CHIP-8 interpreter)
C++: Emulation tutorial (GameBoy emulator)
C++: Emulation tutorial (Master System emulator)
C++: NES Emulator From Scratch [video]
Common Lisp: CHIP-8 in Common Lisp
JavaScript: GameBoy Emulation in JavaScript
Python: Emulation Basics: Write your own Chip 8 Emulator/Interpreter
Rust: 0dmg: Learning Rust by building a partial Game Boy emulator
Front-end Framework / Library
JavaScript: WTF is JSX (Let's Build a JSX Renderer)
JavaScript: A DIY guide to build your own React
JavaScript: Building React From Scratch [video]
JavaScript: Gooact: React in 160 lines of JavaScript
JavaScript: Learn how React Reconciler package works by building your own lightweight React DOM
JavaScript: Build Yourself a Redux
JavaScript: Let’s Write Redux!
JavaScript: Redux: Implementing Store from Scratch [video]
JavaScript: Build Your own Simplified AngularJS in 200 Lines of JavaScript
JavaScript: Make Your Own AngularJS
JavaScript: How to write your own Virtual DOM
JavaScript: Building a frontend framework, from scratch, with components (templating, state, VDOM)
JavaScript: Build your own React
JavaScript: Building a Custom React Renderer [video]
Game
C: Handmade Hero
C: How to Program an NES game in C
C: Chess Engine In C [video]
C: Let's Make: Dangerous Dave [video]
C: Learn Video Game Programming in C[video]
C: Coding A Sudoku Solver in C [video]
C: Coding a Rogue/Nethack RPG in C [video]
C: On Tetris and Reimplementation
C++: Breakout
C++: Beginning Game Programming v2.0
C++: Tetris tutorial in C++ platform independent focused in game logic for beginners
C++: Remaking Cavestory in C++ [video]
C++: Reconstructing Cave Story [video]
C++: Space Invaders from Scratch
C#: Learn C# by Building a Simple RPG
C#: Creating a Roguelike Game in C#
C#: Build a C#/WPF RPG
Go: Games With Go [video]
Java: Code a 2D Game Engine using Java - Full Course for Beginners [video]
Java: 3D Game Development with LWJGL 3
JavaScript: 2D breakout game using Phaser
JavaScript: How to Make Flappy Bird in HTML5 With Phaser
JavaScript: Developing Games with React, Redux, and SVG
JavaScript: Build your own 8-Ball Pool game from scratch [video]
JavaScript: How to Make Your First Roguelike
JavaScript: Think like a programmer: How to build Snake using only JavaScript, HTML & CSS
Lua: BYTEPATH
Python: Developing Games With PyGame
Python: Making Games with Python & Pygame [pdf]
Python: Roguelike Tutorial Revised
Ruby: Developing Games With Ruby
Ruby: Ruby Snake
Rust: Adventures in Rust: A Basic 2D Game
Rust: Roguelike Tutorial in Rust + tcod
Git
Haskell: Reimplementing “git clone” in Haskell from the bottom up
JavaScript: Gitlet
JavaScript: Build GIT - Learn GIT
Python: Just enough of a Git client to create a repo, commit, and push itself to GitHub
Python: Write yourself a Git!
Python: ugit: Learn Git Internals by Building Git Yourself
Ruby: Rebuilding Git in Ruby
Network Stack
C: Beej's Guide to Network Programming
C: Let's code a TCP/IP stack
C / Python: Build your own VPN/Virtual Switch
Ruby: How to build a network stack in Ruby
Neural Network
C#: Neural Network OCR
F#: Building Neural Networks in F#
Go: Build a multilayer perceptron with Golang
Go: How to build a simple artificial neural network with Go
Go: Building a Neural Net from Scratch in Go
JavaScript / Java: Neural Networks - The Nature of Code [video]
JavaScript: Neural networks from scratch for JavaScript linguists (Part1 — The Perceptron)
Python: A Neural Network in 11 lines of Python
Python: Implement a Neural Network from Scratch
Python: Optical Character Recognition (OCR)
Python: Traffic signs classification with a convolutional network
Python: Generate Music using LSTM Neural Network in Keras
Python: An Introduction to Convolutional Neural Networks
Python: Neural Networks: Zero to Hero
Operating System
Assembly: Writing a Tiny x86 Bootloader
Assembly: Baking Pi – Operating Systems Development
C: Building a software and hardware stack for a simple computer from scratch [video]
C: Operating Systems: From 0 to 1
C: The little book about OS development
C: Roll your own toy UNIX-clone OS
C: Kernel 101 – Let’s write a Kernel
C: Kernel 201 – Let’s write a Kernel with keyboard and screen support
C: Build a minimal multi-tasking kernel for ARM from scratch
C: How to create an OS from scratch
C: Malloc tutorial
C: Hack the virtual memory
C: Learning operating system development using Linux kernel and Raspberry Pi
C: Operating systems development for Dummies
C++: Write your own Operating System [video]
C++: Writing a Bootloader
Rust: Writing an OS in Rust
Rust: Add RISC-V Rust Operating System Tutorial
(any): Linux from scratch
Physics Engine
C: Video Game Physics Tutorial
C++: Game physics series by Allen Chou
C++: How to Create a Custom Physics Engine
C++: 3D Physics Engine Tutorial [video]
JavaScript: How Physics Engines Work
JavaScript: Broad Phase Collision Detection Using Spatial Partitioning
JavaScript: Build a simple 2D physics engine for JavaScript games
Programming Language
(any): mal - Make a Lisp
Assembly: Jonesforth
C: Baby's First Garbage Collector
C: Build Your Own Lisp: Learn C and build your own programming language in 1000 lines of code
C: Writing a Simple Garbage Collector in C
C: C interpreter that interprets itself.
C: A C & x86 version of the "Let's Build a Compiler" by Jack Crenshaw
C: A journey explaining how to build a compiler from scratch
C++: Writing Your Own Toy Compiler Using Flex
C++: How to Create a Compiler [video]
C++: Kaleidoscope: Implementing a Language with LLVM
F#: Understanding Parser Combinators
Elixir: Demystifying compilers by writing your own [video]
Go: The Super Tiny Compiler
Go: Lexical Scanning in Go [video]
Haskell: Let's Build a Compiler
Haskell: Write You a Haskell
Haskell: Write Yourself a Scheme in 48 Hours
Haskell: Write You A Scheme
Java: Crafting interpreters: A handbook for making programming languages
Java: Creating JVM Language
JavaScript: The Super Tiny Compiler
JavaScript: The Super Tiny Interpreter
JavaScript: Little Lisp interpreter
JavaScript: How to implement a programming language in JavaScript
JavaScript: Let’s go write a Lisp
OCaml: Writing a C Compiler
OCaml: Writing a Lisp, the series
Pascal: Let's Build a Compiler
Python: A Python Interpreter Written in Python
Python: lisp.py: Make your own Lisp interpreter
Python: How to Write a Lisp Interpreter in Python
Python: Let’s Build A Simple Interpreter
Python: Make Your Own Simple Interpreted Programming Language [video]
Python: From Source Code To Machine Code: Build Your Own Compiler From Scratch
Racket: Beautiful Racket: How to make your own programming languages with Racket
Ruby: A Compiler From Scratch
Ruby: Markdown compiler from scratch in Ruby
Rust: So You Want to Build a Language VM
Rust: Learning Parser Combinators With Rust
Swift: Building a LISP from scratch with Swift
TypeScript: Build your own WebAssembly Compiler
Regex Engine
C: A Regular Expression Matcher
C: Regular Expression Matching Can Be Simple And Fast
Go: How to build a regex engine from scratch
JavaScript: Build a Regex Engine in Less than 40 Lines of Code
JavaScript: How to implement regular expressions in functional javascript using derivatives
JavaScript: Implementing a Regular Expression Engine
Perl: How Regexes Work
Python: Build Your Own Regular Expression Engines: Backtracking, NFA, DFA
Scala: No Magic: Regular Expressions
Search Engine
CSS: A search engine in CSS
Python: Building a search engine using Redis and redis-py
Python: Building a Vector Space Indexing Engine in Python
Python: Building A Python-Based Search Engine [video]
Python: Making text search learn from feedback
Python: Finding Important Words in Text Using TF-IDF
Shell
C: Tutorial - Write a Shell in C
C: Let's build a shell!
C: Writing a UNIX Shell
C: Build Your Own Shell
C: Write a shell in C
Go: Writing a simple shell in Go
Rust: Build Your Own Shell using Rust
Template Engine
JavaScript: JavaScript template engine in just 20 lines
JavaScript: Understanding JavaScript Micro-Templating
Python: Approach: Building a toy template engine in Python
Python: A Template Engine
Ruby: How to write a template engine in less than 30 lines of code
Text Editor
C: Build Your Own Text Editor
C++: Designing a Simple Text Editor
Python: Python Tutorial: Make Your Own Text Editor [video]
Python: Create a Simple Python Text Editor!
Ruby: Build a Collaborative Text Editor Using Rails
Rust: Hecto: Build your own text editor in Rust
Visual Recognition System
Python: Developing a License Plate Recognition System with Machine Learning in Python
Python: Building a Facial Recognition Pipeline with Deep Learning in Tensorflow
Voxel Engine
C++: Let's Make a Voxel Engine
Java: Java Voxel Engine Tutorial [video]
Web Browser
Rust: Let's build a browser engine
Python: Browser Engineering
Web Server
C#: Writing a Web Server from Scratch
Node.js: Build Your Own Web Server From Scratch In JavaScript
Node.js: Let's code a web server from scratch with NodeJS Streams
Node.js: lets-build-express
PHP: Writing a webserver in pure PHP
Python: A Simple Web Server
Python: Let’s Build A Web Server.
Python: Web application from scratch
Python: Building a basic HTTP Server from scratch in Python
Python: Implementing a RESTful Web API with Python & Flask
Ruby: Building a simple websockets server from scratch in Ruby
(any): From NAND to Tetris: Building a Modern Computer From First Principles
Alloy: The Same-Origin Policy
C: How to Write a Video Player in Less Than 1000 Lines
C: Learn how to write a hash table in C
C: The very basics of a terminal emulator
C: Write a System Call
C: Sol - An MQTT broker from scratch
C++: Build your own VR headset for $200
C++: How X Window Managers work and how to write one
C++: Writing a Linux Debugger
C++: How a 64k intro is made
C++: Make your own Game Engine
C#: C# Networking: Create a TCP chater server, TCP games, UDP Pong and more
C#: Loading and rendering 3D skeletal animations from scratch in C# and GLSL
Clojure: Building a spell-checker
Go: Build A Simple Terminal Emulator In 100 Lines of Golang
Go: Let's Create a Simple Load Balancer
Go: Video Encoding from Scratch
Java: How to Build an Android Reddit App [video]
JavaScript: Build Your Own Module Bundler - Minipack
JavaScript: Learn JavaScript Promises by Building a Promise from Scratch
JavaScript: Implementing promises from scratch (TDD way)
JavaScript: Implement your own — call(), apply() and bind() method in JavaScript
JavaScript: JavaScript Algorithms and Data Structures
JavaScript: Build a ride hailing app with React Native
JavaScript: Build Your Own AdBlocker in (Literally) 10 Minutes
Kotlin: Build Your Own Cache
Lua: Building a CDN from Scratch to Learn about CDN
Nim: Writing a Redis Protocol Parser
Nim: Writing a Build system
Nim: Writing a MiniTest Framework
Nim: Writing a DMIDecode Parser
Nim: Writing a INI Parser
Nim: Writing a Link Checker
Nim: Writing a URL Shortening Service
Node.js: Build a static site generator in 40 lines with Node.js
Node.js: Building A Simple Single Sign On(SSO) Server And Solution From Scratch In Node.js.
Node.js: How to create a real-world Node CLI app with Node
Node.js: Build a DNS Server in Node.js
PHP: Write your own MVC from scratch in PHP
PHP: Make your own blog
PHP: Modern PHP Without a Framework
PHP: Code a Web Search Engine in PHP
Python: Build a Deep Learning Library [video]
Python: How to Build a Kick-Ass Mobile Document Scanner in Just 5 Minutes
Python: Continuous Integration System
Python: Recommender Systems in Python: Beginner Tutorial
Python: Write SMS-spam detector with Scikit-learn
Python: A Simple Content-Based Recommendation Engine in Python
Python: Stock Market Predictions with LSTM in Python
Python: Building a simple Generative Adversarial Network (GAN) using Tensorflow
Python: Learn ML Algorithms by coding: Decision Trees
Python: JSON Decoding Algorithm
Python: Build your own Git plugin with python
Ruby: A Pedometer in the Real World
Ruby: Creating a Linux Desktop application with Ruby
Rust: Building a DNS server in Rust
Rust: Writing Scalable Chat Service from Scratch
Rust: WebGL + Rust: Basic Water Tutorial
TypeScript: Tiny Package Manager: Learns how npm or Yarn works
Submissions welcome, just send a PR, or create an issue
Help us review pending submissions by leaving comments and "reactions"
This repository is the work of many contributors. It was started by Daniel Stefanovic, and is now maintained by CodeCrafters, Inc. To the extent possible under law, CodeCrafters, Inc. has waived all copyright and related or neighboring rights to this work.