Help us decide what content to build next.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.