Loading...

Master Dart.

Dart

Dart mastery exercises. Become your team's resident Dart expert.

64 exercises
Dart Challenges

Put your Dart skills to the test. Practice by building popular open-source tools from scratch.

Build your own Shell
FREE THIS MONTH
This challenge is free until 1 April 2026!
Build your own Shell

A shell is the program that interprets what you type into the terminal. It reads your commands, runs programs, and prints their output. Popular examples are Bash and ZSH.

In this challenge, you'll build your own shell from scratch.

Your shell will run a REPL, parse commands, spawn processes, and more.

Print a prompt
Login via GitHub to view this stage
Handle invalid commands
Login via GitHub to view this stage
Implement a REPL
Login via GitHub to view this stage
Implement exit
Login via GitHub to view this stage
Implement echo
Login via GitHub to view this stage
Implement type
Login via GitHub to view this stage
Locate executable files
Login via GitHub to view this stage
Run a program
Login via GitHub to view this stage

Navigation

The pwd builtin
Login via GitHub to view this stage
The cd builtin: Absolute paths
Login via GitHub to view this stage
The cd builtin: Relative paths
Login via GitHub to view this stage
The cd builtin: Home directory
Login via GitHub to view this stage

Quoting

Single quotes
Login via GitHub to view this stage
Double quotes
Login via GitHub to view this stage
Backslash outside quotes
Login via GitHub to view this stage
Backslash within single quotes
Login via GitHub to view this stage
Backslash within double quotes
Login via GitHub to view this stage
Executing a quoted executable
Login via GitHub to view this stage

Redirection

Redirect stdout
Login via GitHub to view this stage
Redirect stderr
Login via GitHub to view this stage
Append stdout
Login via GitHub to view this stage
Append stderr
Login via GitHub to view this stage

Command Completion

Builtin completion
Login via GitHub to view this stage
Completion with arguments
Login via GitHub to view this stage
Missing completions
Login via GitHub to view this stage
Executable completion
Login via GitHub to view this stage
Multiple completions
Login via GitHub to view this stage
Partial completions
Login via GitHub to view this stage

Filename Completion

File completion
Login via GitHub to view this stage
Nested file completion
Login via GitHub to view this stage
Directory completion
Login via GitHub to view this stage
Missing completions
Login via GitHub to view this stage
Multiple matches
Login via GitHub to view this stage
Partial completions
Login via GitHub to view this stage
Multi-argument completions
Login via GitHub to view this stage

Pipelines

Dual-command pipeline
Login via GitHub to view this stage
Pipelines with built-ins
Login via GitHub to view this stage
Multi-command pipelines
Login via GitHub to view this stage

History

The history builtin
Login via GitHub to view this stage
Listing history
Login via GitHub to view this stage
Limiting history entries
Login via GitHub to view this stage
Up-arrow navigation
Login via GitHub to view this stage
Down-arrow navigation
Login via GitHub to view this stage
Executing commands from history
Login via GitHub to view this stage

History Persistence

Read history from file
Login via GitHub to view this stage
Write history to file
Login via GitHub to view this stage
Append history to file
Login via GitHub to view this stage
Read history on startup
Login via GitHub to view this stage
Write history on exit
Login via GitHub to view this stage
Append history on exit
Login via GitHub to view this stage
Build your own HTTP server
Build your own HTTP server

HTTP is the protocol that powers the web. In this challenge, you'll build a HTTP server from scratch using TCP primitives. Your server will be capable of handling simple GET/POST requests, serving files and handling multiple concurrent connections.

Along the way, we'll learn about TCP connections, HTTP headers, HTTP verbs, handling multiple connections and more.

Bind to a port
Login via GitHub to view this stage
Respond with 200
Login via GitHub to view this stage
Extract URL path
Login via GitHub to view this stage
Respond with body
Login via GitHub to view this stage
Read header
Login via GitHub to view this stage
Concurrent connections
Login via GitHub to view this stage
Return a file
Login via GitHub to view this stage
Read request body
Login via GitHub to view this stage

HTTP Compression

Compression headers
Login via GitHub to view this stage
Multiple compression schemes
Login via GitHub to view this stage
Gzip compression
Login via GitHub to view this stage

Persistent Connections

Persistent connections
Login via GitHub to view this stage
Concurrent persistent connections
Login via GitHub to view this stage
Connection closure
Login via GitHub to view this stage
Many more to come...
coming soon
We release new challenges based on user votes. Let us know what you'd like to see next!
challenge voting
Vote on upcoming challenges