REST features

JSON:API client and server implementation with the possibility of shared, fully type-safe repository interfaces. The server implementation allows implement JSON:API compliant endpoints. The client allows to access and test such endpoints.
Support for multiple formats. JSON:API for a normalized REST endpoint support complex object graphs. And a similar, but more basic REST endpoint for simpler applications. For more information see here.
Pattern for Sorting, filtering and pagination that can be reused across all resources in an application.
Mobile friendly. Fetch complex object graphs in a single request with JSON:API inclusions. Fetch partial objects with JSON:API sparse field sets. Use together with the popular OkHttp library on Android devices.
Atomically insert, update and delete multiple resources with JSON Patch. Operations thereby may be executed within the same transaction. Each operation may thereby separately perform validation and return a status and any potential errors.
Standardized and consistent error handling across your application. JSON:API thereby comes with many predefined fields. For example, source pointers allow user interfaces automatically associate validation errors with the fields causing them. Crnk comes with exception mappers for many "popular" exceptions and allows to add custom further mappers.
Not limited to JSON:API through a flexible, resource-oriented architecture. Serializers allow to implement other REST protocols or support for formats like CSV/Excel.
Traditional and (experimental) reactive programming API for responsive, resilient, elastic applications.
All batteries included: Setup the resource model of your application and implement the methods to access them. Crnk comes with defaults that takes care of rest from parameter parsing to exception handling. This allows you to focus on what matters: your application.

Security features

The resource-oriented nature of Crnk gives more insights into applications. This makes it possible to more simply and consistently secure applications on a type, resource and field level. Automated checks will protect against unauthorized accesses to repositories; including checks against sort, filter, field and inclusion parameters.
Crnk is agnostic to the used authentication pattern like SAML, OAuth or JWT and allows to implement powerful access control mechanisms.
Authorization-aware directory listings and meta model to hide resources and links a user is not allowed to access.

Modular and Open Source

Up-to-date documentation with Asciidoc. The documentation is versioned and aligned with the latest and past releases. Code snippets are taken out of example applications and test cases.
Modular design to tailor Crnk towards the application in use. A module API allows to create, share and reuse modules with other applications. Crnk itself already comes with various modules for integration, data access, security and monitoring.
Focus on quality with continuous releases and extensive test coverage.

Coverage Status.

Integration features

Integrate well with popular frameworks like Spring Boot, Vert.x, Dropwizard, Eclipse JEE and Eclipse MicroProfile. Use Crnk together with the framework of your choice. Further integrations are simple to add and a TestKit can ensure compatibility.
Long-term support to ease enterprise adoption. Supports the most recent Java releases and Java LTS releases. New major versions of Crnk are introduced every one, two years without breaking changes, but only removal of already deprecated API.
Lightweight with only few dependencies of the core libraries, most notably the Jackson library. Ensure compatibility with a wide range of framework and application. Gives fast start-up times when using Crnk for development and production.
Integrates with Zipkin and Spring Cloud Sleuth to trace access to repositories and correlate with requests and other systems. Further integrations like Micrometer are planned for the near future.
Typescript friendly. Generate Typescript interfaces to access your repositories and resources in a type-safe manner. An expression language together with generated classes further allows to build filter, sort, include and field sets in the same type-safe manner.
Support for Angular development with @crnk/angular-ngrx. It complements the Typescript generation and provides binding of Angular table and form components to JSON:API.

Data access features

Expose any JPA entity as JSON:API resource with out-of-the-box sorting, filtering, paging and CRUD. No implementation is necessary, but further customizations can introduce additional behavior through decorators or introduce, for example, a mapping to DTOs.
support for JSR-303 Bean Validation for JSON:API compliant errors.
Extensive meta model of your application available as JSON API endpoint for the purpose of documentation and UI automation. It gives access to all your repositories, resources and fields and holds information like naming, typing and access control information. Any elements not allowed to be seen by a user are automatically hidden from the meta model as well.
Support for Actiti workflow engine to expose processes, tasks and forms as JSON:API resources. A dedicated resource is created for each definition. This gives an API tailored towards your application. Thereby each resource can make use of the full Crnk feature set like access control or decorators for further customizations.

Roadmap