Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 1,000,000+ packages pre-installed, including jhp with all npm packages installed. Try it out:

jhp lists no main file and has no index.js, so it can't be directly required. If this is a mistake, please let us know. It may however contain internal files that you can require manually:

// require("jhp/[??]")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

jhp v0.2.1

php-like syntax on top of nodejs (bring on the death threats!)

JavaScript Hypertext Preprocessor

You had nightmares about it, the frenchman did it!


JHP brings a PHP-like approach to Node.JS programming. To make it brief it's a "best of both worlds", "worse of both worlds" kind of deal.

Install and run

npm install jhp -g

Then, use the command-line application jhp:

  Usage: jhp [options]


    -h, --help           output usage information
    -V, --version        output the version number
    -d, --dir  [path]    Specify root directory (default './')
    -p, --port [number]  Specify port number (default 80)


In the root directory, create index.jhp:

    response.setHeader( "Content-Type", "text/plain" );
    response.write( request.url );

So, yes, it's pretty much the same as PHP:

  • files with the .jhp extension will be executed by the server,
  • while other files will be passed verbatim to the client (like a static file server would).

response and request are the same objects you'd have in a http.createServer handler. Except that request has several new fields:

  • body, a promise that gets resolved with the request body (if and when the request has a body)

          request.body.done(function( body ) {
              response.end( body );
  • query, a promise that gets resolved with the merge of both GET and POST parameters

          response.setHeader( "Content-Type", "text/plain" );
          request.query.done(function( query ) {
              for ( var key in query ) {
      <?= key ?>: <?= query[ key ] ?>
  • parsedURL, the request url as parsed by require("url").parse( url, true )

(promises provided by JQDeferred)

Remember: this is still Node.JS we're talking about, so always call reponse.end() when you wanna flush the response!

What now?

JHP is meant as a rapid prototyping and testing environment, nothing more, nothing less. It won't toast your bread.

It is licensed under both the GPLv2 and the MIT licenses.

JHP is pretty fresh out of the oven, code is crude and features are sparse...

So it needs you:

  • what kind of pluggable architecture should it have?
  • what built-in features is it lacking?

What we intend to work on right now is the static file serving part.

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free