Vote

Help us decide what content to build next.

Challenges are step-by-step coding exercises where you build projects from scratch. Vote and help us decide which challenges to build.
Build your own Elasticsearch

Elasticsearch is a search engine based on Apache Lucene. In this challenge, you'll build your own Elasticsearch server that is compatible with existing Elasticsearch clients and capable of handling basic search queries.

Along the way you'll learn about Lucene's inverted index, Elasticsearch's REST API, query DSL and more.

Build your own IRC Server

IRC (Internet Relay Chat) is a text-based chat system that inspired applications like Slack & Discord. In this challenge, you'll build your own IRC server that is compatible with existing IRC clients and capable of handling multiple clients and channels.

Along the way you'll learn about the IRC protocol, IRC commands, IRC message formats, IRC daemons and more.

Build your own Compiler

Compilers are programs that translate code written in one language to another. In this challenge, you'll build a compiler that can compile a subset of Python syntax to x86 assembly.

Along the way you'll learn about parsing, abstract syntax trees (ASTs), code generation, the x86 assembly language and more.

Build your own Bitcoin node

Bitcoin is a decentralized cryptocurrency built on top of a blockchain. In this challenge, you'll build your own Bitcoin node that is capable of downloading and verifying blocks from the Bitcoin network.

Along the way you'll learn about Merkle trees, the Bitcoin transaction format, Bitcoin's P2P protocol, proof-of-work, and more.

Build your own npm

npm is a widely used package manager for Javascript applications. In this challenge, you'll build your own version of npm that can download and install packages from a public npm registry.

Along the way you'll learn about package.json, package-lock.json, the node_modules folder, npm's registry API, semver and more.

Build your own Make

Make is a build automation tool that builds executable programs from source code. In this challenge you'll build your own version of make that is capable of reading basic Makefiles and building targets.

Along the way you'll learn about Makefile syntax, rules & dependencies, how Make uses file modification times for caching and more.

Build your own Code Formatter

Code formatters help format code in a consistent & readable manner. In this challenge, you'll build a code formatter that can serve basic use-cases like fixing indentation and splitting content over multiple lines.

Along the way you'll learn about parsing code, handling code formatting rules and more.

Build your own LSP Server

The Language Server Protocol (LSP) is a protocol that editors like VSCode use to provide language-specific features like code-completion. In this challenge you'll build a Language Server that is capable of answering basic LSP messages.

Along the way, you'll learn about LSP capabilities, message types, message formats and how LSP works at the transport-layer.

Build your own Kafka
in progress

Apache Kafka is a distributed streaming platform used for building real-time data pipelines and streaming applications. In this challenge, you'll build your own Kafka server that is compatible with existing Kafka clients and capable of handling basic Kafka messages and topics.

Along the way you'll learn about Kafka's architecture, message format, replication protocol, and more.

Build your own DNS Server

The Domain Name System (DNS) is responsible for translating domain names to IP addresses. In this challenge, you'll build your own DNS server from scratch.

Along the way you'll learn about the DNS protocol, DNS record types, DNS caching, authoritative name servers and more.

Build your own Shell

Shells are a command-line interface to your operating system. In this challenge, you'll build your own version of bash that is capable of executing basic shell commands.

Along the way, you'll learn about pipes, redirection, fork+exec and more.

Build your own HTTP Server

HTTP is the protocol that powers the web. In this challenge, you'll build a HTTP/1.1 server that is capable of serving multiple clients.

Along the way you'll learn about TCP servers, HTTP request syntax, HTTP/1.1's request pipelining and more.