Lightweight asynchronous framework for efficient and scalable web, network and big data solutions

Alternative to conventional frameworks

DataKernel is a full-featured alternative web and big data Java framework. It does not use Netty, Jetty, Spring/Guice DI, RxJava etc. Instead, it features complete application stack: Event Loop, Promises, HTTP, DI and others, including decentralized big-data technologies and map-reduce algorithms.

DataKernel main goal is to free projects from the frameworks which restrict developers with redundant standards and boilerplates. Get yourself a true freedom to express yourself as a developer - create projects and concentrate on their business logic instead of learning framework specifications.

DataKernel structure

DataKernel consists of stack of loosely coupled components which perfectly complement and empower each other. It’s much more than the sum of the parts.

Core

Stable
Building blocks of the framework and everything you need to create web applications: Node.js-inspired Promises and Eventloop, fast serializers, bytecode generators, HTTP and TCP servers, integration with UIKernel JS front-end library.

Cloud

Stable
Components for decentralized cloud solutions of different complexity: from small private file storage to high-loaded OLAP Cube systems. Also includes Operational Transformations, CRDT and RPC implementations.

Global Cloud

WIP
Technologies for ultimately scalable, decentralized, yet practical and high-performance cloud solutions with implementation of data authenticity and encryption. BitTorrent and Blockchain alternatives.

Why choose DataKernel:

Best technologies

DataKernel is legacy-free. Build application-specific embedded databases and high-performance HTTP/RPC servers using high-level abstractions, LSM-Tree, Operational Transformations, CRDT, Go-inspired CSP and other modern algorithms and technologies.

Explicit design

There are no under-the-hood magic, endless XML configurations and dependency hell of third-party components glued together via layers of abstractions. DataKernel gives a full control over your applications.

Born to be async

DataKernel allows you to create async web applications in a Node.js manner while preserving all of the Java advantages. We also use Node.js-inspired features, such as single-threaded async Promises and pool of event loops as the building blocks of our framework.

No overweights

To achieve the lowest GC footprint possible, we’ve designed thoroughly optimized core modules - improved Java ByteBuffer ByteBuf, minimalistic Datastreams, stateless single-threaded Promises and also one of the fastest Serializers available nowadays.

Flexibility

DataKernel has everything you need to create applications of different scales - from standalone high-performance async network solutions and HTTP web applications up to big-data cloud solutions and decentralized internet-wide applications.

Modern approach

DataKernel has simple yet powerful set of abstractions with clean OOP design favoring Java 8+ functional programming style. It also radically downplays Dependency Injection role, giving way to your business logic instead.

Comparison with other popular frameworks


DataKernel Spring Node.js Ruby on Rails Django
Suitable for enterprise-level solutions + + + + +
Low entry barrier level + - + + +
Designed asynchronous + - + - -
Explicit specifications instead of implicit conventions + - + - +
Legacy-free, no third-party dependencies + - + ± ±
IDE friendly, statically-typed high-performance language + + - - -

Create your applications simpler than ever before

A set of predefined launchers and classes for typical use cases allows you to develop apps extremely fast. Create an async HTTP server in less than 15 lines of code with no additional configuration files.
public final class HttpHelloWorldExample extends HttpServerLauncher {
	@Provides
	AsyncServlet servlet() {
		return request -> Promise.of(ok200()
		    .withPlainText("Hello World"));
	}

	public static void main(String[] args) throws Exception {
		Launcher launcher = new HttpHelloWorldExample();
		launcher.launch(args);
	}
}

Dependency Injection:
Redefined

DataKernel has an extremely lightweight DI with ground-breaking design principles. Besides lightning-fast launch, it is even more powerful: support of nested scopes, singletons, object factories, modules and plugins which allow to transform graph of dependencies at startup time, abstracting out all reflection. These plugins extensively use Java 8+ functional-style programming: for binding definitions, user-defined binding transformations and binding generators. The entire runtime code of Injector consists of ~50 lines of code, with all binding definitions performed in startup time.
DataKernel DI has no dependencies on its own, so it can be used as a standalone component.
public final class HelloWorldExample extends Launcher {

	@Inject
	String message;

	@Provides
	String message() {
		return "Hello, world!";
	}

	@Override
	protected void run() {
		System.out.println(message);
	}

	public static void main(String[] args) throws Exception {
		Launcher launcher = new HelloWorldExample();
		launcher.launch(args);

	}
}

Production-ready technology

DataKernel is a production-ready framework which constantly evolves and gets new updates. The essential DataKernel modules form the basis of diverse high-load applications processing billions of requests daily: ad-serving solutions, online analytics and web crawlers.

Easy to start

We did our best to make your first use of DataKernel as smooth as possible and created dozens of examples and tutorials of different complexity, for both beginners and advanced Java developers. Try DataKernel right now by passing Getting-Started tutorial. You can also explore docs to find out more about DataKernel modules.
It is also worth to note that due to the usage of Node.js-inspired features, DataKernel is a perfect framework to get started with Java if you are a JavaScript developer.