Programming language: Java
License: Apache License 2.0
Tags: REST Frameworks    

Crnk alternatives and similar libraries

Based on the "REST Frameworks" category.
Alternatively, view Crnk alternatives based on common mentions on social networks and blogs.

  • Retrofit

    Type-safe REST client.
  • Dropwizard

    Opinionated framework for setting up modern web applications with Jetty, Jackson, Jersey and Metrics.
  • Scout APM uses tracing logic that ties bottlenecks to source code so you know the exact line of code causing performance issues and can get back to building a great product faster.
    Sponsored scoutapm.com
  • Spark

    9.1 7.0 L3 Crnk VS Spark
    Sinatra inspired framework.
  • Feign

    8.9 6.9 L4 Crnk VS Feign
    HTTP client binder inspired by Retrofit, JAXRS-2.0, and WebSocket.
  • rest.li

    Framework for building robust, scalable RESTful architectures using type-safe bindings and asynchronous, non-blocking IO with an end-to-end developer workflow that promotes clean practices, uniform interface design and consistent data modeling.
  • RESTEasy

    Fully certified and portable implementation of the JAX-RS specification.
  • Swagger

    Swagger is a specification and complete framework implementation for describing, producing, consuming, and visualizing RESTful web services.
  • Rapidoid

    A simple, secure and extremely fast framework consisting of embedded HTTP server, GUI components and dependency injection.
  • RestExpress

    Thin wrapper on the JBoss Netty HTTP stack to provide scaling and performance.
  • RAML

    6.1 1.6 L5 Crnk VS RAML
    Modeling language to generate REST APIs with contract first.
  • Microserver

    A convenient extensible Microservices plugin system for Spring & Spring Boot, with over 30 plugins and growing, that supports both micro-monolith and pure microservices styles.
  • Restlet Framework

    Pioneering framework with powerful routing and filtering capabilities, unified client and server API.
  • Jersey

    JAX-RS reference implementation.
  • RestX

    4.6 2.0 L2 Crnk VS RestX
    Framework based on annotation processing and compile-time source generation.
  • Hexagon

    The atoms of your platform
  • StubbornJava

    Unconventional Java code for building web servers / services without a framework. Think dropwizard but as a seed project instead of a framework. If this project had a theme it would be break the rules but be mindful of your decisions.
  • gemini

    Model Driven REST framework to automatically generate CRUD APIs
  • Restler

    Automatically generates a web service client at run time by analyzing its annotated Spring controller interface

Do you think we are missing an alternative of Crnk or a related project?

Add another 'REST Frameworks' Library


crnk.io - Crank up the development of RESTful applications!

<!-- currently broken: https://github.com/badges/shields/issues/658 https://img.shields.io/bintray/v/crnk-project/maven/crnk-core.svg

Maven Central


Build Status Gitter License Coverage Status

Bintray release on jcenter\ Bintray latest in private repository

What is Crnk?

Crnk is an implementation of the JSON API specification and recommendations in Java to facilitate building RESTful applications. It provides many conventions and building blocks that application can benefit from. This includes features such as sorting, filtering, pagination, requesting complex object graphs, sparse field sets, attaching links to data or atomically execute multiple operations. Further integration with frameworks and libraries such as Spring, CDI, JPA, Bean Validation, Dropwizard, Servlet API, Zipkin and and more ensure that JSON API plays well together with the Java ecosystem. Have a look at www.crnk.io and the documentation for more detailed information.

Release notes can be found in http://www.crnk.io/releases/.


Crnk Maven artifacts are available from jcenter/bintray: https://bintray.com/crnk-project.

Note that due to reliability issues of MavenCentral we only rarely publish there.


Crnk requires Java 1.8 or later and an SLF4J setup for logging.


See https://github.com/crnk-project/crnk-example/

Gradle settings.gradle can look like:

gradle.beforeProject { Project project ->
    project.with {
        buildscript {
            repositories {
                // maven { url 'https://dl.bintray.com/crnk-project/mavenLatest/' }
        repositories {
            // maven { url 'https://dl.bintray.com/crnk-project/mavenLatest/' }

and the build.gradle:

dependencies {
    implementation platform('io.crnk:crnk-bom:INSERT_VERSION_HERE')
    annotationProcessor platform('io.crnk:crnk-bom:INSERT_VERSION_HERE')

    annotationProcessor 'io.crnk:crnk-gen-java'

    implementation "io.crnk:crnk-setup-spring-boot2"
    implementation "io.crnk:crnk-data-jpa"
    implementation "io.crnk:crnk-data-facet"
    implementation "io.crnk:crnk-format-plain-json"
    implementation "io.crnk:crnk-validation"
    implementation "io.crnk:crnk-home"
    implementation "io.crnk:crnk-ui"
    implementation "io.crnk:crnk-operations"
    implementation "io.crnk:crnk-security"

and a basic Java example:

@JsonApiResource(type = "vote")
public class Vote {

    private UUID id;

    private int stars;


public class VoteRepository extends ResourceRepositoryBase<Vote, UUID> {

    public Map<UUID, Vote> votes = new ConcurrentHashMap<>();

    public VoteRepository() {

    public ResourceList<Vote> findAll(QuerySpec querySpec) {
        return querySpec.apply(votes.values());

    public <S extends Vote> S save(S entity) {
        votes.put(entity.getId(), entity);
        return null;

    public void delete(UUID id) {

or with JPA:

@JsonApiResource(type = "person")
public class PersonEntity {

    private UUID id;

    private String name;

    private int year;

    @OneToMany(mappedBy = "movie")
    private List<RoleEntity> roles = new ArrayList<>();

    private Integer version;

public class PersonRepository extends JpaEntityRepositoryBase<PersonEntity, UUID> {

    public PersonRepository() {

    public PersonEntity save(PersonEntity entity) {
        // add your save logic here
        return super.save(entity);

    public PersonEntity create(PersonEntity entity) {
        // add your create logic here
        return super.create(entity);

    public void delete(UUID id) {
        // add your save logic here

Crnk integrates well with many frameworks. Have a look at the documentation and carefully choose what you need. Don't hesitate to ask for help and suggest improvements!


Crnk is licensed under the Apache License, Version 2.0. You can grab a copy of the license at http://www.apache.org/licenses/LICENSE-2.0.

Building from Source

Crnk make use of Gradle for its build. To build the complete project run

gradlew clean build

Note as part of the build a local Node installation is downloaded to build the frontend parts (crnk-ui) of the project.



We thank YourKit for supporting open source projects with profiler and monitoring tooling.

*Note that all licence references and agreements mentioned in the Crnk README section above are relevant to that project's source code only.