Skip to content

zenxdv/localserver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

3 Commits
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿš€ LocalServer

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.


๐Ÿ“ฆ Build Instructions (macOS)

No external dependencies required.

1. Install Apple Command Line Tools

xcode-select --install

2. Compile

cc -Wall -Wextra -O2 main.c -o localserver -pthread

3. Run

./localserver --folder ./site --port 8080

๐Ÿ–ฅ๏ธ CLI Usage Examples

Serve one folder

./localserver --folder ./site

โžก๏ธ Runs at: http://127.0.0.1:8080

Custom port

./localserver --folder ./site --port 3000

Multiple folders

./localserver \
  --folder ./site1 --port 8080 \
  --folder ./site2 --port 8081

Custom host

./localserver --host 127.0.0.1 --folder ./site --port 8080

Bind to all interfaces (LAN access)

./localserver --host 0.0.0.0 --folder ./site --port 8080

Access locally via:

http://127.0.0.1:8080

Open browser automatically

./localserver --open --folder ./site

Logging modes

./localserver --verbose --folder ./site   # detailed logs
./localserver --quiet --folder ./site     # minimal output

Enable directory listing

./localserver --dir-list --folder ./site

Enable CORS

./localserver --cors --folder ./site

Enable caching headers

./localserver --cache --folder ./site

Route alias

./localserver --folder ./site --route /assets=./shared-assets

Then:

http://127.0.0.1:8080/assets/logo.png

Serves:

./shared-assets/logo.png

List config + port availability

./localserver --folder ./site --port 8080 --list

โš™๏ธ Config File Support

Create 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

Run with config

./localserver

or:

./localserver --config server.conf

โœจ Features Explained

๐Ÿ“ Static File Serving

Requests like:

/assets/style.css

Are:

  1. URL decoded
  2. validated for safety
  3. resolved using realpath()
  4. streamed to the browser

๐Ÿ“„ Automatic index.html

When visiting:

/

The server serves:

index.html

๐Ÿšซ Custom 404 Page

If present:

404.html

It will be returned automatically for missing files.


๐Ÿ” Safe Path Handling

Prevents:

../

Also blocks symlinks escaping the root directory.

Example blocked:

/../../etc/passwd

โšก Concurrency Model

  • 1 thread per server
  • 1 detached thread per client

Allows multiple simultaneous requests without blocking.


๐Ÿ“ฆ Large File Streaming

Files are streamed in chunks:

#define FILE_STREAM_BUFFER_SIZE 65536

Prevents high memory usage.


๐Ÿ”€ Route Aliases

--route /assets=./shared-assets

Maps:

/assets โ†’ ./shared-assets

โš™๏ธ Config System

Simple format:

key=value

Rules:

  • folder defines a server block
  • port + route apply to the last folder

๐Ÿง  Customization Guide

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()

๐Ÿ”ฎ Suggested Next Feature

SPA Mode (--spa)

Fallback unknown routes to index.html.

Useful for:

  • React
  • Vue
  • Svelte

๐ŸŽฏ Summary

  • โšก Fast C-based HTTP server
  • ๐Ÿงฉ Multiple folders / ports
  • ๐Ÿ” Safe file handling
  • ๐Ÿงต Concurrent requests
  • โš™๏ธ Config + CLI support
  • ๐Ÿงช Ideal for local web development

About

CLI-first local HTTP static file server for macOS.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages