Vert.x is a lightweight, high performance application platform for the JVM that's designed for modern mobile, web, and enterprise applications.


This is the web-site for the previous version of Vert.x - Vert.x 2. We provide this as a reference for existing users who haven't yet upgraded to Vert.x 3 and need to access the documentation for version 2.x.

For new projects we highly recommend Vert.x 3 - please see the new web-site for more information.


Write your application components in Java, JavaScript, CoffeeScript, Ruby, Python or Groovy...

... or mix and match several programming languages in a single app.


...without being simplistic.

Simple, powerful, APIs enable you to write non-blocking network enabled applications with ease. No complex configuration or boilerplate required.


Scales using messaging passing to efficiently utilise your server cores.

Uses non blocking I/O to serve many connections with minimal threads.


Simple actor-like concurrency model frees you from the pitfalls of traditional multi-threaded programming.

Key Features

  • The Distributed Event Bus is the nervous system of Vert.x and connects your server-side components.

    Write your components in whatever language you want, and put them where you want on your network. It even penetrates into JavaScript running in the browser!

  • WebSockets and SockJS support for real-time server-push applications.

  • If you don't want the whole platform, Vert.x can be embedded as a library in your existing Java applications.

  • Vert.x has a powerful module system. Package your Vert.x components into modules for encapsulation and reuse.

    Share them with the community by putting them in Maven Central, any other Maven repository, or in Bintray.

    Advertise your module in the module registry.

  • Seamlessly code, run, debug and test your Vert.x applications in your favourite IDE.

    Get started using Maven using the Maven archetype or using Gradle with the example Gradle template project.

    Use auto-redeploy to see your changes instantly in a running module.

  • 100% open source. Licensed under the Apache Software License 2.0

Here's an example web-server*

Save the following in server.js

  var vertx = require('vertx');

  vertx.createHttpServer().requestHandler(function(req) {
      var file = req.path() === '/' ? 'index.html' : req.path();
      req.response.sendFile('webroot/' + file);

Run it:

vertx run server.js

Save the following in


  public class Server extends Verticle {
      public void start() {
          vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() {
              public void handle(HttpServerRequest req) {
                  String file = req.path().equals("/") ? "index.html" : req.path();
                  req.response().sendFile("webroot/" + file);

Run it: (note no compile is needed!)

vertx run

Save the following in server.rb

  require "vertx" do |req|
      file = req.uri == "/" ? "index.html" : req.uri
      req.response.send_file "webroot/#{file}"

Run it:

vertx run server.rb

Save the following in Server.groovy

  vertx.createHttpServer().requestHandler { req ->
      def file = req.uri == "/" ? "index.html" : req.uri
      req.response.sendFile "webroot/$file"

Run it:

vertx run Server.groovy

Save the following in

  import vertx

  server = vertx.create_http_server()

  def request_handler(req):
      file = "index.html" if req.uri == "/" else req.uri

Run it:

vertx run

Save the following in server.clj

  (ns example.server
  (:require [vertx.http :as http]))

  (-> (http/server)
      (fn [req]
        (let [uri (.uri req)]
          (-> req
            (http/send-file (str "webroot/" (if (= "/" uri) "index.html" uri)))))))
    (http/listen 8080))

Run it:

vertx run server.clj

Save the following in Server.ceylon

  import io.vertx.ceylon.platform { ... }
  import io.vertx.ceylon.core { ... }
  import io.vertx.ceylon.core.http { ... }
  shared class Server() extends Verticle() {
      start(Vertx vertx, Container container) => vertx.createHttpServer().requestHandler(
          void (req) {
              value file = req.path == "/" then "index.html" else req.path;
              req.response.sendFile("webroot/" + file);

Run it:

vertx run Server.ceylon

* In a real production web-server you would want to do some checking of the path to ensure files aren't served from outside the webroot!