Build Your Own X
A curated GitHub list of step-by-step tutorials for rebuilding well known technologies from scratch: databases, Git, shells, compilers, Docker, operating systems, web servers, emulators, search engines and more, in many languages. It is maintained by CodeCrafters and is one of the most starred repositories on GitHub. It suits developers who have finished beginner courses and want a project that teaches how real systems work underneath.
549k
GitHub · Sept 2026
51.6k
GitHub · Sept 2026
28
GitHub README · Sept 2026
July 2026
GitHub · Sept 2026
GitHub repo
Other
CodeCrafters
Intermediate
Free
What is in the list
The README groups tutorials under around 28 headings, each titled "Build your own..." Categories include:
- Systems: operating system, memory allocator, network stack, processor, emulator or virtual machine.
- Developer tools: Git, Docker, shell, text editor, command line tool, template engine.
- Data and search: database, search engine, regex engine.
- Languages: programming language interpreters and compilers.
- Web and networking: web server, web browser, BitTorrent client.
- Graphics, games and AI: 3D renderer, physics engine, voxel engine, game, neural network and visual recognition.
- Other: blockchain, bots and augmented reality.
Each entry names the language (C, C++, Python, Go, Rust, JavaScript, Java, Haskell and many others) and links to an external tutorial, article, book chapter or video series. The list itself is dedicated to the public domain.
Why it is so effective
Most projects students build after a course are variations of a to-do app. Rebuilding a real tool forces you to understand it: after writing a small Git you know what a commit object and a tree are; after building a shell you understand processes, pipes and file descriptors. That knowledge transfers to debugging and system design for the rest of your career.
How to choose and finish a project
- Pick something you use every day, so you care about how it works. Git, a shell, an HTTP server and a key value database are popular first choices.
- Choose one that slightly scares you but whose language you already know. Learning a new language and a new system at once is how people give up.
- Give it a month of regular sessions. Follow the tutorial first, then extend it with a feature the tutorial did not cover.
- Write a short README explaining what you built and what you learned. That turns it into a portfolio piece.
Where it falls short
The list only links out, so tutorial quality varies widely. Some are excellent multi-part series; others are brief blog posts, and a few links may point to material that has aged. Skim two or three options in your chosen category before committing. The maintaining company also sells its own paid, guided versions of some of these challenges; the list itself stays free.
Common questions
Is it good for beginners? Not for complete beginners. You should be comfortable writing small programs in at least one language first.
How long does a project take? Anywhere from a weekend (a simple web server) to several months (an operating system). Check the tutorial length before starting.
Which language should I use? The one you know best, unless the point of the exercise is to learn a systems language such as C, Go or Rust.
Best for: developers past the beginner stage who want to understand real systems by building them.
Ready to start?
Opens on CodeCrafters in a new tab.
Stuck on something specific?
Writing only gets you so far. If you want an answer to your situation rather than the general case, book a session and we will work through it together. Sessions are free for approved Sefism members, and a few slots open each week.
Follow along
New writing, resources and project ideas land here first.