A fast, lightweight local development server written in C for macOS.
Designed for serving static websites with a clean CLI workflow and useful developer features.
No external dependencies required.
xcode-select --installcc -Wall -Wextra -O2 main.c -o localserver -pthread./localserver --folder ./site --port 8080./localserver --folder ./siteโก๏ธ Runs at: http://127.0.0.1:8080
./localserver --folder ./site --port 3000./localserver \
--folder ./site1 --port 8080 \
--folder ./site2 --port 8081./localserver --host 127.0.0.1 --folder ./site --port 8080./localserver --host 0.0.0.0 --folder ./site --port 8080Access locally via:
http://127.0.0.1:8080
./localserver --open --folder ./site./localserver --verbose --folder ./site # detailed logs
./localserver --quiet --folder ./site # minimal output./localserver --dir-list --folder ./site./localserver --cors --folder ./site./localserver --cache --folder ./site./localserver --folder ./site --route /assets=./shared-assetsThen:
http://127.0.0.1:8080/assets/logo.png
Serves:
./shared-assets/logo.png
./localserver --folder ./site --port 8080 --listCreate a server.conf:
host=127.0.0.1
folder=./site
port=8080
route=/assets=./shared-assets
folder=./docs
port=8081
dir_list=true
cache=false
cors=true
verbose=true./localserveror:
./localserver --config server.confRequests like:
/assets/style.css
Are:
- URL decoded
- validated for safety
- resolved using
realpath() - streamed to the browser
When visiting:
/
The server serves:
index.html
If present:
404.html
It will be returned automatically for missing files.
Prevents:
../
Also blocks symlinks escaping the root directory.
Example blocked:
/../../etc/passwd
- 1 thread per server
- 1 detached thread per client
Allows multiple simultaneous requests without blocking.
Files are streamed in chunks:
#define FILE_STREAM_BUFFER_SIZE 65536Prevents high memory usage.
--route /assets=./shared-assetsMaps:
/assets โ ./shared-assets
Simple format:
key=value
Rules:
folderdefines a server blockport+routeapply to the last folder
| Upgrade | Where to edit |
|---|---|
| Add MIME types | mime_type_for_path() |
| Increase servers | #define MAX_SERVERS 3 |
| Increase routes | #define MAX_ROUTES 8 |
| Change default port | #define DEFAULT_PORT 8080 |
| Modify cache headers | send_headers() |
| Add SPA fallback | serve_request_path() |
| Add JSON logs | handle_client() |
| Add IPv6 | use getaddrinfo() |
Fallback unknown routes to index.html.
Useful for:
- React
- Vue
- Svelte
- โก Fast C-based HTTP server
- ๐งฉ Multiple folders / ports
- ๐ Safe file handling
- ๐งต Concurrent requests
- โ๏ธ Config + CLI support
- ๐งช Ideal for local web development