Fact-checked by Grok 2 weeks ago

Vert.x

Vert.x is an open-source, polyglot toolkit for building reactive, asynchronous, and non-blocking applications on the (JVM). It enables developers to create scalable systems that handle high loads efficiently by leveraging an event-driven model, supporting multiple programming languages such as , Kotlin, , , , and . Developed initially in 2011 by Tim Fox while working at , Vert.x was inspired by the need for a lightweight alternative to traditional enterprise application servers, focusing on concurrency without the complexities of thread management. The project gained traction under Red Hat's involvement, where Fox served as lead architect, and transitioned to the in 2013 as an official top-level project, emphasizing community-driven development under dual licenses ( 2.0 and 2.0). At its core, Vert.x provides a simple concurrency model based on event loops and verticles—modular, single-threaded deployment units—that allow applications to scale horizontally across multiple cores or nodes without shared mutable state. Key components include Vert.x Core for foundational asynchronous APIs, Vert.x Web for HTTP and RESTful services, and extensions for databases, messaging (e.g., Kafka, AMQP), and patterns like circuit breakers and . Its reactive streams integration aligns with standards like and Project Reactor, making it suitable for modern cloud-native architectures. Vert.x has been adopted by major organizations including , , Ticketmaster, and Hulu for building resilient, high-performance systems in domains like applications, , and distributed services. As of November 2025, the latest stable release is version 5.0.5, which introduces a future-based model, enhanced support including gRPC Web and transcoding, client-side load balancing, and paths from prior versions, maintaining its footprint of under 1 MB for core modules.

Overview

Purpose and design goals

Vert.x is an open-source, event-driven toolkit designed for building asynchronous and non-blocking applications on the (JVM). It enables developers to create reactive systems that are responsive, resilient, elastic, and message-driven, aligning with the principles outlined in the Reactive Manifesto. The toolkit's primary design goals emphasize resource efficiency by handling a high volume of requests with fewer threads and resources, modularity through a composable structure that avoids imposing a full , and reactivity via support for backpressure and streaming data flows. Vert.x was developed to address the limitations of traditional JVM-based blocking I/O models, which often lead to inefficient resource utilization and scalability bottlenecks under high concurrency. By adopting a non-blocking, event-driven approach with the multi-reactor —one event loop per CPU core—it facilitates the creation of high-concurrency services, such as , capable of managing millions of concurrent connections while optimizing deployment density in constrained environments. This design shifts from thread-per-request paradigms to asynchronous processing, reducing overhead and enabling better performance in , , and scenarios. Founded as a means to deliver Node.js-like asynchronous capabilities on the JVM, Vert.x supports polyglot development across languages like , Kotlin, and , allowing seamless integration with existing JVM ecosystems.

Key characteristics

Vert.x is fundamentally built on a non-blocking I/O model combined with an , enabling applications to handle a high volume of concurrent requests efficiently with minimal resource consumption compared to traditional blocking I/O frameworks. This design allows for scalable, asynchronous processing where operations like network I/O and timers are managed without thread blocking, promoting high throughput in environments such as or containerized deployments. A defining trait of Vert.x is its polyglot nature, providing APIs and runtime support for multiple programming languages—including , , Kotlin, , and —without creating isolated silos for each language. This enables developers to mix and match components across languages seamlessly within the same application, fostering flexibility in polyglot ecosystems. Unlike rigid frameworks, Vert.x operates as a lightweight toolkit that emphasizes embeddability and minimal abstractions, allowing developers to compose only the required modules without imposing a specific application structure. For networking, it leverages as the underlying engine but abstracts its complexities to simplify usage while maintaining performance. Additionally, Vert.x ensures compliance with standards through integrations like RxJava, facilitating interoperable asynchronous data processing. Resilience is woven into Vert.x's core characteristics via built-in support for features such as circuit breakers, which monitor failures and prevent cascading issues by opening the circuit after a threshold and invoking fallbacks, and high-availability mechanisms that automatically redeploy verticles to other nodes in clustered environments upon failure.

History

Origins and founding

Vert.x was founded in June 2011 by Tim Fox as an open-source project designed to introduce reactive, paradigms to the (JVM). Working in his spare time while employed at , Fox initially named the project "Node.x," a nod to , reflecting its inspiration from the lightweight, asynchronous model of and the broader need for efficient alternatives to the heavyweight, servlet-based application servers prevalent in the Java ecosystem at the time. The first public release came later that year, allowing early community feedback and contributions, including significant input from Julien Viet, who collaborated closely with Fox on core implementations. Initial development took place under VMware's auspices, where Fox and Viet focused on creating a toolkit that leveraged the JVM's performance while avoiding the thread-per-request model of traditional Java servers, which often led to scalability bottlenecks. This period emphasized building a non-blocking I/O foundation, drawing directly from Node.js's event loop but adapted for JVM languages to enable high-concurrency applications without excessive resource consumption. By early 2013, amid growing community interest and a brief ownership dispute following 's departure from , the project transitioned to the to establish vendor-neutral governance and foster broader collaboration. had joined in late 2012, and the company subsequently took on leadership of Vert.x, providing resources for its evolution while maintaining its open-source ethos. One of the early challenges was balancing polyglot language support—encompassing , , , and others—with the JVM's threading and garbage collection constraints, requiring innovative approaches to ensure seamless inter-language communication without compromising the reactive, non-blocking core. This tension shaped the project's design, prioritizing modularity to accommodate diverse runtimes while adhering to JVM security and performance boundaries.

Major version releases

Vert.x 1.0 marked the initial stable release of the toolkit on May 10, 2012, providing foundational support for building reactive applications on the JVM with asynchronous event-driven capabilities. The 2.0 version, released on July 26, 2013, introduced significant polyglot enhancements, allowing seamless integration of multiple languages such as , , , and within a single application, thereby expanding its appeal for diverse development teams. A key milestone in 2013 was Vert.x's transition to an project, fostering greater community and open-source collaboration. Vert.x 3.0 arrived on June 24, 2015, focusing on core stabilization with improvements in clustering, metrics, and verticle deployment, which enhanced reliability for production-scale deployments. This release solidified the while maintaining for existing applications. In December 2020, Vert.x 4.0 was launched, emphasizing a future-based , support for RxJava 3, and stronger Kotlin integration to streamline reactive code composition. It also mandated asynchronous file I/O operations, improving scalability by preventing blocking calls in high-throughput scenarios. From 2018 onward, assumed primary leadership of the project, driving enterprise-focused enhancements and long-term support. Vert.x 5.0.0 debuted on May 14, 2025, requiring JDK 17 or higher and delivering performance optimizations through refined handling and reduced memory overhead. This version introduced enhanced distributed tracing for better and critical fixes addressing vulnerabilities like CVE-2025-11965. As of November 2025, the latest patch is 5.0.5, released on October 22, 2025, with over 50 minor and patch releases accumulated since the project's , reflecting ongoing refinements in and integration. Each major release has progressively boosted throughput and , enabling Vert.x to handle millions of concurrent connections in environments.

Evolution of language support

Vert.x originated in 2011 primarily as a , but its emphasized polyglot capabilities from the beginning, enabling developers to write components in multiple languages while leveraging the shared event bus for inter-language communication. By the release in 2013, support expanded to include , , , and as modular implementations, with ongoing community efforts for and , allowing separate verticles in different languages to interoperate seamlessly without performance penalties from language bridging. The 3.0 version, released in 2015, marked a significant evolution by introducing a code generation system that automatically synchronized APIs across languages from the Java core, addressing the maintenance challenges of manual updates in prior versions. This unification facilitated consistent polyglot development, with subsequent releases in the 3.x series adding official support for Ceylon in 3.2.0 and enhanced Scala (2.12) and Kotlin (1.1) in 3.4.0, broadening the ecosystem while preserving the event-driven model. In version 4.0 (2020), Vert.x streamlined its language offerings to focus on , , and Kotlin, deprecating active maintenance for less-used bindings like , , , and others to reduce overhead and ensure long-term stability. Specific changes included removing the Kotlin script compiler and deprecating generated extensions in favor of standard , reflecting a shift toward modern JVM languages with robust support. Polyglot deployment persisted through isolated verticles per language connected via the event bus, but with emphasis on the core trio to minimize consistency issues. Version 5.0, released in 2025, further enhanced Kotlin integration by optimizing coroutine handling, enabling low-level performance extensions while maintaining for and . These updates addressed ongoing challenges in cross-language consistency, such as synchronization and overhead from diverse runtime environments, by prioritizing high-adoption languages and leveraging code generation for any new bindings.

Core Concepts

Verticles

Verticles serve as the fundamental building blocks of Vert.x applications, functioning as independent, deployable units that encapsulate specific units of application logic. Analogous to actors in the , verticles enable concurrency and by isolating code execution without relying on shared mutable state, allowing multiple instances to run concurrently within a single Vert.x instance. Vert.x provides two primary types of verticles, each tailored to distinct execution contexts to optimize performance and resource utilization:
  • Standard verticles: These run directly on threads, executing in a single-threaded manner and are suited for non-blocking, asynchronous operations to maintain high throughput without impeding the event loop.
  • Worker verticles: Designed for operations that may block, such as database queries or file I/O, they execute on the worker , ensuring the event loop remains unblocked while handling potentially synchronous code.
The lifecycle of a verticle is managed asynchronously by the Vert.x instance. Deployment occurs via the deployVerticle method, which initiates the verticle's start method upon successful loading; this method returns a Future to signal completion and allows for initialization tasks. Undeployment triggers the stop method similarly, providing an opportunity for graceful resource cleanup, also returning a Future for asynchronous handling. Verticles interact solely through the event bus, an asynchronous messaging system that enables by allowing without direct dependencies, as detailed in the event bus section. For optimal , verticles should be designed to be lightweight, focusing on quick, non-blocking processing to maximize the efficiency of the underlying event loops and support high concurrency across instances.

Event loop and concurrency

Vert.x employs a multi-reactor event-driven architecture, where each operates as a single-threaded, non-blocking construct responsible for processing incoming events from queues, such as I/O callbacks, timers, and internal notifications. These event loops follow the , continuously polling for ready events using efficient mechanisms like Netty's selectors, ensuring that handlers for asynchronous operations are executed sequentially without primitives. By default, Vert.x configures the event loop pool size to twice the number of available CPU cores, allowing for balanced distribution of workload across multiple loops while maintaining low overhead. The concurrency model in Vert.x is inherently reactive and asynchronous, eschewing the traditional thread-per-request paradigm in favor of event-driven processing to handle high loads with minimal resource consumption. Developers compose asynchronous operations using callbacks for simple notifications, for composable results (via methods like Future.onComplete), and integration with RxJava for stream-based , enabling non-blocking I/O without explicit management. This approach leverages I/O techniques, such as direct buffer passing in Netty, to minimize data copying and boost throughput. For tasks that inherently block, such as file system access or CPU-intensive computations, Vert.x routes execution to a separate worker thread pool rather than the event loops, preserving the non-blocking nature of the core loops. The worker pool is configurable, with a default size of 20 threads, and operations are dispatched using executeBlocking to offload work asynchronously while returning a future for completion notification. Event loop threads are dedicated exclusively to I/O-bound activities, ensuring scalability; benchmarks on modern hardware demonstrate that Vert.x can achieve over 1 million HTTP requests per second in plaintext scenarios due to this efficient model. Uncaught exceptions in event loop handlers are detected and logged with stack traces, potentially warning of blocked loops if execution exceeds configurable thresholds (default 2 seconds), and they propagate to designated failure handlers for recovery. Standard verticles are typically assigned to specific s upon deployment, executing their handlers within that loop's to maintain ordering and efficiency, while worker verticles share a single across all instances as of Vert.x 5.0.

Event bus

The event bus serves as Vert.x's core distributed messaging system, enabling asynchronous communication between components within the same application or across multiple Vert.x instances, irrespective of the programming language used. It operates on a publish-subscribe model where messages are routed to specific addresses—simple strings that identify message destinations—and handlers registered for those addresses process incoming messages without blocking the event loop. This design promotes loose coupling among verticles, allowing them to interact via the bus rather than direct method calls. The event bus supports multiple messaging patterns to accommodate diverse use cases. In point-to-point messaging, a sent is delivered to exactly one handler registered for the address, selected via a non-strict for load balancing among multiple handlers. Publish-subscribe enables broadcasting, where a published reaches all handlers subscribed to the address. Additionally, the request-response pattern allows senders to include a reply handler, facilitating asynchronous dialogues where recipients acknowledge and respond to requests. For distributed scenarios, the event bus integrates clustering capabilities through pluggable cluster managers such as or Infinispan, enabling messages to flow transparently between nodes in a without requiring explicit node addressing. When clustering is enabled via VertxOptions, the bus uses connections (optionally secured) to propagate messages across the network, maintaining the same as the local bus. Messages can take forms including objects, buffers, primitives, or POJOs registered with custom codecs for ; in clustered mode, delivery employs acknowledgments to provide reliability, though the system offers best-effort guarantees overall, with potential message loss during failures necessitating idempotent handlers. Security for the event bus includes support for SSL/TLS encryption of traffic, configurable through EventBusOptions with options for keystores (e.g., JKS or ), trust stores, and client authentication to protect inter-node communication in clustered deployments. Address-level permissions can be enforced by integrating Vert.x Auth providers, which allow checks on send and receive operations to restrict access based on roles or custom policies.

Architecture

Reactive programming model

Vert.x embodies the principles outlined in the Reactive Manifesto by enabling the development of responsive, resilient, elastic, and message-driven applications on the JVM. Responsiveness is achieved through its non-blocking, model, which maintains low latency even under varying loads by efficiently utilizing resources. Resiliency is supported by treating failures as inherent, with mechanisms to isolate issues and recover gracefully, ensuring system stability. Elasticity allows Vert.x applications to scale horizontally across multiple cores and instances, adapting to increasing demand without performance degradation. The message-driven nature facilitates between components via asynchronous event handling, promoting modular and distributed designs. Central to Vert.x's reactive model are asynchronous patterns such as , which allow developers to compose operations without blocking threads, enabling efficient handling of I/O-bound tasks. In version 5.0, the is fully based on , with callbacks removed for a more composable asynchronous model. Integration with RxJava extends this capability, providing operators for managing and implementing backpressure to prevent overwhelming consumers with data. This integration supports the creation of observable sequences that propagate events and errors in a composable manner. Vert.x adheres to the Reactive Streams standard, offering APIs that implement Publisher, Subscriber, and interfaces for asynchronous stream processing with non-blocking backpressure. This compliance enables the construction of composable data flows, where streams can be transformed, filtered, and merged declaratively, facilitating scalable data pipelines across distributed systems. Vert.x provides support for Kotlin coroutines through the vertx-lang-kotlin-coroutines module, allowing developers to write sequential-style asynchronous code using suspend functions and mechanisms like coAwait(). In version 5.0, the API uses coAwait() with future instances for improved usability. Failure handling is enhanced through built-in patterns like retries and s; the monitors call failures and temporarily halts requests to failing services to prevent cascading issues, while configurable retry policies attempt operations multiple times before failing. These reactive features yield benefits such as automatic scaling under load, where Vert.x elastically allocates resources via its multi-reactor model, ensuring high throughput and in production environments.

Polyglot deployment

Vert.x supports polyglot deployment by allowing developers to write verticles in multiple programming languages, all running within a shared JVM . Language-specific verticles are deployed using the Vert.x API's deployVerticle methods, where the verticle is determined by the class name or an explicit prefix (e.g., groovy:MyVerticle for or js:MyVerticle for ). This enables seamless integration of components from different languages into a single application, with all verticles sharing the same event bus for asynchronous communication across language boundaries. The framework provides full APIs for Java, Kotlin, and , ensuring idiomatic and complete access to Vert.x functionality in these languages. Partial support is available for (via GraalVM's JavaScript engine, replacing the deprecated ), Scala (through the vertx-lang-scala module), and (via ), allowing verticles in these languages to interact with the core event-driven model but with some limitations in coverage or performance optimizations. Vert.x also accommodates other JVM-compatible languages like Ceylon and through custom verticle factories. For building and deploying multi-language projects, Vert.x integrates with and via dedicated plugins that handle dependencies, compilation, and execution across languages. The Vert.x plugin, for instance, supports hot deployment in mode, automatically redeploying verticles upon code changes without full application restarts, which accelerates iteration in polyglot setups. Similarly, Gradle configurations can leverage Vert.x tasks for multi-module projects involving different languages. While polyglot deployment leverages the JVM for unified execution, it introduces overhead from JVM startup and garbage collection, particularly noticeable in non-Java languages that rely on scripting engines like or . Direct method calls between verticles in different languages are not supported natively; instead, all inter-language interactions must route through the event bus to maintain the reactive, non-blocking architecture. Vert.x offers native image compilation support to mitigate some JVM overhead, enabling faster startups and lower memory footprints for polyglot applications, though configuration for non-Java components may require additional reflection metadata.

Integration with JVM ecosystem

Vert.x is designed to operate seamlessly within the (JVM) environment, requiring JDK 11 or later, with some components like 5.4 requiring JDK 17. This ensures broad interoperability with modern JVM toolchains while maintaining for legacy deployments. Integration with popular frameworks such as is facilitated through dedicated starters that expose Vert.x's reactive APIs within Spring's and configuration model. Similarly, embeds Vert.x as its core reactive engine, allowing developers to leverage Vert.x components via Quarkus extensions for building cloud-native applications. For build and dependency management, Vert.x projects typically incorporate or as primary tools, where the core is added via standard dependency declarations in project descriptors. To simplify versioning across the ecosystem, the Vert.x Stack provides a bill-of-materials (BOM) import that aligns all Vert.x modules to compatible releases, reducing conflicts in poly-module setups. Testing frameworks are well-supported, with 5 integration via the vertx-junit5 module enabling asynchronous test contexts and assertions tailored for Vert.x's event-driven nature. Deployment options emphasize and cloud-native practices, allowing Vert.x applications to be packaged into images for on clusters. Serverless execution is achievable through , which compiles Vert.x-based services into lightweight runtimes optimized for functions-as-a-service environments. Native compilation via further enables ahead-of-time optimization, producing standalone executables with reduced memory footprint and faster startup times suitable for . Since 2018, Vert.x has featured native integration with , enabling reactive microservices to deploy directly on this enterprise platform with built-in scaling and . Observability enhancements in version 5.0 include upgrades to Micrometer 1.14 for metrics export to systems like , performance improvements in Micrometer integration, and support for customizing OpenTelemetry for distributed tracing via VertxBuilder. OpenTracing integration has been sunsetted in favor of OpenTelemetry. Extensibility is provided through service provider interfaces (SPIs), such as the Metrics SPI for custom metric implementations and the EventBus MessageCodec for serializing application-specific data types. Bridges like the EventBus bridge enable communication with non-JVM systems, allowing external applications to interact with Vert.x's event bus over standard protocols.

Features

Core modules

The core modules of Vert.x provide the foundational building blocks for developing reactive, non-blocking applications on the JVM, emphasizing modularity and embeddability. These modules, part of the official Vert.x stack, include essential utilities for resource management, data handling, security, monitoring, and configuration, all designed to integrate seamlessly with the event-driven architecture. At the heart of Vert.x Core is the Vertx instance, which serves as the central entry point for creating servers, clients, accessing the event bus, and managing timers and periodic tasks. It can be instantiated via Vertx.vertx() for standalone use or Vertx.clusteredVertx() for distributed deployments, with options configurable through VertxOptions to tune aspects like worker pool size and event loop threads. In Vert.x 5.0, a builder pattern was introduced for creating Vertx instances, e.g., Vertx.builder().withClusterManager(clusterManager).buildClustered(). Buffer handling in Vert.x Core uses the Buffer class to manage expandable byte sequences efficiently, supporting operations like appending data, random access, and conversion from strings or byte arrays, which is crucial for I/O-intensive tasks without blocking threads. Asynchronous file system access is facilitated by the FileSystem API, which provides non-blocking operations such as reading, writing, and copying files through Future-based methods (e.g., fs.readFile(path)), ensuring scalability in file-handling scenarios. All core modules adhere to a non-blocking paradigm, leveraging the multi-reactor pattern where return futures or handlers to avoid thread blocking and maximize throughput. In Vert.x 5.0, the model shifted to favor futures over callbacks in many places, with VerticleBase recommended for verticle . Vert.x 5.0 also introduces support for virtual threads (requiring 21), configurable via ThreadingModel.VIRTUAL_THREAD for improved concurrency in verticles. The DnsClient provides asynchronous DNS resolution for efficient name resolution without synchronous calls, supporting features like CompletionStage . SSL/TLS context management includes optional (SNI) support, enabled via options like setSni(true). For authentication and security, the Vert.x Auth module offers providers for JWT token validation, OAuth2 flows including OpenID Connect, and integration with Apache Shiro for role-based authorization, enabling secure across applications. Metrics and monitoring are supported through the Vert.x Metrics module, which includes a built-in exporter for collecting and exposing metrics on event loops, HTTP clients/servers, and custom observables via Micrometer integration, alongside the Vert.x Health Checks module for defining UP/DOWN procedures exposed over HTTP or the event bus. Configuration management is handled by the Vert.x Config module, allowing centralized retrieval of settings in formats like or from files, environment variables via System.getenv(), or distributed stores such as , with overloading rules to merge multiple sources dynamically.

Web and networking capabilities

Vert.x Web provides a flexible for constructing HTTP and RESTful web services, centered around a powerful router that enables path-based, method-specific, and parameterized routing for handling incoming requests. The router supports sub-routers for modular application structure, exact matching, regular expressions, and wildcard paths, allowing developers to define handlers for various endpoints efficiently. It integrates seamlessly with Vert.x's asynchronous model, processing requests non-blockingly to support high-throughput scenarios. Session management in Vert.x Web facilitates stateful interactions through local or clustered sessions, with configurable timeouts and storage options such as in-memory, cookie-based, Redis, or Infinispan backends. For security, it includes built-in CSRF protection via the CSRFHandler, which generates and validates tokens to mitigate cross-site request forgery attacks, requiring integration with body and session handlers. Templating engines are supported for dynamic content rendering, including Handlebars for logic-less templates and Thymeleaf for server-side HTML processing, enabling integration with various view technologies without tying to a specific MVC framework. On the networking front, Vert.x Core offers low-level APIs for and communications, allowing creation of non-blocking servers and clients via NetServer, NetClient, and DatagramSocket classes. support includes SSL/TLS configuration and connection handling through NetSocket streams, while enables datagram-based multicast and broadcast operations. For real-time applications, s are natively supported in the HTTP server, providing bidirectional communication channels that can bridge to the event bus for distributed messaging across verticles. As a fallback for environments with WebSocket restrictions, SockJS integration via SockJSHandler emulates behavior over HTTP polling, XHR streaming, and transports. Vert.x's HTTP capabilities extend to version 2 support in both servers and clients, enabling and over TLS (h2) or cleartext (h2c) connections, as introduced in core modules and enhanced in version 5.0. Proxying features are available through the dedicated Http Proxy module, which implements logic with header forwarding and interception for load distribution. Client-side load balancing is also provided in the Web Client for distributing requests across upstream servers. For API development, integration is facilitated by the Vert.x Web GraphQL module, which leverages GraphQL-Java for schema definition, query execution, and subscription handling in reactive contexts.

Data access and messaging

Vert.x provides asynchronous and reactive clients for interacting with various databases, ensuring non-blocking data access that aligns with its model. These clients support operations such as querying, inserting, updating, and deleting data while handling s efficiently to maintain high throughput in concurrent environments.

Databases

For relational databases, Vert.x offers dedicated reactive clients for , , and , all built on the unified Vert.x , which emphasizes scalability and low overhead. The Reactive Client, for instance, enables to servers using a pooled or non-pooled configuration, supporting features like prepared queries for parameterized statements to mitigate risks and optimize execution. Similarly, the Reactive Client provides equivalent capabilities for , including type mapping for objects to data types and support for batch operations. The Reactive SQL Client underpinning these includes built-in connection pooling to reuse s across requests, reducing and resource consumption in high-load scenarios. Additionally, the asynchronous Vert.x JDBC Client allows integration with any JDBC-compliant database, such as or DB2, by wrapping JDBC drivers in a non-blocking . In the NoSQL domain, Vert.x includes clients for document and key-value stores like and . The Vert.x MongoDB Client facilitates asynchronous CRUD operations on collections, supporting aggregation pipelines and indexing for efficient querying of JSON-like documents. It handles connection management internally, allowing seamless scaling across replicas or shards. The Vert.x Redis Client enables operations on data structures such as strings, lists, sets, and hashes, with support for pub/sub messaging and scripting for atomic executions. This client also incorporates connection pooling and automatic reconnection logic to ensure reliability in distributed setups. Vert.x further supports through a dedicated client built on the Driver, providing asynchronous access to wide-column stores for high-availability persistence. This client supports prepared statements and batch operations, with shared client instances for efficient resource sharing across verticles, and is compatible with 4.x, enabling use of enhanced features like user-defined functions and improved materialized views.

Messaging

Vert.x extends its internal event bus to external messaging systems via bridges and clients for popular protocols and brokers, facilitating pub/sub and point-to-point communication in architectures. These integrations allow Vert.x applications to produce and consume messages asynchronously, often bridging to the event bus for unified internal handling. For , the Vert.x Kafka Client serves as both a and for clusters, supporting topic subscriptions, partitioning, and /deserialization of messages using built-in or custom handlers. It includes management and consumer group coordination to enable fault-tolerant, scalable data pipelines. The client handles Kafka's high-throughput requirements by leveraging non-blocking I/O and configurable sizes. RabbitMQ integration is provided through the Vert.x RabbitMQ Client, which implements AMQP 0.9.1 for declaring queues, exchanges, and bindings, as well as publishing and consuming messages with acknowledgments. This client supports connection recovery and automatic queue declaration, making it suitable for reliable message queuing in distributed systems. For broader AMQP 1.0 compatibility, the Vert.x AMQP Client enables interactions with any AMQP 1.0-compliant broker or router, such as ActiveMQ Artemis or , supporting durable subscriptions, message routing, and transactional settlements. Event bus extensions, such as bridges, allow these external messaging patterns to integrate with Vert.x's internal pub/sub via the event bus.

Caching

Vert.x integrates with distributed caching solutions to provide shared, in-memory data storage across clustered nodes, enhancing performance for frequently accessed data. The integration, via the Vert.x Hazelcast Cluster Manager, exposes Hazelcast's distributed maps, queues, and locks as asynchronous APIs, allowing verticles to cache and synchronize data without direct Hazelcast dependencies. This setup supports near-cache configurations for low-latency local reads while maintaining cluster-wide consistency. Similarly, the Apache Ignite Cluster Manager enables use of Ignite's in-memory computing features, including SQL querying over caches and off-heap storage for large datasets, with Vert.x handling the clustering and node discovery. These integrations leverage the respective frameworks' partitioning and replication for in multi-node deployments.

Transactions

In distributed environments, saga patterns for managing long-running transactions across multiple services can be implemented using the Vert.x event bus to orchestrate compensating actions in case of failures. This approach avoids two-phase commit protocols, instead using event-driven or to ensure , with each step's outcome published as for reactive handling.

Examples

Basic verticle deployment

To deploy a basic verticle in Vert.x, developers first create a class that extends VerticleBase from the core module. This provides the foundational structure for a verticle, which represents a unit of deployment in the Vert.x runtime. The class must override the start() method to define the initialization logic and return a Future, such as simple logging to confirm activation. For instance, the following Java code defines a minimal verticle named MainVerticle:
java
import io.vertx.core.Future;
import io.vertx.core.VerticleBase;

public class MainVerticle extends VerticleBase {
    @Override
    public [Future](/page/Future)<?> start() {
        System.out.println("Deployed!");
        return [Future](/page/Future).succeededFuture();
    }
}
This start() method executes asynchronously upon deployment, aligning with the verticle lifecycle where the runtime invokes it after successful loading (detailed in core concepts). Deployment occurs programmatically using the Vertx instance's deployVerticle method, typically within a main application . This method returns a Future<String> for asynchronous handling. The following example demonstrates deployment in a main method:
java
import io.vertx.core.Vertx;

public class Starter {
    public static void main(String[] args) {
        Vertx vertx = Vertx.vertx();
        vertx.deployVerticle(new MainVerticle()).onComplete(res -> {
            if (res.succeeded()) {
                System.out.println("Deployment succeeded with ID: " + res.result());
            } else {
                System.out.println("Deployment failed: " + res.cause());
            }
        });
    }
}
The Future completion processes the result string, which is the deployment ID on success, enabling further coordination if needed. To build and run this application, include the Vert.x core dependency in a pom.xml file:
xml
<dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-core</artifactId>
    <version>5.0.5</version> <!-- As of November 2025 -->
</dependency>
Compile the project with mvn compile, package it into a using mvn package, and execute via [java](/page/Java) -jar target/your-app.jar. Upon successful startup, the console outputs "Deployed!" from the verticle's start() method, followed by the deployment success message with the ID. This process verifies the verticle's integration into the Vert.x without additional features.

HTTP server implementation

Vert.x provides a straightforward way to implement an HTTP server by deploying a verticle that utilizes the HttpServer and Router from the Vert.x Web module. The setup involves creating an instance of HttpServer within the verticle's start method, configuring a router to define request routes, and binding the router as the server's request handler before listening on a specified port. This approach leverages Vert.x's event-driven model to handle incoming requests asynchronously without blocking the event loop. The following Java code example demonstrates a basic HTTP server verticle that responds to a GET request at the /hello endpoint with a JSON payload:
java
import io.vertx.core.[Future](/page/Future);
import io.vertx.core.VerticleBase;
import io.vertx.ext.web.Router;
import io.vertx.core.http.[HttpServer](/page/Server);

[public](/page/public) class HelloVerticle extends VerticleBase {

  @Override
  [public](/page/public) [Future](/page/Future)<?> start() {
    [HttpServer](/page/Server) server = vertx.create[HttpServer](/page/Server)();
    Router router = Router.router(vertx);
    router.get("/hello").handler(ctx -> {
      ctx.response()
        .putHeader("content-type", "application/[json](/page/JSON)")
        .end("{\"message\":\"Hello Vert.x!\"}");
    });
    return server.requestHandler(router).listen(8080).onComplete(res -> {
      if (res.succeeded()) {
        System.out.println("[Server](/page/Server) listening on port 8080");
      } else {
        System.err.println("Failed to start [server](/page/Server): " + res.cause());
      }
    });
  }
}
This verticle can be deployed using vertx.deployVerticle(new HelloVerticle()), enabling the to process requests reactively. Request handling in Vert.x HTTP is inherently asynchronous, allowing the to manage multiple concurrent connections efficiently through non-blocking I/O operations. Responses are constructed using HttpServerResponse, which supports setting status codes (e.g., setStatusCode(200) for success or setStatusCode([404](/page/404)) for not found) and custom headers (e.g., putHeader("Cache-Control", "no-cache")) before ending the response with end(). These features ensure scalable performance under load, as the underlying implementation delegates to Netty for low-level networking. For extended scenarios involving requests, Vert.x Web supports body parsing via the BodyHandler added to the router, which asynchronously reads and parses the request body into , form data, or multipart content, enabling further processing without manual buffering. To verify the implementation, access the endpoint using a at http://[localhost](/page/Localhost):8080/hello or via : curl http://localhost:8080/hello, which should return the response {"message":"Hello Vert.x!"} with a status code.

References

  1. [1]
    Intro to reactive | Eclipse Vert.x
    Eclipse Vert.x is a tool-kit for building reactive applications on the JVM. Reactive applications are both scalable as workloads grow, and resilient when ...
  2. [2]
    Building a real-time web app with Angular/Ngrx and Vert.x | Blog
    Apr 26, 2017 · Unlike other reactive platforms, Vert.x is polyglot: you can use Vert.x with multiple languages including Java, JavaScript, Groovy, Ruby, Ceylon ...
  3. [3]
    Eclipse Community Forums: Project Proposals » New Proposal: Vert.x
    Feb 25, 2013 · Vert.x was started in June 2011 by Tim Fox in his spare time while he was working at VMware. The inspiration for the project came from two main ...Re: [rt-pmc] Vert.x 2.1.0 release - Eclipse Foundation[vertx-dev] +1 for Robbie Gemmell on rt.vertx by Tim FoxMore results from www.eclipse.org
  4. [4]
    Interview with Tim Fox About Vert.x 3, the Original Reactive ... - InfoQ
    Jun 22, 2015 · InfoQ got a chance to catch up with Tim Fox, the creators of Vert. x and the Vert. x lead architect to get his thoughts on Vert.
  5. [5]
    Vert.x Core Manual
    Vert.x core is small and lightweight. You just use the parts you want. It's also entirely embeddable in your existing applications.
  6. [6]
    Vert.x Web
    Vert.x-Web is a set of building blocks for building web applications with Vert.x. Think of it as a Swiss Army Knife for building modern, scalable, web apps.
  7. [7]
    Eclipse Vert.x
    Vert. x in Action teaches you how to build responsive, resilient, and scalable JVM applications using well-established reactive design patterns. “Fantastic ...Docs · Vert.x Starter · Resources · Blog
  8. [8]
    Blog / Releases - Eclipse Vert.x
    Eclipse Vert.x version 5.0.4 has just been released. It fixes quite a few bugs that have been reported by the community as well as provides fixes for CVE ...
  9. [9]
    Migrate from Vert.x 3 to 4
    Vert.x is a toolkit used for creating reactive, non-blocking, and asynchronous applications that run on Java Virtual Machine. (JVM). It contains several ...<|control11|><|separator|>
  10. [10]
    a Deep Dive into Modern I/O Models and Vert.x - InfoQ
    Sep 18, 2024 · This article explores the transition from blocking I/O to non-blocking and asynchronous I/O models, emphasizing their importance in modern software development.Missing: origins | Show results with:origins
  11. [11]
    vert.x – JVM Polyglot Alternative to Node.js - InfoQ
    May 4, 2012 · Vert.x is a framework for the next generation of asynchronous, scalable, concurrent applications, which aims to provide an alternative to Node.Missing: capabilities | Show results with:capabilities
  12. [12]
    Vert.x 3.4.0 is released! | Blog
    Mar 7, 2017 · x has provided a polyglot runtime, this version simply adds the support of two major languages of the JVM ecosystem: Scala 2.12 and Kotlin 1.1.
  13. [13]
    Metrics using Micrometer | Eclipse Vert.x
    Vert.x relies on Netty for the networking layer. Vert.x Micrometer Metrics can be configured to collect Netty metrics:.
  14. [14]
    RxJava 2 - Eclipse Vert.x
    Vert.x integrates naturally with RxJava, allowing using RxJava wherever you can use streams or asynchronous results.
  15. [15]
    Reactive Streams | Eclipse Vert.x
    Vert.x provides its own mechanisms for handling streams of data and pumping them with back pressure from one to another using the io.vertx.core.streams.<|control11|><|separator|>
  16. [16]
    Vert.x Circuit Breaker
    Vert.x Circuit Breaker tracks recent failures, prevents further executions when a threshold is reached, and optionally executes a fallback.Using Vert.x Circuit Breaker · Using the circuit breaker · Retries · Callbacks
  17. [17]
    Tim Fox: What's new in Vert.x 2.0 - InfoQ
    Jul 26, 2013 · Tim Fox started Vert.x in 2011 while working for VMWare. He is still leading the Vert.x project, now being senior principal software engineer at ...Missing: origins | Show results with:origins
  18. [18]
    JBoss is juicy, but Vert.x could bring sexy back to Red Hat
    Feb 8, 2013 · ... Red Hat recently hired Vert.x creator Tim Fox, who quit VMware in late 2012. And in a demonstration of just how serious Red Hat is about Vert.x ...Missing: transition | Show results with:transition
  19. [19]
    Vert.x 1.0 released with its Groovy support - Guillaume Laforge
    May 10, 2012 · Tim Fox yesterday announced the release of Vert.x 1.0. Vert.x is a kind ofasynchronous application development environment and server.Missing: 2011 | Show results with:2011
  20. [20]
    Who controls Vert.x: Red Hat, VMware, or neither? - InfoWorld
    until he was hired by Red Hat last week. While ...Missing: 2011 | Show results with:2011<|control11|><|separator|>
  21. [21]
    Vert.x 3.0 has been released! - Google Groups
    Jun 24, 2015 · Pid. On 24/06/2015 09:32, Tim Fox wrote: > I'm pleased to announce the release of Vert. x 3.0!
  22. [22]
    Eclipse Vert.x 4 released! | Blog
    Dec 9, 2020 · See an overview of all new and exciting features in Vert.x 4, including futures, distributed tracing, reactive database clients, SQL templating, ...
  23. [23]
    AsyncFile (Vert.x Stack - Docs 4.0.3 API)
    Represents a file on the file-system which can be read from, or written to asynchronously. This class also implements ReadStream and WriteStream .
  24. [24]
    An important announcement to the Vert.x community - Google Groups
    On Tuesday, 8 January 2013 14:57:52 UTC, Tim Fox wrote: to host the organisation. fat finger: to host the *project*.
  25. [25]
    io.vertx » vertx-core » 5.0.0 - Maven Repository
    Vert.x Core » 5.0.0 ; May 14, 2025 · pom (34 KB) jar (1.5 MB) View All · CentralCloudera Pub · #342 in MvnRepository (See Top Artifacts) #8 in ...
  26. [26]
    Eclipse Vert.x 5.0.5 released! | Blog
    Oct 22, 2025 · We are extremely pleased to announce that Eclipse Vert.x version 5.0.5 has been released. Since the release of Vert.x 5.0.4, ...Missing: history | Show results with:history
  27. [27]
    Vert.x 3.0 update
    **Summary:**
  28. [28]
    Vert.x 3.2.0 is released! | Blog
    Eclipse Vert.x™ is open source and dual-licensed under the Eclipse Public License 2.0 and the Apache License 2.0. Website design by Michel Krämer.Missing: history | Show results with:history
  29. [29]
  30. [30]
    Eclipse Vert.x 5 released! | Blog
    May 15, 2025 · Vert.x 5 extends the Vert.x 4 line with a set of new features while providing the same Vert.x 4 experience.
  31. [31]
  32. [32]
    Verticle (Vert.x Stack - Docs 5.0.5 API)
    A verticle is a piece of code that can be deployed by Vert.x. Use of verticles with Vert.x is entirely optional, but if you use them they provide an actor-like ...Missing: definition lifecycle documentation
  33. [33]
  34. [34]
  35. [35]
  36. [36]
  37. [37]
  38. [38]
  39. [39]
    VertxOptions (Vert.x Stack - Docs 5.0.5 API)
    The default number of event loop threads to be used = 2 * number of cores on the machine ... The default value of max event loop execute time = 2000000000 ns (2 ...
  40. [40]
  41. [41]
  42. [42]
  43. [43]
  44. [44]
  45. [45]
    Vert.x Core | Eclipse Vert.x
    Summary of each segment:
  46. [46]
  47. [47]
  48. [48]
    Vert.x Core | Eclipse Vert.x
    Summary of each segment:
  49. [49]
  50. [50]
  51. [51]
    Vert.x Core | Eclipse Vert.x
    Summary of each segment:
  52. [52]
  53. [53]
    Reactive Microservices with Eclipse Vert.x
    Vert.x is a toolkit to build distributed reactive systems on the top of the Java Virtual Machine using an asynchronous and non-blocking development model.
  54. [54]
    vertx-lang-kotlin-coroutines - Eclipse Vert.x
    The vertx-lang-kotlin-coroutines integrates Kotlin coroutines for performing asynchronous operations and processing events.Running a coroutine from a... · Awaiting the completion of Vert... · Channels
  55. [55]
    Scala is here | Blog - Eclipse Vert.x
    Mar 20, 2017 · Scala support for Vert.x is here! · It is based on Scala 2.12, no support for 2.11 planned · all Vert.x-modules are available in a Scala flavor ...
  56. [56]
    vertx and graalvm - Google Groups
    This is the vert.x using graaljs to run javascript. The benefits are that you can use all modern js features like async/await classes, private members, etc..
  57. [57]
    dazraf/vertx-hot: A Maven plugin for hot-deploy of Vert.x projects
    This plugin can speed up your dev cycle in popular build systems, such as Maven. Write your code and see the changes auto reload into your JVM. Fully debuggable ...
  58. [58]
  59. [59]
    Building a Vert.x Native Image
    This howto shows all the current required steps and workarounds to build a vert.x native image with graalvm.Create A Project · Ssl · Build
  60. [60]
    Migrate from Vert.x 4 to 5
    Vert.x is a toolkit used for creating reactive, non-blocking, and asynchronous applications that run on Java Virtual Machine. (JVM).<|separator|>
  61. [61]
    Reactive Spring Boot programming with Vert.x | Red Hat Developer
    Aug 21, 2019 · A group of Eclipse Vert.x Spring Boot starters, which provide a Spring-native vocabulary for the popular JVM reactive toolkit.<|separator|>
  62. [62]
    Using Eclipse Vert.x API from a Quarkus Application
    Quarkus applications can access and use the Vert.x APIs. This guide presents how you can build a Quarkus application using:
  63. [63]
    vert-x3/vertx-stack: Vert.x stack - GitHub
    This project provides pre-configured Maven poms for using in your projects, allowing you to consume the Vert.x stack easily. Dependency chain (Maven depchain).
  64. [64]
    JUnit 5 | Eclipse Vert.x
    The scope of a Vertx object depends on which lifecycle method in the JUnit relative execution order first required a new instance to be created. Generally- ...
  65. [65]
    Running Vert.x Microservices on Kubernetes/OpenShift
    Mar 20, 2018 · RedHat OpenShift – is an open source container application platform build on top of Docker containers and Kubernetes. It is also available ...
  66. [66]
    Building a Native Executable - Quarkus
    This guide covered the creation of a native (binary) executable for your application. It provides an application exhibiting a swift startup time and consuming ...
  67. [67]
    io.vertx » vertx-opentelemetry » 5.0.5 - Maven Repository
    5. Vert.x OpenTelemetry. License, Apache 2.0EPL 1.0. Tags, vertxtelemetry ... 0 · 1.55.0. Apache 2.0, logo, io.opentelemetry » opentelemetry-sdk · 1.46.0 · 1.55.0.Missing: Micrometer | Show results with:Micrometer
  68. [68]
    Vert.x TCP EventBus bridge
    The TCP EventBus bridge is built on top of TCP, meaning that any application that can create TCP sockets can interact with a remote Vert.x instance via its ...
  69. [69]
    Get started | Eclipse Vert.x
    Get started with Vert.x. In this guide, you'll learn how to get started with a new Vert.x Web project. Before starting, you need:.
  70. [70]
  71. [71]
  72. [72]
  73. [73]
  74. [74]
  75. [75]
  76. [76]
    Auth common | Eclipse Vert.x
    This Vert.x component provides interfaces for authentication and authorization that can be used from your Vert.x applications and can be backed by different ...Missing: history | Show results with:history<|control11|><|separator|>
  77. [77]
    OAuth2 auth provider - Eclipse Vert.x
    OAuth2 lets users grant the access to the desired resources to third party applications, giving them the possibility to enable and disable those accesses ...
  78. [78]
    Vert.x Health Checks
    This component provides a simple way to compute health checks. Health checks are used to express the current state of the application in very simple terms: UP ...Using Vert.x Health Checks · Creating the health check object. · Procedures
  79. [79]
    Vert.x Config
    This event bus configuration store receives the configuration from the event bus. ... SSL is disabled by default, but you should enable it for production settings ...
  80. [80]
  81. [81]
  82. [82]
  83. [83]
  84. [84]
  85. [85]
  86. [86]
  87. [87]
  88. [88]
  89. [89]
    Http Proxy | Eclipse Vert.x
    Vert.x Http Proxy is a reverse proxy based on Vert.x, it aims to implement reusable reverse proxy logic to focus on higher concerns.Reverse Proxy Server · Headers Forwarding · Proxy Interception
  90. [90]
    What's new in Vert.x 5 | Blog
    Vert.x Maven Plugin. The Vert.x Maven Plugin, a Reactiverse project, is a plugin for Apache Maven that helps to develop and/or to package Vert.x applications.
  91. [91]
    GraphQL - Eclipse Vert.x
    This is the reference documentation for Vert.x Web GraphQL. It is highly recommended to get familiar with the GraphQL-Java API first.
  92. [92]
    Reactive PostgreSQL Client - Eclipse Vert.x
    You can refer to the official documentation for more details. The following parameters are supported: PGHOST. PGHOSTADDR. PGPORT. PGDATABASE. PGUSER. PGPASSWORD.
  93. [93]
    Reactive MySQL Client - Eclipse Vert.x
    The Reactive MySQL Client is a client for MySQL with a straightforward API focusing on scalability and low overhead.Usage · Connecting to MySQL · Pool versus pooled client · MySQL type mapping
  94. [94]
    Reactive MSSQL Client - Eclipse Vert.x
    The Reactive MSSQL Client is a client for Microsoft SQL Server with a straightforward API focusing on scalability and low overhead.
  95. [95]
    Vert.x JDBC client
    This client allows you to interact with any JDBC compliant database using an asynchronous API from your Vert.x application.
  96. [96]
    Vert.x MongoDB Client
    A Vert.x client allowing applications to interact with a MongoDB instance, whether that's saving, retrieving, searching, or deleting documents.Using Vert.x MongoDB Client · Creating a client · Using the API
  97. [97]
    Vert.x Redis
    Vert.x Redis is a Redis client to be used with Vert.x. This module allows data to be saved, retrieved, searched for, and deleted in a Redis.Connecting To Redis · Providing... · Cluster ModeMissing: SmallRye | Show results with:SmallRye<|control11|><|separator|>
  98. [98]
    Cassandra | Eclipse Vert.x
    By default, the Cassandra client for Vert.x connects to the local machine's port 9042 and is not tied to any specific keyspace.Getting started · Creating a client · Client options · Shared clients
  99. [99]
    Vert.x Kafka client
    This component provides a Kafka client for reading and sending messages from/to an Apache Kafka cluster. As consumer, the API provides methods for subscribing ...Offset Lookup · Sending Messages To A Topic · Vert. X Kafka Admin ClientMissing: SmallRye | Show results with:SmallRye
  100. [100]
    RabbitMQ - Eclipse Vert.x
    A Vert.x client allowing applications to interact with a RabbitMQ broker (AMQP 0.9.1). This service is experimental and the APIs are likely to change before ...Getting Started · Create a client · Recovery and Reconnections · Operations
  101. [101]
    Vert.x AMQP Client
    The Vert.x AMQP Client allows interacting with AMQP 1.0 brokers and routers. It allows: The AMQP 1.0 protocol support durable subscriptions, persistence, ...Using Vert.x AMQP Client · Creating an AMQP client · Creating a receiver
  102. [102]
    Hazelcast Cluster Manager - Eclipse Vert.x
    This is a cluster manager implementation for Vert.x that uses Hazelcast. It is the default cluster manager used in the Vert.x CLI, but it can be replaced with ...Missing: vertices per
  103. [103]
    Apache Ignite Cluster Manager for Vert.x
    This is a cluster manager implementation for Vert.x that uses Apache Ignite. In Vert.xa cluster manager is used for various functions including:Using Ignite cluster manager · Using Vert.x in Maven or... · Using configuration file
  104. [104]
    Integrate with Vert.x - Hazelcast Documentation
    Hazelcast integrates with Vert.x in a form of a cluster manager - the Hazelcast Cluster Manager. In Vert.xa cluster manager is used for various functions.