Introduction: Spring Fu is an experimental Kotlin micro-framework that makes it easy to create lightweight Spring-powered applications with functional APIs instead of annotations
More: Author   ReportBugs   

= Spring Fu

image::https://ci.spring.io/api/v1/teams/spring-fu/pipelines/spring-fu/badge["Build Status", link="https://ci.spring.io/teams/spring-fu/pipelines/spring-fu"]

Spring Fu is an incubator for new Spring features related to explicit configuration and runtime efficiency.

While regular Spring Boot applications are configured using annotations, conventions and automatic configuration based on conditions like "Is this class available in the classpath?", Spring Fu provides an explicit way of configuring Spring Boot applications with a https://github.com/spring-projects/spring-fu/tree/master/kofu/README.adoc[Kotlin DSL (Kofu)] or a https://raw.githubusercontent.com/spring-projects/spring-fu/master/jafu/README.adoc[Java DSL (Jafu)] using functional bean definitions for both Spring Boot infrastructure and application code.

It has following characteristics:

  • Explicit configuration via Kotlin or Java DSL instead of annotations
  • Minimal set of features enabled by default
  • No classpath scanning, no feature enabled based on classpath detection
  • Both declarative (via the DSL) and programmatic (code auto-complete, allow any kind of if, for statements)
  • Functional configuration based on pure lambdas
  • Minimal reflection usage, no CGLIB proxy, no annotation processing
  • Faster startup and lower memory consumption
  • https://github.com/oracle/graal/tree/master/substratevm[GraalVM native image] friendly

The project also incubates various other features like https://github.com/spring-projects/spring-fu/tree/master/coroutines[Coroutines] or GraalVM support. You can see https://raw.githubusercontent.com/spring-projects/spring-fu/master/ROADMAP.adoc[the roadmap] for more details.

It is not intended to be used in production, but rather to incubate and get feedback and contributions from the community in order to reach a point where its features can be integrated as part of existing Spring projects like Framework, Boot and Data.

== Getting started

Choose your flavor and follow the documentation:

== Credits

In addition to the whole Spring and Reactor teams, special credits to:

Support Me
About Me
Google+: Trinea trinea
GitHub: Trinea