Skip to content

Instantly share code, notes, and snippets.

What would you like to do?

Discussion on reddit.

Each of these commands will run an ad hoc http static file server in your current (or specified) directory. Use this power wisely.

Python 2.x

$ python -m SimpleHTTPServer 8000

Python 3.x

$ python -m http.server 8000

Twisted (Python)

Depends on Twisted.

$ twistd -n web -p 8000 --path .


$ python -c 'from twisted.web.server import Site; from twisted.web.static import File; from twisted.internet import reactor; reactor.listenTCP(8000, Site(File(".")));'


Credit: Barking Iguana

$ ruby -rwebrick -e' => 8000, :DocumentRoot => Dir.pwd).start'

adsf (Ruby)

Credit: @twome

No directory listings.

$ gem install adsf   # install dependency
$ adsf -p 8000

Sinatra (Ruby)

No directory listings.

$ gem install sinatra   # install dependencies
$ ruby -rsinatra -e'set :public_folder, "."; set :port, 8000'


Credit: Anonymous Monk

$ cpan HTTP::Server::Brick   # install dependency
$ perl -MHTTP::Server::Brick -e '$s=HTTP::Server::Brick->new(port=>8000); $s->mount("/"=>{path=>"."}); $s->start'

Plack (Perl)

Credit: miyagawa

$ cpan Plack   # install dependency
$ plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");' -p 8000

Mojolicious (Perl)

No directory listings.

$ cpan Mojolicious::Lite   # install dependency
$ perl -MMojolicious::Lite -MCwd -e 'app->static->paths->[0]=getcwd; app->start' daemon -l http://*:8000

Node.js #1

Note: This server does funky things with relative paths. For example, if you have a file /tests/index.html, it will load index.html if you go to /test, but will treat relative paths as if they were coming from /.

$ npm install -g http-server   # install dependency
$ http-server -p 8000

Node.js #2

No directory listings.

$ npm install -g node-static   # install dependency
$ static -p 8000

PHP >= 5.4

Credit: /u/prawnsalad, @MattLicense

No directory listings.

$ php -S


Credit: @nivertech (with the addition of some basic mime types)

No directory listings.

$ erl -s inets -eval 'inets:start(httpd,[{server_name,"NAME"},{document_root, "."},{server_root, "."},{port, 8000},{mime_types,[{"html","text/html"},{"htm","text/html"},{"js","text/javascript"},{"css","text/css"},{"gif","image/gif"},{"jpg","image/jpeg"},{"jpeg","image/jpeg"},{"png","image/png"}]}]).'

IIS Express

Credit: /u/fjantomen

No directory listings. /path must be an absolute path.

Depends on IIS Express.

C:\> "C:\Program Files (x86)\IIS Express\iisexpress.exe" /path:C:\MyWeb /port:8000


If you have any suggestions, drop them in the comments below or on the reddit discussion. To get on this list, a solution must:

  1. serve static files using your current directory (or a specified directory) as the server root,
  2. be able to be run with a single, one line command (dependencies are fine if they're a one-time thing),
  3. serve basic file types (html, css, js, images) with proper mime types,
  4. require no configuration (from files or otherwise) beyond the command itself (no framework-specific servers, etc)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment