{"id":20790620,"url":"https://github.com/ryanashcraft/vroom-vroom","last_synced_at":"2026-04-11T16:05:04.101Z","repository":{"id":4961806,"uuid":"6119316","full_name":"ryanashcraft/vroom-vroom","owner":"ryanashcraft","description":"An HTTP server that interprets server-side JavaScript with the V8 JavaScript engine.","archived":false,"fork":false,"pushed_at":"2012-11-21T02:38:35.000Z","size":3228,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-11T00:36:47.314Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"chef-cookbooks/passenger_apache2","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ryanashcraft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-10-08T03:56:39.000Z","updated_at":"2013-07-21T15:38:15.000Z","dependencies_parsed_at":"2022-07-09T09:00:41.451Z","dependency_job_id":null,"html_url":"https://github.com/ryanashcraft/vroom-vroom","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanashcraft%2Fvroom-vroom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanashcraft%2Fvroom-vroom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanashcraft%2Fvroom-vroom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanashcraft%2Fvroom-vroom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanashcraft","download_url":"https://codeload.github.com/ryanashcraft/vroom-vroom/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243136242,"owners_count":20241988,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T15:36:13.174Z","updated_at":"2025-12-24T16:49:41.042Z","avatar_url":"https://github.com/ryanashcraft.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vroom vroom\n\n## Description\n\nAn HTTP server that interprets server-side JavaScript with the V8 JavaScript engine.\n\n## Prerequisites\n\nThe V8 JavaScript interpreter library is required for interpreting the server-side JavaScript files. V8 can be installed with any package manager or from [source](https://developers.google.com/v8/build). If installing from source, you can simply run `make native` to compile for your current system architecture. See [Google's guide for building V8](http://code.google.com/p/v8/wiki/BuildingWithGYP) for more information on building V8.\n\nThis project depends on several C++11 features. The compiler you use must support C++11 threads, lambda expressions, and unique pointers.\n\n## Compiling\n\nStart by duplicating `Makefile.sample` to `Makefile`. There are default values for all of the variables, but some values may need to be changed to fit your preferences and platform requirements.\n\nIf the V8 library is installed outside of normal library search paths, you will need to edit the Makefile to define the locations of the V8 static libraries by setting the `V8HOME` and `ARCH` variables.\n\n## Running\n\nThere is a target for compiling and running. Simply run `make run`. Or simply run the linked `vroomvroom` executable after compiling with `make`.\n\nBy default, the server opens on port 8000. This can be defined at runtime by setting a command-line argument (e.g. `vroomvroom 8001`).\n\n## Handling HTTP Requests\n\nHTTP requests are resolved by accessing files from the public directory. If the file does not exist, a 404 HTTP status code will be returned to the client.\n\n## Server-Side JavaScript\n\nHTTP requests for files with an `.ssjs` extension will be automatically interpreted by V8, and the generated string from running the file will be returned in the HTTP response.\n\n### The `require(path)` JavaScript Function\n\nIn a server-side JavaScript file, a call to the require function will look up the requested file and interpret it with V8. The return value from this requested file will be returned as a JavaScript object, not necessarily a string, to the caller.\n\nRelative and absolute paths are supported from server-side JavaScript files. These paths are resolved relative to the caller.\n\n### Additional JavaScript Support\n\nHTTP POST and GET data is initalized before interpreting `.ssjs` files. This can be access in the global `__POST__` and `__GET__` variables, which is an object that acts as a key-value map of the data.\n\nThe parent directory of the interpreted file is stored as a string in the global variable `__CURRENT_DIRECTORY__`.\n\nCustom headers for the HTTP response can be defined in the server-side JavaScript with the global `__HEADERS__` array.\n\n## Known Issues and Limitations\n\n### HTTP\n\n- No support for PUT or DELETE requests\n- Does not accept absolute URLs\n- Does not require or use the `Host` header from HTTP 1.1 requests\n- No support for chunked transfers\n- No support for persistent connections\n- No support for handling requests with multipart content, thus no support for file uploads\n- No support for various mime types\n- No support for handling requests with `If-Modified-Since` and `If-Unmodified-Since` headers\n- No support for sessions or cookies\n- Untested handling of HTTP 1.0 requests\n- Untested handling of HTTP requests with `Expects: 100 Continue` header\n- Opens and interprets files for HEAD requests\n\n### Server-Side JavaScript\n\n- No API for retrieving system time\n- No API for storing persistent data or interacting with a database\n- No API for performing sending HTTP requests or email messages\n- File path argument for `require(path)` can request a file outside of the public directory\n- Error handling and logging is lacking with various scenarios (e.g. invalid file path argument in `require(path)`)\n\n### Customization\n\n- No support for custom configurations\n\n### Testing\n\n- There are no proper tests\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryanashcraft%2Fvroom-vroom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryanashcraft%2Fvroom-vroom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryanashcraft%2Fvroom-vroom/lists"}