springwolf-core

Automated documentation for event-driven applications built with Spring Boot

APACHE-2.0 License

Stars
247
Committers
37

We are on discord for any question, discussion, request etc. Join us at https://discord.gg/HZYqd5RPTd

Contents

About

This project is inspired by Springfox. It documents asynchronous APIs using the AsyncAPI specification.

springwolf-ui adds a web UI, much like that of Springfox, and allows easy publishing of auto-generated payload examples.

🪇 Demo & 📖 Documentation

Take a look at the Springwolf live demo and a generated AsyncAPI document.

springwolf.dev includes the quickstart guide and full documentation.

✨ Why You Should Use Springwolf

Springwolf exploits the fact that you already fully described your consumer endpoint (with listener annotations, such as @KafkaListener, @RabbitListener, @SqsListener, etc.) and generates the documentation based on this information.

The AsyncAPI conform documentation can be integrated into API hubs (like backstage) or be shared as a json/yaml file with others.

In projects using asynchronous APIs, you may often find yourself needing to manually send a message to some topic, whether you are manually testing a new feature, debugging or trying to understand some flow.

Using the automatically generated example payload object as a suggestion, you can publish it to the correct channel with a single click.

🔬 Usage & Example

Protocols not supported natively can still be documented using @AsyncListener and @AsyncPublisher annotation. More details in the documentation.

Plugin Example project Current version SNAPSHOT version
AMQP AMQP Example Maven Central Sonatype Nexus (Snapshots)
AWS SNS AWS SNS Example Maven Central Sonatype Nexus (Snapshots)
AWS SQS AWS SQS Example Maven Central Sonatype Nexus (Snapshots)
Cloud Stream Cloud Stream Example Maven Central Sonatype Nexus (Snapshots)
JMS JMS Example Maven Central Sonatype Nexus (Snapshots)
Kafka Kafka Example Maven Central Sonatype Nexus (Snapshots)
STOMP (WebSocket) STOMP Example Maven Central Sonatype Nexus (Snapshots)
Artifact Current version SNAPSHOT version
AsyncAPI implementation Maven Central Sonatype Nexus (Snapshots)
Core Maven Central Sonatype Nexus (Snapshots)
UI Maven Central Sonatype Nexus (Snapshots)
Bindings Current version SNAPSHOT version
AMQP Binding Maven Central Sonatype Nexus (Snapshots)
AWS SNS Binding Maven Central Sonatype Nexus (Snapshots)
AWS SQS Binding Maven Central Sonatype Nexus (Snapshots)
Google PubSub Binding Maven Central Sonatype Nexus (Snapshots)
JMS Binding Maven Central Sonatype Nexus (Snapshots)
Kafka Binding Maven Central Sonatype Nexus (Snapshots)
STOMP Binding Maven Central Sonatype Nexus (Snapshots)
Add-on Current version SNAPSHOT version
Common Model Converter Maven Central Sonatype Nexus (Snapshots)
Generic Binding Maven Central Sonatype Nexus (Snapshots)
Json Schema Maven Central Sonatype Nexus (Snapshots)
Kotlinx Serialization Model Converter Maven Central Sonatype Nexus (Snapshots)

🚀 Who's Using Springwolf

Comment in this PR to add your company and spread the word

✏️ How To Participate

Check out our CONTRIBUTING.md guide.

Sonatype snapshots

Add the following to the repositories closure in build.gradle:

repositories {
    // ...
    maven {
        url "https://s01.oss.sonatype.org/content/repositories/snapshots" // build.gradle
        // url = uri("https://s01.oss.sonatype.org/content/repositories/snapshots") // build.gradle.kts
    }
}

Or add the repository to your pom.xml if you are using maven:


<repositories>
    <repository>
        <id>oss-sonatype</id>
        <name>oss-sonatype</name>
        <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

Local Snapshot Build

To test with local builds, run the publishToMavenLocal gradle task. The current version number is set in .env file.

Do not forget to add mavenLocal() to the repositories section.

👏 Contributors

Thanks goes to these wonderful people (emoji key):

To add yourself as a contributor, install the all-contributors CLI and run:

  1. all-contributors check
  2. all-contributors add <username> code
  3. all-contributors generate