Each of these commands will run an ad hoc http static server in your current (or specified) directory, available at http://localhost:8000. Use this power wisely.
$ python -m SimpleHTTPServer 8000
$ python -m http.server 8000
$ twistd -n web -p 8000 --path .
Or:
$ python -c 'from twisted.web.server import Site; from twisted.web.static import File; from twisted.internet import reactor; reactor.listenTCP(8000, Site(File("."))); reactor.run()'
Depends on Twisted.
$ ruby -rwebrick -e'WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => Dir.pwd).start'
Credit: Barking Iguana
$ ruby -run -ehttpd . -p8000
Credit: nobu
$ gem install adsf # install dependency
$ adsf -p 8000
Credit: twome
No directory listings.
$ gem install sinatra # install dependency
$ ruby -rsinatra -e'set :public_folder, "."; set :port, 8000'
No directory listings.
$ cpan HTTP::Server::Brick # install dependency
$ perl -MHTTP::Server::Brick -e '$s=HTTP::Server::Brick->new(port=>8000); $s->mount("/"=>{path=>"."}); $s->start'
Credit: Anonymous Monk
$ cpan Plack # install dependency
$ plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");' -p 8000
Credit: miyagawa
$ cpan Mojolicious::Lite # install dependency
$ perl -MMojolicious::Lite -MCwd -e 'app->static->paths->[0]=getcwd; app->start' daemon -l http://*:8000
No directory listings.
$ npm install -g http-server # install dependency
$ http-server -p 8000
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 node-static # install dependency
$ static -p 8000
No directory listings.
$ php -S 127.0.0.1:8000
Credit: /u/prawnsalad and MattLicense
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"}]}]).'
Credit: nivertech (with the addition of some basic mime types)
No directory listings.
$ busybox httpd -f -p 8000
Credit: lvm
$ webfsd -F -p 8000
Depends on webfs.
C:\> "C:\Program Files (x86)\IIS Express\iisexpress.exe" /path:C:\MyWeb /port:8000
Depends on IIS Express.
Credit: /u/fjantomen
No directory listings. /path
must be an absolute path.
If you have any suggestions, drop them in the comments below or on the reddit discussion. To get on this list, a solution must:
- serve static files using your current directory (or a specified directory) as the server root,
- be able to be run with a single, one line command (dependencies are fine if they're a one-time thing),
- serve basic file types (html, css, js, images) with proper mime types,
- require no configuration (from files or otherwise) beyond the command itself (no framework-specific servers, etc)
- must run, or have a mode where it can run, in the foreground (i.e. no daemons)
UCSPI and publicfile
These serve up the
./127.0.0.1/
or./::1/
subdirectory, because that is how publicfile does virtual hosting. Make those a symbolic link to.
to make the current directory the one served. Also note that Bernstein publicfile does an unconditionalchroot()
and thus requires superuser privileges. One can substitute other UCSPI server programs for it, that do not.For GOPHER+ and FTP instead, similarly substitute djbwares's
gopherd
or Daniel J. Bernstein'sftpd
.UCSPI-TCP and publicfile, IP version 4
tcpserver
andhttpd
:tcpserver -H -R -P 127.0.0.1 8000 httpd .
tcpserver
and Bernsteinhttpd
:tcpserver 127.0.0.1 8000 httpd .
tcp-socket-listen
,tcp-socket-accept
, and Bernsteinhttpd
:tcp-socket-listen 127.0.0.1 8000 tcp-socket-accept httpd .
s6-tcpserver4
and Bernsteinhttpd
:s6-tcpserver4 127.0.0.1 8000 httpd .
tcpsvd
and Bernsteinhttpd
:tcpsvd 127.0.0.1 8000 httpd .
UCSPI-SSL and publicfile
sslserver
and Bernsteinhttpd
:sslserver -H -R -P ::1 8000 httpd .
UCSPI-TCP and publicfile, IP version 6
tcpserver
and Bernsteinhttpd
:tcpserver -H -R -P ::1 8000 httpd .
tcp-socket-listen
,tcp-socket-accept
, and Bernsteinhttpd
:tcp-socket-listen ::1 8000 tcp-socket-accept httpd .
tcp-socket-listen --systemd-compatibility ::1 8000 tcp-socket-listen --systemd-compatibility 127.0.0.1 8000 tcp-socket-accept httpd .
s6-tcpserver6
and Bernsteinhttpd
:s6-tcpserver6 ::1 8000 httpd .