{"id":13631007,"url":"https://github.com/vbauer/manet","last_synced_at":"2025-04-17T17:32:15.542Z","repository":{"id":23328241,"uuid":"26688437","full_name":"vbauer/manet","owner":"vbauer","description":"Website screenshot service powered by Node.js, SlimerJS and PhantomJS","archived":false,"fork":false,"pushed_at":"2023-03-01T09:41:34.000Z","size":1030,"stargazers_count":573,"open_issues_count":44,"forks_count":102,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-04-16T22:05:43.317Z","etag":null,"topics":["gecko","heroku","javascript","nodejs","phantomjs","screenshots","slimerjs","webkit"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vbauer.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,"governance":null}},"created_at":"2014-11-15T17:57:02.000Z","updated_at":"2025-03-22T02:12:16.000Z","dependencies_parsed_at":"2023-02-18T07:25:13.594Z","dependency_job_id":"5dbbfd42-2f21-4d8b-aa31-f076913072df","html_url":"https://github.com/vbauer/manet","commit_stats":{"total_commits":380,"total_committers":20,"mean_commits":19.0,"dds":"0.22631578947368425","last_synced_commit":"b96a5414b2593b1ffc46291b4be4302607650966"},"previous_names":[],"tags_count":54,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vbauer%2Fmanet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vbauer%2Fmanet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vbauer%2Fmanet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vbauer%2Fmanet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vbauer","download_url":"https://codeload.github.com/vbauer/manet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249360057,"owners_count":21257164,"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":["gecko","heroku","javascript","nodejs","phantomjs","screenshots","slimerjs","webkit"],"created_at":"2024-08-01T22:02:06.921Z","updated_at":"2025-04-17T17:32:14.894Z","avatar_url":"https://github.com/vbauer.png","language":"JavaScript","readme":"\n# Manet [![Heroku](https://heroku-badge.herokuapp.com/?app=manet\u0026svg=1)](https://manet.herokuapp.com) [![Build Status](https://img.shields.io/travis/vbauer/manet.svg)](https://travis-ci.org/vbauer/manet) [![Dependency Status](https://david-dm.org/vbauer/manet.svg)](https://david-dm.org/vbauer/manet) [![NPM](https://img.shields.io/npm/v/manet.svg)](https://www.npmjs.org/package/manet)\n\n\u003e There is only one true thing: instantly paint what you see. When you've got it, you've got it. When you haven't, you begin again. All the rest is humbug.\n\n\u003cimg align=\"right\" style=\"margin-left: 15px\" width=\"300\" height=\"360\" title=\"Self-Portrait with Palette, 1879\" src=\"misc/manet.jpg\"\u003e\n\n**Manet** is a REST API server which allows capturing screenshots of websites using various parameters. It is a good way to make sure that your websites are responsive or to make thumbnails.\n\n**Manet** could use different engines to work: [SlimerJS](http://slimerjs.org) or [PhantomJs](http://phantomjs.org).\n\n* **SlimerJS** runs on top of [Gecko](https://developer.mozilla.org/en-US/docs/Mozilla/Gecko) (the browser engine of [Mozilla Firefox](https://www.mozilla.org)) and [SpiderMonkey](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey) (the JavaScript engine of Firefox).\n* **PhantomJS** runs on top of [WebKit](https://www.webkit.org) and [JavaScriptCore](http://trac.webkit.org/wiki/JavaScriptCore).\n\n*Project was named in honor of Édouard Manet, French painter (1832-1883). He was one of the first 19th-century artists to paint modern life, and a pivotal figure in the transition from Realism to Impressionism.*\n\n\n## Main features\n* Ready-To-Use\n* Supporting SlimerJS and PhantomJS\n* Configurable CLI application\n* Flexible REST API\n* File caching\n* Various image formats\n* Sandbox UI\n\n\n## Setup\n\n\n### Preset\nChoose and install needed engine (PhantomJS, SlimerJS, or both of them):\n\n\n#### SlimerJS:\n\n* You can download SlimerJS from the [official site](http://slimerjs.org/download.html) and install manually.\n* or you can use the power of [NPM](https://www.npmjs.org/):\n```bash\nnpm install -g slimerjs\n```\n\nGecko, the rendering engine of Firefox, cannot render web content without a graphical window, but you can launch SlimerJS with xvfb if you are under linux or MacOSx, to have a headless SlimerJS, so it is also necessary to install [Xvfb](http://en.wikipedia.org/wiki/Xvfb) (X virtual framebuffer) for *nix or OS X systems.\n\nFor example, you can use **apt-get** to install **xvfb** on Ubuntu:\n```bash\nsudo apt-get install xvfb\n```\n\n\n#### PhantomJS\n\n* You can download PhantomJS from the [official site](http://phantomjs.org/download.html) and install manually.\n* or you can also use NPM:\n```bash\nnpm install -g phantomjs\n```\nor (to use second version):\n```bash\nnpm install -g phantomjs2\n```\n\n**IMPORTANT:** PhantomJS is used by default (see `default.yaml` file).\n\n\n### Installation\n\nAfter preliminaries operations you can install Manet using NPM:\n```bash\nnpm install -g manet\n```\n\nThat is all, now you can start and use Manet server. As you can see, it is unnecessary to clone Git repository or something else.\n\n\n## Server launching\n\nServer launching is a simple as possible:\n```bash\nmanet\n```\n\nIf everything is OK, you should see the following message:\n```\ninfo: Manet server started on port 8891\n```\n\n## Server configuration\n\nManet server uses hierarchical configurations to cover differnet usage use-cases:\n\n* Command-line parameters\n* Environment variables\n* Built-in configuration [YAML](http://yaml.org) file *(\"config/default.yaml\")*\n\nRules of overriding:\n\n* Each configuration level could be overridden by another level.\n* The *most-priority* parameters are *command-line parameters*.\n* The *less-priority* parameters are stored in *build-in configuration file*.\n\n\n### CLI parameters\n\n\u003cdl\u003e\n\n  \u003cdt\u003e--host\u003c/dt\u003e\n  \u003cdd\u003eWeb server host (default: \"0.0.0.0\"). Usually, it is unnecessary to change this parameter.\u003c/dd\u003e\n\n  \u003cdt\u003e--port\u003c/dt\u003e\n  \u003cdd\u003eWeb server port number. REST API and UI will be available on this port (default: \"8891\").\u003c/dd\u003e\n\n  \u003cdt\u003e--engine\u003c/dt\u003e\n  \u003cdd\u003eDefault engine for screenshot capturing: \"phantomjs\" or \"slimerjs\" (default is \"phantomjs\"). Specific command will be detected by configuration file (default.yaml) using engine parameter and OS platform.\u003c/dd\u003e\n\n  \u003cdt\u003e--command\u003c/dt\u003e\n  \u003cdd\u003eConfiguration file \"default.yaml\" supports specific commands for different platforms (ex: \"linux\": \"xvfb-run -a slimerjs\"). Needed command will be detected in runtime by platform/OS. This parameter allows to override command for executing SlimerJS. It allows using full power of SlimerJS command line options to configure proxy, SSL protocol, etc. More information could be found here: http://docs.slimerjs.org/current/configuration.html \u003cbr/\u003e\u003cb\u003eIMPORTANT:\u003c/b\u003e This parameter overrides \"--engine\" parameter.\u003c/dd\u003e\n\n  \u003cdt\u003e--storage\u003c/dt\u003e\n  \u003cdd\u003eFile storage for cache (default is global temp directory).\u003c/dd\u003e\n\n  \u003cdt\u003e--cache\u003c/dt\u003e\n  \u003cdd\u003eLifetime for file cache in seconds. Screenshots are cached for \u003ci\u003e60 minutes by default\u003c/i\u003e, so that frequent requests for the same screenshot don't slow the service down. You can configure longer life for cache items or make them ethereal (use zero or negative value).\u003c/dd\u003e\n\n  \u003cdt\u003e--cleanupStartup\u003c/dt\u003e\n  \u003cdd\u003eClean up FS storage on server startup (default is \"false\"). It removes all files which were stored previously.\u003c/dd\u003e\n\n  \u003cdt\u003e--cleanupRuntime\u003c/dt\u003e\n  \u003cdd\u003eClean up FS storage at server runtime (default is \"false\"). It removes file with captured image after sending on client.\u003c/dd\u003e\n\n  \u003cdt\u003e--compress\u003c/dt\u003e\n  \u003cdd\u003eAdditional compression for captured screenshots using \u003ca href=\"https://github.com/imagemin/imagemin\"\u003eImagemin\u003c/a\u003e (default is \"false\"). File sizes are significantly reduced due to this, but it requires additional processing time. Furthermore, imagemin is an optional dependency. It will be downloaded and installed in runtime during the first request, so it will take an additional time (one time).\u003c/dd\u003e\n\n  \u003cdt\u003e--silent\u003c/dt\u003e\n  \u003cdd\u003eRun Manet server with or without logging information (default is \"false\").\u003c/dd\u003e\n\n  \u003cdt\u003e--level\u003c/dt\u003e\n  \u003cdd\u003eSetting the level for your logging message. Possible values: debug, info, silly, warn, error (default is \"info\"). If want to investigate some problem with Manet, use \"debug\" level: --level=debug\u003c/dd\u003e\n\n  \u003cdt\u003e--cors\u003c/dt\u003e\n  \u003cdd\u003eEnable \u003ca href=\"http://www.w3.org/TR/cors/\"\u003eCross-Origin Resource Sharing\u003c/a\u003e (default is \"false\").\u003c/dd\u003e\n\n  \u003cdt\u003e--ui\u003c/dt\u003e\n  \u003cdd\u003eEnable or disable sandbox UI (default is \"true\").\u003c/dd\u003e\n\n  \u003cdt\u003e--timeout\u003c/dt\u003e\n  \u003cdd\u003eNumber of milliseconds to wait for the program to complete before sending it \"SIGTERM\" (default is \"60000\").\u003c/dd\u003e\n\n  \u003cdt\u003e--options:{option}\u003c/dt\u003e\n  \u003cdd\u003eDefault query parameters. See also \"Query parameters\" for more details. Example: \"--options:width 101\".\u003c/dd\u003e\n\n  \u003cdt\u003e--whitelist\u003c/dt\u003e\n  \u003cdd\u003eList of \u003ca href=\"https://github.com/snd/url-pattern\"\u003eURL patterns\u003c/a\u003e that are allowed to be processed by Manet (all URLs are permitted by default).\u003c/dd\u003e\n\n  \u003cdt\u003e--security:basic:username\u003c/dt\u003e\n  \u003cdd\u003eConfigure user name for \u003ca href=\"https://en.wikipedia.org/wiki/Basic_access_authentication\"\u003eBasic authentication\u003c/a\u003e. Basic auth will be switched on when \"username\" and \"password\" are configured.\u003c/dd\u003e\n\n  \u003cdt\u003e--security:basic:password\u003c/dt\u003e\n  \u003cdd\u003eConfigure password for Basic authentication.\u003c/dd\u003e\n\n\u003c/dl\u003e\n\n### Configuration file\n\nBuilt-in configuration could be found in `manet` directory. For example, on Ubuntu it is located here: *\"/usr/local/lib/node_modules/manet/\"*.\n\nDefault configuration file *(\"default.yaml\")*:\n\n```yaml\nhost: 0.0.0.0\nport: 8891\ncors: false\nui: true\n\nsilent: false\nlevel: info\n\nengine: phantomjs\ntimeout: 60000\ncompress: false\ncache: 3600\ncleanupStartup: false\ncleanupRuntime: false\n\ncommands:\n    slimerjs:\n        linux: \"xvfb-run -a slimerjs\"\n        freebsd: \"xvfb-run -a slimerjs\"\n        sunos: \"xvfb-run -a slimerjs\"\n        darwin: \"slimerjs\"\n        win32: \"slimerjs.bat\"\n    phantomjs:\n        linux: \"phantomjs --ignore-ssl-errors=true --web-security=false\"\n        freebsd: \"phantomjs --ignore-ssl-errors=true --web-security=false\"\n        sunos: \"phantomjs --ignore-ssl-errors=true --web-security=false\"\n        darwin: \"phantomjs --ignore-ssl-errors=true --web-security=false\"\n        win32: \"phantomjs --ignore-ssl-errors=true --web-security=false\"\n\nwhitelist:\n    - \"*\"\n\nsecurity:\n    basic:\n#        username: admin\n#        password: admin\n```\n\n\n## REST API\n\nREST API is available on \"/\" using:\n\n* GET method\n* POST method with `Content-Type`:\n    * *application/json*\n    * or *application/x-www-form-urlencoded*\n\nFew rules:\n\n* The `\"url\"` parameter must be specified.\n* It is possible to send data using query parameters or [HTTP Message Body](https://en.wikipedia.org/wiki/HTTP_message_body).\n* Query parameters will be used in priority and override others.\n\n\n### Available parameters\n\n\u003cdl\u003e\n\n  \u003cdt\u003eurl\u003c/dt\u003e\n  \u003cdd\u003eWebsite address (URL). This is the only required parameter for the HTTP request. It is unnecessary for the most cases to configure scheme. Example: \"github.com\".\u003c/dd\u003e\n\n  \u003cdt\u003ewidth\u003c/dt\u003e\n  \u003cdd\u003eThis property allows to change the width of the viewport, e.g., the size of the window where the webpage is displayed (default: `1024`)\u003c/dd\u003e\n\n  \u003cdt\u003eheight\u003c/dt\u003e\n  \u003cdd\u003eThis property allows to change the height of the viewport. If width is defined and height is not defined, than full page will be captured.\u003c/dd\u003e\n\n  \u003cdt\u003epaperFormat\u003c/dt\u003e\n  \u003cdd\u003ePaper format for PDF export (default is `letter`). Possible values: letter, A2, A3, A4, A5.\u003c/dd\u003e  \n\n  \u003cdt\u003epaperOrientation\u003c/dt\u003e\n  \u003cdd\u003ePaper orientation for PDF export (default is `portrait`). Possible values: portrait, landscape.\u003c/dd\u003e\n\n  \u003cdt\u003eclipRect\u003c/dt\u003e\n  \u003cdd\u003eThis property defines the rectangular area of the web page to be rasterized. Format: \"top,left,width,height\", example: \"20,20,640,480\".\u003c/dd\u003e\n\n  \u003cdt\u003ezoom\u003c/dt\u003e\n  \u003cdd\u003eZoom factor of the webpage display. Setting a value to this property decreases or increases the size of the web page rendering. A value between 0 and 1 decreases the size of the page, and a value higher than 1 increases its size. 1 means no zoom (normal size). (default: `1`).\u003c/dd\u003e\n\n  \u003cdt\u003equality\u003c/dt\u003e\n  \u003cdd\u003eThe compression quality. A number between 0 and 1 (default value: `1`). Quality parameter doesn't work for PNG file format.\u003c/dd\u003e\n\n  \u003cdt\u003edelay\u003c/dt\u003e\n  \u003cdd\u003eDo a pause during the given amount of time (in milliseconds) after page opening (default: `100`).\u003c/dd\u003e\n\n  \u003cdt\u003eformat\u003c/dt\u003e\n  \u003cdd\u003eIndicate the file format for output image (default is `\"png\"`). Possible values: jpg, jpeg, png, bmp, pdf, ppm, ico.\n    \u003ctable style=\"text-align: center;\"\u003e\n        \u003cthead\u003e\n            \u003ctr\u003e\n                \u003cth\u003eFormat\u003c/th\u003e\n                \u003cth\u003ePhantomJS\u003c/th\u003e\n                \u003cth\u003eSlimerJS\u003c/th\u003e\n            \u003c/tr\u003e\n        \u003c/thead\u003e\n        \u003ctbody\u003e\n            \u003ctr\u003e\n                \u003ctd\u003eJPG\u003c/td\u003e\n                \u003ctd\u003e+\u003c/td\u003e\n                \u003ctd\u003e+\u003c/td\u003e\n            \u003c/tr\u003e\n            \u003ctr\u003e\n                \u003ctd\u003ePNG\u003c/td\u003e\n                \u003ctd\u003e+\u003c/td\u003e\n                \u003ctd\u003e+\u003c/td\u003e\n            \u003c/tr\u003e\n            \u003ctr\u003e\n                \u003ctd\u003eHTML\u003c/td\u003e\n                \u003ctd\u003e+\u003c/td\u003e\n                \u003ctd\u003e+\u003c/td\u003e\n            \u003c/tr\u003e\n            \u003ctr\u003e\n                \u003ctd\u003eBMP\u003c/td\u003e\n                \u003ctd\u003e+\u003c/td\u003e\n                \u003ctd\u003e-\u003c/td\u003e\n            \u003c/tr\u003e\n            \u003ctr\u003e\n                \u003ctd\u003ePDF\u003c/td\u003e\n                \u003ctd\u003e+\u003c/td\u003e\n                \u003ctd\u003e-\u003c/td\u003e\n            \u003c/tr\u003e\n            \u003ctr\u003e\n                \u003ctd\u003ePPM\u003c/td\u003e\n                \u003ctd\u003e+\u003c/td\u003e\n                \u003ctd\u003e-\u003c/td\u003e\n            \u003c/tr\u003e\n            \u003ctr\u003e\n                \u003ctd\u003eICO\u003c/td\u003e\n                \u003ctd\u003e+\u003c/td\u003e\n                \u003ctd\u003e-\u003c/td\u003e\n            \u003c/tr\u003e\n        \u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/dd\u003e\n\n  \u003cdt\u003eagent\u003c/dt\u003e\n  \u003cdd\u003eString to define the \"User-Agent\" in HTTP requests. By default, it is something like:\n    \u003cul\u003e\n        \u003cli\u003e\u003cb\u003ePhantomJS:\u003c/b\u003e Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.0 (development) Safari/534.34\u003c/li\u003e\n        \u003cli\u003e\u003cb\u003eSlimerJS:\u003c/b\u003e Mozilla/5.0 (X11; Linux x86_64; rv:21.0) Gecko/20100101 SlimerJS/0.7\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/dd\u003e\n\n  \u003cdt\u003eheaders\u003c/dt\u003e\n  \u003cdd\u003eThis property specifies additional HTTP request headers that will be sent to the server for every request issued (for pages and resources). Format: \"key1=value1;key2=value2;...\" Headers names and values get encoded in US-ASCII before being sent. Please note that setting the 'User-Agent' will overwrite the value set via \"agent\" parameter.\u003c/dd\u003e\n\n  \u003cdt\u003euser\u003c/dt\u003e\n  \u003cdd\u003eUser name to give to HTTP Basic authentication.\u003c/dd\u003e\n\n  \u003cdt\u003epassword\u003c/dt\u003e\n  \u003cdd\u003ePassword to give to HTTP Basic authentication.\u003c/dd\u003e\n\n  \u003cdt\u003ejs\u003c/dt\u003e\n  \u003cdd\u003efalse to deactivate javascript in web pages (default is `true`).\u003c/dd\u003e\n\n  \u003cdt\u003eimages\u003c/dt\u003e\n  \u003cdd\u003efalse to deactivate the loading of images (default is `true`).\u003c/dd\u003e\n\n  \u003cdt\u003eforce\u003c/dt\u003e\n  \u003cdd\u003eUse the force reloading of web page without using cache (default is `false`).\u003c/dd\u003e\n\n  \u003cdt\u003eselector\u003c/dt\u003e\n  \u003cdd\u003eWait for the DOM element, that matches the CSS selector, to be available before taking the screenshot.\u003c/dd\u003e\n\n  \u003cdt\u003eselectorCrop\u003c/dt\u003e\n  \u003cdd\u003eCrop page by offset coordinates of selected(by CSS selector) element. (default is `false`).\n      Leave `height` option empty, for this is working correctly.\n  \u003c/dd\u003e\n\n  \u003cdt\u003eselectorCropPadding\u003c/dt\u003e\n  \u003cdd\u003eAdd padding to 'selectorCrop'. You can use negative values. (default is 0).\u003c/dd\u003e\n\n  \u003cdt\u003ecallback\u003c/dt\u003e\n  \u003cdd\u003eReturn an empty response immediately (HTTP 200 OK), then send a POST request to the callback URL when the screenshot is ready (with image in the body).\u003c/dd\u003e\n\n  \u003cdt\u003eengine\u003c/dt\u003e\n  \u003cdd\u003eOverride default engine parameter. Possible values: `phantomjs`, `slimerjs`.\u003c/dd\u003e\n\n  \u003cdt\u003ecookies\u003c/dt\u003e\n  \u003cdd\u003eConfigure \u003ca href=\"http://phantomjs.org/api/phantom/property/cookies.html\"\u003ecookies\u003c/a\u003e that will be contained in request. HTTP message body is the easiest way for sending cookies to Manet (ex: using JSON format).\u003c/dd\u003e\n\n\u003c/dl\u003e\n\n\n### Query examples\n\nFor a quick test with the command line (using `curl`), type:\n\n```bash\ncurl http://localhost:8891/?url=github.com \u003e github.png\ncurl -H \"Content-Type: application/json\" -d '{\"url\":\"github.com\"}' http://localhost:8891/ \u003e github.png\ncurl -H \"Content-Type: application/x-www-form-urlencoded\" -d 'url=github.com' http://localhost:8891/ \u003e github.png\n```\n\nor (using `wget`)\n\n```bash\nwget http://localhost:8891/?url=github.com -O github.png\n```\n\nHere are some query examples that could be executed by any REST API client:\n\n```\n# Take a screenshot of the github.com.\nGET /?url=github.com\n\n# Custom viewport size. Return a 800x600 PNG screenshot of the github.com homepage.\nGET /?url=github.com\u0026width=800\u0026height=600\n\n# Clipping Rectangle. Return a screenshot clipped at [top=20, left=30, width=90, height=80]\nGET /?url=github.com\u0026clipRect=20%2C30%2C90%2C80\n\n# Zoom rendered page in 2 times.\nGET /?url=github.com\u0026zoom=2\n\n# Specify image output format.\nGET /?url=github.com\u0026format=jpeg\n\n# Disable JavaScript. Return a screenshot with no JavaScript executed.\nGET /?url=github.com\u0026js=false\n\n# Disable images. Return a screenshot without images.\nGET /?url=github.com\u0026images=false\n\n# Custom User Agent.\nGET /?url=github.com\u0026agent=Mozilla%2F5.0+(X11%3B+Linux+x86_64)+AppleWebKit%2F537.36+(KHTML%2C+like+Gecko)+Chrome%2F34.0.1847.132+Safari%2F537.36\n\n# HTTP Basic Authentication. Return a screenshot of a website requiring basic authentication.\nGET /?url=mysite.com\u0026user=john\u0026password=smith\n\n# Screenshot delay. Return a screenshot of the github.com homepage 1 second after it's loaded.\nGET /?url=github.com\u0026delay=1000\n\n# Force page reloading. Return a screenshot without using file cache.\nGET /?url=github.com\u0026force=true\n\n# Wait for a div element with a class name \"header\" to be available.\nGET /?url=github.com\u0026selector=div.header\n\n# Specify custom HTTP headers.\nGET /?url=google.com\u0026headers=User-Agent=Firefox;Accept-Charset=utf-8\n\n# Asynchronous call.\nGET /?url=github.com\u0026callback=http://localhost:8891\n```\n\n\n## Sandbox UI\n\nSandbox UI is available on \"/\" by direct GET request without `\"url\"` query parameter.\nIt is a simple playground to build HTTP requests and try them.\n\nDemo instance is available on [Heroku](https://heroku.com): [https://manet.herokuapp.com](https://manet.herokuapp.com/)\n\nYou can also use \"Deploy to Heroku\" button to create your own Manet instance on Heroku without leaving the web browser, and with little configuration.\n\n[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/vbauer/manet)\n\n\n## Development\n\n* To install project dependencies:\n```bash\nnpm install\n```\n* To run [jshint](https://github.com/jshint/jshint/) checks:\n```bash\nnpm run lint\n```\n* To run [Mocha](https://github.com/mochajs/mocha) unit tests:\n```bash\n# using NPM:\nnpm test\n# using mocha and watcher:\nmocha --watch -R spec\n```\n* To run Manet server:\n```bash\n./bin/manet\n```\n\n\n## Alternative clients\n\nRuby:\n\n* [manet_client](https://github.com/codextremist/manet_client) is a simple Ruby client library for Manet.\n\n\n## Deployment options\n\n### Docker\n\n**Docker** is an open platform to build, ship, and run distributed applications, whether on laptops, data center VMs, or the cloud.\n\nManet has some already known `Dockerfile`s:\n\n* [Pietro Delsante](https://github.com/pdelsante) provides the first [manet-dockerfile](https://github.com/pdelsante/manet-dockerfile) to run Manet inside a Docker container.\n* [Kris Carle](https://github.com/kriscarle) provides [fork](https://github.com/openmaphub/manet-dockerfile) of previous project with WebGL support for SlimerJS.\n* [Walter Franchetti](https://github.com/frnwtr) provides [docker-Manet](https://github.com/earlyclaim/docker-Manet) with PhantomJS and libfreetype6.\n* [Olivier Balais](https://github.com/bobey) provides [docker-manet](https://github.com/bobey/docker-manet) with extended charactersets such as Japanese and Chinese.\n\n\n### Heroku\n\nFirst of all read https://devcenter.heroku.com/articles/deploying-nodejs (section \"Deploy your application to Heroku\").\nYou need to create Heroku instance with as described in this documentation.\n\n[Procfile](Procfile) file for **PhantomJS** is already existed in root of the project. This file describes Heroku how to start Manet.\n\n**SlimerJS** does not work on Heroku, because it has not got a [headless mode](https://github.com/laurentj/slimerjs/issues/80) and it is quite complicated to install **xvfb** on this platform (but you can try your luck).\n\n\n## Thanks to\n\n* SlimerJS author [Laurent Jouanneau](https://github.com/laurentj) and SlimerJS [community](https://github.com/laurentj/slimerjs/graphs/contributors).\n* PhantomJS author [Ariya Hidayat](https://github.com/ariya/phantomjs) and PhantomJS [community](https://github.com/ariya/phantomjs/graphs/contributors).\n* [Pietro Delsante](https://github.com/pdelsante), [Kris Carle](https://github.com/kriscarle), [Walter Franchetti](https://github.com/frnwtr), and [Olivier Balais](https://github.com/bobey) for running project inside a Docker container.\n* [Felipe JAPM](https://github.com/codextremist) for Ruby client.\n* All [contributors](https://github.com/vbauer/manet/graphs/contributors) for their help and pull requests.\n\n\n## Self portrait\n\nOne picture more than a thousand words:\n\n![](https://manet.herokuapp.com/?url=https%3A%2F%2Fgithub.com%2Fvbauer%2Fmanet\u0026clipRect=955%2C15%2C995%2C686)\n\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Vladislav Bauer (see [LICENSE](LICENSE)).\n","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvbauer%2Fmanet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvbauer%2Fmanet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvbauer%2Fmanet/lists"}