Many developers want to start a side project but aren't sure what to build. The internet is full of ideas that are basic and dull.
Here's our list of 73 project ideas to inspire you. We have chosen projects that teach a lot and are fun to build.
Build a BitTorrent client that can download files using the BitTorrent protocol. You can start with single-file torrents. This is a great way to learn how P2P networking works.
Read the official BitTorrent specification here.
Build a program that solves Wordle. This can be a great lesson on information theory and entropy. You'll also get hands-on experience at optimizing computations.
This YouTube video will get you started.
Implement Optimal Transport from scratch to morph one face into another while preserving identity and structure. You'll apply linear programming to a real problem.
Here are some OT resources and a paper which proposes a solution.
Create a spreadsheet with support for cell references, simple formulas, and live updates. You'll learn about dependency graphs, parsing, and reactive UI design.
The founder of the GRID spreadsheet engine shares some insights here.
Build a lightweight container runtime from scratch without Docker. You'll learn about kernel namespaces, chroot, process isolation, and more.
Read this to understand how containers work.
Build a system that uses Euclid's postulates to derive geometric proofs and visualize the steps. You'll learn symbolic representation, rule systems, logic engines, and proof theory.
You can efficiently implement Gelernter's visionary 1959 paper today.
Google uses a crawler to navigate web pages and save their contents. By building one, you'll learn how web search works. It's also great practice for system design.
You can make your own list of sites and create a search engine on a topic of your interest.
This article proposes a design approach.
Build a DNS server that listens for queries, parses packets, resolves domains, and caches results. Learn more about low-level networking, UDP, TCP, and the internet.
Start with how DNS works and dive into the DNS packet format.
Build a game where players connect two actors through shared credits with other actors, and reveal the optimal path at the end. You'll learn how to deal with massive graphs.
Explore how to create fast graphs, and then try Landmark Labelling for supreme performance.
Implement the RAFT protocol from scratch to support distributed computing. Learn consensus, failure recovery, and how to build fault-tolerant distributed systems.
Visit this page for the RAFT paper and other resources.
Design a program from scratch that creates satisfying crosswords with adjustable difficulty. You'll learn procedural generation, constraint propagation, and difficulty modeling.
For example, you can implement the Wave Function Collapse algorithm explained here.
Bitcask is an efficient embedded key-value store designed to handle production-grade traffic. Building this will improve your understanding of databases and efficient storage.
You can implement this short paper.
Apps like Shazam extract unique features from audio. This fingerprint is then used to match and identify sounds. You'll need to learn hash-based lookups and a bit of signal processing.
Here's a detailed post with everything you need to know.
Recreate the industry-changing game using SDL, and add some story elements, NPC interactions, and levels. It'll be a perfect intro to game development.
This video will set you up.
Implement an algorithm from scratch to compare two text files or programs. This will involve dynamic programming and application of graph traversal.
Here's the classic paper behind Myers' diff, used in Git for years.
Generate UML class diagrams from source code with support for relationships like inheritance. You'll visualize object-oriented code and learn how to parse with ASTs.
This article explains parsing with ASTs.
Write your own encoder/decoder for the BMP image format and build a tiny viewer for it. You'll learn binary parsing, image encoding, and how to work with pixel buffers and headers.
The Wikipedia article is a good place to start.
Build a FUSE filesystem for Linux from scratch, with indexing, file metadata, and caching. You'll have to optimize data structures for storage and performance.
This article talks about the concepts used in filesystems.
Write the qubit and quantum gates from scratch. Use them to simulate a circuit for a quantum algorithm like Bernstein-Vazirani or Simon's algorithm.
Read this short paper for the essentials without any fluff.
Write a video player that decodes H.264/H.265 using ffmpeg, and supports casting local files to smart devices. Learn packet buffering, discovery protocols, and stream encoding.
Get started with this article.
Build a Redis clone from scratch that supports basic commands, RDB persistence, replica sync, streams, and transactions. You'll get to deep dive into systems programming.
You can use the official Redis docs as a guide.
Build a client-side video editor that runs in the browser without uploading files to a server. Learn how to work with WASM, and why people love using it for high performance tasks.
Visit the official WebAssembly site to get started.
This is a rite of passage. You'll get hands-on experience with encryption, token expiration, refresh flows, and how to manage user sessions securely.
Implement username and password auth. Then manage sessions with JWT or session IDs.
You have used it in searches and other places where you write text. Implement a solution that suggests the right words, and then optimize heavily for speed.
This YouTube video gives an idea of the implementation process.
Build a simple SQL engine that reads .db files, uses indexes and executes queries. It's a deep dive into how real-world databases are built and run efficiently.
You need to understand B-trees and how SQLite stores data on disk.
Remove background sounds from audio files. You'll learn signal processing and denoising techniques used in GPS, mouse input, sensors, object tracking, etc.
You can use a technique like Kalman Filtering to do this.
Design a file sharing app with sync, cloud storage, and basic p2p features that can scale to some extent. You'll get practice in cloud architecture and backend design.
This article dives into the system design.
Build a map engine to index roads, terrain (rivers, mountains), places (shops, landmarks), and areas (cities, states). Learn spatial indexing, range queries, and zoom-level abstractions.
Start by implementing an R-tree from scratch by following the original paper.
Use Natural Earth and GeoFabrik datasets to populate your map engine.
Recreate a city's road network, simulate traffic using real open data, and design an improved version. Tackle an NP-hard optimization problem with real constraints.
In some cases, nature has long solved what we call hard. Implement SMA or ACO here.
Develop a decentralized collaborative text editor. Similar to Google Docs, but without any central server. Use CRDTs to manage concurrent edits and ensure eventual consistency.
Use ropes, gap buffers, or piece tables to build a fast text buffer optimized for efficient editing.
Read this article on designing data structures for such apps.
Evolve working models of machinery using only primitive mechanical parts and constraints. You'll learn about genetic algorithms, fitness functions, and physics simulation.
You can design bridges, cars, clocks, calculators, catapults, and more. NASA used GAs to design an antenna for their space mission.
This YouTube video shows how interesting evolutionary design can get.
Create a server from scratch that supports HTTP requests, static files, routing, and reverse proxying. Learn socket programming and how web servers work.
This page will get you started.
Estimate a depth (disparity) map from a stereo image pair using Markov Random Fields. You'll learn about computer vision, graphical models, and inference techniques.
Start with the Middlebury Dataset and this article on belief propagation for stereo matching.
Build a minimal Git with core features like init, commit, diff, log, and branching. Learn how version control works using content-addressable storage, hashes, and trees.
Check out Write yourself a Git for an overview of git internals.
Build a Unix debugger with stepping, breakpoints, and memory inspection. You'll learn low-level systems programming and process control.
This article discusses the internal structure of GDB.
Build a deep learning framework from scratch with a tensor class, autograd, basic layers, and optimizers. Grasp the internals of backpropagation and gradient descent.
Start by building a simple 3-layer feedforward NN (multilayer perceptron) with your framework.
Andrej Karpathy explains the basic concepts in this YouTube Video.
Build a Chess app from scratch, where users can play against each other or your own UCI engine. This project offers a blend of algorithms, UI, game logic, and AI.
You can go one step further and make the engine play itself to improve like AlphaZero and Leela.
You can start with the rules and the chess programming wiki.
Build a fast search engine from scratch for the Wikipedia dump with typo tolerance and semantic ranking, and fuzzy queries. You'll learn indexing, tokenization, and ranking algorithms.
This article offers a good introduction to the basics of information retrieval.
Build a caching system to avoid redundant fetches for static assets. You'll learn web caching, log analysis, and how to use probabilistic data structures in a real setting.
You can use this dataset containing two month's worth of HTTP requests to the NASA server.
This article introduces some of the key concepts.
Build a short-video app with infinite scroll, social graphs of friends and subs, and a tailored feed. You'll learn efficient preloading, knowledge graphs, and behavioral signals.
Read this article on Monolith, Bytedance's recommendation system.
Implement NTP from scratch to build a background service that syncs system time with time servers. You'll learn daemon design and the internals of network time sync.
RFC 5905 is a great place to start.
Implement HyperLogLog from scratch to provide analytics on number of users engaging with hashtags in real time. You'll learn some key concepts around big data systems.
Start with Google's paper on HyperLogLog.
Write a query planner that rewrites SQL queries for better performance. You'll learn cost estimation, join reordering, and index selection.
This DuckDB post explains how optimizers work.
Implement an encrypted voting system for anonymity. Use zero-knowledge proofs to verify results.
Learn cryptographic primitives, smart contracts, and ZKPs.
For example, this paper attempts to define such a protocol.
Build a mesh VPN where nodes relay traffic without central servers. You'll learn NAT traversal, encrypted tunneling, and decentralized routing.
Tailscale's blog introduces some key concepts.
Build a file archiver that compresses, bundles, and encrypts your files. Implement compression and encryption algorithms from scratch. Benchmark your performance against zip.
You can refer to the official .zip specification.
Build a basic ray tracer to render 3D scenes with spheres, planes, and lights. This will be great practice in writing clean abstractions and optimizing performance-heavy code.
You can refer to the Ray Tracing in One Weekend ebook.
Create your own language. It is best to start with an interpreted language that does not need a complier. Design your own grammar, parser, and an evaluation engine.
Crafting Interpreters is by far the best resource you can refer to.
Recreate WhatsApp with chats, groups, history, encryption, notifications, and receipts. You'll get practice at building a production-grade app with an API, data store, and security.
You can draw inspiration from this system design approach.
Build a service to provide routes for a fleet of vehicles with limited capacity to deliver Amazon packages. You'll learn to optimize routing under constraints.
Here's a comparison of effective VRP algorithms.
Build a basic broker to handle topic creation, produce and consume requests. You'll implement concurrency, avoid race conditions, and learn how distributed logs work.
Here's a guide to the Kafka protocol.
Build an interactive knowledge graph that connects entities across media. Monitor the web for new content to keep it updated. You'll learn graph databases and data handling.
Explore this GitHub repo to learn about knowledge graphs and find some inspiration.
Create a malware and test it against simple firewalls on your VMs. Don't share the code with anyone, though. This project is a solid intro to cybersecurity.
This YouTube video discusses the core concepts.
Emulate the iconic GBA. You'll learn about CPU architecture, memory, graphics, and input.
You can use the GBATEK document to get started.
Implement a minimal userspace TCP/IP stack for Linux based on its core specification. You'll learn network and system programming at a deeper level.
You can get started with IETF's docs on TCP, IP, internet checksum, and more.
Write your own lock-free data structures using atomic primitives. You'll learn a lot about concurrency, memory management, and atomic operations.
Read about the concept here, and make sure to run a lot of tests like these.
Build a program to distribute requests across backend servers, check health, and support sessions. Learn about socket programming, concurrency, and scalable web infrastructure.
This article is an excellent intro to the topic.
Implement your own version of malloc
. Learn how memory allocation works under the hood by working with pointers, heaps, alignment, fragmentation, and system calls.
This tutorial by Marwan Burelle is the perfect place to start.
Build an app to host and stream 4k videos by writing a streaming protocol from scratch. You'll learn about file storage, video encoding, adaptive streaming, and scalable content delivery.
This YouTube video provides an overview of how it works.
Build an app that controls IR appliances and manual switches with device grouping, scheduling, and automation. This project is a mix of embedded systems, app dev, and UI design.
Watch this video for some inspiration.
Build a Continuous Integration system that watches a Git repo, runs tests in isolated environments, and reports results. You'll learn process orchestration and containerization.
This concise article will be helpful.
Implement a decision tree from scratch and use it to solve a binary classification task with random forest. You'll learn information gain, recursive partitioning, and overfitting.
This blog post covers the basics.
Build a shell with command parsing, process execution, piping, redirection, and job control. You'll learn a lot about system programming, memory, and operating systems.
This article discusses its architecture.
Build a node that can download and verify blocks from the Bitcoin network. You'll learn about Merkle trees, transactions, Bitcoin's P2P protocol, and more.
You can refer to the Mastering Bitcoin ebook here.
Write a simple make
tool that reads a Makefile and builds targets. You'll explore some neat concepts around caching, filesystem, version control, and automation.
This paper discusses how it works, and also suggests a non-recursive make
.
Build an extension to store passwords, OTPs, page state, scroll, forms, clipboard history, with auto-fill across sessions. You'll learn DOM inspection, secure storage, and sync protocols.
Start with the official Chrome or Mozilla docs on extensions.
Build a bot that uses trading algorithms to simulate or execute trades. Learn to structure event-driven systems, integrate APIs, and automate decisions under constraints.
For example, this paper describes one such algorithm you can implement.
Build a simple browser that parses HTML/CSS to render text and images. You'll learn tokenization, DOM trees, box models, style cascading, and layout algorithms.
This blog series explains the basic concepts.
Build a background app that uses your phone's GPS, motion, and mic to identify events and store a journal of your life. You'll learn signal processing, sensor APIs, and background tasks.
This article offers a glimpse into the experience of working with sensors.
Build a tiny renderer from scratch. This'll make you a better programmer across the board, and it's a must if you're serious about computer graphics.
Read this wiki to get started.
Build a laser tag system with real-time hit detection, wireless comms between guns, and live sync. You'll learn IR encoding, MQTT protocol, and lockstep/event-driven design.
This project attempts to do something similar.
Build an audio streaming system from scratch that plays music in sync across multiple devices or speakers. You'll learn low-latency transport, clock sync, buffering, and jitter handling.
Snapcast explains its sync approach here.
Build a p2p mesh network that routes traffic without ISPs or central servers. You'll learn distributed routing (like BGP for P2P), NAT traversal, and encrypted packet forwarding.
The Scuttlebutt Protocol and IPFS are great references.
That's a wrap.
If you do implement anything as a result of this post, or have any feedback on the ideas, let us know!