Next-Generation Load Testing

The Future of
Load Testing
is Here

Built on Java 21's revolutionary virtual threads, VajraPulse delivers 10,000+ TPS with minimal memory footprint. Outperform traditional tools like JMeter, Gatling, and BlazeMeter with a modern, developer-friendly API.

10,000+
TPS per Worker
~200 MB
Memory for 100K Requests
1M+
Concurrent Requests
๐Ÿ”“ Open Source โš–๏ธ Apache 2.0 Java 21 Virtual Threads
HttpLoadTest.java
@VirtualThreads
public class HttpLoadTest implements Task {
    private HttpClient client;
    
    @Override
    public void setup() {
        client = HttpClient.newBuilder()
            .executor(Executors.newVirtualThreadPerTaskExecutor())
            .build();
    }
    
    @Override
    public TaskResult execute() {
        var response = client.send(request, ...);
        return TaskResult.success(response.body());
    }
}

Why Choose VajraPulse?

The next-generation load testing tool built for modern applications

๐Ÿš€

Modern Java Architecture

Built exclusively for Java 21+ with records, sealed types, pattern matching, and virtual threads. No legacy baggage, just modern, efficient code.

  • Java 21+ only
  • Zero-dependency API
  • Clean, type-safe design
๐Ÿ“Š

Real-Time Observability

OpenTelemetry integration for real-time metrics and distributed tracing. Export to Grafana, Prometheus, Jaeger, or any OTEL-compatible backend.

  • Live metrics during execution
  • OpenTelemetry native
  • Rich percentile calculations
๐ŸŽฏ

Developer-Friendly API

Simple Task interface - just implement setup(), execute(), and cleanup(). No complex configuration files or XML. Pure Java code.

  • Simple 3-method interface
  • No XML configuration
  • Type-safe and testable
๐Ÿ”„

Advanced Load Patterns

Six built-in patterns plus adaptive load testing. Model any real-world scenario with warm-up/cool-down phases for accurate measurements.

  • Static, Ramp, Step, Spike, Sine
  • Adaptive load patterns
  • Warm-up/Cool-down support
โœ…

Production Ready

Comprehensive test coverage (โ‰ฅ90%), battle-tested patterns, and production-grade reliability. Ready for enterprise workloads.

  • โ‰ฅ90% test coverage
  • Zero flakiness
  • Enterprise-grade quality

How VajraPulse Compares

See why VajraPulse outperforms traditional load testing tools

Feature
Next-Gen
JMeter Gatling BlazeMeter
Architecture โœ… Java 21 Virtual Threads โŒ Traditional Thread Pool โš ๏ธ Scala/Akka (Complex) โŒ Cloud-based (Vendor Lock-in)
Concurrency Model โœ… Millions of Virtual Threads โŒ Limited by OS Threads โš ๏ธ Actor Model (Overhead) โŒ Limited by Infrastructure
Memory Efficiency โœ… ~200MB for 100K requests โŒ High memory usage โš ๏ธ Moderate memory usage โŒ Cloud costs scale with usage
Performance (TPS) โœ… 10,000+ TPS per worker โŒ ~1,000-2,000 TPS โš ๏ธ ~3,000-5,000 TPS โŒ Varies by plan
API Complexity โœ… Simple 3-method interface โŒ XML configuration โš ๏ธ DSL learning curve โŒ Web UI only
Dependencies โœ… Zero-dependency API โŒ Heavy dependencies โš ๏ธ Scala ecosystem โŒ Cloud service
Real-Time Metrics โœ… OpenTelemetry native โš ๏ธ Plugins required โš ๏ธ Limited integration โœ… Built-in (Paid)
Adaptive Load Testing โœ… Built-in adaptive patterns โŒ Manual configuration โŒ Not available โš ๏ธ Limited support
Warm-up/Cool-down โœ… Native support โŒ Manual scripting โš ๏ธ Complex setup โŒ Not available
Cost โœ… Free & Open Source โœ… Free (Apache 2.0) โœ… Free (Apache 2.0) โŒ Paid service
Modern Java Features โœ… Records, Sealed Types, Pattern Matching โš ๏ธ Java 8+ compatible โŒ Scala-based โŒ N/A
๐Ÿ†

Performance Leader

5-10x better TPS than traditional tools with minimal resource usage

๐Ÿ’ก

Modern Architecture

Built for Java 21+ with cutting-edge virtual threads technology

๐Ÿ”ง

Developer Experience

Simplest API in the industry - get started in minutes, not hours

Powerful Features

Everything you need for modern load testing

โšก

Virtual Threads

Leverage Java 21's Project Loom for millions of concurrent operations with minimal memory overhead. Perfect for I/O-bound load tests.

๐Ÿ“Š

Flexible Load Patterns

Six built-in patterns: Static, Ramp-up, Ramp-sustain, Step, Spike, and Sine wave. Plus adaptive load patterns that adjust based on system response.

๐Ÿ“ˆ

Real-Time Metrics

OpenTelemetry integration with live metrics during execution. Export to Grafana, Prometheus, Jaeger, or any OTEL-compatible backend.

๐Ÿ”Œ

Simple API

Just implement the Task interface with setup(), execute(), and cleanup(). The framework handles the rest. No XML, no complex configuration.

๐ŸŽฏ

Thread Strategy

Choose virtual threads for I/O-bound tasks or platform threads for CPU-intensive workloads. Annotate and go - @VirtualThreads or @PlatformThreads.

๐Ÿ”„

Adaptive Load Testing

Intelligent load patterns that automatically adjust based on system response. Find optimal performance thresholds automatically.

๐ŸŒก๏ธ

Warm-up & Cool-down

Built-in support for warm-up and cool-down phases. Metrics are only recorded during steady-state for accurate measurements.

๐Ÿ“ฆ

Minimal Dependencies

Core API has zero dependencies. Full framework weighs in at just ~1.6MB. Every dependency is justified and minimal.

โœ…

Production Ready

Comprehensive test coverage (โ‰ฅ90%), OpenTelemetry integration, and battle-tested patterns. Ready for production workloads.

The Future of Load Testing

Our vision for revolutionizing application performance testing

Phase 1: Foundation
โœ… Completed

Core Platform

  • โœ… Java 21 virtual threads integration
  • โœ… Multiple load patterns
  • โœ… OpenTelemetry support
  • โœ… Simple Task API
  • โœ… Comprehensive test coverage
Phase 2: Collaboration
๐Ÿ“‹ Planned

Team & CI/CD Integration

  • ๐Ÿ“‹ Shared test repositories
  • ๐Ÿ“‹ Team collaboration features
  • ๐Ÿ“‹ Enhanced CI/CD integrations
  • ๐Ÿ“‹ Test result sharing & comparison
  • ๐Ÿ“‹ Performance regression tracking
Phase 3: Ecosystem
๐Ÿ“‹ Planned

Enhanced Protocol Support

  • ๐Ÿ“‹ gRPC load testing
  • ๐Ÿ“‹ WebSocket stress testing
  • ๐Ÿ“‹ GraphQL performance testing
  • ๐Ÿ“‹ Database load testing
  • ๐Ÿ“‹ Message queue testing (Kafka, RabbitMQ)

Our Commitment: VajraPulse is committed to continuous innovation. We're building the future of load testing, one feature at a time. Join us on this journey!

Code Examples

See how easy it is to get started

Creating a Simple HTTP Load Test

import com.vajrapulse.api.*;

@VirtualThreads  // Use virtual threads for I/O
public class HttpLoadTest implements Task {
    private HttpClient client;
    private HttpRequest request;
    
    @Override
    public void setup() throws Exception {
        client = HttpClient.newBuilder()
            .executor(Executors.newVirtualThreadPerTaskExecutor())
            .connectTimeout(Duration.ofSeconds(10))
            .build();
        
        request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/endpoint"))
            .timeout(Duration.ofSeconds(10))
            .GET()
            .build();
    }
    
    @Override
    public TaskResult execute() throws Exception {
        HttpResponse response = client.send(
            request, 
            HttpResponse.BodyHandlers.ofString()
        );
        
        if (response.statusCode() == 200) {
            return TaskResult.success(response.body());
        } else {
            return TaskResult.failure(
                new RuntimeException("HTTP " + response.statusCode())
            );
        }
    }
    
    @Override
    public void cleanup() throws Exception {
        // Cleanup resources if needed
    }
}

Load Pattern Examples

import com.vajrapulse.api.*;
import java.time.Duration;

// Static: Constant TPS
LoadPattern staticPattern = new StaticLoad(
    100.0, 
    Duration.ofMinutes(5)
);

// Ramp-up: Linear increase from 0 to max
LoadPattern rampPattern = new RampUpLoad(
    500.0, 
    Duration.ofSeconds(30)
);

// Ramp-sustain: Ramp then maintain
LoadPattern rampSustain = new RampUpToMaxLoad(
    500.0, 
    Duration.ofSeconds(30),  // ramp duration
    Duration.ofMinutes(5)      // total duration
);

// Step: Discrete phases
LoadPattern stepPattern = new StepLoad(List.of(
    new StepLoad.Step(50.0, Duration.ofSeconds(30)),
    new StepLoad.Step(200.0, Duration.ofMinutes(1)),
    new StepLoad.Step(500.0, Duration.ofMinutes(2))
));

// Sine: Smooth oscillation
LoadPattern sinePattern = new SineWaveLoad(
    300.0,                    // mean rate
    150.0,                     // amplitude
    Duration.ofMinutes(3),     // total duration
    Duration.ofSeconds(20)     // period
);

// Spike: Periodic bursts
LoadPattern spikePattern = new SpikeLoad(
    200.0,                     // base rate
    800.0,                     // spike rate
    Duration.ofMinutes(2),     // total duration
    Duration.ofSeconds(15),    // spike interval
    Duration.ofSeconds(3)      // spike duration
);

// With Warm-up and Cool-down
LoadPattern pattern = new WarmupCooldownLoadPattern(
    basePattern,
    Duration.ofSeconds(30),  // Warm-up
    Duration.ofSeconds(10)   // Cool-down
);

Adaptive Load Testing

import com.vajrapulse.api.*;

// Adaptive load pattern that adjusts based on system response
LoadPattern adaptivePattern = new AdaptiveLoadPattern.Builder()
    .initialTps(50.0)
    .maxTps(1000.0)
    .minTps(10.0)
    .rampUpDuration(Duration.ofMinutes(2))
    .steadyStateDuration(Duration.ofMinutes(10))
    .rampDownDuration(Duration.ofMinutes(1))
    .targetLatency(Duration.ofMillis(200))
    .maxLatency(Duration.ofMillis(1000))
    .targetErrorRate(0.01)  // 1% error rate
    .maxErrorRate(0.05)     // 5% max error rate
    .adjustmentInterval(Duration.ofSeconds(10))
    .build();

// The pattern automatically:
// - Increases TPS when system performs well
// - Decreases TPS when latency/errors exceed thresholds
// - Finds optimal performance point
// - Provides detailed phase information

Programmatic Execution

import com.vajrapulse.api.*;
import com.vajrapulse.exporter.console.ConsoleMetricsExporter;
import com.vajrapulse.worker.pipeline.MetricsPipeline;
import java.time.Duration;

public class LoadTestRunner {
    public static void main(String[] args) throws Exception {
        // Create your task
        HttpLoadTest task = new HttpLoadTest();
        
        // Define load pattern
        LoadPattern pattern = new StaticLoad(
            100.0, 
            Duration.ofSeconds(30)
        );
        
        // Build metrics pipeline with exporters
        try (MetricsPipeline pipeline = MetricsPipeline.builder()
            .addExporter(new ConsoleMetricsExporter())
            .withPeriodic(Duration.ofSeconds(5))  // Live updates
            .withPercentiles(0.5, 0.95, 0.99)
            .build()) {
            
            // Run the test
            pipeline.run(task, pattern);
        }
        
        // Automatic cleanup
    }
}

Get Started

Add VajraPulse to your project in minutes

Using BOM (Recommended)

dependencies {
    // Import BOM
    implementation(platform("com.vajrapulse:vajrapulse-bom:0.9.11"))
    
    // Use modules without versions
    implementation("com.vajrapulse:vajrapulse-core")
    implementation("com.vajrapulse:vajrapulse-worker")
    
    // Optional exporters
    implementation("com.vajrapulse:vajrapulse-exporter-console")
    implementation("com.vajrapulse:vajrapulse-exporter-opentelemetry")
}

Using BOM (Recommended)

dependencies {
    // Import BOM
    implementation platform('com.vajrapulse:vajrapulse-bom:0.9.11')
    
    // Use modules without versions
    implementation 'com.vajrapulse:vajrapulse-core'
    implementation 'com.vajrapulse:vajrapulse-worker'
    
    // Optional exporters
    implementation 'com.vajrapulse:vajrapulse-exporter-console'
    implementation 'com.vajrapulse:vajrapulse-exporter-opentelemetry'
}

Using BOM (Recommended)

<dependencyManagement>
    <dependencies>
        <!-- Import BOM -->
        <dependency>
            <groupId>com.vajrapulse</groupId>
            <artifactId>vajrapulse-bom</artifactId>
            <version>0.9.11</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <!-- Use modules without versions -->
    <dependency>
        <groupId>com.vajrapulse</groupId>
        <artifactId>vajrapulse-core</artifactId>
    </dependency>
    <dependency>
        <groupId>com.vajrapulse</groupId>
        <artifactId>vajrapulse-worker</artifactId>
    </dependency>
</dependencies>

Requirements

  • Java 21 or higher (required for virtual threads)
  • Gradle 9.0+ or Maven 3.6+

Performance Benchmarks

Real numbers that speak for themselves

10,000+
TPS per Worker
5-10x faster than traditional tools
1M+
Concurrent Requests
With virtual threads
~200 MB
Memory Usage
For 100K requests @ 1000 TPS
1.6 MB
Fat JAR Size
Minimal footprint
๐Ÿ”“

Open Source & Free

VajraPulse is completely open source and free to use. Released under the Apache License 2.0, you can use it in commercial and personal projects without restrictions.

โš–๏ธ

Apache License 2.0

Permissive open source license that allows you to:

  • โœ… Use commercially
  • โœ… Modify and distribute
  • โœ… Use in proprietary software
  • โœ… Patent use granted
Read Full License
๐Ÿ’ก

Contribute & Collaborate

VajraPulse is built by the community, for the community. Contributions are welcome!

  • โœ… Open source on GitHub
  • โœ… Community-driven development
  • โœ… Issue tracking and PRs welcome
  • โœ… Transparent development process
View on GitHub