<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>GitHub Java Daily Trending</title>
    <description>Daily Trending of Java in GitHub</description>
    <pubDate>Sun, 07 Jun 2026 01:46:08 GMT</pubDate>
    <link>http://mshibanami.github.io/GitHubTrendingRSS</link>
    
    <item>
      <title>spring-projects/spring-boot</title>
      <link>https://github.com/spring-projects/spring-boot</link>
      <description>&lt;p&gt;Spring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Spring Boot &lt;span class=&quot;image&quot;&gt;&lt;a class=&quot;image&quot; href=&quot;https://github.com/spring-projects/spring-boot/actions/workflows/build-and-deploy-snapshot.yml?query=branch%3Amain&quot;&gt;&lt;img src=&quot;https://github.com/spring-projects/spring-boot/actions/workflows/build-and-deploy-snapshot.yml/badge.svg?branch=main&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt;&lt;/span&gt; &lt;span class=&quot;image&quot;&gt;&lt;a class=&quot;image&quot; href=&quot;https://ge.spring.io/scans?&amp;amp;search.rootProjectNames=Spring%20Boot%20Build&amp;amp;search.rootProjectNames=spring-boot-build&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Revved%20up%20by-Develocity-06A0CE?logo=Gradle&amp;amp;labelColor=02303A&quot; alt=&quot;Revved up by Develocity&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt; 
&lt;div id=&quot;preamble&quot;&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;Spring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss. It takes an opinionated view of the Spring platform so that new and existing users can quickly get to the bits they need.&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;You can use Spring Boot to create stand-alone Java applications that can be started using &lt;code&gt;java -jar&lt;/code&gt; or more traditional WAR deployments. We also provide a command-line tool that runs Spring scripts.&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;Our primary goals are:&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;ulist&quot;&gt; 
   &lt;ul&gt; 
    &lt;li&gt; &lt;p&gt;Provide a radically faster and widely accessible getting started experience for all Spring development.&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Be opinionated, but get out of the way quickly as requirements start to diverge from the defaults.&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Provide a range of non-functional features common to large classes of projects (for example, embedded servers, security, metrics, health checks, externalized configuration).&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Absolutely no code generation and no requirement for XML configuration.&lt;/p&gt; &lt;/li&gt; 
   &lt;/ul&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class=&quot;sect1&quot;&gt; 
 &lt;h2 id=&quot;_installation_and_getting_started&quot;&gt;Installation and Getting Started&lt;/h2&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;The &lt;a href=&quot;https://docs.spring.io/spring-boot&quot;&gt;reference documentation&lt;/a&gt; includes detailed &lt;a href=&quot;https://docs.spring.io/spring-boot/installing.html&quot;&gt;installation instructions&lt;/a&gt; as well as a comprehensive &lt;a href=&quot;https://docs.spring.io/spring-boot/tutorial/first-application/index.html&quot;&gt;&lt;code&gt;getting started&lt;/code&gt;&lt;/a&gt; guide.&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;Here is a quick teaser of a complete Spring Boot application in Java:&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;listingblock&quot;&gt; 
   &lt;div class=&quot;content&quot;&gt; 
    &lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;

@RestController
@SpringBootApplication
public class Example {

	@RequestMapping(&quot;/&quot;)
	String home() {
		return &quot;Hello World!&quot;;
	}

	public static void main(String[] args) {
		SpringApplication.run(Example.class, args);
	}

}&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class=&quot;sect1&quot;&gt; 
 &lt;h2 id=&quot;_getting_help&quot;&gt;Getting Help&lt;/h2&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;Are you having trouble with Spring Boot? We want to help!&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;ulist&quot;&gt; 
   &lt;ul&gt; 
    &lt;li&gt; &lt;p&gt;Check the &lt;a href=&quot;https://docs.spring.io/spring-boot/&quot;&gt;reference documentation&lt;/a&gt;, especially the &lt;a href=&quot;https://docs.spring.io/spring-boot/how-to/index.html&quot;&gt;How-to’s&lt;/a&gt; — they provide solutions to the most common questions.&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Learn the Spring basics — Spring Boot builds on many other Spring projects; check the &lt;a href=&quot;https://spring.io&quot;&gt;spring.io&lt;/a&gt; website for a wealth of reference documentation. If you are new to Spring, try one of the &lt;a href=&quot;https://spring.io/guides&quot;&gt;guides&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;If you are upgrading, read the &lt;a href=&quot;https://github.com/spring-projects/spring-boot/wiki&quot;&gt;release notes&lt;/a&gt; for upgrade instructions and &quot;new and noteworthy&quot; features.&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Ask a question — we monitor &lt;a href=&quot;https://stackoverflow.com&quot;&gt;stackoverflow.com&lt;/a&gt; for questions tagged with &lt;a href=&quot;https://stackoverflow.com/tags/spring-boot&quot;&gt;&lt;code&gt;spring-boot&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Report bugs with Spring Boot at &lt;a href=&quot;https://github.com/spring-projects/spring-boot/issues&quot;&gt;github.com/spring-projects/spring-boot/issues&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
   &lt;/ul&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class=&quot;sect1&quot;&gt; 
 &lt;h2 id=&quot;_contributing&quot;&gt;Contributing&lt;/h2&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;We welcome contributions of all kinds! Please read our &lt;a href=&quot;https://raw.githubusercontent.com/spring-projects/spring-boot/main/CONTRIBUTING.adoc&quot;&gt;contribution guidelines&lt;/a&gt; before submitting a pull request.&lt;/p&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class=&quot;sect1&quot;&gt; 
 &lt;h2 id=&quot;_reporting_issues&quot;&gt;Reporting Issues&lt;/h2&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;Spring Boot uses GitHub’s integrated issue tracking system to record bugs and feature requests. If you want to raise an issue, please follow the recommendations below:&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;ulist&quot;&gt; 
   &lt;ul&gt; 
    &lt;li&gt; &lt;p&gt;Before you log a bug, please search the &lt;a href=&quot;https://github.com/spring-projects/spring-boot/issues&quot;&gt;issue tracker&lt;/a&gt; to see if someone has already reported the problem.&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;If the issue doesn’t already exist, &lt;a href=&quot;https://github.com/spring-projects/spring-boot/issues/new&quot;&gt;create a new issue&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Please provide as much information as possible with the issue report. We like to know the Spring Boot version, operating system, and JVM version you’re using.&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;If you need to paste code or include a stack trace, use Markdown. ``` escapes before and after your text.&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;If possible, try to create a test case or project that replicates the problem and attach it to the issue.&lt;/p&gt; &lt;/li&gt; 
   &lt;/ul&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class=&quot;sect1&quot;&gt; 
 &lt;h2 id=&quot;_building_from_source&quot;&gt;Building from Source&lt;/h2&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;You don’t need to build from source to use Spring Boot. If you want to try out the latest and greatest, Spring Boot can be built and published to your local Maven cache using the &lt;a href=&quot;https://docs.gradle.org/current/userguide/gradle_wrapper.html&quot;&gt;Gradle wrapper&lt;/a&gt;. You also need JDK 25.&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;listingblock&quot;&gt; 
   &lt;div class=&quot;content&quot;&gt; 
    &lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-shell&quot; data-lang=&quot;shell&quot;&gt;$ ./gradlew publishToMavenLocal&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;This command builds all modules and publishes them to your local Maven cache. It won’t run any of the tests. If you want to build everything, use the &lt;code&gt;build&lt;/code&gt; task:&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;listingblock&quot;&gt; 
   &lt;div class=&quot;content&quot;&gt; 
    &lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-shell&quot; data-lang=&quot;shell&quot;&gt;$ ./gradlew build&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class=&quot;sect1&quot;&gt; 
 &lt;h2 id=&quot;_guides&quot;&gt;Guides&lt;/h2&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;The &lt;a href=&quot;https://spring.io/&quot;&gt;spring.io&lt;/a&gt; site contains several guides that show how to use Spring Boot step-by-step:&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;ulist&quot;&gt; 
   &lt;ul&gt; 
    &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://spring.io/guides/gs/spring-boot/&quot;&gt;Building an Application with Spring Boot&lt;/a&gt; is an introductory guide that shows you how to create an application, run it, and add some management services.&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://spring.io/guides/gs/actuator-service/&quot;&gt;Building a RESTful Web Service with Spring Boot Actuator&lt;/a&gt; is a guide to creating a REST web service and also shows how the server can be configured.&lt;/p&gt; &lt;/li&gt; 
   &lt;/ul&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class=&quot;sect1&quot;&gt; 
 &lt;h2 id=&quot;_license&quot;&gt;License&lt;/h2&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;Spring Boot is Open Source software released under the &lt;a href=&quot;https://www.apache.org/licenses/LICENSE-2.0.html&quot;&gt;Apache 2.0 license&lt;/a&gt;.&lt;/p&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/52cfb484ebe7354018fd76cce9308bfd189ed3b0d8bab952004b333abf24f0e1/spring-projects/spring-boot" medium="image" />
      
    </item>
    
    <item>
      <title>github/copilot-sdk</title>
      <link>https://github.com/github/copilot-sdk</link>
      <description>&lt;p&gt;Multi-platform SDK for integrating GitHub Copilot Agent into apps and services&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;GitHub Copilot CLI SDKs&lt;/h1&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/assets/RepoHeader_01.png&quot; alt=&quot;GitHub Copilot SDK&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.npmjs.com/package/@github/copilot-sdk&quot;&gt;&lt;img src=&quot;https://img.shields.io/npm/dm/%40github%2Fcopilot-sdk?label=npm&quot; alt=&quot;NPM Downloads&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://pypi.org/project/github-copilot-sdk/&quot;&gt;&lt;img src=&quot;https://img.shields.io/pypi/dm/github-copilot-sdk?label=PyPI&quot; alt=&quot;PyPI - Downloads&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.nuget.org/packages/GitHub.Copilot.SDK&quot;&gt;&lt;img src=&quot;https://img.shields.io/nuget/dt/GitHub.Copilot.SDK?label=NuGet&quot; alt=&quot;NuGet Downloads&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://pkg.go.dev/github.com/github/copilot-sdk/go&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Go-Reference-00ADD8?logo=go&amp;amp;logoColor=white&quot; alt=&quot;Go Reference&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://crates.io/crates/github-copilot-sdk&quot;&gt;&lt;img src=&quot;https://img.shields.io/crates/v/github-copilot-sdk?label=crates.io&quot; alt=&quot;crates.io&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://central.sonatype.com/artifact/com.github/copilot-sdk-java&quot;&gt;&lt;img src=&quot;https://img.shields.io/maven-central/v/com.github/copilot-sdk-java?label=Maven%20Central&quot; alt=&quot;Maven Central&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Agents for every app.&lt;/p&gt; 
&lt;p&gt;Embed Copilot&#39;s agentic workflows in your application with the GitHub Copilot SDK for Python, TypeScript, Go, .NET, Java, and Rust.&lt;/p&gt; 
&lt;p&gt;The GitHub Copilot SDK exposes the same engine behind Copilot CLI: a production-tested agent runtime you can invoke programmatically. No need to build your own orchestration—you define agent behavior, Copilot handles planning, tool invocation, file edits, and more.&lt;/p&gt; 
&lt;h2&gt;Available SDKs&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;SDK&lt;/th&gt; 
   &lt;th&gt;Location&lt;/th&gt; 
   &lt;th&gt;Cookbook&lt;/th&gt; 
   &lt;th&gt;Installation&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Node.js / TypeScript&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/nodejs/&quot;&gt;&lt;code&gt;nodejs/&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/github/awesome-copilot/raw/main/cookbook/copilot-sdk/nodejs/README.md&quot;&gt;Cookbook&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;npm install @github/copilot-sdk&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/python/&quot;&gt;&lt;code&gt;python/&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/github/awesome-copilot/raw/main/cookbook/copilot-sdk/python/README.md&quot;&gt;Cookbook&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;pip install github-copilot-sdk&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Go&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/go/&quot;&gt;&lt;code&gt;go/&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/github/awesome-copilot/raw/main/cookbook/copilot-sdk/go/README.md&quot;&gt;Cookbook&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;go get github.com/github/copilot-sdk/go&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;.NET&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/dotnet/&quot;&gt;&lt;code&gt;dotnet/&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/github/awesome-copilot/raw/main/cookbook/copilot-sdk/dotnet/README.md&quot;&gt;Cookbook&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;dotnet add package GitHub.Copilot.SDK&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Rust&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/rust/&quot;&gt;&lt;code&gt;rust/&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;cargo add github-copilot-sdk&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Java&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/java/&quot;&gt;&lt;code&gt;java/&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/github/awesome-copilot/raw/main/cookbook/copilot-sdk/java/README.md&quot;&gt;Cookbook&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Maven coordinates&lt;br /&gt;&lt;code&gt;com.github:copilot-sdk-java&lt;/code&gt;&lt;br /&gt;See instructions for &lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/java/README.md#maven&quot;&gt;Maven&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/java/README.md#gradle&quot;&gt;Gradle&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;See the individual SDK READMEs for installation, usage examples, and API reference.&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;For a complete walkthrough, see the &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/docs/getting-started.md&quot;&gt;Getting Started Guide&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;Quick steps:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;(Optional) Install the Copilot CLI&lt;/strong&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;For Node.js, Python, and .NET SDKs, the Copilot CLI is bundled automatically and no separate installation is required. For Go, Java, and Rust, &lt;a href=&quot;https://github.com/features/copilot/cli&quot;&gt;install the CLI manually&lt;/a&gt; or ensure &lt;code&gt;copilot&lt;/code&gt; is available in your PATH. Go and Rust also expose application-level CLI bundling features.&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Install your preferred SDK&lt;/strong&gt; using the commands above.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;See the SDK README&lt;/strong&gt; for usage examples and API documentation.&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Architecture&lt;/h2&gt; 
&lt;p&gt;All SDKs communicate with the Copilot CLI server via JSON-RPC:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Your Application
       ↓
  SDK Client
       ↓ JSON-RPC
  Copilot CLI (server mode)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The SDK manages the CLI process lifecycle automatically. You can also connect to an external CLI server—see the &lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/docs/getting-started.md#connecting-to-an-external-cli-server&quot;&gt;Getting Started Guide&lt;/a&gt; for details on running the CLI in server mode.&lt;/p&gt; 
&lt;h2&gt;FAQ&lt;/h2&gt; 
&lt;h3&gt;Do I need a GitHub Copilot subscription to use the SDK?&lt;/h3&gt; 
&lt;p&gt;Yes, a GitHub Copilot subscription is required to use the GitHub Copilot SDK, &lt;strong&gt;unless you are using BYOK (Bring Your Own Key)&lt;/strong&gt;. With BYOK, you can use the SDK without GitHub authentication by configuring your own API keys from supported LLM providers. For standard usage (non-BYOK), refer to the &lt;a href=&quot;https://github.com/features/copilot#pricing&quot;&gt;GitHub Copilot pricing page&lt;/a&gt;, which includes a free tier with limited usage.&lt;/p&gt; 
&lt;h3&gt;How does billing work for SDK usage?&lt;/h3&gt; 
&lt;p&gt;Billing for the GitHub Copilot SDK is based on the same model as the Copilot CLI, with each prompt being counted towards your premium request quota. For more information on premium requests, see &lt;a href=&quot;https://docs.github.com/en/copilot/concepts/billing/copilot-requests&quot;&gt;Requests in GitHub Copilot&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Does it support BYOK (Bring Your Own Key)?&lt;/h3&gt; 
&lt;p&gt;Yes, the GitHub Copilot SDK supports BYOK (Bring Your Own Key). You can configure the SDK to use your own API keys from supported LLM providers (e.g. OpenAI, Azure AI Foundry, Anthropic) to access models through those providers. See the &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/docs/auth/byok.md&quot;&gt;BYOK documentation&lt;/a&gt;&lt;/strong&gt; for setup instructions and examples.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; BYOK uses key-based authentication only. Microsoft Entra ID (Azure AD), managed identities, and third-party identity providers are not supported.&lt;/p&gt; 
&lt;h3&gt;What authentication methods are supported?&lt;/h3&gt; 
&lt;p&gt;The SDK supports multiple authentication methods:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;GitHub signed-in user&lt;/strong&gt; - Uses stored OAuth credentials from &lt;code&gt;copilot&lt;/code&gt; CLI login&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;OAuth GitHub App&lt;/strong&gt; - Pass user tokens from your GitHub OAuth app&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Environment variables&lt;/strong&gt; - &lt;code&gt;COPILOT_GITHUB_TOKEN&lt;/code&gt;, &lt;code&gt;GH_TOKEN&lt;/code&gt;, &lt;code&gt;GITHUB_TOKEN&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;BYOK&lt;/strong&gt; - Use your own API keys (no GitHub auth required)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See the &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/docs/auth/index.md&quot;&gt;Authentication documentation&lt;/a&gt;&lt;/strong&gt; for details on each method.&lt;/p&gt; 
&lt;h3&gt;Do I need to install the Copilot CLI separately?&lt;/h3&gt; 
&lt;p&gt;No — for Node.js, Python, and .NET SDKs, the Copilot CLI is bundled automatically as a dependency. You do not need to install it separately.&lt;/p&gt; 
&lt;p&gt;For Go, Java, and Rust SDKs, the CLI is &lt;strong&gt;not&lt;/strong&gt; bundled by default. Install the CLI manually or ensure &lt;code&gt;copilot&lt;/code&gt; is available in your PATH. Go and Rust also expose application-level CLI bundling features.&lt;/p&gt; 
&lt;p&gt;Advanced: You can override the CLI binary or connect to an external server. See the individual SDK README for language-specific options.&lt;/p&gt; 
&lt;h3&gt;What tools are enabled by default?&lt;/h3&gt; 
&lt;p&gt;By default, the SDK exposes the Copilot CLI&#39;s first-party tools, similar to running the CLI with &lt;code&gt;--allow-all&lt;/code&gt;. Tool execution is still governed by each SDK&#39;s permission handler, so applications can approve, deny, or customize tool calls. You can customize tool availability by configuring the SDK client options to enable and disable specific tools. Refer to the individual SDK documentation for details on tool configuration and to the Copilot CLI documentation for the list of available tools.&lt;/p&gt; 
&lt;h3&gt;Can I use custom agents, skills or tools?&lt;/h3&gt; 
&lt;p&gt;Yes, the GitHub Copilot SDK allows you to define custom agents, skills, and tools. You can extend the functionality of the agents by implementing your own logic and integrating additional tools as needed. Refer to the SDK documentation of your preferred language for more details.&lt;/p&gt; 
&lt;h3&gt;Are there instructions or SDK guidance for Copilot to speed up development?&lt;/h3&gt; 
&lt;p&gt;Yes, check out the custom instructions and SDK-specific guidance:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/awesome-copilot/raw/main/instructions/copilot-sdk-nodejs.instructions.md&quot;&gt;Node.js / TypeScript&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/awesome-copilot/raw/main/instructions/copilot-sdk-python.instructions.md&quot;&gt;Python&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/awesome-copilot/raw/main/instructions/copilot-sdk-csharp.instructions.md&quot;&gt;.NET&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/awesome-copilot/raw/main/instructions/copilot-sdk-go.instructions.md&quot;&gt;Go&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/rust/README.md&quot;&gt;Rust&lt;/a&gt;&lt;/strong&gt; (SDK guidance; custom instructions not yet published)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/awesome-copilot/raw/main/instructions/copilot-sdk-java.instructions.md&quot;&gt;Java&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;What models are supported?&lt;/h3&gt; 
&lt;p&gt;All models available via Copilot CLI are supported in the SDK. The SDK also exposes a method which will return the models available so they can be accessed at runtime.&lt;/p&gt; 
&lt;h3&gt;Is the SDK production-ready?&lt;/h3&gt; 
&lt;p&gt;The GitHub Copilot SDK is generally available and follows semantic versioning. See &lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/CHANGELOG.md&quot;&gt;CHANGELOG.md&lt;/a&gt; for release notes.&lt;/p&gt; 
&lt;h3&gt;How do I report issues or request features?&lt;/h3&gt; 
&lt;p&gt;Please use the &lt;a href=&quot;https://github.com/github/copilot-sdk/issues&quot;&gt;GitHub Issues&lt;/a&gt; page to report bugs or request new features. We welcome your feedback to help improve the SDK.&lt;/p&gt; 
&lt;h2&gt;Quick Links&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/docs/index.md&quot;&gt;Documentation&lt;/a&gt;&lt;/strong&gt; – Full documentation index&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/docs/getting-started.md&quot;&gt;Getting Started&lt;/a&gt;&lt;/strong&gt; – Tutorial to get up and running&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/docs/setup/index.md&quot;&gt;Setup Guides&lt;/a&gt;&lt;/strong&gt; – Architecture, deployment, and scaling&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/docs/auth/index.md&quot;&gt;Authentication&lt;/a&gt;&lt;/strong&gt; – GitHub OAuth, BYOK, and more&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/docs/features/index.md&quot;&gt;Features&lt;/a&gt;&lt;/strong&gt; – Hooks, custom agents, MCP, skills, and more&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/docs/troubleshooting/debugging.md&quot;&gt;Troubleshooting&lt;/a&gt;&lt;/strong&gt; – Common issues and solutions&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/awesome-copilot/raw/main/cookbook/copilot-sdk&quot;&gt;Cookbook&lt;/a&gt;&lt;/strong&gt; – Practical recipes for common tasks across all languages&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/awesome-copilot/raw/main/collections/copilot-sdk.md&quot;&gt;More Resources&lt;/a&gt;&lt;/strong&gt; – Additional examples, tutorials, and community resources&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Unofficial, Community-maintained SDKs&lt;/h2&gt; 
&lt;p&gt;⚠️ Disclaimer: These are unofficial, community-driven SDKs and they are not supported by GitHub. Use at your own risk.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;SDK&lt;/th&gt; 
   &lt;th&gt;Location&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Clojure&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/copilot-community-sdk/copilot-sdk-clojure&quot;&gt;copilot-community-sdk/copilot-sdk-clojure&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;C++&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/0xeb/copilot-sdk-cpp&quot;&gt;0xeb/copilot-sdk-cpp&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/github/copilot-sdk/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for contribution guidelines.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;MIT&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/1133883850/75e3d158-e5cf-4bd2-8acc-c8cc937f39ed" medium="image" />
      
    </item>
    
    <item>
      <title>agentscope-ai/agentscope-java</title>
      <link>https://github.com/agentscope-ai/agentscope-java</link>
      <description>&lt;p&gt;AgentScope Java: Agent-Oriented Programming for Building LLM Applications&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://img.alicdn.com/imgextra/i1/O1CN01nTg6w21NqT5qFKH1u_!!6000000001621-55-tps-550-550.svg?sanitize=true&quot; alt=&quot;AgentScope Logo&quot; width=&quot;200&quot; /&gt; &lt;/p&gt; 
&lt;h3 align=&quot;center&quot;&gt;Build Production-Ready AI Agents in Java&lt;/h3&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://java.agentscope.io/&quot;&gt;📖 Documentation&lt;/a&gt; &amp;nbsp;|&amp;nbsp; &lt;a href=&quot;https://raw.githubusercontent.com/agentscope-ai/agentscope-java/main/README_zh.md&quot;&gt;中文&lt;/a&gt; &amp;nbsp;|&amp;nbsp; &lt;a href=&quot;https://discord.gg/eYMpfnkG8h&quot;&gt;Discord&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/license-Apache--2.0-blue&quot; alt=&quot;License&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/JDK-17%2B-orange&quot; alt=&quot;JDK 17+&quot; /&gt; &lt;img src=&quot;https://img.shields.io/maven-central/v/io.agentscope/agentscope?color=green&quot; alt=&quot;Maven Central&quot; /&gt; &lt;a href=&quot;https://deepwiki.com/agentscope-ai/agentscope-java&quot;&gt;&lt;img src=&quot;https://deepwiki.com/badge.svg?sanitize=true&quot; alt=&quot;Ask DeepWiki&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;p&gt;AgentScope Java is an agent-oriented programming framework for building LLM-powered applications. It provides everything you need to create intelligent agents: ReAct reasoning, tool calling, memory management, multi-agent collaboration, and more.&lt;/p&gt; 
&lt;h2&gt;Highlights&lt;/h2&gt; 
&lt;h3&gt;🎯 Smart Agents, Full Control&lt;/h3&gt; 
&lt;p&gt;AgentScope adopts the ReAct (Reasoning-Acting) paradigm, enabling agents to autonomously plan and execute complex tasks. Unlike rigid workflow-based approaches, ReAct agents dynamically decide which tools to use and when, adapting to changing requirements in real-time.&lt;/p&gt; 
&lt;p&gt;However, autonomy without control is a liability in production. AgentScope provides comprehensive runtime intervention mechanisms:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Safe Interruption&lt;/strong&gt; - Pause agent execution at any point while preserving full context and tool state, enabling seamless resumption without data loss&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Graceful Cancellation&lt;/strong&gt; - Terminate long-running or unresponsive tool calls without corrupting agent state, allowing immediate recovery and redirection&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Human-in-the-Loop&lt;/strong&gt; - Inject corrections, additional context, or guidance at any reasoning step through the Hook system, maintaining human oversight over critical decisions&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🛠️ Built-in Tools&lt;/h3&gt; 
&lt;p&gt;AgentScope includes production-ready tools that address common challenges in agent development:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;PlanNotebook&lt;/strong&gt; - A structured task management system that decomposes complex objectives into ordered, trackable steps. Agents can create, modify, pause, and resume multiple concurrent plans, ensuring systematic execution of multi-step workflows.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Structured Output&lt;/strong&gt; - A self-correcting output parser that guarantees type-safe responses. When LLM output deviates from the expected format, the system automatically detects errors and guides the model to produce valid output, mapping results directly to Java POJOs without manual parsing.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Long-term Memory&lt;/strong&gt; - Persistent memory storage with semantic search capabilities across sessions. Supports automatic management, agent-controlled recording, or hybrid modes. Enables multi-tenant isolation for enterprise deployments where agents serve multiple users independently.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;RAG (Retrieval-Augmented Generation)&lt;/strong&gt; - Seamless integration with enterprise knowledge bases. Supports both self-hosted embedding-based retrieval and managed services like Alibaba Cloud Bailian, grounding agent responses in authoritative data sources.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🔌 Seamless Integration&lt;/h3&gt; 
&lt;p&gt;AgentScope is designed to integrate with existing enterprise infrastructure without requiring extensive modifications:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;MCP Protocol&lt;/strong&gt; - Integrate with any MCP-compatible server to instantly extend agent capabilities. Connect to the growing ecosystem of MCP tools and services—from file systems and databases to web browsers and code interpreters—without writing custom integration code.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;A2A Protocol&lt;/strong&gt; - Enable distributed multi-agent collaboration through standard service discovery. Register agent capabilities to Nacos or similar registries, allowing agents to discover and invoke each other as naturally as calling microservices.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🚀 Production Grade&lt;/h3&gt; 
&lt;p&gt;Built for enterprise deployment requirements:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;High Performance&lt;/strong&gt; - Reactive architecture based on Project Reactor ensures non-blocking execution. GraalVM native image compilation achieves 200ms cold start times, making AgentScope suitable for serverless and auto-scaling environments.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Security Sandbox&lt;/strong&gt; - AgentScope Runtime provides isolated execution environments for untrusted tool code. Includes pre-built sandboxes for GUI automation, file system operations, and mobile device interaction, preventing unauthorized access to system resources.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Observability&lt;/strong&gt; - Native integration with OpenTelemetry for distributed tracing across the entire agent execution pipeline. AgentScope Studio provides visual debugging, real-time monitoring, and comprehensive logging for development and production environments.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Quick Start&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt; JDK 17+&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;io.agentscope&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;agentscope&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0.12&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;ReActAgent agent = ReActAgent.builder()
    .name(&quot;Assistant&quot;)
    .sysPrompt(&quot;You are a helpful AI assistant.&quot;)
    .model(DashScopeChatModel.builder()
        .apiKey(System.getenv(&quot;DASHSCOPE_API_KEY&quot;))
        .modelName(&quot;qwen-max&quot;)
        .build())
    .build();

Msg response = agent.call(Msg.builder()
        .textContent(&quot;Hello!&quot;)
        .build()).block();
System.out.println(response.getTextContent());
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For more examples, see the &lt;a href=&quot;https://java.agentscope.io/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;We welcome contributions! Please see &lt;a href=&quot;https://raw.githubusercontent.com/agentscope-ai/agentscope-java/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for guidelines.&lt;/p&gt; 
&lt;h2&gt;Community&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;a href=&quot;https://discord.gg/eYMpfnkG8h&quot;&gt;Discord&lt;/a&gt;&lt;/th&gt; 
   &lt;th&gt;DingTalk&lt;/th&gt; 
   &lt;th&gt;WeChat&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/agentscope-ai/agentscope-java/main/docs/imgs/discord.png&quot; width=&quot;100&quot; height=&quot;100&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/agentscope-ai/agentscope-java/main/docs/imgs/dingtalk_qr_code.jpg&quot; width=&quot;100&quot; height=&quot;100&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/agentscope-ai/agentscope-java/main/docs/imgs/wechat.png&quot; width=&quot;100&quot; height=&quot;100&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Apache License 2.0 - see &lt;a href=&quot;https://raw.githubusercontent.com/agentscope-ai/agentscope-java/main/LICENSE&quot;&gt;LICENSE&lt;/a&gt; for details.&lt;/p&gt; 
&lt;h2&gt;Publications&lt;/h2&gt; 
&lt;p&gt;If you find AgentScope helpful, please cite our papers:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2508.16279&quot;&gt;AgentScope 1.0: A Developer-Centric Framework for Building Agentic Applications&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2402.14034&quot;&gt;AgentScope: A Flexible yet Robust Multi-Agent Platform&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contributors&lt;/h2&gt; 
&lt;a href=&quot;https://github.com/agentscope-ai/agentscope-java/graphs/contributors&quot;&gt; &lt;img src=&quot;https://contrib.rocks/image?repo=agentscope-ai/agentscope-java&amp;amp;max=999&amp;amp;columns=12&amp;amp;anon=1&quot; /&gt; &lt;/a&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/4eef20dc491fd5bccf1a118dd6e3de4071778ab3f80bdfc74e58a87ceb26ce82/agentscope-ai/agentscope-java" medium="image" />
      
    </item>
    
    <item>
      <title>OpenAPITools/openapi-generator</title>
      <link>https://github.com/OpenAPITools/openapi-generator</link>
      <description>&lt;p&gt;OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)&lt;/p&gt;&lt;hr&gt;&lt;h1 align=&quot;center&quot;&gt;OpenAPI Generator&lt;/h1&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;a href=&quot;http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.openapitools%22%20AND%20a%3A%22openapi-generator%22&quot;&gt;&lt;img src=&quot;https://img.shields.io/maven-metadata/v/https/repo1.maven.org/maven2/org/openapitools/openapi-generator/maven-metadata.xml.svg?sanitize=true&quot; alt=&quot;Stable releases in Maven Central&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-Apache%202.0-orange&quot; alt=&quot;Apache 2.0 License&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/openapi_generator&quot;&gt;&lt;img src=&quot;https://img.shields.io/opencollective/backers/openapi_generator?color=orange&amp;amp;label=OpenCollective%20Backers&quot; alt=&quot;Open Collective backers&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://join.slack.com/t/openapi-generator/shared_invite/zt-36ucx4ybl-jYrN6euoYn6zxXNZdldoZA&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Slack-Join%20the%20chat%20room-orange&quot; alt=&quot;Join the Slack chat room&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://twitter.com/oas_generator&quot;&gt;&lt;img src=&quot;https://img.shields.io/twitter/follow/oas_generator.svg?style=social&amp;amp;label=Follow&quot; alt=&quot;Follow OpenAPI Generator Twitter account to get the latest update&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://gitpod.io/#https://github.com/OpenAPITools/openapi-generator&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Contribute%20with-Gitpod-908a85?logo=gitpod&quot; alt=&quot;Contribute with Gitpod&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://conan.io/center/recipes/openapi-generator&quot;&gt;&lt;img src=&quot;https://shields.io/conan/v/openapi-generator&quot; alt=&quot;Conan Center&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://ge.openapi-generator.tech/scans&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Revved%20up%20by-Develocity-06A0CE?logo=Gradle&amp;amp;labelColor=02303A&quot; alt=&quot;Revved up by Develocity&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/OpenAPITools/openapi-generator/tree/master&quot;&gt;Master&lt;/a&gt; (&lt;code&gt;7.23.0&lt;/code&gt;): &lt;a href=&quot;https://circleci.com/gh/OpenAPITools/openapi-generator&quot;&gt;&lt;img src=&quot;https://circleci.com/gh/OpenAPITools/openapi-generator.svg?style=shield&quot; alt=&quot;Integration Test2&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://app.bitrise.io/app/4a2b10a819d12b67&quot;&gt;&lt;img src=&quot;https://img.shields.io/bitrise/4a2b10a819d12b67/master?label=bitrise%3A%20Swift+4,5&amp;amp;token=859FMDR8QHwabCzwvZK6vQ&quot; alt=&quot;Bitrise&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;⭐⭐⭐ If you would like to contribute, please refer to &lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/CONTRIBUTING.md&quot;&gt;guidelines&lt;/a&gt; and a list of &lt;a href=&quot;https://github.com/openapitools/openapi-generator/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22&quot;&gt;open tasks&lt;/a&gt;. ⭐⭐⭐&lt;/p&gt; 
 &lt;p&gt;‼️ To migrate from Swagger Codegen to OpenAPI Generator, please refer to the &lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/docs/migration-from-swagger-codegen.md&quot;&gt;migration guide&lt;/a&gt; ‼️&lt;/p&gt; 
 &lt;p&gt;📔 For more information, please refer to the &lt;a href=&quot;https://github.com/openapitools/openapi-generator/wiki&quot;&gt;Wiki page&lt;/a&gt; and &lt;a href=&quot;https://github.com/openapitools/openapi-generator/wiki/FAQ&quot;&gt;FAQ&lt;/a&gt; 📔&lt;/p&gt; 
 &lt;p&gt;📔 The eBook &lt;a href=&quot;https://gum.co/openapi_generator_ebook&quot;&gt;A Beginner&#39;s Guide to Code Generation for REST APIs&lt;/a&gt; is a good starting point for beginners 📔&lt;/p&gt; 
 &lt;p&gt;⚠️ If the OpenAPI spec, templates or any input (e.g. options, environment variables) is obtained from an untrusted source or environment, please make sure you&#39;ve reviewed these inputs before using OpenAPI Generator to generate the API client, server stub or documentation to avoid potential security issues (e.g. &lt;a href=&quot;https://en.wikipedia.org/wiki/Code_injection&quot;&gt;code injection&lt;/a&gt;). For security vulnerabilities, please contact &lt;a href=&quot;mailto:team@openapitools.org&quot;&gt;team@openapitools.org&lt;/a&gt;. ⚠️&lt;/p&gt; 
 &lt;p&gt;‼️ Both &quot;OpenAPI Tools&quot; (&lt;a href=&quot;https://OpenAPITools.org&quot;&gt;https://OpenAPITools.org&lt;/a&gt; - the parent organization of OpenAPI Generator) and &quot;OpenAPI Generator&quot; are not affiliated with OpenAPI Initiative (OAI) ‼️&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Sponsors&lt;/h2&gt; 
&lt;p&gt;If you find OpenAPI Generator useful for work, please consider asking your company to support this Open Source project by &lt;a href=&quot;https://opencollective.com/openapi_generator&quot;&gt;becoming a sponsor&lt;/a&gt;. You can also individually sponsor the project by &lt;a href=&quot;https://opencollective.com/openapi_generator&quot;&gt;becoming a backer&lt;/a&gt;.&lt;/p&gt; 
&lt;h4&gt;Thank you to our bronze sponsors!&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.namsor.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/namsor.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.lightbow.net/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/lightbow.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://docspring.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/docspring.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://datadoghq.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/datadog.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://cpl.thalesgroup.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/thales.jpg&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.apideck.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/apideck.jpg&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.pexa.com.au/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/pexa.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.numary.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/numary.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.onesignal.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/onesignal.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.virtualansoftware.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/virtualansoftware.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.merge.dev/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/mergedev.jpeg&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.burkert.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/burkert.jpg&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.finbourne.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/finbourne.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://bump.sh/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/bumpsh.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.bileto.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/bileto.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.bairesdev.com/sponsoring-open-source-projects/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/bairesdev.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.dmtech.de/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/dmtech.jpeg&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://adyen.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/adyen.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://fornex.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/fornex.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://runalloy.com/signup?utm_source=github&amp;amp;utm_medium=referral&amp;amp;utm_campaign=1524_openapigenerator&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/alloyautomation.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://ssstwitter.com/?utm_source=github&amp;amp;utm_medium=referral&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/ssstwitter.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.svix.com/?utm_source=openapi-generator&amp;amp;utm_medium=sponsorship&amp;amp;utm_campaign=oss-sponsorship&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/svix.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://litslink.com/services/artificial-intelligence?utm_source=openapi-generator&amp;amp;utm_medium=sponsorship&amp;amp;utm_campaign=oss-sponsorship&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/litslink.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://designli.co?utm_source=openapi-generator&amp;amp;utm_medium=sponsorship&amp;amp;utm_campaign=oss-sponsorship&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/designli.jpg&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opensource.muenchen.de?utm_source=openapi-generator&amp;amp;utm_medium=sponsorship&amp;amp;utm_campaign=oss-sponsorship&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/itm.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://konghq.com/products/kong-konnect?utm_medium=referral&amp;amp;utm_source=github&amp;amp;utm_campaign=platform&amp;amp;utm_content=openapi-generator&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/kong.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://route4me.com/?utm_source=openapi-generator&amp;amp;utm_medium=sponsorship&amp;amp;utm_campaign=oss-sponsorship&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/route4me.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.dotcom-monitor.com/sponsoring-open-source-projects/?utm_source=openapi-generator&amp;amp;utm_medium=sponsorship&amp;amp;utm_campaign=oss-sponsorship&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/dm.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.clickittech.com/?utm_source=openapi-generator&amp;amp;utm_medium=sponsorship&amp;amp;utm_campaign=oss-sponsorship&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/clickit.jpg&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://unified.to/?utm_source=openapi-generator&amp;amp;utm_medium=sponsorship&amp;amp;utm_campaign=oss-sponsorship&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/unified_to.jpg&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://savetwt.com/?utm_source=openapi-generator&amp;amp;utm_medium=sponsorship&amp;amp;utm_campaign=oss-sponsorship&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/savetwt.jpg&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://serpapi.com/?utm_source=openapi-generator&amp;amp;utm_medium=sponsorship&amp;amp;utm_campaign=oss-sponsorship&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/serpapi.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://socialwick.com/?utm_source=openapi-generator&amp;amp;utm_medium=sponsorship&amp;amp;utm_campaign=oss-sponsorship&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/socialwick.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://fbpostlikes.com/?utm_source=openapi-generator&amp;amp;utm_medium=sponsorship&amp;amp;utm_campaign=oss-sponsorship&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/fbpostlikes.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://buy.fans/buy-tiktok-likes/?utm_source=openapi-generator&amp;amp;utm_medium=sponsorship&amp;amp;utm_campaign=oss-sponsorship&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/buyfans.png&quot; width=&quot;128&quot; height=&quot;128&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;br clear=&quot;left&quot; /&gt; 
&lt;h4&gt;Thank you GoDaddy for sponsoring the domain names, Linode for sponsoring the VPS, Checkly for sponsoring the API monitoring and Gradle for sponsoring Develocity&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.godaddy.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://openapi-generator.tech/img/companies/godaddy.png&quot; width=&quot;150&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.linode.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://www.linode.com/media/images/logos/standard/light/linode-logo_standard_light_small.png&quot; width=&quot;150&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://checklyhq.com/?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcRAhEYadUyZYzGUotZiSdXkVMqqLGuohyixLl4eUpUV6pAbUULL&quot; width=&quot;150&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://gradle.org?utm_source=openapi_generator&amp;amp;utm_medium=github_webpage&amp;amp;utm_campaign=sponsor&quot;&gt;&lt;img align=&quot;left&quot; src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Gradle_logo.png/320px-Gradle_logo.png&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;br clear=&quot;left&quot; /&gt; 
&lt;h2&gt;Overview&lt;/h2&gt; 
&lt;p&gt;OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an &lt;a href=&quot;https://github.com/OAI/OpenAPI-Specification&quot;&gt;OpenAPI Spec&lt;/a&gt; (both 2.0 and 3.0 are supported). Currently, the following languages/frameworks are supported:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;/th&gt; 
   &lt;th&gt;Languages/Frameworks&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;API clients&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;ActionScript&lt;/strong&gt;, &lt;strong&gt;Ada&lt;/strong&gt;, &lt;strong&gt;Apex&lt;/strong&gt;, &lt;strong&gt;Bash&lt;/strong&gt;, &lt;strong&gt;C&lt;/strong&gt;, &lt;strong&gt;C#&lt;/strong&gt; (.net 2.0, 3.5 or later, .NET Standard 1.3 - 2.1, .NET Core 3.1, .NET 5.0. Libraries: RestSharp, GenericHost, HttpClient), &lt;strong&gt;C++&lt;/strong&gt; (Arduino, cpp-restsdk, Qt5, Tizen, Unreal Engine 4), &lt;strong&gt;Clojure&lt;/strong&gt;, &lt;strong&gt;Crystal&lt;/strong&gt;, &lt;strong&gt;Dart&lt;/strong&gt;, &lt;strong&gt;Elixir&lt;/strong&gt;, &lt;strong&gt;Elm&lt;/strong&gt;, &lt;strong&gt;Eiffel&lt;/strong&gt;, &lt;strong&gt;Erlang&lt;/strong&gt;, &lt;strong&gt;Go&lt;/strong&gt;, &lt;strong&gt;Groovy&lt;/strong&gt;, &lt;strong&gt;Haskell&lt;/strong&gt; (http-client, Servant), &lt;strong&gt;Java&lt;/strong&gt; (Apache HttpClient 4.x, Apache HttpClient 5.x, Jersey2.x, OkHttp, Retrofit1.x, Retrofit2.x, Feign, RestTemplate, RESTEasy, Vertx, Google API Client Library for Java, Rest-assured, Spring 5 Web Client, Spring 6 RestClient, MicroProfile Rest Client, Helidon), &lt;strong&gt;Jetbrains HTTP Client&lt;/strong&gt;, &lt;strong&gt;Julia&lt;/strong&gt;, &lt;strong&gt;k6&lt;/strong&gt;, &lt;strong&gt;Kotlin&lt;/strong&gt;, &lt;strong&gt;Lua&lt;/strong&gt;, &lt;strong&gt;N4JS&lt;/strong&gt;, &lt;strong&gt;Nim&lt;/strong&gt;, &lt;strong&gt;Node.js/JavaScript&lt;/strong&gt; (ES5, ES6, AngularJS with Google Closure Compiler annotations, Flow types, Apollo GraphQL DataStore), &lt;strong&gt;Objective-C&lt;/strong&gt;, &lt;strong&gt;OCaml&lt;/strong&gt;, &lt;strong&gt;Perl&lt;/strong&gt;, &lt;strong&gt;PHP&lt;/strong&gt;, &lt;strong&gt;PowerShell&lt;/strong&gt;, &lt;strong&gt;Python&lt;/strong&gt;, &lt;strong&gt;R&lt;/strong&gt;, &lt;strong&gt;Ruby&lt;/strong&gt;, &lt;strong&gt;Rust&lt;/strong&gt; (hyper, reqwest, rust-server), &lt;strong&gt;Scala&lt;/strong&gt; (akka, http4s, scalaz, sttp, swagger-async-httpclient, pekko), &lt;strong&gt;Swift&lt;/strong&gt; (2.x, 3.x, 4.x, 5.x, 6.x), &lt;strong&gt;Typescript&lt;/strong&gt; (AngularJS, Angular (9.x - 19.x), Aurelia, Axios, Fetch, Inversify, jQuery, Nestjs, Node, redux-query, Rxjs), &lt;strong&gt;XoJo&lt;/strong&gt;, &lt;strong&gt;Zapier&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Server stubs&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Ada&lt;/strong&gt;, &lt;strong&gt;C#&lt;/strong&gt; (&lt;a href=&quot;http://ASP.NET&quot;&gt;ASP.NET&lt;/a&gt; Core, Azure Functions), &lt;strong&gt;C++&lt;/strong&gt; (Httplib, Oat++, Pistache, Restbed, Qt5 QHTTPEngine), &lt;strong&gt;Erlang&lt;/strong&gt;, &lt;strong&gt;F#&lt;/strong&gt; (Giraffe), &lt;strong&gt;Go&lt;/strong&gt; (net/http, Gin, Echo), &lt;strong&gt;Haskell&lt;/strong&gt; (Servant, Yesod), &lt;strong&gt;Java&lt;/strong&gt; (MSF4J, Spring, Undertow, JAX-RS: CDI, CXF, Inflector, Jersey, RestEasy, Play Framework, &lt;a href=&quot;https://github.com/ProKarma-Inc/pkmst-getting-started-examples&quot;&gt;PKMST&lt;/a&gt;, &lt;a href=&quot;https://vertx.io/&quot;&gt;Vert.x&lt;/a&gt;, &lt;a href=&quot;https://camel.apache.org/&quot;&gt;Apache Camel&lt;/a&gt;, &lt;a href=&quot;https://helidon.io/&quot;&gt;Helidon&lt;/a&gt;), &lt;strong&gt;Julia&lt;/strong&gt;, &lt;strong&gt;Kotlin&lt;/strong&gt; (Spring Boot, &lt;a href=&quot;https://github.com/ktorio/ktor&quot;&gt;Ktor&lt;/a&gt;, &lt;a href=&quot;https://vertx.io/&quot;&gt;Vert.x&lt;/a&gt;), &lt;strong&gt;PHP&lt;/strong&gt; (&lt;a href=&quot;https://docs.flightphp.com/&quot;&gt;Flight&lt;/a&gt;, Laravel, Lumen, &lt;a href=&quot;https://github.com/mezzio/mezzio&quot;&gt;Mezzio (fka Zend Expressive)&lt;/a&gt;, Slim, Silex, &lt;a href=&quot;https://symfony.com/&quot;&gt;Symfony&lt;/a&gt;), &lt;strong&gt;Python&lt;/strong&gt; (FastAPI, Flask), &lt;strong&gt;NodeJS&lt;/strong&gt;, &lt;strong&gt;Ruby&lt;/strong&gt; (Sinatra, Rails5), &lt;strong&gt;Rust&lt;/strong&gt; (&lt;a href=&quot;https://openapi-generator.tech/docs/generators/rust-server/&quot;&gt;rust-server&lt;/a&gt;), &lt;strong&gt;Scala&lt;/strong&gt; (Akka, &lt;a href=&quot;https://github.com/finagle/finch&quot;&gt;Finch&lt;/a&gt;, &lt;a href=&quot;https://github.com/lagom/lagom&quot;&gt;Lagom&lt;/a&gt;, &lt;a href=&quot;https://www.playframework.com/&quot;&gt;Play&lt;/a&gt;, &lt;a href=&quot;https://github.com/com-lihaoyi/cask&quot;&gt;Cask&lt;/a&gt;, Scalatra)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;API documentation generators&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;HTML&lt;/strong&gt;, &lt;strong&gt;Confluence Wiki&lt;/strong&gt;, &lt;strong&gt;Asciidoc&lt;/strong&gt;, &lt;strong&gt;Markdown&lt;/strong&gt;, &lt;strong&gt;PlantUML&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Configuration files&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://httpd.apache.org/&quot;&gt;&lt;strong&gt;Apache2&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Others&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;GraphQL&lt;/strong&gt;, &lt;strong&gt;JMeter&lt;/strong&gt;, &lt;strong&gt;Ktorm&lt;/strong&gt;, &lt;strong&gt;MySQL Schema&lt;/strong&gt;, &lt;strong&gt;Postman Collection&lt;/strong&gt;, &lt;strong&gt;Protocol Buffer&lt;/strong&gt;, &lt;strong&gt;WSDL&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Table of contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#sponsors&quot;&gt;Sponsors&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#thank-you-to-our-bronze-sponsors&quot;&gt;Thank you to our bronze sponsors!&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#thank-you-godaddy-for-sponsoring-the-domain-names-linode-for-sponsoring-the-vps-checkly-for-sponsoring-the-api-monitoring-and-gradle-for-sponsoring-develocity&quot;&gt;Thank you GoDaddy for sponsoring the domain names, Linode for sponsoring the VPS, Checkly for sponsoring the API monitoring and Gradle for sponsoring Develocity&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#overview&quot;&gt;Overview&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;Table of contents&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#1---installation&quot;&gt;1 - Installation&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#11---compatibility&quot;&gt;1.1 - Compatibility&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#12---artifacts-on-maven-central&quot;&gt;1.2 - Artifacts on Maven Central&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#13---download-jar&quot;&gt;1.3 - Download JAR&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#launcher-script&quot;&gt;Launcher Script&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#14---build-projects&quot;&gt;1.4 - Build Projects&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#nix-users&quot;&gt;Nix users&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#15---homebrew&quot;&gt;1.5 - Homebrew&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#16---docker&quot;&gt;1.6 - Docker&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#public-pre-built-docker-images&quot;&gt;Public Pre-built Docker images&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#openapi-generator-cli-docker-image&quot;&gt;OpenAPI Generator CLI Docker Image&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#openapi-generator-online-docker-image&quot;&gt;OpenAPI Generator Online Docker Image&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#development-in-docker&quot;&gt;Development in docker&lt;/a&gt; 
      &lt;ul&gt; 
       &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#troubleshooting&quot;&gt;Troubleshooting&lt;/a&gt;&lt;/li&gt; 
      &lt;/ul&gt; &lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#run-docker-in-vagrant&quot;&gt;Run Docker in Vagrant&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#17---npm&quot;&gt;1.7 - NPM&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#18---pip&quot;&gt;1.8 - pip&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#2---getting-started&quot;&gt;2 - Getting Started&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#3---usage&quot;&gt;3 - Usage&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#to-generate-a-sample-client-library&quot;&gt;To generate a sample client library&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#31---customization&quot;&gt;3.1 - Customization&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#32---workflow-integration-maven-gradle-github-cicd&quot;&gt;3.2 - Workflow Integration (Maven, Gradle, Github, CI/CD)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#33---online-openapi-generator&quot;&gt;3.3 - Online OpenAPI generator&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#34---license-information-on-generated-code&quot;&gt;3.4 - License information on Generated Code&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#35---ide-integration&quot;&gt;3.5 - IDE Integration&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#4---companiesprojects-using-openapi-generator&quot;&gt;4 - Companies/Projects using OpenAPI Generator&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#5---presentationsvideostutorialsbooks&quot;&gt;5 - Presentations/Videos/Tutorials/Books&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#6---about-us&quot;&gt;6 - About Us&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#61---openapi-generator-core-team&quot;&gt;6.1 - OpenAPI Generator Core Team&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#core-team-members&quot;&gt;Core Team Members&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#template-creator&quot;&gt;Template Creator&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#how-to-join-the-core-team&quot;&gt;How to join the core team&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#62---openapi-generator-technical-committee&quot;&gt;6.2 - OpenAPI Generator Technical Committee&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#members-of-technical-committee&quot;&gt;Members of Technical Committee&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#63---history-of-openapi-generator&quot;&gt;6.3 - History of OpenAPI Generator&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#founding-members-alphabetical-order&quot;&gt;Founding Members (alphabetical order):&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#7---license&quot;&gt;7 - License&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;1 - Installation&lt;/a&gt;&lt;/h2&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;1.1 - Compatibility&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;The OpenAPI Specification has undergone 3 revisions since initial creation in 2010. The openapi-generator project has the following compatibilities with the OpenAPI Specification:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;OpenAPI Generator Version&lt;/th&gt; 
   &lt;th&gt;Release Date&lt;/th&gt; 
   &lt;th&gt;Notes&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;7.23.0 (upcoming minor release) &lt;a href=&quot;https://github.com/OpenAPITools/openapi-generator/wiki/FAQ#how-to-test-with-the-latest-master-of-openapi-generator&quot;&gt;SNAPSHOT&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;08.06.2026&lt;/td&gt; 
   &lt;td&gt;Minor release with breaking changes (with fallback)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/OpenAPITools/openapi-generator/releases/tag/v7.22.0&quot;&gt;7.22.0&lt;/a&gt; (latest stable release)&lt;/td&gt; 
   &lt;td&gt;28.04.2026&lt;/td&gt; 
   &lt;td&gt;Minor release with breaking changes (with fallback)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/OpenAPITools/openapi-generator/releases/tag/v6.6.0&quot;&gt;6.6.0&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;11.05.2023&lt;/td&gt; 
   &lt;td&gt;Minor release with breaking changes (with fallback)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/OpenAPITools/openapi-generator/releases/tag/v5.4.0&quot;&gt;5.4.0&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;31.01.2022&lt;/td&gt; 
   &lt;td&gt;Minor release with breaking changes (with fallback)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/OpenAPITools/openapi-generator/releases/tag/v4.3.1&quot;&gt;4.3.1&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;06.05.2020&lt;/td&gt; 
   &lt;td&gt;Patch release (enhancements, bug fixes, etc)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;OpenAPI Spec compatibility: 1.0, 1.1, 1.2, 2.0, 3.0, 3.1 (beta support)&lt;/p&gt; 
&lt;p&gt;(We do not publish daily/nightly build. Please use SNAPSHOT instead)&lt;/p&gt; 
&lt;p&gt;For old releases, please refer to the &lt;a href=&quot;https://github.com/OpenAPITools/openapi-generator/releases&quot;&gt;&lt;strong&gt;Release&lt;/strong&gt;&lt;/a&gt; page.&lt;/p&gt; 
&lt;p&gt;For decommissioned generators/libraries/frameworks, please refer to &lt;a href=&quot;https://github.com/OpenAPITools/openapi-generator/issues?q=label%3ADecommission+is%3Amerged+&quot;&gt;the &quot;Decommission&quot; label&lt;/a&gt; in the pull request page.&lt;/p&gt; 
&lt;h2&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;1.2 - Artifacts on Maven Central&lt;/a&gt;&lt;/h2&gt; 
&lt;p&gt;You can find our released artifacts on maven central:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Core:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.openapitools&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;openapi-generator&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;${openapi-generator-version}&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See the different versions of the &lt;a href=&quot;https://search.maven.org/artifact/org.openapitools/openapi-generator&quot;&gt;openapi-generator&lt;/a&gt; artifact available on maven central.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Cli:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.openapitools&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;openapi-generator-cli&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;${openapi-generator-version}&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See the different versions of the &lt;a href=&quot;https://search.maven.org/artifact/org.openapitools/openapi-generator-cli&quot;&gt;openapi-generator-cli&lt;/a&gt; artifact available on maven central.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Maven plugin:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.openapitools&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;openapi-generator-maven-plugin&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;${openapi-generator-version}&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;See the different versions of the &lt;a href=&quot;https://search.maven.org/artifact/org.openapitools/openapi-generator-maven-plugin&quot;&gt;openapi-generator-maven-plugin&lt;/a&gt; artifact available on maven central.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/OpenAPITools/openapi-generator/raw/master/modules/openapi-generator-maven-plugin/README.md&quot;&gt;Readme&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Gradle plugin:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.openapitools&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;openapi-generator-gradle-plugin&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;${openapi-generator-version}&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;See the different versions of the &lt;a href=&quot;https://search.maven.org/artifact/org.openapitools/openapi-generator-gradle-plugin&quot;&gt;openapi-generator-gradle-plugin&lt;/a&gt; artifact available on maven central.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/OpenAPITools/openapi-generator/raw/master/modules/openapi-generator-gradle-plugin/README.adoc&quot;&gt;Readme&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;1.3 - Download JAR&lt;/a&gt;&lt;/h3&gt; 
&lt;!-- RELEASE_VERSION --&gt; 
&lt;p&gt;If you&#39;re looking for the latest stable version, you can grab it directly from &lt;a href=&quot;http://Maven.org&quot;&gt;Maven.org&lt;/a&gt; (Java 11 runtime at a minimum):&lt;/p&gt; 
&lt;p&gt;JAR location: &lt;code&gt;https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.22.0/openapi-generator-cli-7.22.0.jar&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;For &lt;strong&gt;Mac/Linux&lt;/strong&gt; users:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.22.0/openapi-generator-cli-7.22.0.jar -O openapi-generator-cli.jar
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For &lt;strong&gt;Windows&lt;/strong&gt; users, you will need to install &lt;a href=&quot;http://gnuwin32.sourceforge.net/packages/wget.htm&quot;&gt;wget&lt;/a&gt; or you can use Invoke-WebRequest in PowerShell (3.0+), e.g.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Invoke-WebRequest -OutFile openapi-generator-cli.jar https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.22.0/openapi-generator-cli-7.22.0.jar
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;After downloading the JAR, run &lt;code&gt;java -jar openapi-generator-cli.jar help&lt;/code&gt; to show the usage.&lt;/p&gt; 
&lt;p&gt;For Mac users, please make sure Java 11 is installed (Tips: run &lt;code&gt;java -version&lt;/code&gt; to check the version), and export &lt;code&gt;JAVA_HOME&lt;/code&gt; in order to use the supported Java version:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;export JAVA_HOME=`/usr/libexec/java_home -v 1.11`
export PATH=${JAVA_HOME}/bin:$PATH
&lt;/code&gt;&lt;/pre&gt; 
&lt;!-- /RELEASE_VERSION --&gt; 
&lt;h3&gt;Launcher Script&lt;/h3&gt; 
&lt;p&gt;One downside to manual jar downloads is that you don&#39;t keep up-to-date with the latest released version. We have a Bash launcher script at &lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/bin/utils/openapi-generator-cli.sh&quot;&gt;bin/utils/openapi-generator.cli.sh&lt;/a&gt; which resolves this issue.&lt;/p&gt; 
&lt;p&gt;To install the launcher script, copy the contents of the script to a location on your path and make the script executable.&lt;/p&gt; 
&lt;p&gt;An example of setting this up (NOTE: Always evaluate scripts curled from external systems before executing them).&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mkdir -p ~/bin/openapitools
curl https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/bin/utils/openapi-generator-cli.sh &amp;gt; ~/bin/openapitools/openapi-generator-cli
chmod u+x ~/bin/openapitools/openapi-generator-cli
export PATH=$PATH:~/bin/openapitools/
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Now, &lt;code&gt;openapi-generator-cli&lt;/code&gt; is &quot;installed&quot;. On invocation, it will query the GitHub repository for the most recently released version. If this matches the last downloaded jar, it will execute as normal. If a newer version is found, the script will download the latest release and execute it.&lt;/p&gt; 
&lt;p&gt;If you need to invoke an older version of the generator, you can define the variable &lt;code&gt;OPENAPI_GENERATOR_VERSION&lt;/code&gt; either ad hoc or globally. You can export this variable if you&#39;d like to persist a specific release version.&lt;/p&gt; 
&lt;p&gt;Examples:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Execute latest released openapi-generator-cli
openapi-generator-cli version

# Execute version 4.1.0 for the current invocation, regardless of the latest released version
OPENAPI_GENERATOR_VERSION=4.1.0 openapi-generator-cli version

# Execute version 4.1.0-SNAPSHOT for the current invocation
OPENAPI_GENERATOR_VERSION=4.1.0-SNAPSHOT openapi-generator-cli version

# Execute version 4.0.2 for every invocation in the current shell session
export OPENAPI_GENERATOR_VERSION=4.0.2
openapi-generator-cli version # is 4.0.2
openapi-generator-cli version # is also 4.0.2

# To &quot;install&quot; a specific version, set the variable in .bashrc/.bash_profile
echo &quot;export OPENAPI_GENERATOR_VERSION=4.0.2&quot; &amp;gt;&amp;gt; ~/.bashrc
source ~/.bashrc
openapi-generator-cli version # is always 4.0.2, unless any of the above overrides are done ad hoc
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;1.4 - Build Projects&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;To build from source, you need the following installed and available in your &lt;code&gt;$PATH:&lt;/code&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://adoptium.net/&quot;&gt;Java 11&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://maven.apache.org/&quot;&gt;Apache Maven 3.8.8 or greater&lt;/a&gt; (optional)&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;After cloning the project, you can build it from source using &lt;a href=&quot;https://maven.apache.org/wrapper/&quot;&gt;maven wrapper&lt;/a&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Linux: &lt;code&gt;./mvnw clean install&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Windows: &lt;code&gt;mvnw.cmd clean install&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Nix users&lt;/h4&gt; 
&lt;p&gt;If you&#39;re a nix user, you can enter OpenAPI Generator shell, by typing:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;nix develop
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;It will enter a shell with Java 11 installed.&lt;/p&gt; 
&lt;p&gt;Direnv supports automatically loading of the nix developer shell, so if you&#39;re using direnv too, type:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;direnv allow
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;and have &lt;code&gt;java&lt;/code&gt; and &lt;code&gt;mvn&lt;/code&gt; set up with correct versions each time you enter project directory.&lt;/p&gt; 
&lt;p&gt;The default build contains minimal static analysis (via CheckStyle). To run your build with PMD and Spotbugs, use the &lt;code&gt;static-analysis&lt;/code&gt; profile:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Linux: &lt;code&gt;./mvnw -Pstatic-analysis clean install&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Windows: &lt;code&gt;mvnw.cmd -Pstatic-analysis clean install&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;1.5 - Homebrew&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;To install, run &lt;code&gt;brew install openapi-generator&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;Here is an example usage to generate a Ruby client:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;openapi-generator generate -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml -g ruby -o /tmp/test/
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To reinstall with the latest master, run &lt;code&gt;brew uninstall openapi-generator &amp;amp;&amp;amp; brew install --HEAD openapi-generator&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;To install OpenJDK (pre-requisites), please run&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;brew tap AdoptOpenJDK/openjdk
brew install --cask adoptopenjdk11
export JAVA_HOME=`/usr/libexec/java_home -v 1.11`
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or download installer via &lt;a href=&quot;https://adoptium.net/&quot;&gt;https://adoptium.net/&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;To install Maven (optional), please run&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;brew install maven
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;1.6 - Docker&lt;/a&gt;&lt;/h3&gt; 
&lt;h4&gt;Public Pre-built Docker images&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://hub.docker.com/r/openapitools/openapi-generator-cli/&quot;&gt;https://hub.docker.com/r/openapitools/openapi-generator-cli/&lt;/a&gt; (official CLI)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://hub.docker.com/r/openapitools/openapi-generator-online/&quot;&gt;https://hub.docker.com/r/openapitools/openapi-generator-online/&lt;/a&gt; (official web service)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;OpenAPI Generator CLI Docker Image&lt;/h4&gt; 
&lt;p&gt;The OpenAPI Generator image acts as a standalone executable. It can be used as an alternative to installing via homebrew, or for developers who are unable to install Java or upgrade the installed version.&lt;/p&gt; 
&lt;p&gt;To generate code with this image, you&#39;ll need to mount a local location as a volume.&lt;/p&gt; 
&lt;p&gt;Example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;docker run --rm -v &quot;${PWD}:/local&quot; openapitools/openapi-generator-cli generate \
    -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml \
    -g go \
    -o /local/out/go
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The generated code will be located under &lt;code&gt;./out/go&lt;/code&gt; in the current directory.&lt;/p&gt; 
&lt;h4&gt;OpenAPI Generator Online Docker Image&lt;/h4&gt; 
&lt;p&gt;The openapi-generator-online image can act as a self-hosted web application and API for generating code. This container can be incorporated into a CI pipeline, and requires at least two HTTP requests and some docker orchestration to access generated code.&lt;/p&gt; 
&lt;p&gt;Example usage:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# Start container at port 8888 and save the container id
&amp;gt; CID=$(docker run -d -p 8888:8080 openapitools/openapi-generator-online)

# allow for startup
&amp;gt; sleep 10

# Get the IP of the running container (optional)
GEN_IP=$(docker inspect --format &#39;{{.NetworkSettings.IPAddress}}&#39;  $CID)

# Execute an HTTP request to generate a Ruby client
&amp;gt; curl -X POST --header &#39;Content-Type: application/json&#39; --header &#39;Accept: application/json&#39; \
-d &#39;{&quot;openAPIUrl&quot;: &quot;https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml&quot;}&#39; \
&#39;http://localhost:8888/api/gen/clients/ruby&#39;

{&quot;code&quot;:&quot;c2d483.3.4672-40e9-91df-b9ffd18d22b8&quot;,&quot;link&quot;:&quot;http://localhost:8888/api/gen/download/c2d483.3.4672-40e9-91df-b9ffd18d22b8&quot;}

# Download the generated zip file
&amp;gt; wget http://localhost:8888/api/gen/download/c2d483.3.4672-40e9-91df-b9ffd18d22b8

# Unzip the file
&amp;gt; unzip c2d483.3.4672-40e9-91df-b9ffd18d22b8

# Shutdown the openapi generator image
&amp;gt; docker stop $CID &amp;amp;&amp;amp; docker rm $CID
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Development in docker&lt;/h4&gt; 
&lt;p&gt;You can use &lt;code&gt;run-in-docker.sh&lt;/code&gt; to do all development. This script maps your local repository to &lt;code&gt;/gen&lt;/code&gt; in the docker container. It also maps &lt;code&gt;~/.m2/repository&lt;/code&gt; to the appropriate container location.&lt;/p&gt; 
&lt;p&gt;To execute &lt;code&gt;mvn package&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git clone https://github.com/openapitools/openapi-generator
cd openapi-generator
./run-in-docker.sh mvn package
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Build artifacts are now accessible in your working directory.&lt;/p&gt; 
&lt;p&gt;Once built, &lt;code&gt;run-in-docker.sh&lt;/code&gt; will act as an executable for openapi-generator-cli. To generate code, you&#39;ll need to output to a directory under &lt;code&gt;/gen&lt;/code&gt; (e.g. &lt;code&gt;/gen/out&lt;/code&gt;). For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;./run-in-docker.sh help # Executes &#39;help&#39; command for openapi-generator-cli
./run-in-docker.sh list # Executes &#39;list&#39; command for openapi-generator-cli
./run-in-docker.sh generate -i modules/openapi-generator/src/test/resources/3_0/petstore.yaml \
    -g go -o /gen/out/go-petstore -p packageName=petstore # generates go client, outputs locally to ./out/go-petstore
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;Troubleshooting&lt;/h5&gt; 
&lt;p&gt;If an error like this occurs, just execute the &lt;strong&gt;mvn clean install -U&lt;/strong&gt; command:&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project openapi-generator: A type incompatibility occurred while executing org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test: java.lang.ExceptionInInitializerError cannot be cast to java.io.IOException&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;./run-in-docker.sh mvn clean install -U
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Failed to execute goal org.fortasoft:gradle-maven-plugin:1.0.8:invoke (default) on project openapi-generator-gradle-plugin-mvn-wrapper: org.gradle.tooling.BuildException: Could not execute build using Gradle distribution &#39;&lt;a href=&quot;https://services.gradle.org/distributions/gradle-4.7-bin.zip&quot;&gt;https://services.gradle.org/distributions/gradle-4.7-bin.zip&lt;/a&gt;&#39;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Right now: no solution for this one 😐&lt;/p&gt; 
&lt;h4&gt;Run Docker in Vagrant&lt;/h4&gt; 
&lt;p&gt;Prerequisite: install &lt;a href=&quot;https://www.vagrantup.com/downloads.html&quot;&gt;Vagrant&lt;/a&gt; and &lt;a href=&quot;https://www.virtualbox.org/wiki/Downloads&quot;&gt;VirtualBox&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git clone https://github.com/openapitools/openapi-generator.git
cd openapi-generator
vagrant up
vagrant ssh
cd /vagrant
./run-in-docker.sh mvn package
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;1.7 - NPM&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;There is also an &lt;a href=&quot;https://www.npmjs.com/package/@openapitools/openapi-generator-cli&quot;&gt;NPM package wrapper&lt;/a&gt; available for different platforms (e.g. Linux, Mac, Windows). (JVM is still required) Please see the &lt;a href=&quot;https://github.com/openapitools/openapi-generator-cli&quot;&gt;project&#39;s README&lt;/a&gt; there for more information.&lt;/p&gt; 
&lt;p&gt;Install it globally to get the CLI available on the command line:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;npm install @openapitools/openapi-generator-cli -g
openapi-generator-cli version
&lt;/code&gt;&lt;/pre&gt; 
&lt;!-- RELEASE_VERSION --&gt; 
&lt;p&gt;To use a specific version of &quot;openapi-generator-cli&quot;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;openapi-generator-cli version-manager set 7.22.0
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Or install it as dev-dependency:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;npm install @openapitools/openapi-generator-cli -D
&lt;/code&gt;&lt;/pre&gt; 
&lt;!-- /RELEASE_VERSION --&gt; 
&lt;p&gt;You can use &lt;a href=&quot;https://github.com/OpenAPITools/openapi-generator-cli?tab=readme-ov-file#use-locally-built-jar&quot;&gt;locally built JARs&lt;/a&gt; or &lt;a href=&quot;https://github.com/OpenAPITools/openapi-generator-cli?tab=readme-ov-file#use-nightly-snapshot-build&quot;&gt;&lt;code&gt;SNAPSHOT&lt;/code&gt; versions&lt;/a&gt; as well.&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;1.8 - pip&lt;/a&gt;&lt;/h3&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Platform(s)&lt;/strong&gt;: Linux, macOS, Windows &lt;strong&gt;Install&lt;/strong&gt; via &lt;a href=&quot;https://pypi.org/&quot;&gt;PyPI&lt;/a&gt; (&lt;code&gt;java&lt;/code&gt; executable is needed to run):&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;pip install openapi-generator-cli
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To install a specific version&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pip install openapi-generator-cli==7.22.0
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can also install with &lt;a href=&quot;https://github.com/activeviam/jdk4py&quot;&gt;jdk4py&lt;/a&gt; instead of java binary. (python&amp;gt;=3.10 is required)&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pip install openapi-generator-cli[jdk4py]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Ref: &lt;a href=&quot;https://github.com/openAPITools/openapi-generator-pip&quot;&gt;https://github.com/openAPITools/openapi-generator-pip&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;2 - Getting Started&lt;/a&gt;&lt;/h2&gt; 
&lt;p&gt;To generate a PHP client for &lt;a href=&quot;https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml&quot;&gt;petstore.yaml&lt;/a&gt;, please run the following&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git clone https://github.com/openapitools/openapi-generator
cd openapi-generator
./mvnw clean package
java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar generate \
   -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml \
   -g php \
   -o /var/tmp/php_api_client
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;(if you&#39;re on Windows, replace the last command with &lt;code&gt;java -jar modules\openapi-generator-cli\target\openapi-generator-cli.jar generate -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml -g php -o c:\temp\php_api_client&lt;/code&gt;)&lt;/p&gt; 
&lt;!-- RELEASE_VERSION --&gt; 
&lt;p&gt;You can also download the JAR (latest release) directly from &lt;a href=&quot;https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.22.0/openapi-generator-cli-7.22.0.jar&quot;&gt;maven.org&lt;/a&gt;&lt;/p&gt; 
&lt;!-- /RELEASE_VERSION --&gt; 
&lt;p&gt;To get a list of &lt;strong&gt;general&lt;/strong&gt; options available, please run &lt;code&gt;java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar help generate&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;To get a list of PHP specified options (which can be passed to the generator with a config file via the &lt;code&gt;-c&lt;/code&gt; option), please run &lt;code&gt;java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar config-help -g php&lt;/code&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;3 - Usage&lt;/a&gt;&lt;/h2&gt; 
&lt;h3&gt;To generate a sample client library&lt;/h3&gt; 
&lt;p&gt;You can build a client against the &lt;a href=&quot;https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml&quot;&gt;Petstore API&lt;/a&gt; as follows:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;./bin/generate-samples.sh ./bin/configs/java-okhttp-gson.yaml
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;(On Windows, please install &lt;a href=&quot;https://gitforwindows.org/&quot;&gt;GIT Bash for Windows&lt;/a&gt; to run the command above)&lt;/p&gt; 
&lt;p&gt;This script uses the default library, which is &lt;code&gt;okhttp-gson&lt;/code&gt;. It will run the generator with this command:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar generate \
  -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml \
  -g java \
  -t modules/openapi-generator/src/main/resources/Java \
  --additional-properties artifactId=petstore-okhttp-gson,hideGenerationTimestamp=true \
  -o samples/client/petstore/java/okhttp-gson
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;with a number of options. &lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/docs/generators/java.md&quot;&gt;The java options are documented here.&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;You can also get the options with the &lt;code&gt;help generate&lt;/code&gt; command (below only shows partial results):&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NAME
        openapi-generator-cli generate - Generate code with the specified
        generator.

SYNOPSIS
        openapi-generator-cli generate
                [(-a &amp;lt;authorization&amp;gt; | --auth &amp;lt;authorization&amp;gt;)]
                [--api-name-suffix &amp;lt;api name suffix&amp;gt;] [--api-package &amp;lt;api package&amp;gt;]
                [--artifact-id &amp;lt;artifact id&amp;gt;] [--artifact-version &amp;lt;artifact version&amp;gt;]
                [(-c &amp;lt;configuration file&amp;gt; | --config &amp;lt;configuration file&amp;gt;)] [--dry-run]
                [(-e &amp;lt;templating engine&amp;gt; | --engine &amp;lt;templating engine&amp;gt;)]
                [--enable-post-process-file]
                [(-g &amp;lt;generator name&amp;gt; | --generator-name &amp;lt;generator name&amp;gt;)]
                [--generate-alias-as-model] [--git-host &amp;lt;git host&amp;gt;]
                [--git-repo-id &amp;lt;git repo id&amp;gt;] [--git-user-id &amp;lt;git user id&amp;gt;]
                [--global-property &amp;lt;global properties&amp;gt;...] [--group-id &amp;lt;group id&amp;gt;]
                [--http-user-agent &amp;lt;http user agent&amp;gt;]
                [(-i &amp;lt;spec file&amp;gt; | --input-spec &amp;lt;spec file&amp;gt;)]
                [--ignore-file-override &amp;lt;ignore file override location&amp;gt;]
                [--import-mappings &amp;lt;import mappings&amp;gt;...]
                [--instantiation-types &amp;lt;instantiation types&amp;gt;...]
                [--invoker-package &amp;lt;invoker package&amp;gt;]
                [--language-specific-primitives &amp;lt;language specific primitives&amp;gt;...]
                [--legacy-discriminator-behavior] [--library &amp;lt;library&amp;gt;]
                [--log-to-stderr] [--minimal-update]
                [--model-name-prefix &amp;lt;model name prefix&amp;gt;]
                [--model-name-suffix &amp;lt;model name suffix&amp;gt;]
                [--model-package &amp;lt;model package&amp;gt;]
                [(-o &amp;lt;output directory&amp;gt; | --output &amp;lt;output directory&amp;gt;)] [(-p &amp;lt;additional properties&amp;gt; | --additional-properties &amp;lt;additional properties&amp;gt;)...]
                [--package-name &amp;lt;package name&amp;gt;] [--release-note &amp;lt;release note&amp;gt;]
                [--remove-operation-id-prefix]
                [--reserved-words-mappings &amp;lt;reserved word mappings&amp;gt;...]
                [(-s | --skip-overwrite)] [--server-variables &amp;lt;server variables&amp;gt;...]
                [--skip-validate-spec] [--strict-spec &amp;lt;true/false strict behavior&amp;gt;]
                [(-t &amp;lt;template directory&amp;gt; | --template-dir &amp;lt;template directory&amp;gt;)]
                [--type-mappings &amp;lt;type mappings&amp;gt;...] [(-v | --verbose)]

OPTIONS
        -a &amp;lt;authorization&amp;gt;, --auth &amp;lt;authorization&amp;gt;
            adds authorization headers when fetching the OpenAPI definitions
            remotely. Pass in a URL-encoded string of name:header with a comma
            separating multiple values

...... (results omitted)

        -v, --verbose
            verbose mode

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can then compile and run the client, as well as unit tests against it:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;cd samples/client/petstore/java/okhttp-gson
mvn package
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Other generators have &lt;a href=&quot;https://github.com/OpenAPITools/openapi-generator/tree/master/samples&quot;&gt;samples&lt;/a&gt; too.&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;3.1 - Customization&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;Please refer to &lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/docs/customization.md&quot;&gt;customization.md&lt;/a&gt; on how to customize the output (e.g. package name, version)&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;3.2 - Workflow Integration (Maven, Gradle, Github, CI/CD)&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;Please refer to &lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/docs/integration.md&quot;&gt;integration.md&lt;/a&gt; on how to integrate OpenAPI generator with Maven, Gradle, sbt, Bazel, Github and CI/CD.&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;3.3 - Online OpenAPI generator&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;Here are the public online services:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;latest stable version: &lt;a href=&quot;https://api.openapi-generator.tech&quot;&gt;https://api.openapi-generator.tech&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;latest master: &lt;a href=&quot;https://api-latest-master.openapi-generator.tech&quot;&gt;https://api-latest-master.openapi-generator.tech&lt;/a&gt; (updated with latest master every hour)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The server is sponsored by &lt;a href=&quot;https://www.linode.com/&quot;&gt;Linode&lt;/a&gt; &lt;a href=&quot;https://www.linode.com/&quot;&gt;&lt;img src=&quot;https://www.linode.com/media/images/logos/standard/light/linode-logo_standard_light_small.png&quot; alt=&quot;Linode Logo&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;(These services are beta and do not have any guarantee on service level)&lt;/p&gt; 
&lt;p&gt;Please refer to &lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/docs/online.md&quot;&gt;online.md&lt;/a&gt; on how to run and use the &lt;code&gt;openapi-generator-online&lt;/code&gt; - a web service for &lt;code&gt;openapi-generator&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;3.4 - License information on Generated Code&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;The OpenAPI Generator project is intended as a benefit for users of the Open API Specification. The project itself has the &lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#7---license&quot;&gt;License&lt;/a&gt; as specified. In addition, please understand the following points:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;The templates included with this project are subject to the &lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#7---license&quot;&gt;License&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Generated code is intentionally &lt;em&gt;not&lt;/em&gt; subject to the parent project license&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;When code is generated from this project, it shall be considered &lt;strong&gt;AS IS&lt;/strong&gt; and owned by the user of the software. There are no warranties--expressed or implied--for generated code. You can do what you wish with it, and once generated, the code is your responsibility and subject to the licensing terms that you deem appropriate.&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;3.5 - IDE Integration&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;Here is a list of community-contributed IDE plug-ins that integrate with OpenAPI Generator:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Eclipse: &lt;a href=&quot;https://www.eclipse.org/codewind/open-api-tools-for-eclipse.html&quot;&gt;Codewind OpenAPI Tools for Eclipse&lt;/a&gt; by &lt;a href=&quot;https://www.ibm.com&quot;&gt;IBM&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;IntelliJ IDEA: &lt;a href=&quot;https://plugins.jetbrains.com/plugin/8433-openapi-generator&quot;&gt;OpenAPI Generator&lt;/a&gt; by &lt;a href=&quot;https://jimschubert.us/#/&quot;&gt;Jim Schubert&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;IntelliJ IDEA: &lt;a href=&quot;https://plugins.jetbrains.com/plugin/10690-senya-editor&quot;&gt;Senya Editor&lt;/a&gt; by &lt;a href=&quot;https://senya.io&quot;&gt;senya.io&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.reprezen.com/&quot;&gt;RepreZen API Studio&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Visual Studio: &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=ChristianResmaHelle.ApiClientCodeGenerator&quot;&gt;REST API Client Code Generator&lt;/a&gt; by &lt;a href=&quot;https://christian-helle.blogspot.com/&quot;&gt;Christian Resma Helle&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Visual Studio Code: &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=IBM.codewind-openapi-tools&quot;&gt;Codewind OpenAPI Tools&lt;/a&gt; by &lt;a href=&quot;https://marketplace.visualstudio.com/publishers/IBM&quot;&gt;IBM&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;4 - Companies/Projects using OpenAPI Generator&lt;/a&gt;&lt;/h2&gt; 
&lt;p&gt;Here are some companies/projects (alphabetical order) using OpenAPI Generator in production. To add your company/project to the list, please visit &lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/README.md&quot;&gt;README.md&lt;/a&gt; and click on the icon to edit the page.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.aau.dk&quot;&gt;Aalborg University&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/actcoding&quot;&gt;act coding&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.adaptant.io/&quot;&gt;Adaptant Solutions AG&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.adesso.de/&quot;&gt;adesso SE&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://adorsys.com/&quot;&gt;adorsys GmbH &amp;amp; Co.KG&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.adyen.com/&quot;&gt;Adyen&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.agoda.com/&quot;&gt;Agoda&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.airthings.com/&quot;&gt;Airthings&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.aleri.de/&quot;&gt;Aleri Solutions Gmbh&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.allianz.com&quot;&gt;Allianz&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://angular.schule/&quot;&gt;Angular.Schule&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://aqovia.com/&quot;&gt;Aqovia&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.anz.com/&quot;&gt;Australia and New Zealand Banking Group (ANZ)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.arduino.cc/&quot;&gt;Arduino&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.askul.co.jp&quot;&gt;ASKUL&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://aws.amazon.com/&quot;&gt;Amazon Web Services (AWS)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://b-com.com/en&quot;&gt;b&amp;lt;&amp;gt;com&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://e.baidu.com&quot;&gt;百度营销&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dev.bandwidth.com&quot;&gt;Bandwidth&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://banzaicloud.com&quot;&gt;Banzai Cloud&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://bimdata.io&quot;&gt;BIMData.io&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.bithost.ch&quot;&gt;Bithost GmbH&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.bosch-connected-industry.com&quot;&gt;Bosch Connected Industry&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.boxever.com/&quot;&gt;Boxever&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.brevy.com&quot;&gt;Brevy&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.bunker-holding.com/&quot;&gt;Bunker Holding Group&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.csun.edu&quot;&gt;California State University, Northridge&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.cam-inc.co.jp/&quot;&gt;CAM&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.camptocamp.com/en&quot;&gt;Camptocamp&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.carlsberggroup.com/&quot;&gt;Carlsberg Group&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://home.cern/&quot;&gt;CERN&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.christopherqueenconsulting.com/&quot;&gt;Christopher Queen Consulting&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.cisco.com/&quot;&gt;Cisco&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.codecentric.de/&quot;&gt;codecentric AG&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.coinapi.io/&quot;&gt;CoinAPI&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.commencis.com/&quot;&gt;Commencis&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://configcat.com/&quot;&gt;ConfigCat&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.cronn.de/&quot;&gt;cronn GmbH&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://crossoverhealth.com/&quot;&gt;Crossover Health&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.cupix.com/&quot;&gt;Cupix&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.datadoghq.com&quot;&gt;Datadog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.dbsystel.de&quot;&gt;DB Systel&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.deeproute.ai/&quot;&gt;Deeporute.ai&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.devsupply.com/&quot;&gt;Devsupply&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.dmTECH.de&quot;&gt;dmTECH GmbH&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docspring.com/&quot;&gt;DocSpring&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dwango.co.jp/&quot;&gt;dwango&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.edgeimpulse.com/&quot;&gt;Edge Impulse&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.elementai.com/&quot;&gt;Element AI&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.embotics.com/&quot;&gt;Embotics&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.emineo.ch&quot;&gt;emineo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.fastly.com/&quot;&gt;fastly&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.fenergo.com/&quot;&gt;Fenergo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://corp.freee.co.jp/en/&quot;&gt;freee&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.freshcells.de/&quot;&gt;FreshCells&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.fuse.no/&quot;&gt;Fuse&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.gantner.com&quot;&gt;Gantner&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/RepreZen/GenFlow&quot;&gt;GenFlow&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.getyourguide.com/&quot;&gt;GetYourGuide&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://glovoapp.com/&quot;&gt;Glovo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://pepabo.com/en/&quot;&gt;GMO Pepabo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://godaddy.com&quot;&gt;GoDaddy&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://gumtree.com&quot;&gt;Gumtree&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://developer.here.com/&quot;&gt;Here&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.ibm.com/&quot;&gt;IBM&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.instana.com&quot;&gt;Instana&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.interxion.com&quot;&gt;Interxion&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://inquisico.com&quot;&gt;Inquisico&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.juststarinfo.com&quot;&gt;JustStar&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://k6.io/&quot;&gt;k6.io&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.klarna.com/&quot;&gt;Klarna&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.kronsoft.ro/home/&quot;&gt;Kronsoft Development&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://kubernetes.io&quot;&gt;Kubernetes&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://muenchen.digital/it-at-m/&quot;&gt;Landeshauptstadt München - it@M&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.linode.com/&quot;&gt;Linode&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.logicdrop.com&quot;&gt;Logicdrop&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.lumeris.com&quot;&gt;Lumeris&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.lvm.de&quot;&gt;LVM Versicherungen&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.mailslurp.com&quot;&gt;MailSlurp&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://manticoresearch.com&quot;&gt;Manticore Search&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://developers.mastercard.com&quot;&gt;Mastercard&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.mediavision.fr/&quot;&gt;Médiavision&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.metaswitch.com/&quot;&gt;Metaswitch&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.moonvision.io/&quot;&gt;MoonVision&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://myworkout.com&quot;&gt;Myworkout&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.namsor.com/&quot;&gt;NamSor&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.neverfail.com/&quot;&gt;Neverfail&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://neuerenergy.com&quot;&gt;NeuerEnergy&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.nokia.com/&quot;&gt;Nokia&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.onesignal.com/&quot;&gt;OneSignal&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.theocc.com/&quot;&gt;Options Clearing Corporation (OCC)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.openet.com/&quot;&gt;Openet&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://openvalidation.io/&quot;&gt;openVALIDATION&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.oracle.com/&quot;&gt;Oracle&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.paxos.com&quot;&gt;Paxos&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://plaid.com&quot;&gt;Plaid&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://plaid.co.jp/&quot;&gt;PLAID, Inc.&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.pinterest.com&quot;&gt;Pinterest&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://ponicode.dev/&quot;&gt;Ponicode&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.pricefx.com/&quot;&gt;Pricefx&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.print-nanny.com/&quot;&gt;PrintNanny&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/prometheus/alertmanager&quot;&gt;Prometheus/Alertmanager&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.qavar.com&quot;&gt;Qavar&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://qed-it.com&quot;&gt;QEDIT&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://qovery.com&quot;&gt;Qovery&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.qulix.com&quot;&gt;Qulix Systems&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://corp.raksul.com&quot;&gt;Raksul&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.raiffeisen.ch&quot;&gt;Raiffeisen Schweiz Genossenschaft&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.redhat.com&quot;&gt;RedHat&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.reprezen.com/swagger-openapi-code-generation-api-first-microservices-enterprise-development&quot;&gt;RepreZen API Studio&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://restunited.com&quot;&gt;REST United&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.robocorp.com&quot;&gt;Robocorp&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.robotinfra.com&quot;&gt;Robotinfra&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.sarvika.com&quot;&gt;Sarvika Technologies Pvt. Ltd.&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.searchapi.io/&quot;&gt;SearchApi&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://smarthr.co.jp/&quot;&gt;SmartHR&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.sie.com/en/index.html&quot;&gt;Sony Interactive Entertainment&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.splitit.com/&quot;&gt;Splitit&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.stingray.com&quot;&gt;Stingray&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.suva.ch/&quot;&gt;Suva&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.svix.com/&quot;&gt;Svix&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dev.telstra.com&quot;&gt;Telstra&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.tencent.com&quot;&gt;Tencent&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.u-aizu.ac.jp/en/&quot;&gt;The University of Aizu&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.tinqin.com/&quot;&gt;TINQIN&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.translucent.dk&quot;&gt;Translucent ApS&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.traveltimeplatform.com/&quot;&gt;TravelTime platform&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.tribalscale.com&quot;&gt;TribalScale&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://trifork.com&quot;&gt;Trifork&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.tui-infotec.com/&quot;&gt;TUI InfoTec GmbH&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.twilio.com/&quot;&gt;Twilio&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://twitter.com&quot;&gt;Twitter&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.unblu.com/&quot;&gt;unblu inc.&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.veamly.com/&quot;&gt;Veamly&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.vmware.com/&quot;&gt;VMWare&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.wbt-solutions.de/&quot;&gt;wbt-solutions&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.woleet.io/&quot;&gt;Woleet&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://wso2.com/&quot;&gt;WSO2&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://vouchery.io&quot;&gt;Vouchery.io&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.xero.com/&quot;&gt;Xero&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.yahoo.co.jp/&quot;&gt;Yahoo Japan&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.viadee.de/&quot;&gt;viadee&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://vonage.com&quot;&gt;Vonage&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.yitutech.com/&quot;&gt;YITU Technology&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.yelp.com/&quot;&gt;Yelp&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.zalando.com&quot;&gt;Zalando&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.outscale.com/&quot;&gt;3DS Outscale&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;5 - Presentations/Videos/Tutorials/Books&lt;/a&gt;&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;2018/05/12 - &lt;a href=&quot;https://ackintosh.github.io/blog/2018/05/12/openapi-generator/&quot;&gt;OpenAPI Generator - community drivenで成長するコードジェネレータ&lt;/a&gt; by &lt;a href=&quot;https://github.com/ackintosh&quot;&gt;中野暁人&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/05/15 - &lt;a href=&quot;http://jmini.github.io/blog/2018/2018-05-15_new-open-source-project.html&quot;&gt;Starting a new open-source project&lt;/a&gt; by &lt;a href=&quot;https://github.com/jmini&quot;&gt;Jeremie Bresson&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/05/15 - &lt;a href=&quot;https://www.publickey1.jp/blog/18/rest_apiapiopenapi_generatorswagger_generator.html&quot;&gt;REST API仕様からAPIクライアントやスタブサーバを自動生成する「OpenAPI Generator」オープンソースで公開。Swagger Codegenからのフォーク&lt;/a&gt; by &lt;a href=&quot;https://www.publickey1.jp&quot;&gt;Publickey&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/06/08 - &lt;a href=&quot;https://angular.schule/blog/2018-06-swagger-codegen-is-now-openapi-generator&quot;&gt;Swagger Codegen is now OpenAPI Generator&lt;/a&gt; by &lt;a href=&quot;https://github.com/JohannesHoppe&quot;&gt;JohannesHoppe&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/06/21 - &lt;a href=&quot;https://fr.slideshare.net/chbornet/jhipster-conf-2018-connect-your-jhipster-apps-to-the-world-of-apis-with-openapi-and-grpc&quot;&gt;Connect your JHipster apps to the world of APIs with OpenAPI and gRPC&lt;/a&gt; by &lt;a href=&quot;https://github.com/cbornet&quot;&gt;Christophe Bornet&lt;/a&gt; at &lt;a href=&quot;https://jhipster-conf.github.io/&quot;&gt;JHipster Conf 2018&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/06/22 - &lt;a href=&quot;https://rohki.hatenablog.com/entry/2018/06/22/073000&quot;&gt;OpenAPI Generator で Gatling Client を生成してみた&lt;/a&gt; at &lt;a href=&quot;https://rohki.hatenablog.com/&quot;&gt;ソモサン&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/06/27 - &lt;a href=&quot;https://speakerdeck.com/wing328/lessons-learned-from-leading-an-open-source-project-supporting-30-plus-programming-languages&quot;&gt;Lessons Learned from Leading an Open-Source Project Supporting 30+ Programming Languages&lt;/a&gt; - &lt;a href=&quot;https://github.com/wing328&quot;&gt;William Cheng&lt;/a&gt; at &lt;a href=&quot;http://bit.ly/2waDKKX&quot;&gt;LinuxCon + ContainerCon + CloudOpen China 2018&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/07/19 - &lt;a href=&quot;https://medium.com/ringcentral-developers/openapi-generator-for-go-contribution-quickstart-8cc72bf37b53&quot;&gt;OpenAPI Generator Contribution Quickstart - RingCentral Go SDK&lt;/a&gt; by &lt;a href=&quot;https://github.com/grokify&quot;&gt;John Wang&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/08/22 - &lt;a href=&quot;https://yinm.info/20180822/&quot;&gt;OpenAPI Generatorのプロジェクト構成などのメモ&lt;/a&gt; by &lt;a href=&quot;https://github.com/yinm&quot;&gt;Yusuke Iinuma&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/09/12 - &lt;a href=&quot;https://www.reprezen.com/blog/reprezen-openapi-3.0-upgrade-now-is-the-time&quot;&gt;RepreZen and OpenAPI 3.0: Now is the Time&lt;/a&gt; by &lt;a href=&quot;https://www.reprezen.com/blog/author/miles-daffin&quot;&gt;Miles Daffin&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/10/31 - &lt;a href=&quot;https://github.com/HarmoWatch/openapi-generator-cli&quot;&gt;A node package wrapper for openapi-generator&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/11/03 - &lt;a href=&quot;http://ryuichi111std.hatenablog.com/entry/2018/11/03/214005&quot;&gt;OpenAPI Generator + golang + Flutter でアプリ開発&lt;/a&gt; by &lt;a href=&quot;https://github.com/ryuichi111&quot;&gt;Ryuichi Daigo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/11/15 - &lt;a href=&quot;https://blog.csdn.net/yzy199391/article/details/84023982&quot;&gt;基于openapi3.0的yaml文件生成java代码的一次实践&lt;/a&gt; by &lt;a href=&quot;https://me.csdn.net/yzy199391&quot;&gt;焱魔王&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/11/18 - &lt;a href=&quot;https://lornajane.net/posts/2018/generating-php-library-code-from-openapi&quot;&gt;Generating PHP library code from OpenAPI&lt;/a&gt; by &lt;a href=&quot;https://lornajane.net/&quot;&gt;Lorna Jane&lt;/a&gt; at &lt;a href=&quot;https://lornajane.net/blog&quot;&gt;LORNAJANE Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/11/19 - &lt;a href=&quot;https://youtu.be/-lDot4Yn7Dg&quot;&gt;OpenAPIs are everywhere&lt;/a&gt; by &lt;a href=&quot;https://github.com/jmini&quot;&gt;Jeremie Bresson (Unblu)&lt;/a&gt; at &lt;a href=&quot;https://www.eclipsecon.org/europe2018&quot;&gt;EclipseCon Europe 2018&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2018/12/09 - &lt;a href=&quot;https://qiita.com/watiko/items/0961287c02eac9211572&quot;&gt;openapi-generator をカスタマイズする方法&lt;/a&gt; by &lt;a href=&quot;https://qiita.com/watiko&quot;&gt;@watiko&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019/01/03 - &lt;a href=&quot;https://lekkimworld.com/2019/01/03/calling-a-swagger-service-from-apex-using-openapi-generator/&quot;&gt;Calling a Swagger service from Apex using openapi-generator&lt;/a&gt; by &lt;a href=&quot;https://lekkimworld.com&quot;&gt;Mikkel Flindt Heisterberg&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019/01/13 - &lt;a href=&quot;https://ky-yk-d.hatenablog.com/entry/2019/01/13/234108&quot;&gt;OpenAPI GeneratorでRESTful APIの定義書から色々自動生成する&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/ky_yk_d&quot;&gt;@ky_yk_d&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019/01/20 - &lt;a href=&quot;https://medium.com/commencis/contract-first-api-development-with-openapi-generator-and-connexion-b21bbf2f9244&quot;&gt;Contract-First API Development with OpenAPI Generator and Connexion&lt;/a&gt; by &lt;a href=&quot;https://github.com/anlcnydn&quot;&gt;Anil Can Aydin&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019/01/30 - &lt;a href=&quot;https://dzone.com/articles/rapid-api-development-using-open-api-generator&quot;&gt;Rapid Application Development With API First Approach Using Open-API Generator&lt;/a&gt; by &lt;a href=&quot;https://dzone.com/users/828329/milan_sonkar.html&quot;&gt;Milan Sonkar&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019/02/02 - &lt;a href=&quot;https://speakerdeck.com/akihito_nakano/gunmaweb34&quot;&gt;平静を保ち、コードを生成せよ 〜 OpenAPI Generator誕生の背景と軌跡 〜&lt;/a&gt; by &lt;a href=&quot;https://github.com/ackintosh&quot;&gt;中野暁人&lt;/a&gt; at &lt;a href=&quot;https://gunmaweb.connpass.com/event/113974/&quot;&gt;Gunma.web #34 スキーマ駆動開発&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019/02/20 - &lt;a href=&quot;https://mux.com/blog/an-adventure-in-openapi-v3-api-code-generation/&quot;&gt;An adventure in OpenAPI V3 code generation&lt;/a&gt; by &lt;a href=&quot;https://mux.com/blog/author/philc/&quot;&gt;Phil Cluff&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019/02/26 - &lt;a href=&quot;https://medium.com/google-cloud/building-api-services-a-beginners-guide-7274ae4c547f&quot;&gt;Building API Services: A Beginner’s Guide&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@ratrosy&quot;&gt;Ratros Y.&lt;/a&gt; in &lt;a href=&quot;https://medium.com/google-cloud&quot;&gt;Google Cloud Platform Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019/02/26 - &lt;a href=&quot;https://medium.com/@ratrosy/building-apis-with-openapi-continued-5d0faaed32eb&quot;&gt;Building APIs with OpenAPI: Continued&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@ratrosy&quot;&gt;Ratros Y.&lt;/a&gt; in &lt;a href=&quot;https://medium.com/google-cloud&quot;&gt;Google Cloud Platform Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-03-07 - &lt;a href=&quot;https://qiita.com/chibato/items/e4a748db12409b40c02f&quot;&gt;OpenAPI Generator で Spring Boot と Angular をタイプセーフに繋ぐ&lt;/a&gt; by &lt;a href=&quot;https://github.com/chibat&quot;&gt;Tomofumi Chiba&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-03-16 - &lt;a href=&quot;https://vadosware.io/post/quick-intro-to-manual-openapi-v3/&quot;&gt;A Quick introduction to manual OpenAPI V3&lt;/a&gt; by &lt;a href=&quot;https://github.com/t3hmrman&quot;&gt;vados&lt;/a&gt; at &lt;a href=&quot;https://vadosware.io&quot;&gt;VADOSWARE&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-03-25 - &lt;a href=&quot;https://blogs.sap.com/2019/03/25/integrate-sap-s4hana-cloud-sdk-with-open-api/&quot;&gt;Access any REST service with the SAP S/4HANA Cloud SDK&lt;/a&gt; by &lt;a href=&quot;https://people.sap.com/alexander.duemont&quot;&gt;Alexander Duemont&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-03-25 - &lt;a href=&quot;https://qiita.com/amuyikam/items/e8a45daae59c68be0fc8&quot;&gt;OpenAPI generatorを試してみる&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/amuyikam&quot;&gt;@amuyikam&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-03-27 - &lt;a href=&quot;https://techblog.zozo.com/entry/openapi3/go&quot;&gt;OpenAPI3を使ってみよう！Go言語でクライアントとスタブの自動生成まで！&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/gold_kou&quot;&gt;@gold_kou&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-04-17 - &lt;a href=&quot;https://tech-blog.optim.co.jp/entry/2019/04/17/174000&quot;&gt;OpenAPIによるスキーマファースト開発の実施サンプルとCloud Runについて&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/yukey1031&quot;&gt;@yukey1031&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-04-18 - &lt;a href=&quot;https://speakerdeck.com/ota42y/how-to-use-openapi3-for-api-developer&quot;&gt;How to use OpenAPI3 for API developer (RubyKaigi 2019)&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/ota42y&quot;&gt;@ota42y&lt;/a&gt; at &lt;a href=&quot;https://rubykaigi.org/2019&quot;&gt;RubyKaigi 2019&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-04-29 - &lt;a href=&quot;https://gum.co/openapi_generator_ebook&quot;&gt;A Beginner&#39;s Guide to Code Generation for REST APIs (OpenAPI Generator)&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/wing328&quot;&gt;William Cheng&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-05-01 - &lt;a href=&quot;https://simply-how.com/design-and-generate-api-code-from-openapi&quot;&gt;Design and generate a REST API from Swagger / OpenAPI in Java, Python, C# and more&lt;/a&gt; by &lt;a href=&quot;https://simply-how.com/&quot;&gt;Simply How&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-05-17 - &lt;a href=&quot;https://www.47northlabs.com/knowledge-base/generate-spring-boot-rest-api-using-swagger-openapi/&quot;&gt;Generate Spring Boot REST API using Swagger/OpenAPI&lt;/a&gt; by &lt;a href=&quot;https://www.47northlabs.com/author/antonie-zafirov/&quot;&gt;Antonie Zafirov&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-05-22 - &lt;a href=&quot;https://gum.co/openapi_generator_ebook_gb&quot;&gt;REST APIs代码生成指南(OpenAPI Generator)&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/wing328&quot;&gt;William Cheng&lt;/a&gt;, &lt;a href=&quot;https://github.com/xmeng1&quot;&gt;Xin Meng&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-05-24 - &lt;a href=&quot;https://gum.co/openapi_generator_ebook_big5&quot;&gt;REST API 代碼生成指南 (OpenAPI Generator)&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/wing328&quot;&gt;William Cheng&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-06-24 - &lt;a href=&quot;https://speakerdeck.com/wing328/kubernetes-clients-and-openapi-generator&quot;&gt;Kubernetes Clients and OpenAPI Generator&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/wing328&quot;&gt;William Cheng&lt;/a&gt; at &lt;a href=&quot;https://www.lfasiallc.com/events/contributors-summit-china-2019/&quot;&gt;Kubernetes Contributor Summits Shanghai 2019&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-06-28 &lt;a href=&quot;https://marketplace.eclipse.org/content/codewind-openapi-tools&quot;&gt;Codewind OpenAPI Tools&lt;/a&gt; in &lt;a href=&quot;https://marketplace.eclipse.org/&quot;&gt;Eclipse Marketplace&lt;/a&gt; by IBM&lt;/li&gt; 
 &lt;li&gt;2019-06-29 &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=IBM.codewind-openapi-tools&quot;&gt;Codewind OpenAPI Tools&lt;/a&gt; in &lt;a href=&quot;https://marketplace.visualstudio.com/&quot;&gt;Visual Studio Marketplace&lt;/a&gt; by IBM&lt;/li&gt; 
 &lt;li&gt;2019-07-04 - &lt;a href=&quot;https://gum.co/openapi_generator_ebook_big5&quot;&gt;REST API のためのコード生成入門 (OpenAPI Generator)&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/wing328&quot;&gt;William Cheng&lt;/a&gt;, &lt;a href=&quot;https://github.com/ackintosh&quot;&gt;中野暁人&lt;/a&gt;, &lt;a href=&quot;https://github.com/taxpon&quot;&gt;和田拓朗&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-07-08 - &lt;a href=&quot;https://tech.cam-inc.co.jp/entry/2019/07/08/140000&quot;&gt;OpenAPI Generator にコントリビュートしたら社名が載った話。(CAM) - CAM TECH BLOG&lt;/a&gt; by &lt;a href=&quot;https://www.cam-inc.co.jp/&quot;&gt;CAM, Inc.&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-07-14 - &lt;a href=&quot;https://qiita.com/yuji38kwmt/items/dfb929316a1335a161c0&quot;&gt;OpenAPI GeneratorでPythonのクライアントライブラリを作成した&lt;/a&gt; by &lt;a href=&quot;https://qiita.com/yuji38kwmt&quot;&gt;yuji38kwmt&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-07-19 - &lt;a href=&quot;https://speakerdeck.com/wing328/developer-experience-dx-for-open-source-projects-english-japanese&quot;&gt;Developer Experience (DX) for Open-Source Projects: How to Engage Developers and Build a Growing Developer Community&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/wing328&quot;&gt;William Cheng&lt;/a&gt;, &lt;a href=&quot;https://github.com/ackintosh&quot;&gt;中野暁人&lt;/a&gt; at &lt;a href=&quot;https://events.linuxfoundation.org/events/open-source-summit-japan-2019/&quot;&gt;Open Source Summit Japan 2019&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-08-14 - &lt;a href=&quot;https://bitmovin.com/our-openapi-journey-with-standardizing-sdks/&quot;&gt;Our OpenAPI journey with Standardizing SDKs&lt;/a&gt; by &lt;a href=&quot;https://bitmovin.com/author/sburgstaller/&quot;&gt;Sebastian Burgstaller&lt;/a&gt; at &lt;a href=&quot;https://www.bitmovin.com&quot;&gt;Bitmovin&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-08-15 - &lt;a href=&quot;https://www.m3tech.blog/entry/2019/08/15/110000&quot;&gt;APIのコードを自動生成させたいだけならgRPCでなくてもよくない?&lt;/a&gt; by &lt;a href=&quot;https://corporate.m3.com/&quot;&gt;M3, Inc.&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-08-22 - &lt;a href=&quot;https://employment.en-japan.com/engineerhub/entry/2019/08/22/103000&quot;&gt;マイクロサービスにおけるWeb APIスキーマの管理─ GraphQL、gRPC、OpenAPIの特徴と使いどころ&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/ota42y&quot;&gt;@ota42y&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-08-24 - &lt;a href=&quot;https://qiita.com/masayoshi0222/items/4845e4c715d04587c104&quot;&gt;SwaggerドキュメントからOpenAPI Generatorを使ってモックサーバー作成&lt;/a&gt; by &lt;a href=&quot;https://qiita.com/masayoshi0222&quot;&gt;坂本正義&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-08-29 - &lt;a href=&quot;https://cloud.tencent.com/developer/article/1495986&quot;&gt;OpenAPI初探&lt;/a&gt; by &lt;a href=&quot;https://cloud.tencent.com/developer/user/1113152&quot;&gt;peakxie&lt;/a&gt; at &lt;a href=&quot;https://cloud.tencent.com/developer&quot;&gt;腾讯云社区&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-08-29 - &lt;a href=&quot;https://www.servicemesher.com/blog/kubernetes-1.16-crd-ga-preview/&quot;&gt;全面进化：Kubernetes CRD 1.16 GA前瞻&lt;/a&gt; by &lt;a href=&quot;https://github.com/yue9944882&quot;&gt;Min Kim&lt;/a&gt; at &lt;a href=&quot;https://www.servicemesher.com/blog/&quot;&gt;ServiceMesher Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-09-01 - &lt;a href=&quot;https://www.youtube.com/watch?v=5cJtbIrsYkg&quot;&gt;Creating a PHP-Slim server using OpenAPI (Youtube video)&lt;/a&gt; by &lt;a href=&quot;https://www.youtube.com/channel/UCnG-TN23lswO6QbvWhMtxpA&quot;&gt;Daniel Persson&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-09-06 - &lt;a href=&quot;https://wissel.net/blog/2019/09/vertx-and-openapi.html&quot;&gt;Vert.x and OpenAPI&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/notessensei&quot;&gt;Stephan H Wissel&lt;/a&gt; at &lt;a href=&quot;https://wissel.net&quot;&gt;wissel.net blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-09-09 - &lt;a href=&quot;https://cloud.ibm.com/docs/cloud-native?topic=cloud-native-rest-api&quot;&gt;Cloud-native development - Creating RESTful microservices&lt;/a&gt; in &lt;a href=&quot;https://cloud.ibm.com/docs&quot;&gt;IBM Cloud Docs&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-09-14 - &lt;a href=&quot;https://developer.mastercard.com/platform/documentation/generating-and-configuring-a-mastercard-api-client/&quot;&gt;Generating and Configuring a Mastercard API Client&lt;/a&gt; at &lt;a href=&quot;https://developer.mastercard.com/platform/documentation/&quot;&gt;Mastercard Developers Platform&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-09-15 - &lt;a href=&quot;https://qiita.com/ShoichiKuraoka/items/f1f7a3c2376f7cd9c56a&quot;&gt;OpenAPI(Swagger)導入下調べ&lt;/a&gt; by &lt;a href=&quot;https://qiita.com/ShoichiKuraoka&quot;&gt;Shoichi Kuraoka&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-09-17 - &lt;a href=&quot;https://www.http4k.org/tutorials/documenting_apis_with_openapi/&quot;&gt;Tutorial: Documenting http4k APIs with OpenApi3&lt;/a&gt; by &lt;a href=&quot;https://www.http4k.org/&quot;&gt;http4k&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-09-22 - &lt;a href=&quot;https://booth.pm/ja/items/1571902&quot;&gt;OpenAPI 3を完全に理解できる本&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/ota42y&quot;&gt;@ota42y&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-09-22 - &lt;a href=&quot;https://medium.com/@amirm.lavasani/restful-apis-tutorial-of-openapi-specification-eeada0e3901d&quot;&gt;RESTful APIs: Tutorial of OpenAPI Specification&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@amirm.lavasani&quot;&gt;Amir Lavasani&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-09-22 - &lt;a href=&quot;https://devrel.net/dev-rel/redefining-sdks-as-software-diversity-kits&quot;&gt;Redefining SDKs as software diversity kits&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/sidneyallen&quot;&gt;Sid Maestre (Xero)&lt;/a&gt; at &lt;a href=&quot;https://sf2019.devrel.net/&quot;&gt;DevRelCon San Francisco 2019&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-09-23 - &lt;a href=&quot;https://qiita.com/littleFeet/items/492df2ad68a0799a5e5e&quot;&gt;swaggerからOpenApi GeneratorでSpringのコードを自動生成&lt;/a&gt; by &lt;a href=&quot;https://qiita.com/littleFeet&quot;&gt;@littleFeet&lt;/a&gt; at &lt;a href=&quot;https://qiita.com/&quot;&gt;Qiita&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-09-24 - &lt;a href=&quot;https://www.slideshare.net/JanWeinschenker/eine-stunde-was-mit-api-first&quot;&gt;Eine Stunde was mit Api First!&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/janweinschenker&quot;&gt;@janweinschenker&lt;/a&gt; at &lt;a href=&quot;https://javaforumnord.de/&quot;&gt;Java Forum Nord&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-10-09 - &lt;a href=&quot;https://autopp-tech.hatenablog.com/entry/2019/10/09/222039&quot;&gt;openapi-generator で生成した Go クライアントで Bearer 認証をする&lt;/a&gt; by &lt;a href=&quot;https://github.com/autopp&quot;&gt;Akira Tanimura&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-10-10 - &lt;a href=&quot;https://www.meetup.com/fr-FR/Criteo-Labs-Tech-Talks/events/264775768/&quot;&gt;Automatic Generation of REST Clients&lt;/a&gt; by Thomas Peyrard, Senior Software Engineer at Criteo in &lt;a href=&quot;https://www.meetup.com/fr-FR/Criteo-Labs-Tech-Talks/events/264775768/&quot;&gt;Full-Stack Tech Talks (Meetup)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-10-12 - &lt;a href=&quot;https://blog.csdn.net/wxid2798226/article/details/102527467&quot;&gt;OpenApi自动生成client&lt;/a&gt; by &lt;a href=&quot;https://me.csdn.net/wxid2798226&quot;&gt;郑泽洲&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-10-16 - &lt;a href=&quot;https://medium.com/@accounts_76224/how-to-ship-apis-faster-cabef2f819e4&quot;&gt;How to ship APIs faster?&lt;/a&gt; by &lt;a href=&quot;https://ponicode.dev&quot;&gt;Simon Guilliams @ PoniCode&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-10-22 - &lt;a href=&quot;https://qiita.com/boronngo/items/4b78b92526209daeaee9&quot;&gt;OpenAPI + Spring Boot(Kotlin)でファイルダウンロードAPIを作成する&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/yuki_furukawa5&quot;&gt;Yuki Furukawa&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-10-24 - &lt;a href=&quot;https://github.com/pe-st/apidocs/raw/master/MicroProfile-OpenAPI-all-slides.pdf&quot;&gt;Microprofile OpenAPI - Code First or Design First?&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/pesche&quot;&gt;Peter [pɛʃə] Steiner&lt;/a&gt; at &lt;a href=&quot;https://www.eclipsecon.org/europe2019/sessions/microprofile-openapi-code-first-or-design-first&quot;&gt;eclipsecon Europe 2019&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-11-06 - &lt;a href=&quot;https://98elements.com/blog/generating-api-clients-based-on-openapi-v3-specifications&quot;&gt;Generating API clients based on OpenAPI v3 specifications&lt;/a&gt; by &lt;a href=&quot;https://98elements.com&quot;&gt;Dominik Jastrzębski @ 98elements&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-11-06 - &lt;a href=&quot;https://qiita.com/YasuhiroABE/items/c73920eab2d9d6e97fd9&quot;&gt;OpenAPIを利用して自前のAPIサーバー(Sinatra)を移植した時のメモ&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/YasuhiroABE&quot;&gt;Yasuhiro ABE&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-11-07 - &lt;a href=&quot;https://www.youtube.com/watch?v=F9iF3a1Z8Y8&quot;&gt;API First development with OpenAPI - You should you practise it !?&lt;/a&gt; by &lt;a href=&quot;https://www.nickvanhoof.com/&quot;&gt;Nick Van Hoof&lt;/a&gt; at &lt;a href=&quot;https://devoxx.be/&quot;&gt;Devoxx Belgium 2019&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-11-08 - &lt;a href=&quot;https://www.youtube.com/watch?v=m28JFovKQ20&quot;&gt;JHipster beyond CRUD - API-First for Enterprises by Enrico Costanzi&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/enricocostanzi&quot;&gt;Enrico Costanzi&lt;/a&gt; at &lt;a href=&quot;https://jhipster-conf.github.io/&quot;&gt;JHipster Conf 2019 in Paris&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-11-11 - &lt;a href=&quot;https://qiita.com/unhurried/items/7b74f7d3c43545dadd2b&quot;&gt;TypeScript REST APIクライアント&lt;/a&gt; by &lt;a href=&quot;https://qiita.com/unhurried&quot;&gt;@unhurried&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-11-11 - &lt;a href=&quot;https://www.youtube.com/watch?v=MMay_nht8ec&quot;&gt;One Spec to Rule them all - OpenAPI in Action&lt;/a&gt; by &lt;a href=&quot;https://github.com/littldr&quot;&gt;Andreas Litt&lt;/a&gt; at &lt;a href=&quot;https://www.codetalks.com/&quot;&gt;code.talks 2019&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-11-13 - &lt;a href=&quot;https://simply-how.com/design-and-generate-api-code-from-openapi&quot;&gt;OpenAPI 3.0 Editor And Generator With A Spring Boot Example&lt;/a&gt; at &lt;a href=&quot;https://simply-how.com/&quot;&gt;Simply How&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-11-17 - &lt;a href=&quot;https://www.youtube.com/playlist?list=PLtJyHVMdzfF6fBkOUV5VDVErP23CGgHIy&quot;&gt;OpenAPI Generator YouTube playlist&lt;/a&gt; at &lt;a href=&quot;https://www.youtube.com&quot;&gt;YouTube&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-11-20 - &lt;a href=&quot;https://noti.st/lornajane/HvDH7U/introduction-to-openapi&quot;&gt;Introduction to OpenAPI&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/lornajane&quot;&gt;Lorna Mitchell&lt;/a&gt; at &lt;a href=&quot;https://gotocph.com/2019/&quot;&gt;GOTO Copenhagen 2019&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-11-20 - &lt;a href=&quot;https://dotnetthoughts.net/how-to-generate-angular-code-from-openapi-specifications/&quot;&gt;How to Generate Angular code from OpenAPI specifications&lt;/a&gt; by Anuraj&lt;/li&gt; 
 &lt;li&gt;2019-11-23 - &lt;a href=&quot;https://www.slideshare.net/techblogyahoo/swagger-openapi-specification-30-api&quot;&gt;Swagger ではない OpenAPI Specification 3.0 による API サーバー開発&lt;/a&gt; by &lt;a href=&quot;https://github.com/t2y&quot;&gt;Tetsuya Morimoto&lt;/a&gt; at &lt;a href=&quot;https://ccc2019fall.java-users.jp/&quot;&gt;JJUG CCC 2019 Fall&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-11-24 - &lt;a href=&quot;https://medium.com/@irinasouthwell_220/accelerate-flutter-development-with-openapi-and-dart-code-generation-1f16f8329a6a&quot;&gt;Accelerate Flutter development with OpenAPI and Dart code generation&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@irinasouthwell_220&quot;&gt;Irina Southwell&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-11-25 - &lt;a href=&quot;https://qiita.com/pochopocho13/items/8db662e1934fb2b408b8&quot;&gt;openapi-generatorで手軽にスタブサーバとクライアントの生成&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/pochopocho13&quot;&gt;@pochopocho13&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-11-26 - &lt;a href=&quot;https://blog.b9lab.com/cordacon-2019-highlights-braid-server-and-openapi-generator-for-corda-flows-api-s-d24179ccb27c&quot;&gt;CordaCon 2019 Highlights: Braid Server and OpenAPI Generator for Corda Client API’s&lt;/a&gt; by &lt;a href=&quot;https://blog.b9lab.com/@adelrestom&quot;&gt;Adel Rustum&lt;/a&gt; at &lt;a href=&quot;https://blog.b9lab.com/&quot;&gt;B9lab&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-12-03 - &lt;a href=&quot;https://www.corda.net/blog/a-road-to-less-coding-auto-generate-apilibrary/&quot;&gt;A Road to Less Coding: Auto-Generate APILibrary&lt;/a&gt; at &lt;a href=&quot;https://www.corda.net/blog/&quot;&gt;Corda Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-12-04 - &lt;a href=&quot;https://qiita.com/teracy55/items/0327c7a170ec772970c6&quot;&gt;Angular＋NestJS＋OpenAPI（Swagger）でマイクロサービスを視野に入れた環境を考える&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/teracy55&quot;&gt;てらしー&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-12-05 - &lt;a href=&quot;https://speakerdeck.com/sullis/code-generation-on-the-java-vm-2019-12-05&quot;&gt;Code generation on the Java VM&lt;/a&gt; by &lt;a href=&quot;https://speakerdeck.com/sullis&quot;&gt;Sean Sullivan&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-12-17 - &lt;a href=&quot;https://www.techscore.com/blog/2019/12/17/openapi-generator-oauth2-accesstoken/&quot;&gt;OpenAPI Generator で OAuth2 アクセストークン発行のコードまで生成してみる&lt;/a&gt; by &lt;a href=&quot;https://www.techscore.com/blog/&quot;&gt;TECHSCORE&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-12-23 - &lt;a href=&quot;https://www.electronicdesign.com/technologies/embedded-revolution/article/21119177/use-ada-for-your-web-development&quot;&gt;Use Ada for Your Web Development&lt;/a&gt; by &lt;a href=&quot;https://github.com/stcarrez&quot;&gt;Stephane Carrez&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2019-12-23 - &lt;a href=&quot;https://gift-tech.co.jp/articles/structured-openapi-schema&quot;&gt;OpenAPIのスキーマを分割・構造化していく方法&lt;/a&gt; by &lt;a href=&quot;https://github.com/t2h5&quot;&gt;小飯塚達也&lt;/a&gt; at &lt;a href=&quot;https://gift-tech.co.jp/&quot;&gt;GiFT, Inc&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-01-17 - &lt;a href=&quot;https://www.youtube.com/watch?v=mFBP-M0ZPfw&amp;amp;t=178s&quot;&gt;OpenAPI demo for Pulp 3.0 GA&lt;/a&gt; by &lt;a href=&quot;https://www.youtube.com/channel/UCI43Ffs4VPDv7awXvvBJfRQ&quot;&gt;Pulp&lt;/a&gt; at &lt;a href=&quot;https://www.youtube.com/&quot;&gt;Youtube&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-01-19 - &lt;a href=&quot;https://dev.to/rolfstreefkerk/why-document-a-rest-api-as-code-5e7p&quot;&gt;Why document a REST API as code?&lt;/a&gt; by &lt;a href=&quot;https://github.com/rpstreef&quot;&gt;Rolf Streefkerk&lt;/a&gt; at &lt;a href=&quot;https://dev.to&quot;&gt;DEV Community&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-01-28 - &lt;a href=&quot;https://dev.to/matttyler/get-your-serverless-swagger-back-with-openapi-48gc&quot;&gt;Get Your Serverless Swagger Back with OpenAPI&lt;/a&gt; by &lt;a href=&quot;https://dev.to/matttyler&quot;&gt;Matt Tyler&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-01-30 - &lt;a href=&quot;https://www.yutaka0m.work/entry/2020/01/30/163905&quot;&gt;OpenAPI Generatorへのコントリビュート&lt;/a&gt; by &lt;a href=&quot;https://github.com/yutaka0m&quot;&gt;yutaka0m&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-02-01 - &lt;a href=&quot;https://fosdem.org/2020/schedule/event/openapi/&quot;&gt;Using OpenAPI to Maximise Your Pulp 3 Experience&lt;/a&gt; by &lt;a href=&quot;https://github.com/dkliban/&quot;&gt;Dennis Kliban&lt;/a&gt; at &lt;a href=&quot;https://fosdem.org/&quot;&gt;FOSDEM&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-02-07 - &lt;a href=&quot;https://www.youtube.com/watch?v=zhb7vUApLW8&amp;amp;t=927s&quot;&gt;Why you should use OpenAPI for your API design&lt;/a&gt; by &lt;a href=&quot;https://apiconference.net/speaker/nick-van-hoof/&quot;&gt;Nick Van Hoof&lt;/a&gt; at &lt;a href=&quot;https://apiconference.net/&quot;&gt;API Conference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-02-17 - &lt;a href=&quot;https://www.brightbox.com/blog/2020/02/17/using-openapi-to-validate-kubernetes-configs/&quot;&gt;Rubynetes: using OpenAPI to validate Kubernetes configs&lt;/a&gt; by Neil Wilson at &lt;a href=&quot;https://www.brightbox.com/&quot;&gt;Brightbox&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-02-20 - &lt;a href=&quot;https://devblog.xero.com/building-sdks-for-the-future-b79ff726dfd6&quot;&gt;Building SDKs for the future&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/sidneyallen&quot;&gt;Sid Maestre (Xero)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-02-27 - &lt;a href=&quot;https://tech.medpeer.co.jp/entry/e2e-ie11&quot;&gt;Nuxt利用プロダクトでIE11と仲良くするためのE2E&lt;/a&gt; at &lt;a href=&quot;https://tech.medpeer.co.jp/&quot;&gt;Medpeer.co.jp Tech Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-02-29 - &lt;a href=&quot;https://link.springer.com/chapter/10.1007/978-3-030-41494-8_14&quot;&gt;Providing Support to IoT Devices Deployed in Disconnected Rural Environment (Conference paper)&lt;/a&gt; by Sergio Laso, Daniel Flores-Martín, Juan Luis HerreraCarlos, CanalJuan Manuel, MurilloJavier Berrocal&lt;/li&gt; 
 &lt;li&gt;2020-03-02 - &lt;a href=&quot;https://www.mokkapps.de/blog/how-to-generate-angular-and-spring-code-from-open-api-specification/&quot;&gt;How To Generate Angular &amp;amp; Spring Code From OpenAPI Specification&lt;/a&gt; by &lt;a href=&quot;https://www.mokkapps.de/&quot;&gt;Michael Hoffmann&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-03-02 - &lt;a href=&quot;https://gift-tech.co.jp/articles/openapi-generator-typescript&quot;&gt;OpenAPI Generator + TypeScript で始める自動生成の型に守られた豊かなクライアント生活&lt;/a&gt; by &lt;a href=&quot;https://gift-tech.co.jp/members/naokiioroi&quot;&gt;五百蔵 直樹&lt;/a&gt; at &lt;a href=&quot;https://gift-tech.co.jp/&quot;&gt;GiFT株式会社&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-03-10 - &lt;a href=&quot;https://speakerdeck.com/akihito_nakano/openapi-generator-meetup-number-1&quot;&gt;OpenAPI Generator Meetup #1&lt;/a&gt; by &lt;a href=&quot;https://github.com/ackintosh&quot;&gt;中野暁人&lt;/a&gt; at &lt;a href=&quot;https://openapi-generator-meetup.connpass.com/event/168187/&quot;&gt;OpenAPI Generator Meetup #1&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-03-15 - &lt;a href=&quot;https://k6.io/blog/load-testing-your-api-with-swagger-openapi-and-k6&quot;&gt;Load Testing Your API with Swagger/OpenAPI and k6&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-04-13 - &lt;a href=&quot;https://tech-blog.optim.co.jp/entry/2020/04/13/100000&quot;&gt;俺的【OAS】との向き合い方 (爆速でOpenAPIと友達になろう)&lt;/a&gt; in &lt;a href=&quot;https://tech-blog.optim.co.jp/&quot;&gt;OPTim Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-04-22 - &lt;a href=&quot;https://nordicapis.com/introduction-to-openapi-generator/&quot;&gt;Introduction to OpenAPI Generator&lt;/a&gt; by &lt;a href=&quot;https://nordicapis.com/author/sandovaleffect/&quot;&gt;Kristopher Sandoval&lt;/a&gt; in &lt;a href=&quot;https://nordicapis.com/&quot;&gt;Nordic APIs&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-04-27 - &lt;a href=&quot;https://medium.com/pdf-generator-api/how-we-use-open-api-v3-specification-to-auto-generate-api-documentation-code-snippets-and-clients-d127a3cea784&quot;&gt;How we use Open API v3 specification to auto-generate API documentation, code-snippets and clients&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@tanel.tahepold&quot;&gt;Tanel Tähepõld&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-05-09 - &lt;a href=&quot;https://qiita.com/kasa_le/items/97ca6a8dd4605695c25c&quot;&gt;OpenAPIでお手軽にモックAPIサーバーを動かす&lt;/a&gt; by &lt;a href=&quot;https://qiita.com/kasa_le&quot;&gt;Sachie Kamba&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-05-18 - &lt;a href=&quot;https://dev.to/alfonzjanfrithz/spring-boot-rest-with-openapi-3-59jm&quot;&gt;Spring Boot REST with OpenAPI 3&lt;/a&gt; by &lt;a href=&quot;https://dev.to/alfonzjanfrithz&quot;&gt;Alfonz Jan Frithz&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-05-19 - &lt;a href=&quot;https://www.youtube.com/watch?v=sIaXmR6xRAw&quot;&gt;Dead Simple APIs with Open API&lt;/a&gt; by &lt;a href=&quot;https://github.com/dragonmantank&quot;&gt;Chris Tankersley&lt;/a&gt; at &lt;a href=&quot;https://developer.nexmo.com/&quot;&gt;Nexmo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-05-22 - &lt;a href=&quot;https://dev.to/unhurried/typescript-rest-api-client-4in3&quot;&gt;TypeScript REST API Client&lt;/a&gt; by &lt;a href=&quot;https://dev.to/unhurried&quot;&gt;&quot;unhurried&quot;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-05-28 - &lt;a href=&quot;https://www.youtube.com/watch?v=agYVz6dzh1I&quot;&gt;【使用 lotify + Swagger 建置可共用的 LINE Notify bot】 - #NiJia @ Chatbot Developer Taiwan 第 #19 小聚&lt;/a&gt; by &lt;a href=&quot;https://www.youtube.com/channel/UCxeYUyZNnHmpX23YNF-ewvw&quot;&gt;Chatbot Developer Taiwan&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-05-28 - &lt;a href=&quot;https://www.youtube.com/watch?v=xexLvQqAhiA&quot;&gt;Building APIs with Laravel using OpenAPI&lt;/a&gt; by &lt;a href=&quot;https://github.com/dragonmantank&quot;&gt;Chris Tankersley&lt;/a&gt; at &lt;a href=&quot;https://laracon.eu/&quot;&gt;Laracon EU&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-06-12 - &lt;a href=&quot;https://ieeexplore.ieee.org/document/9274746&quot;&gt;Interoperability by construction: code generation for Arrowhead Clients&lt;/a&gt; by Michele Albano, Brian Nielsen at &lt;a href=&quot;https://ieeexplore.ieee.org/xpl/conhome/9274544/proceeding&quot;&gt;2020 IEEE Conference on Industrial Cyberphysical Systems (ICPS)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-06-23 - &lt;a href=&quot;https://www.cam-inc.co.jp/news/20200623&quot;&gt;新規サーバーアプリケーションにTypeScriptを採用してみた&lt;/a&gt; at &lt;a href=&quot;https://www.cam-inc.co.jp/news/tech-blog/&quot;&gt;CAM Tech Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-06-29 - &lt;a href=&quot;https://ieeexplore.ieee.org/document/9127353&quot;&gt;Artifact Abstract: Deployment of APIs on Android Mobile Devices and Microcontrollers&lt;/a&gt; by &lt;a href=&quot;https://ieeexplore.ieee.org/document/9127353/authors#authors&quot;&gt;Sergio Laso ; Marino Linaje ; Jose Garcia-Alonso ; Juan M. Murillo ; Javier Berrocal&lt;/a&gt; at &lt;a href=&quot;https://ieeexplore.ieee.org/xpl/conhome/9125449/proceeding&quot;&gt;2020 IEEE International Conference on Pervasive Computing and Communications (PerCom)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-07-07 - &lt;a href=&quot;https://blog.dreamfactory.com/5-best-api-documentation-tools/&quot;&gt;5 Best API Documentation Tools&lt;/a&gt; by Susanna Bouse at &lt;a href=&quot;https://blog.dreamfactory.com/&quot;&gt;DreamFactory Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-07-12 - &lt;a href=&quot;https://qiita.com/professor/items/4cbd04ec084d13057bc2&quot;&gt;Open API 3.0の定義からgolangのサーバコードのスケルトンを作成する&lt;/a&gt; by &lt;a href=&quot;https://qiita.com/professor&quot;&gt;@professor (Qiita Blog)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-07-20 - &lt;a href=&quot;https://www.datadoghq.com/blog/java-go-libraries/&quot;&gt;Datadog API client libraries now available for Java and Go&lt;/a&gt; by Jordan Obey at &lt;a href=&quot;https://www.datadoghq.com/blog&quot;&gt;Datadog Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-07-23 - &lt;a href=&quot;https://dev.to/no0law1/generate-client-sdk-for-net-core-using-open-api-2dgh&quot;&gt;Generate Client SDK for .NET Core using Open Api&lt;/a&gt; by &lt;a href=&quot;https://dev.to/no0law1&quot;&gt;Nuno Reis&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-07-26 - &lt;a href=&quot;https://qiita.com/gyamoto/items/eeeff81b6770487319ed&quot;&gt;Dartのhttp_interceptorライブラリを使うと配列のクエリパラメータが消えてしまう件の応急処置&lt;/a&gt; by &lt;a href=&quot;https://qiita.com/gyamoto&quot;&gt;@gyamoto&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-08-01 - &lt;a href=&quot;https://dev.to/martinmcwhorter/generate-angular-reactiveforms-from-swagger-openapi-35h9&quot;&gt;Generate Angular ReactiveForms from Swagger/OpenAPI&lt;/a&gt; by &lt;a href=&quot;https://dev.to/martinmcwhorter&quot;&gt;Martin McWhorter&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-08-03 - &lt;a href=&quot;https://medium.com/@everisBrasil/criando-bibliotecas-para-apis-restful-com-openapi-swagger-editor-e-openapi-generator-75349a6420fd&quot;&gt;Criando Bibliotecas para APIs RESTful com OpenAPI, Swagger Editor e OpenAPI Generator&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@everisBrasil&quot;&gt;everis Brasil (an NTT DATA Company)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-08-19 - &lt;a href=&quot;https://thinkit.co.jp/article/17704&quot;&gt;マイクロサービスを連携してみよう&lt;/a&gt; by &lt;a href=&quot;https://thinkit.co.jp/author/17588&quot;&gt;岡井 裕矢(おかい ゆうや)&lt;/a&gt;, &lt;a href=&quot;https://thinkit.co.jp/author/17705&quot;&gt;泉 勝(いずみ まさる)&lt;/a&gt; at &lt;a href=&quot;https://thinkit.co.jp/&quot;&gt;Think IT（シンクイット）&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-08-25 - &lt;a href=&quot;https://tech.smarthr.jp/entry/2020/08/25/135631&quot;&gt;OpenAPI Generator と TypeScript で型安全にフロントエンド開発をしている話&lt;/a&gt; at &lt;a href=&quot;https://tech.smarthr.jp/&quot;&gt;SmartHR Tech Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-09-10 - &lt;a href=&quot;https://www.instana.com/blog/introduction-to-openapi-with-instana/&quot;&gt;Introduction to OpenAPI with Instana&lt;/a&gt; by &lt;a href=&quot;https://www.instana.com/blog/author/cedricziel/&quot;&gt;Cedric Ziel&lt;/a&gt; at &lt;a href=&quot;https://www.instana.com/blog/&quot;&gt;Instana Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-09-17 - &lt;a href=&quot;https://medium.com/@ghufz.learn/generate-powershellsdk-using-openapi-generator-33b700891e33&quot;&gt;Generate PowerShellSDK using openapi-generator&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@ghufz.learn&quot;&gt;Ghufran Zahidi&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-09-24 - &lt;a href=&quot;https://medium.com/@sceleski/how-to-automate-api-code-generation-openapi-swagger-and-boost-productivity-1176a0056d8a&quot;&gt;How to automate API code generation (OpenAPI/Swagger) and boost productivity - Tutorial with React Native featuring TypeScript&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@sceleski&quot;&gt;Sanjin Celeski&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-09-25 - &lt;a href=&quot;https://medium.com/@pguso/generate-openapi-angular-client-8c9288e8bbd4&quot;&gt;Generate OpenAPI Angular Client&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@pguso&quot;&gt;Patric&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-10-24 - &lt;a href=&quot;https://www.josephguadagno.net/2020/10/24/working-with-microsoft-identity-react-native-client&quot;&gt;Working with Microsoft Identity - React Native Client&lt;/a&gt; by &lt;a href=&quot;https://www.josephguadagno.net/&quot;&gt;Joseph Guadagno&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-10-31 - &lt;a href=&quot;https://www.youtube.com/watch?v=J4JHLESAiFk&quot;&gt;[B2] OpenAPI Specification으로 타입-세이프하게 API 개발하기: 희망편 VS 절망편&lt;/a&gt; by 최태건 at &lt;a href=&quot;https://2020.feconf.kr/&quot;&gt;FEConf 2020&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-11-05 - &lt;a href=&quot;https://www.massiveart.com/blog/automated-rest-api-code-generation-wie-it-systeme-miteinander-sprechen&quot;&gt;Automated REST-Api Code Generation: Wie IT-Systeme miteinander sprechen&lt;/a&gt; by Stefan Rottensteiner at &lt;a href=&quot;https://www.massiveart.com/blog&quot;&gt;MASSIVE ART Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-12-01 - &lt;a href=&quot;https://qiita.com/saki-engineering/items/b20d8b6074c4da9664a5&quot;&gt;OpenAPI GeneratorでGoのAPIサーバー/クライアントコードを自動生成する&lt;/a&gt; by &lt;a href=&quot;https://qiita.com/saki-engineering&quot;&gt;@saki-engineering&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-12-04 - &lt;a href=&quot;https://www.youtube.com/watch?v=7Lke9dHRqT0&quot;&gt;Scaling the Test Coverage of OpenAPI Generator for 30+ Programming Languages&lt;/a&gt; by &lt;a href=&quot;https://github.com/wing328&quot;&gt;William Cheng&lt;/a&gt; at &lt;a href=&quot;https://events.linuxfoundation.org/archive/2020/open-source-summit-japan/&quot;&gt;Open Source Summit Japan + Automotive Linux Summit 2020&lt;/a&gt; (&lt;a href=&quot;https://speakerdeck.com/wing328/scaling-the-test-coverage-of-openapi-generator-for-30-plus-programming-languages&quot;&gt;Slides&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;2020-12-09 - &lt;a href=&quot;https://qiita.com/yoshifujiT/items/905c18700ede23f40840&quot;&gt;プロジェクトにOpenAPI Generatorで自動生成された型付きAPI Clientを導入した話&lt;/a&gt; by &lt;a href=&quot;https://github.com/yoshifujiT&quot;&gt;@yoshifujiT&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2020-12-15 - &lt;a href=&quot;https://techblog.yahoo.co.jp/entry/2020121530052952/&quot;&gt;Next.js + NestJS + GraphQLで変化に追従するフロントエンドへ 〜 ショッピングクーポンの事例紹介&lt;/a&gt; by &lt;a href=&quot;https://github.com/ogugu9&quot;&gt;小倉 陸&lt;/a&gt; at &lt;a href=&quot;https://techblog.yahoo.co.jp/&quot;&gt;Yahoo! JAPAN Tech Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-01-08 - &lt;a href=&quot;https://www.nginx.com/blog/hello-new-api-part-1/&quot;&gt;Hello, New API – Part 1&lt;/a&gt; by &lt;a href=&quot;https://www.nginx.com/people/jeremy-schulman/&quot;&gt;Jeremy Schulman&lt;/a&gt; at &lt;a href=&quot;https://www.mlb.com&quot;&gt;Major League Baseball&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-01-18 - &lt;a href=&quot;https://codezine.jp/article/detail/13406?p=2&quot;&gt;「アプリ開発あるある」を疑うことから始まった、API Clientコードの自動生成【デブスト2020】&lt;/a&gt; by &lt;a href=&quot;https://codezine.jp/author/1&quot;&gt;CodeZine編集部&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-02-05 - &lt;a href=&quot;https://blog.viadee.de/en/rest-api-roundtrip&quot;&gt;REST-API-Roundtrip with SpringDoc and OpenAPI Generator&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/benklatt&quot;&gt;Benjamin Klatt&lt;/a&gt; at &lt;a href=&quot;https://www.viadee.de/en/&quot;&gt;viadee&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-02-17 - &lt;a href=&quot;https://medium.com/nerd-for-tech/rest-api-roundtrip-with-springdoc-and-openapi-generator-30bd27ccf698&quot;&gt;REST-API-Roundtrip with SpringDoc and OpenAPI Generator&lt;/a&gt; by &lt;a href=&quot;https://cloud-viadee.medium.com/&quot;&gt;cloud @viadee&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-03-08 - &lt;a href=&quot;https://blog.csdn.net/u013019701/article/details/114531975&quot;&gt;OpenAPI Generator 工具的躺坑尝试&lt;/a&gt; by &lt;a href=&quot;https://blog.csdn.net/u013019701&quot;&gt;独家雨天&lt;/a&gt; at &lt;a href=&quot;https://blog.csdn.net/&quot;&gt;CSDN官方博客&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-03-16 - &lt;a href=&quot;https://cloud.tencent.com/developer/article/1802704&quot;&gt;如何基于 Swagger 使用 OpenAPI Generator 生成 JMeter 脚本？&lt;/a&gt; by &lt;a href=&quot;https://cloud.tencent.com/developer/user/5836255&quot;&gt;高楼Zee&lt;/a&gt; at &lt;a href=&quot;https://cloud.tencent.com/developer/column&quot;&gt;腾讯云专栏&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-03-24 - &lt;a href=&quot;https://zenn.dev/takepepe/articles/openapi-generator-cli-ts&quot;&gt;openapi-generator-cli による TypeScript 型定義&lt;/a&gt; by &lt;a href=&quot;https://zenn.dev/takepepe&quot;&gt;Takefumi Yoshii&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-03-28 - &lt;a href=&quot;https://dev.to/arnaudcortisse/trying-out-nestjs-part-4-generate-typescript-clients-from-openapi-documents-28mk&quot;&gt;Trying out NestJS part 4: Generate Typescript clients from OpenAPI documents&lt;/a&gt; by &lt;a href=&quot;https://dev.to/arnaudcortisse&quot;&gt;Arnaud Cortisse&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-03-31 - &lt;a href=&quot;https://www.baeldung.com/java-openapi-generator-server&quot;&gt;Open API Server Implementation Using OpenAPI Generator&lt;/a&gt; at &lt;a href=&quot;https://www.baeldung.com/&quot;&gt;Baeldung&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-03-31 - &lt;a href=&quot;https://www.1ju.org/article/java-openapi-generator-server&quot;&gt;使用OpenAPI Generator實現Open API Server&lt;/a&gt; at &lt;a href=&quot;https://www.1ju.org/&quot;&gt;億聚網&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-04-19 - &lt;a href=&quot;https://www.twilio.com/blog/introducing-twilio-open-api-specification-beta&quot;&gt;Introducing Twilio’s OpenAPI Specification Beta&lt;/a&gt; by &lt;a href=&quot;https://www.twilio.com/blog/author/gpj&quot;&gt;GARETH PAUL JONES&lt;/a&gt; at &lt;a href=&quot;https://www.twilio.com/blog&quot;&gt;Twilio Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-04-22 - &lt;a href=&quot;https://medium.com/unibuddy-technology-blog/leveraging-openapi-strengths-in-a-micro-service-environment-3d7f9e7c26ff&quot;&gt;Leveraging OpenApi strengths in a Micro-Service environment&lt;/a&gt; by Nicolas Jellab at &lt;a href=&quot;https://medium.com/unibuddy-technology-blog&quot;&gt;Unibuddy Technology Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-04-27 - &lt;a href=&quot;https://speakerdeck.com/wing328/from-zero-to-publishing-powershell-api-clients-in-powershell-gallery-within-minutes&quot;&gt;From zero to publishing PowerShell API clients in PowerShell Gallery within minutes&lt;/a&gt; by &lt;a href=&quot;https://github.com/wing328&quot;&gt;William Cheng&lt;/a&gt; at &lt;a href=&quot;https://events.devopscollective.org/event/powershell-devops-global-summit-2021/&quot;&gt;PowerShell + DevOps Global Summit 2021&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-05-31 - &lt;a href=&quot;https://aakira.app/blog/2021/05/flutter-open-api/&quot;&gt;FlutterでOpen Api Generator(Swagger)を使う&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/_a_akira&quot;&gt;AAkira&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-06-22 - &lt;a href=&quot;https://dzone.com/articles/rest-api-documentation-and-client-generation-with&quot;&gt;Rest API Documentation and Client Generation With OpenAPI&lt;/a&gt; by &lt;a href=&quot;https://dzone.com/users/1011797/prasanthnath.g@gmail.com.html&quot;&gt;Prasanth Gullapalli&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-07-16 - &lt;a href=&quot;https://www.youtube.com/watch?v=YrrKQHxLPpQ&quot;&gt;銀行事業のサーバーサイド開発について / LINE 京都開発室 エンジニア採用説明会&lt;/a&gt; by 野田誠人, Robert Mitchell&lt;/li&gt; 
 &lt;li&gt;2021-07-19 - &lt;a href=&quot;https://sylhare.github.io/2021/07/19/Openapi-swagger-codegen-with-kotlin.html&quot;&gt;OpenAPI code generation with kotlin&lt;/a&gt; by &lt;a href=&quot;https://github.com/sylhare&quot;&gt;sylhare&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-07-29 - &lt;a href=&quot;https://dzone.com/articles/how-to-rewrite-a-huge-code-base&quot;&gt;How To Rewrite a Huge Codebase&lt;/a&gt; by &lt;a href=&quot;https://dzone.com/users/4565446/publiusovidius.html&quot;&gt;Curtis Poe&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-08-21 - &lt;a href=&quot;https://medium.com/@flowsquad/generating-client-apis-using-swagger-part-1-2d46f13f5e92&quot;&gt;Generating Client APIs using Swagger Part 1&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@flowsquad&quot;&gt;FlowSquad.io&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-09-11 - &lt;a href=&quot;https://docs.aws.amazon.com/parallelcluster/latest/ug/api-reference-v3.html&quot;&gt;Invoking AWS ParallelCluster API&lt;/a&gt; at &lt;a href=&quot;https://docs.aws.amazon.com/parallelcluster/latest/ug/api-reference-v3.html&quot;&gt;AWS ParallelCluster API official documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-09-20 - &lt;a href=&quot;https://www.youtube.com/watch?v=s2zMtwd5klg&quot;&gt;OpenAPI Generator - The Babel Fish of the API World&lt;/a&gt; by &lt;a href=&quot;https://github.com/cliffano&quot;&gt;Cliffano Subagio (Principal Engineer at Shine Solutions)&lt;/a&gt; at &lt;a href=&quot;https://www.apidays.global/australia2021/&quot;&gt;Apidays LIVE Australia 2021&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-10-02 - &lt;a href=&quot;https://hackernoon.com/how-to-write-fewer-lines-of-code-with-the-openapi-generator&quot;&gt;How to Write Fewer Lines of Code with the OpenAPI Generator&lt;/a&gt; by &lt;a href=&quot;https://hackernoon.com/u/alphamikle&quot;&gt;Mikhail Alfa&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-10-12 - &lt;a href=&quot;https://www.youtube.com/watch?v=9hEsNBSqTFk&quot;&gt;OpenAPI Generator : 4000 étoiles sur GitHub et des spaghettis&lt;/a&gt; by &lt;a href=&quot;https://github.com/jmini&quot;&gt;Jérémie Bresson&lt;/a&gt; at &lt;a href=&quot;https://cfp.devoxx.fr/2021/speaker/jeremie_bresson&quot;&gt;Devoxx FR 2021&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-10-17 - &lt;a href=&quot;https://richardwillis.info/blog/generate-a-type-script-http-client-from-an-open-api-spec-in-dot-net-5&quot;&gt;Generate a TypeScript HTTP Client From An OpenAPI Spec In DotNET 5&lt;/a&gt; by &lt;a href=&quot;https://github.com/badsyntax&quot;&gt;Richard Willis&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-11-06 - &lt;a href=&quot;https://zenn.dev/woo_noo/articles/5cb09f8e2899ae782ad1&quot;&gt;スタートアップの開発で意識したこと&lt;/a&gt; by &lt;a href=&quot;https://zenn.dev/woo_noo&quot;&gt;woo-noo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2021-11-09 - &lt;a href=&quot;https://apexlabs.ai/post/effective-software-development-using-openapi-generator&quot;&gt;Effective Software Development using OpenAPI Generator&lt;/a&gt; by Ajil Oomme&lt;/li&gt; 
 &lt;li&gt;2021-12-07 - &lt;a href=&quot;https://betterprogramming.pub/4-use-cases-of-openapi-which-are-good-to-know-1a041f4ad71e&quot;&gt;An Introduction to OpenAPI&lt;/a&gt; by &lt;a href=&quot;https://naamanhirschfeld.medium.com/&quot;&gt;Na&#39;aman Hirschfeld&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-01-02 - &lt;a href=&quot;https://arxiv.org/abs/2201.00270&quot;&gt;Towards a secure API client generator for IoT devices&lt;/a&gt; by Anders Aaen Springborg, Martin Kaldahl Andersen, Kaare Holland Hattel, Michele Albano&lt;/li&gt; 
 &lt;li&gt;2022-02-02 - &lt;a href=&quot;https://www.youtube.com/watch?v=kPW7ccu9Yvk&quot;&gt;Use OpenApi generator to share your models between Flutter and your backend&lt;/a&gt; by &lt;a href=&quot;https://feb2022.fluttervikings.com/speakers/guillaume_bernos&quot;&gt;Guillaume Bernos&lt;/a&gt; at &lt;a href=&quot;https://feb2022.fluttervikings.com/&quot;&gt;Flutter Vikings Conference 2022 (Hybrid)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-03-15 - &lt;a href=&quot;https://qiita.com/yuji38kwmt/items/824d74d4889055ab37d8&quot;&gt;OpenAPI Specでハイフン区切りのEnum値をOpenAPI Generatorで出力すると、ハイフン区切りのまま出力される&lt;/a&gt; by &lt;a href=&quot;https://qiita.com/yuji38kwmt&quot;&gt;yuji38kwmt&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-04-01 - &lt;a href=&quot;https://techblog.zozo.com/entry/coexistence-of-openapi-and-spring&quot;&gt;OpenAPI Generatorのコード生成とSpring Frameworkのカスタムデータバインディングを共存させる&lt;/a&gt; in &lt;a href=&quot;https://techblog.zozo.com/&quot;&gt;ZOZO Tech Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-04-06 - &lt;a href=&quot;https://apexlabs.ai/post/openapi-generator&quot;&gt;Effective Software Development using OpenAPI Generator&lt;/a&gt; by Ajil Oommen (Senior Flutter Developer)&lt;/li&gt; 
 &lt;li&gt;2022-05-13 - &lt;a href=&quot;https://www.youtube.com/watch?v=XC8oVn_efTw&quot;&gt;A Path From an API To Client Libraries&lt;/a&gt; by &lt;a href=&quot;https://www.devoxx.co.uk/talk/?id=11211&quot;&gt;Filip Srnec&lt;/a&gt; at Infobip&lt;/li&gt; 
 &lt;li&gt;2022-06-01 - &lt;a href=&quot;https://medium.com/xgeeks/api-first-using-openapi-and-spring-boot-2602c04bb0d3&quot;&gt;API First, using OpenAPI and Spring Boot&lt;/a&gt; by &lt;a href=&quot;https://estrazulas.medium.com/&quot;&gt;Micael Estrázulas Vianna&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-06-10 - &lt;a href=&quot;https://www.propelauth.com/post/autogenerating-clients-with-fastapi-and-github-actions&quot;&gt;Autogenerating Clients with FastAPI and Github Actions&lt;/a&gt; by &lt;a href=&quot;https://www.propelauth.com/author/andrew&quot;&gt;Andrew Israel&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-06-12 - &lt;a href=&quot;https://medium.com/geekculture/mustache-templates-with-openapi-specs-f24711c67dec&quot;&gt;Mustache templates with OpenAPI specs&lt;/a&gt; by &lt;a href=&quot;https://github.com/gcatanese&quot;&gt;Beppe Catanese&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-07-01 - &lt;a href=&quot;https://huongdanjava.com/generate-api-contract-using-openapi-generator-maven-plugin.html&quot;&gt;Generate API contract using OpenAPI Generator Maven plugin&lt;/a&gt; by &lt;a href=&quot;https://huongdanjava.com/&quot;&gt;Khanh Nguyen&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-07-22 - &lt;a href=&quot;https://blog.roccoshi.top/2022/java/openapi-generator%E7%9A%84%E4%BD%BF%E7%94%A8/&quot;&gt;使用OpenAPI Generator Maven plugin开发api优先的java客户端和服务端代码&lt;/a&gt; by &lt;a href=&quot;https://github.com/Lincest&quot;&gt;Lincest&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-08-01 - &lt;a href=&quot;https://blog.tjoyal.dev/etsy-open-api-v3/&quot;&gt;Tutorial: Etsy Open API v3 (ruby)&lt;/a&gt; by &lt;a href=&quot;https://github.com/tjoyal&quot;&gt;Thierry Joyal&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-09-03 - &lt;a href=&quot;https://blog.kevinhu.me/2022/09/03/03-openapi-generator/&quot;&gt;OpenAPI Generator For Go Web Development&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/Oldgunix&quot;&gt;Kevin Hu&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-10-01 - &lt;a href=&quot;https://nainaistar.hatenablog.com/entry/2022/10/03/120000&quot;&gt;OpenAPI Generatorをカスタマイズしたコードを生成する（Swagger Codegenとほぼ同じ）&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/nainaistar&quot;&gt;きり丸&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-10-21 - &lt;a href=&quot;https://zenn.dev/msksgm/articles/20221021-kotlin-spring-openapi-generator&quot;&gt;Kotlin（Spring Boot）の API を OpenAPI Generator で自動生成&lt;/a&gt; by &lt;a href=&quot;https://zenn.dev/msksgm&quot;&gt;msksgm&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-10-26 - &lt;a href=&quot;https://www.youtube.com/watch?v=_s_if69t2iQ&quot;&gt;Quarkus Insights #106: Quarkiverse Extension Spotlight: OpenApi Generator&lt;/a&gt; by &lt;a href=&quot;https://www.youtube.com/c/Quarkusio&quot;&gt;Quarkusio&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-11-28 - &lt;a href=&quot;https://tmsvr.com/openapi-code-generation-for-rest-apis/&quot;&gt;The REST API implementation flow&lt;/a&gt; by &lt;a href=&quot;https://tmsvr.com/author/imre/&quot;&gt;Imre Tömösvári&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2022-12-13 - &lt;a href=&quot;https://boottechnologies-ci.medium.com/api-first-with-spring-webflux-and-openapi-generator-38b7804c4ed4&quot;&gt;API-First with Spring WebFlux and OpenAPI Generator&lt;/a&gt; by &lt;a href=&quot;https://boottechnologies-ci.medium.com/&quot;&gt;Eric Anicet&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2023-01-06 - &lt;a href=&quot;https://medium.com/helidon/major-improvements-with-helidon-and-openapi-f76a0951508e&quot;&gt;Major Improvements with Helidon and OpenAPI&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@tquinno600&quot;&gt;Tim Quinn&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2023-02-02 - &lt;a href=&quot;https://lengrand.fr/replacing-postman-in-seconds-with-the-jetbrains-http-client/&quot;&gt;Replacing Postman with the Jetbrains HTTP Client&lt;/a&gt; by &lt;a href=&quot;https://github.com/jlengrand&quot;&gt;julien Lengrand-Lambert&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2023-03-15 - &lt;a href=&quot;https://techblog.zozo.com/entry/how-to-write-openapi-for-openapi-generator&quot;&gt;OpenAPI Generatorに適したOpenAPIの書き方&lt;/a&gt; by &lt;a href=&quot;https://techblog.zozo.com/&quot;&gt;ZOZO Tech Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2023-03-19 - &lt;a href=&quot;https://link.springer.com/chapter/10.1007/978-3-031-26507-5_10&quot;&gt;EXOGEM: Extending OpenAPI Generator for Monitoring of RESTful APIs&lt;/a&gt; by Daniel Friis Holtebo, Jannik Lucas Sommer, Magnus Mølgaard Lund, Alessandro Tibo, Junior Dongo &amp;amp; Michele Albano at &quot;ICSOC 2022: Service-Oriented Computing – ICSOC 2022 Workshops&quot;&lt;/li&gt; 
 &lt;li&gt;2023-03-28 - &lt;a href=&quot;https://www.linkedin.com/pulse/api-first-design-openapi-generator-jonathan-manera/&quot;&gt;API-First Design with OpenAPI Generator&lt;/a&gt; by &lt;a href=&quot;https://www.linkedin.com/in/manerajona/&quot;&gt;Jonathan Manera&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2023-03-28 - &lt;a href=&quot;https://zenn.dev/msksgm/books/implementing-server-side-kotlin-development&quot;&gt;ハンズオンで学ぶサーバーサイド Kotlin（Spring Boot&amp;amp;Arrow&amp;amp;OpenAPI Generator）v1.0.1&lt;/a&gt; by &lt;a href=&quot;https://zenn.dev/msksgm&quot;&gt;msk&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2023-04-01 - &lt;a href=&quot;https://testingboss.com/blog/openapi-client-generation/&quot;&gt;OpenAPI Client Code Generation&lt;/a&gt; by Kwo Ding&lt;/li&gt; 
 &lt;li&gt;2023-04-27 - [Create an Angular Client using OpenAPI Specifications](Create an Angular Client using OpenAPI Specifications) by &lt;a href=&quot;https://pguso.medium.com/&quot;&gt;Patric&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2023-05-16 - &lt;a href=&quot;https://www.adyen.com/blog/adyen-java-library&quot;&gt;Adyen for Java developers&lt;/a&gt; by &lt;a href=&quot;https://github.com/gcatanese&quot;&gt;Beppe Catanese, Developer Advocate, Adyen&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2023-05-18 - &lt;a href=&quot;https://blog.51cto.com/u_15181572/6294974&quot;&gt;如何基于 Swagger 使用 OpenAPI Generator 生成 JMeter 脚本？&lt;/a&gt; by &lt;a href=&quot;https://blog.51cto.com/u_15181572&quot;&gt;高楼（Zee)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2023-06-28 - &lt;a href=&quot;https://huongdanjava.com/generate-api-contract-using-openapi-generator-maven-plugin.html&quot;&gt;Generate API contract using OpenAPI Generator Maven plugin&lt;/a&gt; by &lt;a href=&quot;https://huongdanjava.com/&quot;&gt;Khanh Nguyen&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2023-06-30 - &lt;a href=&quot;https://medium.com/@ramavathvinayak/generate-client-sdks-with-openapi-generator-in-springboot-f9f012e73c0b&quot;&gt;Generate Client SDKs with OpenApi Generator in Springboot&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@ramavathvinayak&quot;&gt;Vinayak Ramavath&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2023-12-10 - &lt;a href=&quot;https://www.youtube.com/watch?v=CbNwKVV5LRM&quot;&gt;UnityでOpenAPI Generatorを使う&lt;/a&gt; by &lt;a href=&quot;https://www.youtube.com/@souptori8417&quot;&gt;Soup Tori&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2024-01-24 - &lt;a href=&quot;https://www.youtube.com/watch?v=0jhONfBrcKw&quot;&gt;Comment générer des stubs wiremock avec openapi generator&lt;/a&gt; by &lt;a href=&quot;https://github.com/acouvreur&quot;&gt;Alexis Couvreur&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2024-03-04 - &lt;a href=&quot;https://www.pullrequest.com/blog/generating-typescript-types-with-openapi-for-rest-api-consumption/&quot;&gt;Generating TypeScript Types with OpenAPI for REST API Consumption&lt;/a&gt; by &lt;a href=&quot;https://www.pullrequest.com/&quot;&gt;PullRequest&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2024-03-07 - &lt;a href=&quot;https://medium.com/@gfox1984/fully-typed-web-apps-with-openapi-part-1-595d55766670&quot;&gt;Fully typed Web Apps with OpenAPI (Part 1)&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@gfox1984&quot;&gt;Guillaume Renard&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2024-03-08 - &lt;a href=&quot;https://fortee.jp/phperkaigi-2024/proposal/9e2e6c38-d078-4efa-99b4-83ebf9033b34&quot;&gt;Laravel OpenAPIによる &quot;辛くない&quot; スキーマ駆動開発&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/KentarouTakeda&quot;&gt;KentarouTakeda&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2024-04-04 - &lt;a href=&quot;https://www.shuttle.dev/blog/2024/04/04/using-openapi-rust&quot;&gt;Working with OpenAPI using Rust&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/joshmo_dev&quot;&gt;Joshua Mo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2024-04-08 - &lt;a href=&quot;https://medium.com/javarevisited/implement-api-first-strategy-with-openapi-generator-plugin-e4bbe7f0d778&quot;&gt;Implement API first strategy with OpenAPI generator plugin&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@wirelesser&quot;&gt;Rui Zhou&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2024-05-06 - &lt;a href=&quot;https://www.javacodegeeks.com/openapi-generator-custom-templates.html&quot;&gt;OpenAPI Generator Custom Templates&lt;/a&gt; by &lt;a href=&quot;https://www.javacodegeeks.com/author/mary-zheng&quot;&gt;Mary Zheng&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2025-02-09 - &lt;a href=&quot;https://medium.com/@jugurtha.aitoufella/custom-validation-with-openapigenerator-and-spring-boot-3-34a656e815c8&quot;&gt;Custom validation with OpenApiGenerator and Spring Boot 3&lt;/a&gt; by &lt;a href=&quot;https://medium.com/@jugurtha.aitoufella&quot;&gt;Jugurtha Aitoufella&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;2025-02-20 - &lt;a href=&quot;https://www.youtube.com/watch?v=-B33pQnGQUI&quot;&gt;Optimizing API Integration in a Large React Application Using OpenAPI Generator&lt;/a&gt; by Stefano Marzo&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;6 - About Us&lt;/a&gt;&lt;/h2&gt; 
&lt;p&gt;What&#39;s the design philosophy or principle behind OpenAPI Generator?&lt;/p&gt; 
&lt;p&gt;We focus on developer experience. The generators should produce code, config, documentation, and more that are easily understandable and consumable by users. We focused on simple use cases to start with (bottom-up approach). Since then the project and the community have grown a lot: 600k weekly downloads via NPM CLI wrapper, 30M downloads via openapi-generator-cli docker image just to highlight a few. We&#39;ve gradually supported more features (e.g. oneOf, anyOf introduced in OpenAPI 3.0) in various generators and we will continue this approach to deliver something based on our understanding of user demand and what they want, and continue to add support of new features introduced in OpenAPI specification (such as v3.1 and future versions of the OpenAPI specification).&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;6.1 - OpenAPI Generator Core Team&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;OpenAPI Generator core team members are contributors who have been making significant contributions (review issues, fix bugs, make enhancements, etc) to the project on a regular basis.&lt;/p&gt; 
&lt;h4&gt;Core Team Members&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/wing328&quot;&gt;@wing328&lt;/a&gt; (2015/07) &lt;a href=&quot;https://www.patreon.com/wing328&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jimschubert&quot;&gt;@jimschubert&lt;/a&gt; (2016/05) &lt;a href=&quot;https://www.patreon.com/jimschubert&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cbornet&quot;&gt;@cbornet&lt;/a&gt; (2016/05)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jmini&quot;&gt;@jmini&lt;/a&gt; (2018/04) &lt;a href=&quot;https://www.patreon.com/jmini&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/etherealjoy&quot;&gt;@etherealjoy&lt;/a&gt; (2019/06)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;❤️ = Link to support the contributor directly&lt;/p&gt; 
&lt;h4&gt;Template Creator&lt;/h4&gt; 
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Embedded templates are only supported in &lt;em&gt;Mustache&lt;/em&gt; format. Support for all other formats is experimental and subject to change at any time.&lt;/p&gt; 
&lt;p&gt;Here is a list of template creators:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;API Clients: 
  &lt;ul&gt; 
   &lt;li&gt;Ada: @stcarrez&lt;/li&gt; 
   &lt;li&gt;Apex: @asnelling&lt;/li&gt; 
   &lt;li&gt;Bash: @bkryza&lt;/li&gt; 
   &lt;li&gt;C: @PowerOfCreation @zhemant &lt;a href=&quot;https://www.patreon.com/zhemant&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;C++ Httplib: @rajvesh&lt;/li&gt; 
   &lt;li&gt;C++ Oat++: @Kraust&lt;/li&gt; 
   &lt;li&gt;C++ REST: @Danielku15&lt;/li&gt; 
   &lt;li&gt;C++ Tiny: @AndersSpringborg @kaareHH @michelealbano @mkakbas&lt;/li&gt; 
   &lt;li&gt;C++ UE4: @Kahncode&lt;/li&gt; 
   &lt;li&gt;C# (.NET 2.0): @who&lt;/li&gt; 
   &lt;li&gt;C# (.NET Standard 1.3 ): @Gronsak&lt;/li&gt; 
   &lt;li&gt;C# (.NET 4.5 refactored): @jimschubert &lt;a href=&quot;https://www.patreon.com/jimschubert&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;C# (GenericHost): @devhl-labs&lt;/li&gt; 
   &lt;li&gt;C# (HttpClient): @Blackclaws&lt;/li&gt; 
   &lt;li&gt;Clojure: @xhh&lt;/li&gt; 
   &lt;li&gt;Crystal: @wing328&lt;/li&gt; 
   &lt;li&gt;Dart: @yissachar&lt;/li&gt; 
   &lt;li&gt;Dart (refactor): @joernahrens&lt;/li&gt; 
   &lt;li&gt;Dart 2: @swipesight&lt;/li&gt; 
   &lt;li&gt;Dart (Jaguar): @jaumard&lt;/li&gt; 
   &lt;li&gt;Dart (Dio): @josh-burton&lt;/li&gt; 
   &lt;li&gt;Elixir: @niku&lt;/li&gt; 
   &lt;li&gt;Elm: @eriktim&lt;/li&gt; 
   &lt;li&gt;Eiffel: @jvelilla&lt;/li&gt; 
   &lt;li&gt;Erlang: @tsloughter&lt;/li&gt; 
   &lt;li&gt;Erlang (PropEr): @jfacorro @robertoaloi&lt;/li&gt; 
   &lt;li&gt;Groovy: @victorgit&lt;/li&gt; 
   &lt;li&gt;Go: @wing328 &lt;a href=&quot;https://www.patreon.com/wing328&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Go (rewritten in 2.3.0): @antihax&lt;/li&gt; 
   &lt;li&gt;Godot (GDScript): @Goutte &lt;a href=&quot;https://liberapay.com/Goutte&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Haskell (http-client): @jonschoning&lt;/li&gt; 
   &lt;li&gt;Java (Feign): @davidkiss&lt;/li&gt; 
   &lt;li&gt;Java (Retrofit): @0legg&lt;/li&gt; 
   &lt;li&gt;Java (Retrofit2): @emilianobonassi&lt;/li&gt; 
   &lt;li&gt;Java (Jersey2): @xhh&lt;/li&gt; 
   &lt;li&gt;Java (okhttp-gson): @xhh&lt;/li&gt; 
   &lt;li&gt;Java (RestTemplate): @nbruno&lt;/li&gt; 
   &lt;li&gt;Java (Spring 5 WebClient): @daonomic&lt;/li&gt; 
   &lt;li&gt;Java (Spring 6 RestClient): @nicklas2751&lt;/li&gt; 
   &lt;li&gt;Java (RESTEasy): @gayathrigs&lt;/li&gt; 
   &lt;li&gt;Java (Vertx): @lopesmcc&lt;/li&gt; 
   &lt;li&gt;Java (Google APIs Client Library): @charlescapps&lt;/li&gt; 
   &lt;li&gt;Java (Rest-assured): @viclovsky&lt;/li&gt; 
   &lt;li&gt;Java (Java 11 Native HTTP client): @bbdouglas&lt;/li&gt; 
   &lt;li&gt;Java (Apache HttpClient 5.x): @harrywhite4 @andrevegas&lt;/li&gt; 
   &lt;li&gt;Java (Helidon): @spericas @tjquinno @tvallin&lt;/li&gt; 
   &lt;li&gt;Javascript/NodeJS: @jfiala&lt;/li&gt; 
   &lt;li&gt;JavaScript (Apollo DataSource): @erithmetic&lt;/li&gt; 
   &lt;li&gt;JavaScript (Closure-annotated Angular) @achew22&lt;/li&gt; 
   &lt;li&gt;JavaScript (Flow types) @jaypea&lt;/li&gt; 
   &lt;li&gt;Jetbrains HTTP Client : @jlengrand&lt;/li&gt; 
   &lt;li&gt;JMeter: @davidkiss&lt;/li&gt; 
   &lt;li&gt;Julia: @tanmaykm&lt;/li&gt; 
   &lt;li&gt;Kotlin: @jimschubert &lt;a href=&quot;https://www.patreon.com/jimschubert&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Kotlin (MultiPlatform): @andrewemery&lt;/li&gt; 
   &lt;li&gt;Kotlin (Volley): @alisters&lt;/li&gt; 
   &lt;li&gt;Kotlin (jvm-spring-webclient): @stefankoppier&lt;/li&gt; 
   &lt;li&gt;Kotlin (jvm-spring-restclient): @stefankoppier&lt;/li&gt; 
   &lt;li&gt;Lua: @daurnimator&lt;/li&gt; 
   &lt;li&gt;N4JS: @mmews-n4&lt;/li&gt; 
   &lt;li&gt;Nim: @hokamoto&lt;/li&gt; 
   &lt;li&gt;OCaml: @cgensoul&lt;/li&gt; 
   &lt;li&gt;Perl: @wing328 &lt;a href=&quot;https://www.patreon.com/wing328&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;PHP (Guzzle): @baartosz&lt;/li&gt; 
   &lt;li&gt;PHP (with Data Transfer): @Articus&lt;/li&gt; 
   &lt;li&gt;PowerShell: @beatcracker&lt;/li&gt; 
   &lt;li&gt;PowerShell (refactored in 5.0.0): @wing328&lt;/li&gt; 
   &lt;li&gt;Python: @spacether [❤️][spacether sponsorship]&lt;/li&gt; 
   &lt;li&gt;Python-Experimental: @spacether [❤️][spacether sponsorship]&lt;/li&gt; 
   &lt;li&gt;Python (refactored in 7.0.0): @wing328&lt;/li&gt; 
   &lt;li&gt;R: @ramnov&lt;/li&gt; 
   &lt;li&gt;Ruby (Faraday): @meganemura @dkliban&lt;/li&gt; 
   &lt;li&gt;Ruby (HTTPX): @honeyryderchuck&lt;/li&gt; 
   &lt;li&gt;Rust: @farcaller&lt;/li&gt; 
   &lt;li&gt;Rust (rust-server): @metaswitch&lt;/li&gt; 
   &lt;li&gt;Scala (scalaz &amp;amp; http4s): @tbrown1979&lt;/li&gt; 
   &lt;li&gt;Scala (Akka): @cchafer&lt;/li&gt; 
   &lt;li&gt;Scala (sttp): @chameleon82&lt;/li&gt; 
   &lt;li&gt;Scala (sttp4): @flsh86&lt;/li&gt; 
   &lt;li&gt;Scala (scala-sttp4-jsoniter): @lbialy&lt;/li&gt; 
   &lt;li&gt;Scala (Pekko): @mickaelmagniez&lt;/li&gt; 
   &lt;li&gt;Scala (http4s): @JennyLeahy&lt;/li&gt; 
   &lt;li&gt;Swift: @tkqubo&lt;/li&gt; 
   &lt;li&gt;Swift 3: @hexelon&lt;/li&gt; 
   &lt;li&gt;Swift 4: @ehyche&lt;/li&gt; 
   &lt;li&gt;Swift 5: @4brunu&lt;/li&gt; 
   &lt;li&gt;Swift 6: @4brunu&lt;/li&gt; 
   &lt;li&gt;Swift Combine: @dydus0x14&lt;/li&gt; 
   &lt;li&gt;Terraform: @jasondamour&lt;/li&gt; 
   &lt;li&gt;TypeScript (Angular1): @mhardorf&lt;/li&gt; 
   &lt;li&gt;TypeScript (Angular2): @roni-frantchi&lt;/li&gt; 
   &lt;li&gt;TypeScript (Angular6): @akehir&lt;/li&gt; 
   &lt;li&gt;TypeScript (Angular7): @topce&lt;/li&gt; 
   &lt;li&gt;TypeScript (Axios): @nicokoenig&lt;/li&gt; 
   &lt;li&gt;TypeScript (Fetch): @leonyu&lt;/li&gt; 
   &lt;li&gt;TypeScript (Inversify): @gualtierim&lt;/li&gt; 
   &lt;li&gt;TypeScript (jQuery): @bherila&lt;/li&gt; 
   &lt;li&gt;TypeScript (Nestjs): @vfrank66&lt;/li&gt; 
   &lt;li&gt;TypeScript (Node): @mhardorf&lt;/li&gt; 
   &lt;li&gt;TypeScript (Rxjs): @denyo&lt;/li&gt; 
   &lt;li&gt;TypeScript (redux-query): @petejohansonxo&lt;/li&gt; 
   &lt;li&gt;Xojo: @Topheee&lt;/li&gt; 
   &lt;li&gt;Zapier: @valmoz, @emajo&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Server Stubs 
  &lt;ul&gt; 
   &lt;li&gt;Ada: @stcarrez&lt;/li&gt; 
   &lt;li&gt;C# &lt;a href=&quot;http://ASP.NET&quot;&gt;ASP.NET&lt;/a&gt; 5: @jimschubert &lt;a href=&quot;https://www.patreon.com/jimschubert&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;C# &lt;a href=&quot;http://ASP.NET&quot;&gt;ASP.NET&lt;/a&gt; Core 3.0: @A-Joshi&lt;/li&gt; 
   &lt;li&gt;C# &lt;a href=&quot;http://APS.NET&quot;&gt;APS.NET&lt;/a&gt; Core 3.1: @phatcher&lt;/li&gt; 
   &lt;li&gt;C# Azure functions: @Abrhm7786&lt;/li&gt; 
   &lt;li&gt;C# NancyFX: @mstefaniuk&lt;/li&gt; 
   &lt;li&gt;C++ (Qt5 QHttpEngine): @etherealjoy&lt;/li&gt; 
   &lt;li&gt;C++ Httplib: @rajvesh&lt;/li&gt; 
   &lt;li&gt;C++ Oat++: @Kraust&lt;/li&gt; 
   &lt;li&gt;C++ Pistache: @sebymiano&lt;/li&gt; 
   &lt;li&gt;C++ Restbed: @stkrwork&lt;/li&gt; 
   &lt;li&gt;Erlang Server: @galaxie @nelsonvides&lt;/li&gt; 
   &lt;li&gt;F# (Giraffe) Server: @nmfisher&lt;/li&gt; 
   &lt;li&gt;Go Server: @guohuang&lt;/li&gt; 
   &lt;li&gt;Go Server (refactored in 7.0.0): @lwj5&lt;/li&gt; 
   &lt;li&gt;Go (Echo) Server: @ph4r5h4d&lt;/li&gt; 
   &lt;li&gt;Go (Gin) Server: @kemokemo&lt;/li&gt; 
   &lt;li&gt;GraphQL Express Server: @renepardon&lt;/li&gt; 
   &lt;li&gt;Haskell Servant: @algas&lt;/li&gt; 
   &lt;li&gt;Haskell Yesod: @yotsuya&lt;/li&gt; 
   &lt;li&gt;Java Camel: @carnevalegiacomo&lt;/li&gt; 
   &lt;li&gt;Java Dubbo: @redoom&lt;/li&gt; 
   &lt;li&gt;Java MSF4J: @sanjeewa-malalgoda&lt;/li&gt; 
   &lt;li&gt;Java Spring Boot: @diyfr&lt;/li&gt; 
   &lt;li&gt;Java Undertow: @stevehu&lt;/li&gt; 
   &lt;li&gt;Java Play Framework: @JFCote&lt;/li&gt; 
   &lt;li&gt;Java PKMST: @anshu2185 @sanshuman @rkumar-pk @ninodpillai&lt;/li&gt; 
   &lt;li&gt;Java Vert.x: @lwlee2608&lt;/li&gt; 
   &lt;li&gt;Java Micronaut: @andriy-dmytruk&lt;/li&gt; 
   &lt;li&gt;Java Helidon: @spericas @tjquinno @tvallin&lt;/li&gt; 
   &lt;li&gt;Java WireMock: &lt;a href=&quot;https://github.com/acouvreur&quot;&gt;@acouvreur&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;JAX-RS RestEasy: @chameleon82&lt;/li&gt; 
   &lt;li&gt;JAX-RS CXF: @hiveship&lt;/li&gt; 
   &lt;li&gt;JAX-RS CXF (CDI): @nickcmaynard&lt;/li&gt; 
   &lt;li&gt;JAX-RS RestEasy (JBoss EAP): @jfiala&lt;/li&gt; 
   &lt;li&gt;Julia: @tanmaykm&lt;/li&gt; 
   &lt;li&gt;Kotlin: @jimschubert &lt;a href=&quot;https://www.patreon.com/jimschubert&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Kotlin (Spring Boot): @dr4ke616&lt;/li&gt; 
   &lt;li&gt;Kotlin (Vertx): @Wooyme&lt;/li&gt; 
   &lt;li&gt;Kotlin (JAX-RS): @anttileppa&lt;/li&gt; 
   &lt;li&gt;Kotlin Misk: @andrewwilsonnew @guiarn&lt;/li&gt; 
   &lt;li&gt;Kotlin WireMock: @stefankoppier&lt;/li&gt; 
   &lt;li&gt;NodeJS Express: @YishTish&lt;/li&gt; 
   &lt;li&gt;PHP Flight: @daniel-sc&lt;/li&gt; 
   &lt;li&gt;PHP Laravel: @renepardon&lt;/li&gt; 
   &lt;li&gt;PHP Laravel (refactor in 7.12.0): @gijs-blanken&lt;/li&gt; 
   &lt;li&gt;PHP Lumen: @abcsun&lt;/li&gt; 
   &lt;li&gt;PHP Mezzio (with Path Handler): @Articus&lt;/li&gt; 
   &lt;li&gt;PHP Slim: @jfastnacht&lt;/li&gt; 
   &lt;li&gt;PHP Slim4: &lt;a href=&quot;https://github.com/ybelenko&quot;&gt;@ybelenko&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;PHP Symfony: @ksm2&lt;/li&gt; 
   &lt;li&gt;PHP Symfony6: @BenjaminHae&lt;/li&gt; 
   &lt;li&gt;Python FastAPI: @krjakbrjak&lt;/li&gt; 
   &lt;li&gt;Python AIOHTTP:&lt;/li&gt; 
   &lt;li&gt;Ruby on Rails 5: @zlx&lt;/li&gt; 
   &lt;li&gt;Rust (rust-server): @metaswitch&lt;/li&gt; 
   &lt;li&gt;Rust (rust-axum): @linxGnu&lt;/li&gt; 
   &lt;li&gt;Scala Akka: @Bouillie&lt;/li&gt; 
   &lt;li&gt;Scala Cask: @aaronp&lt;/li&gt; 
   &lt;li&gt;Scala Finch: @jimschubert &lt;a href=&quot;https://www.patreon.com/jimschubert&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Scala Lagom: @gmkumar2005&lt;/li&gt; 
   &lt;li&gt;Scala Play: @adigerber&lt;/li&gt; 
   &lt;li&gt;TypeScript NestJS: @aryobenholzner&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Documentation 
  &lt;ul&gt; 
   &lt;li&gt;AsciiDoc: @man-at-home&lt;/li&gt; 
   &lt;li&gt;HTML Doc 2: @jhitchcock&lt;/li&gt; 
   &lt;li&gt;Confluence Wiki: @jhitchcock&lt;/li&gt; 
   &lt;li&gt;PlantUML: @pburls&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Configuration 
  &lt;ul&gt; 
   &lt;li&gt;Apache2: @stkrwork&lt;/li&gt; 
   &lt;li&gt;k6: @mostafa&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Schema 
  &lt;ul&gt; 
   &lt;li&gt;Avro: @sgadouar&lt;/li&gt; 
   &lt;li&gt;GraphQL: @wing328 &lt;a href=&quot;https://www.patreon.com/wing328&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Ktorm: @Luiz-Monad&lt;/li&gt; 
   &lt;li&gt;MySQL: &lt;a href=&quot;https://github.com/ybelenko&quot;&gt;@ybelenko&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;PostgreSQL: &lt;a href=&quot;https://github.com/iri&quot;&gt;@iri&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Postman Collection: @gcatanese&lt;/li&gt; 
   &lt;li&gt;Protocol Buffer: @wing328&lt;/li&gt; 
   &lt;li&gt;WSDL: @adessoDpd&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;❤️ = Link to support the contributor directly&lt;/p&gt; 
&lt;h4&gt;How to join the core team&lt;/h4&gt; 
&lt;p&gt;Here are the requirements to become a core team member:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;rank within top 50 in &lt;a href=&quot;https://github.com/openapitools/openapi-generator/graphs/contributors&quot;&gt;https://github.com/openapitools/openapi-generator/graphs/contributors&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;to contribute, here are some good &lt;a href=&quot;https://github.com/openapitools/openapi-generator/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22&quot;&gt;starting points&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;regular contributions to the project 
  &lt;ul&gt; 
   &lt;li&gt;about 3 hours per week&lt;/li&gt; 
   &lt;li&gt;for contribution, it can be addressing issues, reviewing PRs submitted by others, submitting PR to fix bugs or make enhancements, etc&lt;/li&gt; 
   &lt;li&gt;must be active in the past 3 months at the time of application&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;To join the core team, please reach out to &lt;a href=&quot;mailto:team@openapitools.org&quot;&gt;team@openapitools.org&lt;/a&gt; for more information.&lt;/p&gt; 
&lt;p&gt;To become a Template Creator, simply submit a PR for new API client (e.g. Rust, Elixir) or server stub (e.g. Ruby Grape) generator.&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;6.2 - OpenAPI Generator Technical Committee&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;Members of the OpenAPI Generator technical committee shoulder the following responsibilities:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Provides guidance and direction to other users&lt;/li&gt; 
 &lt;li&gt;Reviews pull requests and issues&lt;/li&gt; 
 &lt;li&gt;Improves the generator by making enhancements, fixing bugs or updating documentations&lt;/li&gt; 
 &lt;li&gt;Sets the technical direction of the generator&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Who is eligible? Those who want to join must have at least 3 PRs merged into a generator. (Exceptions can be granted to template creators or contributors who have made a lot of code changes with less than 3 merged PRs)&lt;/p&gt; 
&lt;p&gt;If you want to join the committee, please kindly apply by sending an email to &lt;a href=&quot;mailto:team@openapitools.org&quot;&gt;team@openapitools.org&lt;/a&gt; with your Github ID.&lt;/p&gt; 
&lt;h4&gt;Members of Technical Committee&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Languages/Generators&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Member (join date)&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;ActionScript&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Ada&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@stcarrez (2018/02) @michelealbano (2018/02)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Android&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@jaz-ah (2017/09)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Apex&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Bash&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@frol (2017/07) @bkryza (2017/08) @kenjones-cisco (2017/09)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;C&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@zhemant (2018/11) @ityuhui (2019/12) @michelealbano (2020/03) @eafer (2024/12)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;C++&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@ravinikam (2017/07) @stkrwork (2017/07) @etherealjoy (2018/02) @martindelille (2018/03) @muttleyxd (2019/08) @aminya (2025/05)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;C#&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@mandrean (2017/08) @shibayan (2020/02) @Blackclaws (2021/03) @lucamazzanti (2021/05) @iBicha (2023/07)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Clojure&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Crystal&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@cyangle (2021/01)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Dart&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@jaumard (2018/09) @josh-burton (2019/12) @amondnet (2019/12) @sbu-WBT (2020/12) @kuhnroyal (2020/12) @agilob (2020/12) @ahmednfwela (2021/08)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Eiffel&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@jvelilla (2017/09)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Elixir&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@mrmstn (2018/12)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Elm&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@eriktim (2018/09)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Erlang&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@tsloughter (2017/11) @jfacorro (2018/10) @robertoaloi (2018/10) @nelsonvides (2024/09)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;F#&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@nmfisher (2019/05)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Go&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@antihax (2017/11) @grokify (2018/07) @kemokemo (2018/09) @jirikuncar (2021/01) @ph4r5h4d (2021/04) @lwj5 (2023/04)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;GraphQL&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@renepardon (2018/12)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Groovy&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Haskell&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Java&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@bbdouglas (2017/07) @sreeshas (2017/08) @jfiala (2017/08) @lukoyanov (2017/09) @cbornet (2017/09) @jeff9finger (2018/01) @karismann (2019/03) @Zomzog (2019/04) @lwlee2608 (2019/10) @martin-mfg (2023/08)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Java Spring&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@cachescrubber (2022/02) @welshm (2022/02) @MelleD (2022/02) @atextor (2022/02) @manedev79 (2022/02) @javisst (2022/02) @borsch (2022/02) @banlevente (2022/02) @Zomzog (2022/09) @martin-mfg (2023/08)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;JMeter&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@kannkyo (2021/01)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Jetbrains HTTP Client&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@jlengrand (2023/01)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Julia&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@tanmaykm (2023/01)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Kotlin&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@karismann (2019/03) @Zomzog (2019/04) @andrewemery (2019/10) @4brunu (2019/11) @yutaka0m (2020/03) @stefankoppier (2022/06) @e5l (2024/10) @dennisameling (2026/02)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Lua&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@daurnimator (2017/08)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;N4JS&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@mmews-n4 (2023/03)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Nim&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;NodeJS/Javascript&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@CodeNinjai (2017/07) @frol (2017/07) @cliffano (2017/07)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;ObjC&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;OCaml&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@cgensoul (2019/08), @sir4ur0n (2025/08)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Perl&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@wing328 (2017/07) &lt;a href=&quot;https://www.patreon.com/wing328&quot;&gt;❤️&lt;/a&gt; @yue9944882 (2019/06)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;PHP&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@jebentier (2017/07), @dkarlovi (2017/07), @mandrean (2017/08), @jfastnacht (2017/09), &lt;a href=&quot;https://github.com/ybelenko&quot;&gt;@ybelenko&lt;/a&gt; (2018/07), @renepardon (2018/12)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;PowerShell&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@wing328 (2020/05)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Python&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@cbornet (2017/09) @tomplus (2018/10) @krjakbrjak (2023/02) @fa0311 (2023/10) @multani (2023/10)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;R&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@Ramanth (2019/07) @saigiridhar21 (2019/07)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Ruby&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@cliffano (2017/07) @zlx (2017/09) @autopp (2019/02)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Rust&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@frol (2017/07) @farcaller (2017/08) @richardwhiuk (2019/07) @paladinzh (2020/05) @jacob-pro (2022/10) @dsteeley (2025/07)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Scala&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@clasnake (2017/07), @shijinkui (2018/01), @ramzimaalej (2018/03), @chameleon82 (2020/03), @Bouillie (2020/04) @fish86 (2023/06)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Swift&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@jgavris (2017/07) @ehyche (2017/08) @Edubits (2017/09) @jaz-ah (2017/09) @4brunu (2019/11) @dydus0x14 (2023/06)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;TypeScript&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@TiFu (2017/07) @taxpon (2017/07) @sebastianhaas (2017/07) @kenisteward (2017/07) @Vrolijkx (2017/09) @macjohnny (2018/01) @topce (2018/10) @akehir (2019/07) @petejohansonxo (2019/11) @amakhrov (2020/02) @davidgamero (2022/03) @mkusaka (2022/04) @joscha (2024/10) @dennisameling (2026/02)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Xojo&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@Topheee (2023/04)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Past Members of Technical Committee:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Languages/Generators&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Member (join date)&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Python&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;@taxpon (2017/07) @frol (2017/07) @mbohlool (2017/07) @cbornet (2017/09) @kenjones-cisco (2017/11) @tomplus (2018/10) @arun-nalla (2019/11)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;❤️ = Link to support the contributor directly&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;6.3 - History of OpenAPI Generator&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;OpenAPI Generator is a fork of &lt;a href=&quot;https://github.com/swagger-api/swagger-codegen&quot;&gt;Swagger Codegen&lt;/a&gt;. In view of the issues with the Swagger Codegen 3.0.0 (beta) release and the disagreement on the project&#39;s direction, more than 40 top contributors and template creators of Swagger Codegen decided to fork Swagger Codegen and maintain a community-driven version called &quot;OpenAPI Generator&quot;. Please refer to the &lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/docs/qna.md&quot;&gt;Q&amp;amp;A&lt;/a&gt; for more information.&lt;/p&gt; 
&lt;h4&gt;Founding Members (alphabetical order):&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ackintosh&quot;&gt;Akihito Nakano&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/galaxie&quot;&gt;Artem Ocheredko&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Articus&quot;&gt;Arthur Mogliev&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bkryza&quot;&gt;Bartek Kryza&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bvwells&quot;&gt;Ben Wells&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bjgill&quot;&gt;Benjamin Gill&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cbornet&quot;&gt;Christophe Bornet&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cliffano&quot;&gt;Cliffano Subagio&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/d-date&quot;&gt;Daiki Matsudate&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Danielku15&quot;&gt;Daniel&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/emilianobonassi&quot;&gt;Emiliano Bonassi&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/eriktim&quot;&gt;Erik Timmers&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/macjohnny&quot;&gt;Esteban Gehring&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/gustavoapaz&quot;&gt;Gustavo Paz&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jvelilla&quot;&gt;Javier Velilla&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/JFCote&quot;&gt;Jean-François Côté&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jimschubert&quot;&gt;Jim Schubert&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jonschoning&quot;&gt;Jon Schoning&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jmini&quot;&gt;Jérémie Bresson&lt;/a&gt; &lt;a href=&quot;https://www.patreon.com/jmini&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jayearn&quot;&gt;Jörn Ahrens&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kenisteward&quot;&gt;Keni Steward&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mstefaniuk&quot;&gt;Marcin Stefaniuk&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/MartinDelille&quot;&gt;Martin Delille&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/algas&quot;&gt;Masahiro Yamauchi&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/michelealbano&quot;&gt;Michele Albano&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ramzimaalej&quot;&gt;Ramzi Maalej&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ravinikam&quot;&gt;Ravindra Nikam&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ricardona&quot;&gt;Ricardo Cardona&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sebastianhaas&quot;&gt;Sebastian Haas&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mandrean&quot;&gt;Sebastian Mandrean&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sreeshas&quot;&gt;Sreenidhi Sreesha&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/stkrwork&quot;&gt;Stefan Krismann&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/stcarrez&quot;&gt;Stephane Carrez&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/taxpon&quot;&gt;Takuro Wada&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tomplus&quot;&gt;Tomasz Prus&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tsloughter&quot;&gt;Tristan Sloughter&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/viclovsky&quot;&gt;Victor Orlovsky&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/victorgit&quot;&gt;Victor Trakhtenberg&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/frol&quot;&gt;Vlad Frolov&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/farcaller&quot;&gt;Vladimir Pouzanov&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/wing328&quot;&gt;William Cheng&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/xmeng1&quot;&gt;Xin Meng&lt;/a&gt; &lt;a href=&quot;https://www.patreon.com/user/overview?u=16435385&quot;&gt;❤️&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/xhh&quot;&gt;Xu Hui Hui&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/antihax&quot;&gt;antihax&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/beatcracker&quot;&gt;beatcracker&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https:/github.com/daurnimator&quot;&gt;daurnimator&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/etherealjoy&quot;&gt;etherealjoy&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jfiala&quot;&gt;jfiala&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lukoyanov&quot;&gt;lukoyanov&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;❤️ = Link to support the contributor directly&lt;/p&gt; 
&lt;h2&gt;&lt;a href=&quot;https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/#table-of-contents&quot;&gt;7 - License&lt;/a&gt;&lt;/h2&gt; 
&lt;hr /&gt; 
&lt;p&gt;Copyright 2018 OpenAPI-Generator Contributors (&lt;a href=&quot;https://openapi-generator.tech&quot;&gt;https://openapi-generator.tech&lt;/a&gt;) Copyright 2018 SmartBear Software&lt;/p&gt; 
&lt;p&gt;Licensed under the Apache License, Version 2.0 (the &quot;License&quot;); you may not use this file except in compliance with the License. You may obtain a copy of the License at &lt;a href=&quot;https://www.apache.org/licenses/LICENSE-2.0&quot;&gt;apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.&lt;/p&gt; 
&lt;hr /&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/580eac87061ffaafe4b6539b9e65972275e065965341f5a4aca8379079bb91df/OpenAPITools/openapi-generator" medium="image" />
      
    </item>
    
    <item>
      <title>StarRocks/starrocks</title>
      <link>https://github.com/StarRocks/starrocks</link>
      <description>&lt;p&gt;The world&#39;s fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.&lt;/p&gt;&lt;hr&gt;&lt;img referrerpolicy=&quot;no-referrer-when-downgrade&quot; src=&quot;https://static.scarf.sh/a.png?x-pxid=e8355b6b-a9fc-4d4e-8ed8-b3157aa1827d&quot; /&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://starrocks.io/index&quot;&gt; &lt;img width=&quot;900&quot; src=&quot;https://cdn.starrocks.io/static/github/starrocks.png?t=12234&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://starrocks.io/download/community&quot;&gt;Download&lt;/a&gt; | &lt;a href=&quot;https://docs.starrocks.io/&quot;&gt;Docs&lt;/a&gt; | &lt;a href=&quot;https://starrocks.io/blog/benchmark-test&quot;&gt;Benchmarks&lt;/a&gt; | &lt;a href=&quot;https://github.com/StarRocks/demo&quot;&gt;Demo&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/Made%20with-JAVA%20%26%20C%2B%2B-red&quot; alt=&quot;JAVA&amp;amp;C++&quot; /&gt;  &lt;img src=&quot;https://img.shields.io/github/commit-activity/m/StarRocks/starrocks&quot; alt=&quot;Commit Activities&quot; /&gt;  &lt;a href=&quot;https://github.com/StarRocks/starrocks/issues&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/issues-raw/StarRocks/starrocks&quot; alt=&quot;Open Issues&quot; /&gt; &lt;/a&gt;  &lt;a href=&quot;https://starrocks.io/index&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/Visit%20StarRocks-Website-green&quot; alt=&quot;Website&quot; /&gt; &lt;/a&gt;  &lt;a href=&quot;https://try.starrocks.com/join-starrocks-on-slack&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/Join-Slack-ff69b4&quot; alt=&quot;Slack&quot; /&gt; &lt;/a&gt;  &lt;a href=&quot;https://twitter.com/StarRocksLabs&quot;&gt; &lt;img src=&quot;https://img.shields.io/twitter/follow/StarRocksLabs?style=social&quot; alt=&quot;Twitter&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://gurubase.io/g/starrocks&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/Gurubase-Ask%20StarRocks%20Guru-006BFF&quot; alt=&quot;Gurubase&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt; 
&lt;/div&gt; StarRocks is the world&#39;s fastest open query engine for sub-second, ad-hoc analytics both on and off the data lakehouse. With average query performance 3x faster than other popular alternatives, StarRocks is a query engine that eliminates the need for denormalization and adapts to your use cases, without having to move your data or rewrite SQL. A Linux Foundation project. 
&lt;br /&gt;
&lt;br /&gt; 
&lt;p&gt;Learn more 👉🏻 &lt;a href=&quot;https://www.youtube.com/watch?v=RfXO5GOnbW4&amp;amp;ab_channel=CelerData&quot;&gt;What Is StarRocks: Features and Use Cases&lt;/a&gt;, Join &lt;a href=&quot;https://summit.starrocks.io/2025&quot;&gt;StarRocks Summit 2025&lt;/a&gt;!&lt;/p&gt; 
&lt;br /&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://cdn.starrocks.io/static/github/community.gif&quot; /&gt;  &lt;/p&gt; 
&lt;br /&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;🚀 Native vectorized SQL engine:&lt;/strong&gt; StarRocks adopts vectorization technology to make full use of the parallel computing power of CPU, achieving sub-second query returns in multi-dimensional analyses, which is 5 to 10 times faster than previous systems.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;📊 Standard SQL:&lt;/strong&gt; StarRocks supports ANSI SQL syntax (fully supported TPC-H and TPC-DS). It is also compatible with the MySQL protocol. Various clients and BI software can be used to access StarRocks.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;💡 Smart query optimization:&lt;/strong&gt; StarRocks can optimize complex queries through CBO (Cost Based Optimizer). With a better execution plan, the data analysis efficiency will be greatly improved.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;⚡ Real-time update:&lt;/strong&gt; The updated model of StarRocks can perform upsert/delete operations according to the primary key, and achieve efficient query while concurrent updates.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🪟 Intelligent materialized view:&lt;/strong&gt; The materialized view of StarRocks can be automatically updated during the data import and automatically selected when the query is executed.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;✨ Querying data in data lakes directly&lt;/strong&gt;: StarRocks allows direct access to data from Apache Hive™, Apache Iceberg™, Delta Lake™ and Apache Hudi™ without importing.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🎛️ Resource management&lt;/strong&gt;: This feature allows StarRocks to limit resource consumption for queries and implement isolation and efficient use of resources among tenants in the same cluster.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;💠 Easy to maintain&lt;/strong&gt;: Simple architecture makes StarRocks easy to deploy, maintain and scale out. StarRocks tunes its query plan agilely, balances the resources when the cluster is scaled in or out, and recovers the data replica under node failure automatically.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;br /&gt; 
&lt;h2&gt;Architecture Overview&lt;/h2&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/StarRocks/starrocks/main/images/arch.png&quot; /&gt;  &lt;/p&gt; 
&lt;p&gt;StarRocks’s streamlined architecture is mainly composed of two modules: Frontend (FE) and Backend (BE). The entire system eliminates single points of failure through seamless and horizontal scaling of FE and BE, as well as replication of metadata and data.&lt;/p&gt; 
&lt;p&gt;Starting from version 3.0, StarRocks supports a new shared-data architecture, which can provide better scalability and lower costs.&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/StarRocks/starrocks/main/docs/en/_assets/shared-data.png&quot; width=&quot;55%&quot; height=&quot;55%&quot; /&gt;  &lt;/p&gt; 
&lt;br /&gt; 
&lt;h2&gt;Resources&lt;/h2&gt; 
&lt;h3&gt;📚 Read the docs&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Section&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.starrocks.io/docs/quick_start/&quot;&gt;Quick Starts&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;How-tos and Tutorials.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.starrocks.io/docs/deployment/deployment_overview/&quot;&gt;Deploy&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Learn how to run and configure StarRocks.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.starrocks.io/&quot;&gt;Docs&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Full documentation.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.starrocks.io/blog&quot;&gt;Blogs&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;StarRocks deep dive and user stories.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;❓ Get support&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://try.starrocks.com/join-starrocks-on-slack&quot;&gt;&lt;img align=&quot;right&quot; width=&quot;150&quot; src=&quot;https://firstcontributions.github.io/assets/Readme/join-slack-team.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://try.starrocks.com/join-starrocks-on-slack&quot;&gt;Slack community: &lt;/a&gt; join technical discussions, ask questions, and meet other users!&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC38wR-ogamk4naaWNQ45y7Q/featured&quot;&gt;YouTube channel:&lt;/a&gt; subscribe to the latest video tutorials and webcasts.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/StarRocks/starrocks/issues&quot;&gt;GitHub issues:&lt;/a&gt; report an issue with StarRocks.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;br /&gt; 
&lt;h2&gt;Contributing to StarRocks&lt;/h2&gt; 
&lt;p&gt;We welcome all kinds of contributions from the community, individuals and partners. We owe our success to your active involvement.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;See &lt;a href=&quot;https://github.com/StarRocks/starrocks/raw/main/CONTRIBUTING.md&quot;&gt;Contributing.md&lt;/a&gt; to get started.&lt;/li&gt; 
 &lt;li&gt;Set up StarRocks development environment:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.starrocks.io/docs/developers/development-environment/ide-setup/&quot;&gt;IDE Setup&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.starrocks.io/docs/developers/build-starrocks/Build_in_docker/&quot;&gt;Compile StarRocks with Docker&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.starrocks.io/docs/deployment/deploy_manually/&quot;&gt;Deploy StarRocks manually&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;Understand our &lt;a href=&quot;https://github.com/StarRocks/community/raw/main/Contributors/guide/workflow.md&quot;&gt;GitHub workflow&lt;/a&gt; for opening a pull request; use this &lt;a href=&quot;https://github.com/StarRocks/starrocks/raw/main/.github/PULL_REQUEST_TEMPLATE.md&quot;&gt;PR Template&lt;/a&gt; when submitting a pull request.&lt;/li&gt; 
 &lt;li&gt;Pick a &lt;a href=&quot;https://github.com/StarRocks/starrocks/labels/good%20first%20issue&quot;&gt;good first issue&lt;/a&gt; and start contributing.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;strong&gt;📝 License:&lt;/strong&gt; StarRocks is licensed under &lt;a href=&quot;https://www.apache.org/licenses/LICENSE-2.0&quot;&gt;Apache License 2.0&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;👥 Community Membership:&lt;/strong&gt; Learn more about different &lt;a href=&quot;https://raw.githubusercontent.com/StarRocks/starrocks/main/community/membership.md&quot;&gt;contributor roles&lt;/a&gt; in StarRocks community.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;💬 Developer Group：&lt;/strong&gt; Please join our &lt;a href=&quot;https://groups.google.com/g/starrocks-dev&quot;&gt;Google Groups&lt;/a&gt; to discuss StarRocks features, project directions, issues, pull requests, or share suggestions.&lt;/p&gt; 
&lt;br /&gt; 
&lt;h2&gt;Used By&lt;/h2&gt; 
&lt;p&gt;This project is used by the following companies. Learn more about their use cases:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AzDxEZuMBwM&amp;amp;ab_channel=StarRocks_labs&quot;&gt;Airbnb&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://medium.com/airtable-eng/live-shard-data-archive-export-and-ingestion-to-starrocks-for-validation-6af555e8b3fe&quot;&gt;Airtable&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=7N34q65mthk&quot;&gt;Alibaba&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Jm-D0xvOtek&quot;&gt;Celonis&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.starrocks.io/blog/how-cisco-webex-unified-real-time-analytics-with-starrocks&quot;&gt;Cisco&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=3Z9jSCaHnYg&amp;amp;list=PL0eWwaesODdhBhKSnvpfIEAB9sgk8rKmy&quot;&gt;Coinbase&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.phoenixdata.ai/case-studies/case-study-ctw.html&quot;&gt;CTW&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://starrocks.medium.com/demandbase-ditches-denormalization-by-switching-off-clickhouse-44195d795a83&quot;&gt;Demandbase&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.starrocks.io/blog/reduced-80-cost-didis-journey-from-multiple-olap-engines-to-starrocks&quot;&gt;Didi&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=qNk_-QTZk3E&quot;&gt;Eightfold.ai&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=hbXovqR6tOc&quot;&gt;Fanatics&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://medium.com/fresha-data-engineering/how-we-accidentally-became-one-of-uks-first-starrocks-production-pioneers-7db249f10010&quot;&gt;Fresha&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://engineering.grab.com/building-a-spark-observability&quot;&gt;Grab&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.starrocks.io/blog/haezoom-and-cloudshift-overcome-apache-druids-limits-with-starrocks&quot;&gt;Haezoom&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://medium.com/p/a7916a7e87bf&quot;&gt;HerdWatch&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=tUC3FS3ki10&quot;&gt;Intuit&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://medium.com/starrocks-engineering/real-time-analytics-at-scale-why-we-use-starrocks-0aa3c859cbeb&quot;&gt;iQiyi&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://starrocks.medium.com/how-join-changed-how-we-approach-data-infra-at-naver-3a5bb1dac49f&quot;&gt;Naver&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://medium.com/pinterest-engineering/delivering-faster-analytics-at-pinterest-a639cdfad374&quot;&gt;Pinterest&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://medium.com/@sukkhjot/querying-billions-of-user-events-in-seconds-our-journey-with-starrocks-ecc29ac6c756&quot;&gt;PlaySimple Games&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://celerdata.com/blog/how-shopee-3xed-their-query-performance-with-starrocks&quot;&gt;Shopee&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://medium.com/smartnews-inc/evaluating-a-unified-query-engine-to-consolidate-trino-and-clickhouse-672848c7d55d&quot;&gt;Smartnews&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://celerdata.com/blog/how-splitmetrics-replaced-postgresql-with-starrocks-for-customer-facing-analytics&quot;&gt;Splitmetrics&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.starrocks.io/blog/tencent-unifies-their-gaming-analytics-with-starrocks&quot;&gt;Tencent(Games)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WVHXFks9EQk&quot;&gt;Tencent(LLM)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://starrocks.medium.com/trip-com-starrocks-efficiently-supports-high-concurrent-queries-dramatically-reduces-labor-and-1e1921dd6bf8&quot;&gt;Trip.com&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.trmlabs.com/post/from-bigquery-to-lakehouse-how-we-built-a-petabyte-scale-data-analytics-platform-part-1&quot;&gt;TRM Labs&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://celerdata.com/blog/verisoul-enables-real-time-analytics-by-transitioning-off-bigquery&quot;&gt;Verisoul&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://medium.com/starrocks-engineering/vivos-journey-to-a-high-performance-lakehouse-with-starrocks-56a502a0fde8&quot;&gt;Vivo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=2cvIZY4EDak&amp;amp;list=PL0eWwaesODdiJ0aXLzSTyNfkjjIFYpOTf&quot;&gt;Xiaohongshu/RedNote&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://celerdata.com/blog/from-hours-to-seconds-how-yuno-accelerated-customer-facing-analytics-by-switching-off-snowflake-and-athena&quot;&gt;Yuno&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://blog.zeptonow.com/data-that-delivers-real-time-insights-for-brand-success-in-quick-commerce-b8b9e994d20b&quot;&gt;Zepto&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/0cfe3b7ebe9aaf93724368911fbb274e00f002a12dc38f997004cc846827dd3a/StarRocks/starrocks" medium="image" />
      
    </item>
    
    <item>
      <title>elastic/elasticsearch</title>
      <link>https://github.com/elastic/elasticsearch</link>
      <description>&lt;p&gt;Free and Open Source, Distributed, RESTful Search Engine&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Elasticsearch&lt;/h1&gt; 
&lt;div id=&quot;preamble&quot;&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;Elasticsearch is a distributed search and analytics engine, scalable data store and vector database optimized for speed and relevance on production-scale workloads. Elasticsearch is the foundation of Elastic’s open Stack platform. Search in near real-time over massive datasets, perform vector searches, integrate with generative AI applications, and much more.&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;Use cases enabled by Elasticsearch include:&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;ulist&quot;&gt; 
   &lt;ul&gt; 
    &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://www.elastic.co/search-labs/blog/articles/retrieval-augmented-generation-rag&quot;&gt;Retrieval Augmented Generation (RAG)&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://www.elastic.co/search-labs/blog/categories/vector-search&quot;&gt;Vector search&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Full-text search&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Logs&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Metrics&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Application performance monitoring (APM)&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Security logs&lt;/p&gt; &lt;/li&gt; 
   &lt;/ul&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;... and more!&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;To learn more about Elasticsearch’s features and capabilities, see our &lt;a href=&quot;https://www.elastic.co/products/elasticsearch&quot;&gt;product page&lt;/a&gt;.&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;To access information on &lt;a href=&quot;https://www.elastic.co/search-labs/blog/categories/ml-research&quot;&gt;machine learning innovations&lt;/a&gt; and the latest &lt;a href=&quot;https://www.elastic.co/search-labs/blog/categories/lucene&quot;&gt;Lucene contributions from Elastic&lt;/a&gt;, more information can be found in &lt;a href=&quot;https://www.elastic.co/search-labs&quot;&gt;Search Labs&lt;/a&gt;.&lt;/p&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class=&quot;sect1&quot;&gt; 
 &lt;h2 id=&quot;get-started&quot;&gt;Get started&lt;/h2&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;The simplest way to set up Elasticsearch is to create a managed deployment with &lt;a href=&quot;https://www.elastic.co/cloud/as-a-service&quot;&gt;Elasticsearch Service on Elastic Cloud&lt;/a&gt;.&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;If you prefer to install and manage Elasticsearch yourself, you can download the latest version from &lt;a href=&quot;https://www.elastic.co/downloads/elasticsearch&quot;&gt;elastic.co/downloads/elasticsearch&lt;/a&gt;.&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;sect2&quot;&gt; 
   &lt;h3 id=&quot;_run_elasticsearch_locally&quot;&gt;Run Elasticsearch locally&lt;/h3&gt; 
   &lt;div class=&quot;admonitionblock warning&quot;&gt; 
    &lt;table&gt; 
     &lt;tbody&gt;
      &lt;tr&gt; 
       &lt;td class=&quot;icon&quot;&gt; 
        &lt;div class=&quot;title&quot;&gt;
         Warning
        &lt;/div&gt; &lt;/td&gt; 
       &lt;td class=&quot;content&quot;&gt; 
        &lt;div class=&quot;paragraph&quot;&gt; 
         &lt;p&gt;DO NOT USE THESE INSTRUCTIONS FOR PRODUCTION DEPLOYMENTS.&lt;/p&gt; 
        &lt;/div&gt; 
        &lt;div class=&quot;paragraph&quot;&gt; 
         &lt;p&gt;This setup is intended for local development and testing only.&lt;/p&gt; 
        &lt;/div&gt; &lt;/td&gt; 
      &lt;/tr&gt; 
     &lt;/tbody&gt;
    &lt;/table&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;paragraph&quot;&gt; 
    &lt;p&gt;Quickly set up Elasticsearch and Kibana in Docker for local development or testing, using the &lt;a href=&quot;https://github.com/elastic/start-local?tab=readme-ov-file#-try-elasticsearch-and-kibana-locally&quot;&gt;&lt;code&gt;start-local&lt;/code&gt; script&lt;/a&gt;.&lt;/p&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;paragraph&quot;&gt; 
    &lt;p&gt;ℹ️ For more detailed information about the &lt;code&gt;start-local&lt;/code&gt; setup, refer to the &lt;a href=&quot;https://github.com/elastic/start-local&quot;&gt;README on GitHub&lt;/a&gt;.&lt;/p&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;sect3&quot;&gt; 
    &lt;h4 id=&quot;_prerequisites&quot;&gt;Prerequisites&lt;/h4&gt; 
    &lt;div class=&quot;ulist&quot;&gt; 
     &lt;ul&gt; 
      &lt;li&gt; &lt;p&gt;If you don’t have Docker installed, &lt;a href=&quot;https://www.docker.com/products/docker-desktop&quot;&gt;download and install Docker Desktop&lt;/a&gt; for your operating system.&lt;/p&gt; &lt;/li&gt; 
      &lt;li&gt; &lt;p&gt;If you’re using Microsoft Windows, then install &lt;a href=&quot;https://learn.microsoft.com/en-us/windows/wsl/install&quot;&gt;Windows Subsystem for Linux (WSL)&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
     &lt;/ul&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;sect3&quot;&gt; 
    &lt;h4 id=&quot;_trial_license&quot;&gt;Trial license&lt;/h4&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;This setup comes with a one-month trial license that includes all Elastic features.&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;After the trial period, the license reverts to &lt;strong&gt;Free and open - Basic&lt;/strong&gt;. Refer to &lt;a href=&quot;https://www.elastic.co/subscriptions&quot;&gt;Elastic subscriptions&lt;/a&gt; for more information.&lt;/p&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;sect3&quot;&gt; 
    &lt;h4 id=&quot;_run_start_local&quot;&gt;Run &lt;code&gt;start-local&lt;/code&gt;&lt;/h4&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;To set up Elasticsearch and Kibana locally, run the &lt;code&gt;start-local&lt;/code&gt; script:&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;listingblock&quot;&gt; 
     &lt;div class=&quot;content&quot;&gt; 
      &lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;curl -fsSL https://elastic.co/start-local | sh&lt;/code&gt;&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;This script creates an &lt;code&gt;elastic-start-local&lt;/code&gt; folder containing configuration files and starts both Elasticsearch and Kibana using Docker.&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;After running the script, you can access Elastic services at the following endpoints:&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;ulist&quot;&gt; 
     &lt;ul&gt; 
      &lt;li&gt; &lt;p&gt;&lt;strong&gt;Elasticsearch&lt;/strong&gt;: &lt;a href=&quot;http://localhost:9200&quot; class=&quot;bare&quot;&gt;http://localhost:9200&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
      &lt;li&gt; &lt;p&gt;&lt;strong&gt;Kibana&lt;/strong&gt;: &lt;a href=&quot;http://localhost:5601&quot; class=&quot;bare&quot;&gt;http://localhost:5601&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
     &lt;/ul&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;The script generates a random password for the &lt;code&gt;elastic&lt;/code&gt; user, which is displayed at the end of the installation and stored in the &lt;code&gt;.env&lt;/code&gt; file.&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;admonitionblock caution&quot;&gt; 
     &lt;table&gt; 
      &lt;tbody&gt;
       &lt;tr&gt; 
        &lt;td class=&quot;icon&quot;&gt; 
         &lt;div class=&quot;title&quot;&gt;
          Caution
         &lt;/div&gt; &lt;/td&gt; 
        &lt;td class=&quot;content&quot;&gt; 
         &lt;div class=&quot;paragraph&quot;&gt; 
          &lt;p&gt;This setup is for local testing only. HTTPS is disabled, and Basic authentication is used for Elasticsearch. For security, Elasticsearch and Kibana are accessible only through &lt;code&gt;localhost&lt;/code&gt;.&lt;/p&gt; 
         &lt;/div&gt; &lt;/td&gt; 
       &lt;/tr&gt; 
      &lt;/tbody&gt;
     &lt;/table&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;sect3&quot;&gt; 
    &lt;h4 id=&quot;_api_access&quot;&gt;API access&lt;/h4&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;An API key for Elasticsearch is generated and stored in the &lt;code&gt;.env&lt;/code&gt; file as &lt;code&gt;ES_LOCAL_API_KEY&lt;/code&gt;. Use this key to connect to Elasticsearch with a &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/client/index.html&quot;&gt;programming language client&lt;/a&gt; or the &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html&quot;&gt;REST API&lt;/a&gt;.&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;From the &lt;code&gt;elastic-start-local&lt;/code&gt; folder, check the connection to Elasticsearch using &lt;code&gt;curl&lt;/code&gt;:&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;listingblock&quot;&gt; 
     &lt;div class=&quot;content&quot;&gt; 
      &lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;source .env
curl $ES_LOCAL_URL -H &quot;Authorization: ApiKey ${ES_LOCAL_API_KEY}&quot;&lt;/code&gt;&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;To use the password for the &lt;code&gt;elastic&lt;/code&gt; user, set and export the &lt;code&gt;ES_LOCAL_PASSWORD&lt;/code&gt; environment variable. For example:&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;listingblock&quot;&gt; 
     &lt;div class=&quot;content&quot;&gt; 
      &lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;source .env
export ES_LOCAL_PASSWORD&lt;/code&gt;&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;sect2&quot;&gt; 
   &lt;h3 id=&quot;_send_requests_to_elasticsearch&quot;&gt;Send requests to Elasticsearch&lt;/h3&gt; 
   &lt;div class=&quot;paragraph&quot;&gt; 
    &lt;p&gt;You send data and other requests to Elasticsearch through REST APIs. You can interact with Elasticsearch using any client that sends HTTP requests, such as the &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/client/index.html&quot;&gt;Elasticsearch language clients&lt;/a&gt; and &lt;a href=&quot;https://curl.se&quot;&gt;curl&lt;/a&gt;.&lt;/p&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;sect3&quot;&gt; 
    &lt;h4 id=&quot;_using_curl&quot;&gt;Using curl&lt;/h4&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;Here’s an example curl command to create a new Elasticsearch index, using basic auth:&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;listingblock&quot;&gt; 
     &lt;div class=&quot;content&quot;&gt; 
      &lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;curl -u elastic:$ES_LOCAL_PASSWORD \
  -X PUT \
  http://localhost:9200/my-new-index \
  -H &#39;Content-Type: application/json&#39;&lt;/code&gt;&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;sect3&quot;&gt; 
    &lt;h4 id=&quot;_using_a_language_client&quot;&gt;Using a language client&lt;/h4&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;To connect to your local dev Elasticsearch cluster with a language client, you can use basic authentication with the &lt;code&gt;elastic&lt;/code&gt; username and the password stored in the &lt;code&gt;ES_LOCAL_PASSWORD&lt;/code&gt; environment variable.&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;You’ll use the following connection details:&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;ulist&quot;&gt; 
     &lt;ul&gt; 
      &lt;li&gt; &lt;p&gt;&lt;strong&gt;Elasticsearch endpoint&lt;/strong&gt;: &lt;code&gt;&lt;a href=&quot;http://localhost:9200&quot; class=&quot;bare&quot;&gt;http://localhost:9200&lt;/a&gt;&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
      &lt;li&gt; &lt;p&gt;&lt;strong&gt;Username&lt;/strong&gt;: &lt;code&gt;elastic&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
      &lt;li&gt; &lt;p&gt;&lt;strong&gt;Password&lt;/strong&gt;: &lt;code&gt;$ES_LOCAL_PASSWORD&lt;/code&gt; (Value you set in the environment variable)&lt;/p&gt; &lt;/li&gt; 
     &lt;/ul&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;For example, to connect with the Python &lt;code&gt;elasticsearch&lt;/code&gt; client:&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;listingblock&quot;&gt; 
     &lt;div class=&quot;content&quot;&gt; 
      &lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;import os
from elasticsearch import Elasticsearch

username = &#39;elastic&#39;
password = os.getenv(&#39;ES_LOCAL_PASSWORD&#39;) # Value you set in the environment variable

client = Elasticsearch(
    &quot;http://localhost:9200&quot;,
    basic_auth=(username, password)
)

print(client.info())&lt;/code&gt;&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;sect3&quot;&gt; 
    &lt;h4 id=&quot;_using_the_dev_tools_console&quot;&gt;Using the Dev Tools Console&lt;/h4&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;Kibana’s developer console provides an easy way to experiment and test requests. To access the console, open Kibana, then go to &lt;strong&gt;Management&lt;/strong&gt; &amp;gt; &lt;strong&gt;Dev Tools&lt;/strong&gt;.&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;&lt;strong&gt;Add data&lt;/strong&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;You index data into Elasticsearch by sending JSON objects (documents) through the REST APIs. Whether you have structured or unstructured text, numerical data, or geospatial data, Elasticsearch efficiently stores and indexes it in a way that supports fast searches.&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;For timestamped data such as logs and metrics, you typically add documents to a data stream made up of multiple auto-generated backing indices.&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;To add a single document to an index, submit an HTTP post request that targets the index.&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;listingblock&quot;&gt; 
     &lt;div class=&quot;content&quot;&gt; 
      &lt;pre&gt;POST /customer/_doc/1
{
  &quot;firstname&quot;: &quot;Jennifer&quot;,
  &quot;lastname&quot;: &quot;Walters&quot;
}&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;This request automatically creates the &lt;code&gt;customer&lt;/code&gt; index if it doesn’t exist, adds a new document that has an ID of 1, and stores and indexes the &lt;code&gt;firstname&lt;/code&gt; and &lt;code&gt;lastname&lt;/code&gt; fields.&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;The new document is available immediately from any node in the cluster. You can retrieve it with a GET request that specifies its document ID:&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;listingblock&quot;&gt; 
     &lt;div class=&quot;content&quot;&gt; 
      &lt;pre&gt;GET /customer/_doc/1&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;To add multiple documents in one request, use the &lt;code&gt;_bulk&lt;/code&gt; API. Bulk data must be newline-delimited JSON (NDJSON). Each line must end in a newline character (&lt;code&gt;\n&lt;/code&gt;), including the last line.&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;listingblock&quot;&gt; 
     &lt;div class=&quot;content&quot;&gt; 
      &lt;pre&gt;PUT customer/_bulk
{ &quot;create&quot;: { } }
{ &quot;firstname&quot;: &quot;Monica&quot;,&quot;lastname&quot;:&quot;Rambeau&quot;}
{ &quot;create&quot;: { } }
{ &quot;firstname&quot;: &quot;Carol&quot;,&quot;lastname&quot;:&quot;Danvers&quot;}
{ &quot;create&quot;: { } }
{ &quot;firstname&quot;: &quot;Wanda&quot;,&quot;lastname&quot;:&quot;Maximoff&quot;}
{ &quot;create&quot;: { } }
{ &quot;firstname&quot;: &quot;Jennifer&quot;,&quot;lastname&quot;:&quot;Takeda&quot;}&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;&lt;strong&gt;Search&lt;/strong&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;Indexed documents are available for search in near real-time. The following search matches all customers with a first name of &lt;em&gt;Jennifer&lt;/em&gt; in the &lt;code&gt;customer&lt;/code&gt; index.&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;listingblock&quot;&gt; 
     &lt;div class=&quot;content&quot;&gt; 
      &lt;pre&gt;GET customer/_search
{
  &quot;query&quot; : {
    &quot;match&quot; : { &quot;firstname&quot;: &quot;Jennifer&quot; }
  }
}&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;&lt;strong&gt;Explore&lt;/strong&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;You can use Discover in Kibana to interactively search and filter your data. From there, you can start creating visualizations and building and sharing dashboards.&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;To get started, create a &lt;em&gt;data view&lt;/em&gt; that connects to one or more Elasticsearch indices, data streams, or index aliases.&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;olist arabic&quot;&gt; 
     &lt;ol class=&quot;arabic&quot;&gt; 
      &lt;li&gt; &lt;p&gt;Go to &lt;strong&gt;Management &amp;gt; Stack Management &amp;gt; Kibana &amp;gt; Data Views&lt;/strong&gt;.&lt;/p&gt; &lt;/li&gt; 
      &lt;li&gt; &lt;p&gt;Select &lt;strong&gt;Create data view&lt;/strong&gt;.&lt;/p&gt; &lt;/li&gt; 
      &lt;li&gt; &lt;p&gt;Enter a name for the data view and a pattern that matches one or more indices, such as &lt;em&gt;customer&lt;/em&gt;.&lt;/p&gt; &lt;/li&gt; 
      &lt;li&gt; &lt;p&gt;Select &lt;strong&gt;Save data view to Kibana&lt;/strong&gt;.&lt;/p&gt; &lt;/li&gt; 
     &lt;/ol&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;paragraph&quot;&gt; 
     &lt;p&gt;To start exploring, go to &lt;strong&gt;Analytics &amp;gt; Discover&lt;/strong&gt;.&lt;/p&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class=&quot;sect1&quot;&gt; 
 &lt;h2 id=&quot;upgrade&quot;&gt;Upgrade&lt;/h2&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;To upgrade from an earlier version of Elasticsearch, see the &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-upgrade.html&quot;&gt;Elasticsearch upgrade documentation&lt;/a&gt;.&lt;/p&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class=&quot;sect1&quot;&gt; 
 &lt;h2 id=&quot;build-source&quot;&gt;Build from source&lt;/h2&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;Elasticsearch uses &lt;a href=&quot;https://gradle.org&quot;&gt;Gradle&lt;/a&gt; for its build system.&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;To build a distribution for your local OS and print its output location upon completion, run:&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;listingblock&quot;&gt; 
   &lt;div class=&quot;content&quot;&gt; 
    &lt;pre&gt;./gradlew localDistro&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;To build a distribution for another platform, run the related command:&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;listingblock&quot;&gt; 
   &lt;div class=&quot;content&quot;&gt; 
    &lt;pre&gt;./gradlew :distribution:archives:linux-tar:assemble
./gradlew :distribution:archives:darwin-tar:assemble
./gradlew :distribution:archives:windows-zip:assemble&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;Distributions are output to &lt;code&gt;distribution/archives&lt;/code&gt;.&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;To run the test suite, see &lt;a href=&quot;https://raw.githubusercontent.com/elastic/elasticsearch/main/TESTING.asciidoc&quot;&gt;TESTING&lt;/a&gt;.&lt;/p&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class=&quot;sect1&quot;&gt; 
 &lt;h2 id=&quot;docs&quot;&gt;Documentation&lt;/h2&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;For the complete Elasticsearch documentation visit &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html&quot;&gt;elastic.co&lt;/a&gt;.&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;For information about our documentation processes, see the &lt;a href=&quot;https://github.com/elastic/elasticsearch/raw/main/docs/README.md&quot;&gt;docs README&lt;/a&gt;.&lt;/p&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class=&quot;sect1&quot;&gt; 
 &lt;h2 id=&quot;examples&quot;&gt;Examples and guides&lt;/h2&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;The &lt;a href=&quot;https://github.com/elastic/elasticsearch-labs&quot;&gt;&lt;code&gt;elasticsearch-labs&lt;/code&gt;&lt;/a&gt; repo contains executable Python notebooks, sample apps, and resources to test out Elasticsearch for vector search, hybrid search and generative AI use cases.&lt;/p&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class=&quot;sect1&quot;&gt; 
 &lt;h2 id=&quot;contribute&quot;&gt;Contribute&lt;/h2&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;paragraph&quot;&gt; 
   &lt;p&gt;For contribution guidelines, see &lt;a href=&quot;https://raw.githubusercontent.com/elastic/elasticsearch/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING&lt;/a&gt;.&lt;/p&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class=&quot;sect1&quot;&gt; 
 &lt;h2 id=&quot;questions&quot;&gt;Questions? Problems? Suggestions?&lt;/h2&gt; 
 &lt;div class=&quot;sectionbody&quot;&gt; 
  &lt;div class=&quot;ulist&quot;&gt; 
   &lt;ul&gt; 
    &lt;li&gt; &lt;p&gt;To report a bug or request a feature, create a &lt;a href=&quot;https://github.com/elastic/elasticsearch/issues/new/choose&quot;&gt;GitHub Issue&lt;/a&gt;. Please ensure someone else hasn’t created an issue for the same topic.&lt;/p&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Need help using Elasticsearch? Reach out on the &lt;a href=&quot;https://discuss.elastic.co&quot;&gt;Elastic Forum&lt;/a&gt; or &lt;a href=&quot;https://ela.st/slack&quot;&gt;Slack&lt;/a&gt;. A fellow community member or Elastic engineer will be happy to help you out.&lt;/p&gt; &lt;/li&gt; 
   &lt;/ul&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/bffecec61ee1e503176858f983a93c6462727e512a77d9c92b5aaee4faf29c20/elastic/elasticsearch" medium="image" />
      
    </item>
    
    <item>
      <title>adityatandon15/Low-Level-Design-Course</title>
      <link>https://github.com/adityatandon15/Low-Level-Design-Course</link>
      <description>&lt;p&gt;All Code of LLD Playlist&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;LLD&lt;/h1&gt; 
&lt;p&gt;All Codes and Notes for System Design (LLD) Playlist of Coder Army. Absolutely Free on Coder Army Youtube Channel.&lt;/p&gt; 
&lt;p&gt;Playlist Link : &lt;a href=&quot;https://youtube.com/playlist?list=PLQEaRBV9gAFvzp6XhcNFpk1WdOcyVo9qT&amp;amp;si=Ihevlxfa3nczoXp0&quot;&gt;https://youtube.com/playlist?list=PLQEaRBV9gAFvzp6XhcNFpk1WdOcyVo9qT&amp;amp;si=Ihevlxfa3nczoXp0&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/67847d5b0be11f577371f3bf929c164e129004096a992cfae5256bc0d17fa8f0/adityatandon15/Low-Level-Design-Course" medium="image" />
      
    </item>
    
    <item>
      <title>quarkusio/quarkus</title>
      <link>https://github.com/quarkusio/quarkus</link>
      <description>&lt;p&gt;Quarkus: Supersonic Subatomic Java.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://quarkus.io/#gh-light-mode-only&quot;&gt;&lt;img src=&quot;https://design.jboss.org/quarkus/logo/final/PNG/quarkus_logo_horizontal_rgb_1280px_default.png#gh-light-mode-only&quot; alt=&quot;Quarkus&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://quarkus.io/#gh-dark-mode-only&quot;&gt;&lt;img src=&quot;https://design.jboss.org/quarkus/logo/final/PNG/quarkus_logo_horizontal_rgb_1280px_reverse.png#gh-dark-mode-only&quot; alt=&quot;Quarkus&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://search.maven.org/artifact/io.quarkus/quarkus-bom&quot;&gt;&lt;img src=&quot;https://img.shields.io/maven-central/v/io.quarkus/quarkus-bom?logo=apache-maven&amp;amp;style=for-the-badge&quot; alt=&quot;Version&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/quarkusio/quarkus/actions?query=workflow%3A%22Quarkus+CI%22&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/QuarkusIO/quarkus/ci-actions-incremental.yml?branch=main&amp;amp;logo=GitHub&amp;amp;style=for-the-badge&quot; alt=&quot;GitHub Actions Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://testpilot.oracle.com/&quot;&gt;&lt;img src=&quot;https://testpilot.oracle.com/ords/testpilot/badges/github/quarkusio/quarkus&quot; alt=&quot;Oracle Test Pilot&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/quarkusio/quarkus/pulse&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/commit-activity/m/quarkusio/quarkus.svg?label=commits&amp;amp;style=for-the-badge&amp;amp;logo=git&amp;amp;logoColor=white&quot; alt=&quot;Commits&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.apache.org/licenses/LICENSE-2.0&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/quarkusio/quarkus?style=for-the-badge&amp;amp;logo=apache&amp;amp;color=brightgreen&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://quarkusio.zulipchat.com/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/zulip-join_chat-brightgreen.svg?style=for-the-badge&amp;amp;logo=zulip&quot; alt=&quot;Project Chat&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://gitpod.io/#https://github.com/quarkusio/quarkus/-/tree/main/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?style=for-the-badge&amp;amp;logo=gitpod&amp;amp;logoColor=white&quot; alt=&quot;Gitpod Ready-to-Code&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/quarkusio/quarkus/actions/runs/113853915/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/JVM-17--25-brightgreen.svg?style=for-the-badge&amp;amp;logo=openjdk&quot; alt=&quot;Supported JVM Versions&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://ge.quarkus.io/scans&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Revved%20up%20by-Develocity-007EC5?style=for-the-badge&amp;amp;logo=gradle&quot; alt=&quot;Develocity&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/quarkusio/quarkus/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/quarkusio/quarkus?style=for-the-badge&quot; alt=&quot;GitHub Repo stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://gurubase.io/g/quarkus&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Gurubase-Ask%20Quarkus%20Guru-007EC5?style=for-the-badge&quot; alt=&quot;Gurubase&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Quarkus - Supersonic Subatomic Java&lt;/h1&gt; 
&lt;p&gt;Quarkus is a Cloud Native, (Linux) Container First framework for writing Java applications.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Container First&lt;/strong&gt;: Minimal footprint Java applications optimal for running in containers.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cloud Native&lt;/strong&gt;: Embraces &lt;a href=&quot;https://12factor.net&quot;&gt;12 factor architecture&lt;/a&gt; in environments like Kubernetes.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Versatile&lt;/strong&gt;: From the smallest microservice to the largest monolith.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Fast startup&lt;/strong&gt;: We do more at build time, we start fast.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;JVM and native&lt;/strong&gt; JVM for high throughput, native for constrained environments.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Unify imperative and reactive&lt;/strong&gt;: Brings under one programming model non-blocking and imperative styles of development.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Standards-based&lt;/strong&gt;: Based on the standards and frameworks you love and use (RESTEasy and JAX-RS, Hibernate ORM and JPA, Netty, Eclipse Vert.x, Eclipse MicroProfile, Apache Camel...).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Developer Joy&lt;/strong&gt;: Development centric experience without compromise to bring your amazing apps to life in no time.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;em&gt;All under ONE framework.&lt;/em&gt;&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://quarkus.io&quot;&gt;Documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/quarkusio/quarkus/wiki&quot;&gt;Wiki&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Migration Guides&lt;/h2&gt; 
&lt;p&gt;We collect all the migration notes in our &lt;a href=&quot;https://github.com/quarkusio/quarkus/wiki/Migration-Guides&quot;&gt;migration guides&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Release Planning&lt;/h2&gt; 
&lt;p&gt;Interested in when the next release is coming? Check our &lt;a href=&quot;https://github.com/quarkusio/quarkus/wiki/Release-Planning&quot;&gt;release planning&lt;/a&gt; document for details.&lt;/p&gt; 
&lt;h2&gt;How to build Quarkus&lt;/h2&gt; 
&lt;p&gt;The build instructions are available in the &lt;a href=&quot;https://raw.githubusercontent.com/quarkusio/quarkus/main/CONTRIBUTING.md&quot;&gt;contribution guide&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/e1102230613e07afc4ae5bb04c21eee24cfbbc79391537b643d469a972b38a17/quarkusio/quarkus" medium="image" />
      
    </item>
    
    <item>
      <title>apache/flink</title>
      <link>https://github.com/apache/flink</link>
      <description>&lt;p&gt;Apache Flink&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Apache Flink&lt;/h1&gt; 
&lt;p&gt;Apache Flink is an open source stream processing framework with powerful stream- and batch-processing capabilities.&lt;/p&gt; 
&lt;p&gt;Learn more about Flink at &lt;a href=&quot;https://flink.apache.org/&quot;&gt;https://flink.apache.org/&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Features&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;A streaming-first runtime that supports both batch processing and data streaming programs&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Elegant and fluent APIs in Java&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;A runtime that supports very high throughput and low event latency at the same time&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Support for &lt;em&gt;event time&lt;/em&gt; and &lt;em&gt;out-of-order&lt;/em&gt; processing in the DataStream API, based on the &lt;em&gt;Dataflow Model&lt;/em&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Flexible windowing (time, count, sessions, custom triggers) across different time semantics (event time, processing time)&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Fault-tolerance with &lt;em&gt;exactly-once&lt;/em&gt; processing guarantees&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Natural back-pressure in streaming programs&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Libraries for Graph processing (batch), Machine Learning (batch), and Complex Event Processing (streaming)&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Custom memory management for efficient and robust switching between in-memory and out-of-core data processing algorithms&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Compatibility layers for Apache Hadoop MapReduce&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Integration with YARN, HDFS, HBase, and other components of the Apache Hadoop ecosystem&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Streaming Example&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;// pojo class WordWithCount
public class WordWithCount {
    public String word;
    public int count;

    public WordWithCount() {}
    
    public WordWithCount(String word, int count) {
        this.word = word;
        this.count = count;
    }
}

// main method
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamSource&amp;lt;String&amp;gt; text = env.socketTextStream(host, port);
DataStream&amp;lt;WordWithCount&amp;gt; windowCounts = text
    .flatMap(
        (FlatMapFunction&amp;lt;String, String&amp;gt;) (line, collector) 
            -&amp;gt; Arrays.stream(line.split(&quot;\\s&quot;)).forEach(collector::collect)
    ).returns(String.class)
    .map(word -&amp;gt; new WordWithCount(word, 1)).returns(TypeInformation.of(WordWithCount.class))
    .keyBy(wordWithCnt -&amp;gt; wordWithCnt.word)
    .window(TumblingProcessingTimeWindows.of(Duration.ofSeconds(5)))
    .sum(&quot;count&quot;).returns(TypeInformation.of(WordWithCount.class));

windowCounts.print();
env.execute();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Batch Example&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;// pojo class WordWithCount
public class WordWithCount {
    public String word;
    public int count;

    public WordWithCount() {}

    public WordWithCount(String word, int count) {
        this.word = word;
        this.count = count;
    }
}

// main method
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setRuntimeMode(RuntimeExecutionMode.BATCH);
FileSource&amp;lt;String&amp;gt; source = FileSource.forRecordStreamFormat(new TextLineInputFormat(), new Path(&quot;MyInput.txt&quot;)).build();
DataStreamSource&amp;lt;String&amp;gt; text = env.fromSource(source, WatermarkStrategy.noWatermarks(), &quot;MySource&quot;);
DataStream&amp;lt;WordWithCount&amp;gt; windowCounts = text
        .flatMap((FlatMapFunction&amp;lt;String, String&amp;gt;) (line, collector) -&amp;gt; Arrays
                .stream(line.split(&quot;\\s&quot;))
                .forEach(collector::collect)).returns(String.class)
        .map(word -&amp;gt; new WordWithCount(word, 1)).returns(TypeInformation.of(WordWithCount.class))
        .keyBy(wordWithCount -&amp;gt; wordWithCount.word)
        .sum(&quot;count&quot;).returns(TypeInformation.of(WordWithCount.class));

windowCounts.print();
env.execute();
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Building Apache Flink from Source&lt;/h2&gt; 
&lt;p&gt;Prerequisites for building Flink:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Unix-like environment (we use Linux, Mac OS X, Cygwin, WSL)&lt;/li&gt; 
 &lt;li&gt;Git&lt;/li&gt; 
 &lt;li&gt;Maven (we require version 3.8.6)&lt;/li&gt; 
 &lt;li&gt;Java (version 11, 17, or 21)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Basic Build Instructions&lt;/h3&gt; 
&lt;p&gt;First, clone the repository:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git clone https://github.com/apache/flink.git
cd flink
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then, choose one of the following commands based on your preferred Java version:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;For Java 11&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;./mvnw clean package -DskipTests -Djdk11 -Pjava11-target
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;For Java 17 (Default)&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;./mvnw clean package -DskipTests -Djdk17 -Pjava17-target
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;For Java 21&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;./mvnw clean package -DskipTests -Djdk21 -Pjava21-target
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The build process will take approximately 10 minutes to complete. Flink will be installed in &lt;code&gt;build-target&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;Notes&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Make sure your JAVA_HOME environment variable points to the correct JDK version&lt;/li&gt; 
 &lt;li&gt;The build command uses Maven wrapper (mvnw) which ensures the correct Maven version is used&lt;/li&gt; 
 &lt;li&gt;The -DskipTests flag skips running tests to speed up the build process&lt;/li&gt; 
 &lt;li&gt;Each Java version requires its corresponding profile (-Pjava
  &lt;version&gt;
   -target) and JDK flag (-Djdk
   &lt;version&gt;
    )
   &lt;/version&gt;
  &lt;/version&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Developing Flink&lt;/h2&gt; 
&lt;p&gt;The Flink committers use IntelliJ IDEA to develop the Flink codebase. We recommend IntelliJ IDEA for developing projects that involve Scala code.&lt;/p&gt; 
&lt;p&gt;Minimal requirements for an IDE are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Support for Java and Scala (also mixed projects)&lt;/li&gt; 
 &lt;li&gt;Support for Maven with Java and Scala&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;IntelliJ IDEA&lt;/h3&gt; 
&lt;p&gt;The IntelliJ IDE supports Maven out of the box and offers a plugin for Scala development.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;IntelliJ download: &lt;a href=&quot;https://www.jetbrains.com/idea/&quot;&gt;https://www.jetbrains.com/idea/&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;IntelliJ Scala Plugin: &lt;a href=&quot;https://plugins.jetbrains.com/plugin/?id=1347&quot;&gt;https://plugins.jetbrains.com/plugin/?id=1347&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Check out our &lt;a href=&quot;https://raw.githubusercontent.com/apache/flink/master/DEVELOPMENT.md&quot;&gt;DEVELOPMENT.md&lt;/a&gt; guide for detailed IDE setup instructions.&lt;/p&gt; 
&lt;h3&gt;Eclipse Scala IDE&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; From our experience, this setup does not work with Flink due to deficiencies of the old Eclipse version bundled with Scala IDE 3.0.3 or due to version incompatibilities with the bundled Scala version in Scala IDE 4.4.1.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;We recommend to use IntelliJ instead (see above)&lt;/strong&gt;&lt;/p&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;Don’t hesitate to ask!&lt;/p&gt; 
&lt;p&gt;Contact the developers and community on the &lt;a href=&quot;https://flink.apache.org/community.html#mailing-lists&quot;&gt;mailing lists&lt;/a&gt; if you need any help.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://issues.apache.org/jira/browse/FLINK&quot;&gt;Open an issue&lt;/a&gt; if you find a bug in Flink.&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;The documentation of Apache Flink is located on the website: &lt;a href=&quot;https://flink.apache.org&quot;&gt;https://flink.apache.org&lt;/a&gt; or in the &lt;code&gt;docs/&lt;/code&gt; directory of the source code.&lt;/p&gt; 
&lt;h2&gt;Fork and Contribute&lt;/h2&gt; 
&lt;p&gt;This is an active open-source project. We are always open to people who want to use the system or contribute to it. Contact us if you are looking for implementation tasks that fit your skills. This article describes &lt;a href=&quot;https://flink.apache.org/contributing/how-to-contribute.html&quot;&gt;how to contribute to Apache Flink&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Externalized Connectors&lt;/h2&gt; 
&lt;p&gt;Most Flink connectors have been externalized to individual repos under the &lt;a href=&quot;https://github.com/apache&quot;&gt;Apache Software Foundation&lt;/a&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/flink-connector-aws&quot;&gt;flink-connector-aws&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/flink-connector-cassandra&quot;&gt;flink-connector-cassandra&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/flink-connector-elasticsearch&quot;&gt;flink-connector-elasticsearch&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/flink-connector-gcp-pubsub&quot;&gt;flink-connector-gcp-pubsub&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/flink-connector-hbase&quot;&gt;flink-connector-hbase&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/flink-connector-hive&quot;&gt;flink-connector-hive&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/flink-connector-jdbc&quot;&gt;flink-connector-jdbc&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/flink-connector-kafka&quot;&gt;flink-connector-kafka&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/flink-connector-mongodb&quot;&gt;flink-connector-mongodb&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/flink-connector-opensearch&quot;&gt;flink-connector-opensearch&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/flink-connector-prometheus&quot;&gt;flink-connector-prometheus&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/flink-connector-pulsar&quot;&gt;flink-connector-pulsar&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/flink-connector-rabbitmq&quot;&gt;flink-connector-rabbitmq&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;About&lt;/h2&gt; 
&lt;p&gt;Apache Flink is an open source project of The Apache Software Foundation (ASF). The Apache Flink project originated from the &lt;a href=&quot;http://stratosphere.eu&quot;&gt;Stratosphere&lt;/a&gt; research project.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/195b527ae79643c680831c9a40bd79f386dd58d231f567b01ddae9e77a58da59/apache/flink" medium="image" />
      
    </item>
    
    <item>
      <title>conductor-oss/conductor</title>
      <link>https://github.com/conductor-oss/conductor</link>
      <description>&lt;p&gt;Conductor is an event driven agentic workflow engine providing durable and highly resilient execution engine for applications and AI Agents&lt;/p&gt;&lt;hr&gt;&lt;picture&gt; 
 &lt;!-- Dark mode logo --&gt; 
 &lt;source srcset=&quot;https://github.com/user-attachments/assets/104b3a67-6013-4622-8075-a45da3a9e726&quot; media=&quot;(prefers-color-scheme: dark)&quot; /&gt; 
 &lt;!-- Light mode logo --&gt; 
 &lt;img src=&quot;https://assets.conductor-oss.org/logo.png&quot; alt=&quot;Logo&quot; /&gt; 
&lt;/picture&gt; 
&lt;h1 align=&quot;center&quot; style=&quot;border-bottom: none&quot;&gt; Conductor - Internet scale Agentic Workflow Engine &lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/conductor-oss/conductor/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/conductor-oss/conductor?style=social&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/conductor-oss/conductor/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/conductor-oss/conductor.svg?sanitize=true&quot; alt=&quot;Github release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/conductor-oss/conductor.svg?sanitize=true&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://join.slack.com/t/orkes-conductor/shared_invite/zt-2vdbx239s-Eacdyqya9giNLHfrCavfaA&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Slack-Join%20the%20Community-blueviolet?logo=slack&quot; alt=&quot;Conductor Slack&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://conductor-oss.org&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Conductor%20OSS-Visit%20Site-blue&quot; alt=&quot;Conductor OSS&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h4&gt;Orchestrating distributed systems means wrestling with failures, retries, and state recovery. Conductor handles all of that so you don&#39;t have to.&lt;/h4&gt; 
&lt;p&gt;Conductor is an open-source, durable workflow engine built at &lt;a href=&quot;https://netflixtechblog.com/netflix-conductor-a-microservices-orchestrator-2e8d4771bf40&quot;&gt;Netflix&lt;/a&gt; for orchestrating microservices, AI agents, and durable workflows at internet scale. Trusted in production at Netflix, Tesla, LinkedIn, and J.P. Morgan. Actively maintained by &lt;a href=&quot;https://orkes.io&quot;&gt;Orkes&lt;/a&gt; and a growing &lt;a href=&quot;https://join.slack.com/t/orkes-conductor/shared_invite/zt-2vdbx239s-Eacdyqya9giNLHfrCavfaA&quot;&gt;community&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://youtu.be/4azDdDlx27M&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/6153aa58-8ad1-4ec5-93d1-38ba1b83e3f4&quot; alt=&quot;conductor_oss_getting_started&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h1&gt;Get Running in 60 Seconds&lt;/h1&gt; 
&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt; &lt;a href=&quot;https://nodejs.org/&quot;&gt;Node.js&lt;/a&gt; v16+ and Java 21+ must be installed.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;npm install -g @conductor-oss/conductor-cli
conductor server start
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Open &lt;a href=&quot;http://localhost:8080&quot;&gt;http://localhost:8080&lt;/a&gt; — your server is running with the built-in UI.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Run your first workflow:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# Create a workflow that calls an API and parses the response — no workers needed
curl -s https://raw.githubusercontent.com/conductor-oss/conductor/main/docs/quickstart/workflow.json -o workflow.json
conductor workflow create workflow.json
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Running this command twice will return an error on the second call — the workflow already exists. This is expected behavior. Use &lt;code&gt;conductor workflow update&lt;/code&gt; to modify an existing workflow.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;conductor workflow start -w hello_workflow --sync
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://docs.conductor-oss.org/quickstart/&quot;&gt;Quickstart guide&lt;/a&gt; for the full walkthrough, including writing workers and replaying workflows.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Docker Image for Conductor:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;docker run -p 8080:8080 conductoross/conductor:latest # replace latest with the published version to pin to a specific version
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;All CLI commands have equivalent cURL/API calls. See the &lt;a href=&quot;https://docs.conductor-oss.org/quickstart/&quot;&gt;Quickstart&lt;/a&gt; for details.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h1&gt;Why Conductor is the workflow engine of choice for developers&lt;/h1&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Durable execution&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Every step is persisted. Survives crashes, restarts, and network failures with configurable retries and timeouts.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Deterministic by design&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Orchestration is separated from business logic — determinism is architectural, not developer discipline. Workers run any code; the workflow graph stays deterministic by construction.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;AI agent orchestration&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;14+ native LLM providers, MCP tool calling, function calling, human-in-the-loop approval, and vector databases for RAG.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Dynamic at runtime&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Dynamic forks, tasks, and sub-workflows resolved at runtime. LLMs generate JSON workflow definitions and Conductor executes them immediately.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Full replayability&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Restart from the beginning, rerun from any task, or retry just the failed step — on any workflow, at any time.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Internet scale&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Battle-tested at Netflix, Tesla, LinkedIn, and J.P. Morgan. Scales horizontally to billions of workflow executions.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Polyglot workers&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Workers in Java, Python, Go, JavaScript, C#, Ruby, or Rust. Workers poll, execute, and report — run them anywhere.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Self-hosted, no lock-in&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Apache 2.0. 5 persistence backends, 6 message brokers. Runs anywhere Docker or a JVM runs.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h1&gt;Ship Agents, Not Framework Code&lt;/h1&gt; 
&lt;p&gt;Conductor workers are plain code — any language, any library, any I/O. No determinism constraints, no SDK ritual. The orchestration layer is declarative and machine-readable, so LLMs generate and compose workflows natively. If an agent crashes at iteration 12, it resumes from iteration 12.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;An autonomous think-act agent in Conductor:&lt;/strong&gt; discover tools via MCP, reason with an LLM, call the chosen tool, repeat until done.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;name&quot;: &quot;autonomous_agent&quot;,
  &quot;description&quot;: &quot;Agent that loops until the task is complete&quot;,
  &quot;version&quot;: 1,
  &quot;tasks&quot;: [
    {
      &quot;name&quot;: &quot;discover_tools&quot;,
      &quot;taskReferenceName&quot;: &quot;discover&quot;,
      &quot;type&quot;: &quot;LIST_MCP_TOOLS&quot;,
      &quot;inputParameters&quot;: {
        &quot;mcpServer&quot;: &quot;${workflow.input.mcpServerUrl}&quot;
      }
    },
    {
      &quot;name&quot;: &quot;agent_loop&quot;,
      &quot;taskReferenceName&quot;: &quot;loop&quot;,
      &quot;type&quot;: &quot;DO_WHILE&quot;,
      &quot;loopCondition&quot;: &quot;if ($.loop[&#39;think&#39;].output.result.done == true) { false; } else { true; }&quot;,
      &quot;loopOver&quot;: [
        {
          &quot;name&quot;: &quot;think&quot;,
          &quot;taskReferenceName&quot;: &quot;think&quot;,
          &quot;type&quot;: &quot;LLM_CHAT_COMPLETE&quot;,
          &quot;inputParameters&quot;: {
            &quot;llmProvider&quot;: &quot;openai&quot;,
            &quot;model&quot;: &quot;gpt-4o-mini&quot;,
            &quot;messages&quot;: [
              {
                &quot;role&quot;: &quot;system&quot;,
                &quot;message&quot;: &quot;You are an autonomous agent. Available tools: ${discover.output.tools}. Previous results: ${loop.output.results}. Respond with JSON: {\&quot;action\&quot;: \&quot;tool_name\&quot;, \&quot;arguments\&quot;: {}, \&quot;done\&quot;: false} or {\&quot;answer\&quot;: \&quot;final answer\&quot;, \&quot;done\&quot;: true}.&quot;
              },
              { &quot;role&quot;: &quot;user&quot;, &quot;message&quot;: &quot;${workflow.input.task}&quot; }
            ]
          }
        },
        {
          &quot;name&quot;: &quot;act&quot;,
          &quot;taskReferenceName&quot;: &quot;act&quot;,
          &quot;type&quot;: &quot;SWITCH&quot;,
          &quot;expression&quot;: &quot;$.think.output.result.done ? &#39;done&#39; : &#39;call_tool&#39;&quot;,
          &quot;decisionCases&quot;: {
            &quot;call_tool&quot;: [
              {
                &quot;name&quot;: &quot;execute_tool&quot;,
                &quot;taskReferenceName&quot;: &quot;tool_call&quot;,
                &quot;type&quot;: &quot;CALL_MCP_TOOL&quot;,
                &quot;inputParameters&quot;: {
                  &quot;mcpServer&quot;: &quot;${workflow.input.mcpServerUrl}&quot;,
                  &quot;method&quot;: &quot;${think.output.result.action}&quot;,
                  &quot;arguments&quot;: &quot;${think.output.result.arguments}&quot;
                }
              }
            ]
          }
        }
      ]
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Every step is durably persisted — no framework, no SDK lock-in. Code-first engines force your code to be deterministic so the framework can replay it. Conductor makes the engine deterministic — so your code doesn&#39;t have to be.&lt;/p&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://docs.conductor-oss.org/devguide/ai/first-ai-agent.html&quot;&gt;Build Your First AI Agent&lt;/a&gt; guide for the full walkthrough.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Conductor Skills for AI Coding Assistants&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/conductor-oss/conductor-skills&quot;&gt;Conductor Skills&lt;/a&gt;&lt;/strong&gt; let AI coding assistants (Claude Code, Gemini CLI, and others) create, manage, and deploy Conductor workflows directly from your terminal.&lt;/p&gt; 
&lt;h3&gt;Claude&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# Install Skills for Claude Code
/plugin marketplace add conductor-oss/conductor-skills
/plugin install conductor@conductor-skills
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Install for all detected agents&lt;/h3&gt; 
&lt;p&gt;One command to auto-detect every supported agent on your system and install globally where possible. Re-run anytime — it only installs for newly detected agents.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;macOS / Linux&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -sSL https://conductor-oss.github.io/conductor-skills/install.sh | bash -s -- --all
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Windows (PowerShell) / (cmd)&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;# powershell
irm https://conductor-oss.github.io/conductor-skills/install.ps1 -OutFile install.ps1; .\install.ps1 -All

# cmd
powershell -c &quot;irm https://conductor-oss.github.io/conductor-skills/install.ps1 -OutFile install.ps1; .\install.ps1 -All&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h1&gt;SDKs&lt;/h1&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Language&lt;/th&gt; 
   &lt;th&gt;Repository&lt;/th&gt; 
   &lt;th&gt;Install&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;☕ Java&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/conductor-oss/java-sdk&quot;&gt;conductor-oss/java-sdk&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://mvnrepository.com/artifact/org.conductoross/conductor-client&quot;&gt;Maven Central&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🐍 Python&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/conductor-oss/python-sdk&quot;&gt;conductor-oss/python-sdk&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;pip install conductor-python&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🟨 JavaScript&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/conductor-oss/javascript-sdk&quot;&gt;conductor-oss/javascript-sdk&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;npm install @io-orkes/conductor-javascript&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🐹 Go&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/conductor-oss/go-sdk&quot;&gt;conductor-oss/go-sdk&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;go get github.com/conductor-sdk/conductor-go&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🟣 C#&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/conductor-oss/csharp-sdk&quot;&gt;conductor-oss/csharp-sdk&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;dotnet add package conductor-csharp&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;💎 Ruby&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/conductor-oss/ruby-sdk&quot;&gt;conductor-oss/ruby-sdk&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;em&gt;(incubating)&lt;/em&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🦀 Rust&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/conductor-oss/rust-sdk&quot;&gt;conductor-oss/rust-sdk&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;em&gt;(incubating)&lt;/em&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h1&gt;Documentation &amp;amp; Community&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://conductor-oss.org&quot;&gt;Documentation&lt;/a&gt;&lt;/strong&gt; — Architecture, guides, API reference, and cookbook recipes.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://join.slack.com/t/orkes-conductor/shared_invite/zt-2vdbx239s-Eacdyqya9giNLHfrCavfaA&quot;&gt;Slack&lt;/a&gt;&lt;/strong&gt; — Community discussions and support.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://community.orkes.io/&quot;&gt;Community Forum&lt;/a&gt;&lt;/strong&gt; — Ask questions and share patterns.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Backend Configuration&lt;/strong&gt;&lt;/summary&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Backend&lt;/th&gt; 
    &lt;th&gt;Configuration&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Redis + ES7 (default)&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/conductor-oss/conductor/main/docker/server/config/config-redis.properties&quot;&gt;config-redis.properties&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Redis + ES8&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/conductor-oss/conductor/main/docker/server/config/config-redis-es8.properties&quot;&gt;config-redis-es8.properties&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Redis + OpenSearch&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/conductor-oss/conductor/main/docker/server/config/config-redis-os.properties&quot;&gt;config-redis-os.properties&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Postgres&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/conductor-oss/conductor/main/docker/server/config/config-postgres.properties&quot;&gt;config-postgres.properties&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Postgres + ES7&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/conductor-oss/conductor/main/docker/server/config/config-postgres-es7.properties&quot;&gt;config-postgres-es7.properties&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;MySQL + ES7&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/conductor-oss/conductor/main/docker/server/config/config-mysql.properties&quot;&gt;config-mysql.properties&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h1&gt;Build From Source&lt;/h1&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Requirements and instructions&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt; Docker Desktop, Java (JDK) 21+, Node 18 (for UI)&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;git clone https://github.com/conductor-oss/conductor
cd conductor
./gradlew build

# (optional) Build UI
# ./build_ui.sh

# Start local server
cd server
../gradlew bootRun
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/conductor-oss/conductor/main/docs/devguide/running/source.md&quot;&gt;full build guide&lt;/a&gt; for details.&lt;/p&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h1&gt;FAQ&lt;/h1&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Is this the same as Netflix Conductor?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Yes. Conductor OSS is the continuation of the original &lt;a href=&quot;https://github.com/Netflix/conductor&quot;&gt;Netflix Conductor&lt;/a&gt; repository after Netflix contributed the project to the open-source foundation.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Is Conductor open source?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Yes. Conductor is a fully open-source workflow engine licensed under Apache 2.0. You can self-host on your own infrastructure with 5 persistence backends and 6 message brokers.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Is this project actively maintained?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Yes. &lt;a href=&quot;https://orkes.io&quot;&gt;Orkes&lt;/a&gt; is the primary maintainer and offers an enterprise SaaS platform for Conductor across all major cloud providers.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Can Conductor scale to handle my workload?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Yes. Built at Netflix, battle-tested at internet scale. Conductor scales horizontally across multiple server instances to handle billions of workflow executions.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Does Conductor support durable execution?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Yes. Conductor pioneered durable execution patterns, ensuring workflows and durable agents complete reliably despite infrastructure failures or crashes. Every step is persisted and recoverable.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Can I replay a workflow after it completes or fails?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Yes. Conductor preserves full execution history indefinitely. You can restart from the beginning, rerun from a specific task, or retry just the failed step — via API or UI.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Can Conductor orchestrate AI agents and LLMs?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Yes. Conductor provides native integration with 14+ LLM providers (Anthropic, OpenAI, Gemini, Bedrock, and more), MCP tool calling, function calling, human-in-the-loop approval, and vector database integration for RAG.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Why does Conductor separate orchestration from code?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Coupling orchestration logic with business logic forces developers to maintain determinism constraints manually — no direct I/O, no system time, no randomness in workflow definitions. Conductor eliminates this entire class of bugs by making the orchestration layer deterministic by construction. Workers are plain code with zero framework constraints — write them in any language, use any library, call any API.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Isn&#39;t writing workflows as code more powerful than JSON?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;It depends on what you mean by &quot;powerful.&quot; In code-first engines, the workflow definition and your business logic live in the same runtime — which means the engine must replay your code to recover state. That forces determinism constraints on your business logic: no direct I/O, no system time, no threads, no randomness. Conductor separates these concerns. The orchestration graph is declarative (JSON), so it&#39;s deterministic by construction. Your workers are plain code with zero constraints — use any language, any library, call any API. You get the full power of code where it matters (business logic) without the framework tax where it doesn&#39;t (orchestration).&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Can JSON workflows handle complex logic like branching, loops, and error handling?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Yes. Conductor supports &lt;code&gt;SWITCH&lt;/code&gt; (conditional branching), &lt;code&gt;DO_WHILE&lt;/code&gt; (loops with configurable iteration cleanup), &lt;code&gt;FORK_JOIN&lt;/code&gt; (parallel execution with dynamic fanout), &lt;code&gt;SUB_WORKFLOW&lt;/code&gt; (composition), and &lt;code&gt;DYNAMIC&lt;/code&gt; tasks resolved at runtime. These are composable — you can nest loops inside branches inside forks. For error handling, every task supports configurable retries, timeouts, and optional/compensating tasks. The declarative model doesn&#39;t limit complexity — it makes complexity visible and debuggable.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;How does Conductor handle workflow versioning?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Workflow definitions are versioned by number. Running executions continue on the version they started with — deploying a new version never breaks in-flight workflows. There&#39;s no replay compatibility problem because Conductor doesn&#39;t replay your code. The orchestration graph is the source of truth, and each execution is pinned to its definition version. Update orchestration logic without redeploying workers and without worrying about breaking running workflows.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;What about developer experience — IDE support, type checking, debugging?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Conductor provides a built-in visual UI for designing, running, and debugging workflows. Every execution is fully observable: you can inspect the input, output, timing, and retry history of every task. For type safety, Conductor validates workflow inputs and task I/O against JSON Schema. Workers are plain code in your language of choice — you get full IDE support, type checking, and debugging for your business logic. The orchestration layer is visible in the UI, not hidden inside a framework.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Can Conductor handle long-running workflows (days, weeks, months)?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Yes. Conductor is designed for long-running workflows. Executions are fully persisted — a workflow can pause for months waiting for a human approval, an external signal, or a scheduled timer, and resume exactly where it left off. There&#39;s no in-memory state to lose. This is the same mechanism that makes AI agent loops durable: if iteration 12 waits for a human review for three weeks, iteration 13 picks up right where it left off.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Don&#39;t I lose flexibility by not having orchestration in code?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;You gain flexibility. Because workflows are JSON, LLMs can generate and modify them at runtime — no compile/deploy cycle. Dynamic forks let you fan out to a variable number of parallel tasks determined at runtime. Dynamic sub-workflows let one workflow compose others by name. And because workers are decoupled from orchestration, you can update the workflow graph or swap worker implementations independently. Code-first engines couple these together, so changing orchestration means redeploying and re-versioning your code.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;How does Conductor compare to other workflow engines?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Conductor is an open-source workflow engine with native LLM task types for 14+ providers, built-in MCP integration, durable execution, full replayability, and 7 language SDKs. Unlike code-first engines, Conductor separates orchestration from business logic — determinism is an architectural guarantee, not a developer constraint. Your workers are plain code with zero framework rules. The orchestration layer is declarative, so it&#39;s observable, versionable, and composable by LLMs. Battle-tested at Netflix, Tesla, LinkedIn, and J.P. Morgan.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Is Orkes Conductor compatible with Conductor OSS?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;100% compatible. Orkes Conductor is built on top of Conductor OSS with full API and workflow compatibility.&lt;/p&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h1&gt;Contributing&lt;/h1&gt; 
&lt;p&gt;We welcome contributions from everyone!&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Report Issues:&lt;/strong&gt; Open an &lt;a href=&quot;https://github.com/conductor-oss/conductor/issues&quot;&gt;issue on GitHub&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Contribute code:&lt;/strong&gt; Check out our &lt;a href=&quot;https://raw.githubusercontent.com/conductor-oss/conductor/main/CONTRIBUTING.md&quot;&gt;Contribution Guide&lt;/a&gt; and &lt;a href=&quot;https://github.com/conductor-oss/conductor/labels/good%20first%20issue&quot;&gt;good first issues&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Improve docs:&lt;/strong&gt; Help keep our &lt;a href=&quot;https://github.com/conductor-oss/conductor/tree/main/docs&quot;&gt;documentation&lt;/a&gt; great.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contributors&lt;/h2&gt; 
&lt;a href=&quot;https://github.com/conductor-oss/conductor/graphs/contributors&quot;&gt; &lt;img src=&quot;https://contrib.rocks/image?repo=conductor-oss/conductor&quot; /&gt; &lt;/a&gt; 
&lt;hr /&gt; 
&lt;h1&gt;Roadmap&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/conductor-oss/conductor/main/ROADMAP.md&quot;&gt;See the Conductor OSS Roadmap&lt;/a&gt;. Want to participate? &lt;a href=&quot;https://forms.gle/P2i1xHrxPQLrjzTB7&quot;&gt;Reach out&lt;/a&gt;.&lt;/p&gt; 
&lt;h1&gt;License&lt;/h1&gt; 
&lt;p&gt;Conductor is licensed under the &lt;a href=&quot;https://raw.githubusercontent.com/conductor-oss/conductor/main/LICENSE&quot;&gt;Apache 2.0 License&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/728981719/1eebc3c7-281e-4a8d-a11f-d5ac9913a264" medium="image" />
      
    </item>
    
    <item>
      <title>bethington/ghidra-mcp</title>
      <link>https://github.com/bethington/ghidra-mcp</link>
      <description>&lt;p&gt;Ghidra MCP Server — 200+ MCP tools for AI-powered reverse engineering. GUI plugin + headless server, lazy tool loading, convention enforcement, batch operations, Ghidra Server integration, and Docker deployment.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Ghidra MCP Server&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/bethington/ghidra-mcp/actions/workflows/tests.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/bethington/ghidra-mcp/tests.yml?branch=main&amp;amp;style=for-the-badge&amp;amp;label=Tests&amp;amp;logo=github-actions&amp;amp;logoColor=white&quot; alt=&quot;Tests&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/bethington/ghidra-mcp/releases/latest&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/bethington/ghidra-mcp?style=for-the-badge&amp;amp;logo=github&amp;amp;logoColor=white&amp;amp;color=blue&quot; alt=&quot;Release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/bethington/ghidra-mcp?style=for-the-badge&amp;amp;color=green&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/sponsors/bethington&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/sponsors/bethington?style=for-the-badge&amp;amp;logo=githubsponsors&amp;amp;logoColor=white&amp;amp;label=Sponsors&amp;amp;labelColor=ea4aaa&amp;amp;color=ea4aaa&quot; alt=&quot;GitHub Sponsors&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.python.org/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-3776AB?style=for-the-badge&amp;amp;logo=python&amp;amp;logoColor=white&quot; alt=&quot;Python&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://openjdk.org/projects/jdk/21/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Java-21-ED8B00?style=for-the-badge&amp;amp;logo=openjdk&amp;amp;logoColor=white&quot; alt=&quot;Java&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://ghidra-sre.org/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Ghidra-12.1-brightgreen?style=for-the-badge&amp;amp;logoColor=white&quot; alt=&quot;Ghidra&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://modelcontextprotocol.io/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/MCP-Model%20Context%20Protocol-6C5CE7?style=for-the-badge&amp;amp;logoColor=white&quot; alt=&quot;MCP&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/bethington/ghidra-mcp/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/bethington/ghidra-mcp?style=for-the-badge&amp;amp;logo=github&amp;amp;logoColor=white&amp;amp;color=yellow&quot; alt=&quot;Stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/bethington/ghidra-mcp/commits/main&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/bethington/ghidra-mcp?style=for-the-badge&amp;amp;logo=git&amp;amp;logoColor=white&quot; alt=&quot;Last commit&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/bethington/ghidra-mcp/discussions&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/discussions-join-7B68EE?style=for-the-badge&amp;amp;logo=github&amp;amp;logoColor=white&quot; alt=&quot;Discussions&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/bethington/ghidra-mcp/issues&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/issues/bethington/ghidra-mcp?style=for-the-badge&amp;amp;logo=github&amp;amp;logoColor=white&amp;amp;color=orange&quot; alt=&quot;Issues&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://scorecard.dev/viewer/?uri=github.com/bethington/ghidra-mcp&quot;&gt;&lt;img src=&quot;https://api.securityscorecards.dev/projects/github.com/bethington/ghidra-mcp/badge&quot; alt=&quot;OpenSSF Scorecard&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;If you find this useful, please ⭐ star the repo — it helps others discover it!&lt;/p&gt; 
 &lt;p&gt;If Ghidra MCP saves you time, consider &lt;a href=&quot;https://github.com/sponsors/bethington&quot;&gt;sponsoring the project&lt;/a&gt;. One-time and recurring support both help fund compatibility updates, production hardening, docs, and new tooling.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;A production-ready Model Context Protocol (MCP) server that bridges Ghidra&#39;s powerful reverse engineering capabilities with modern AI tools and automation frameworks. &lt;strong&gt;252 MCP tools&lt;/strong&gt;, battle-tested AI workflows, and the most comprehensive Ghidra-MCP integration available — now including P-code emulation, live debugger integration, and PCode-graph data flow analysis.&lt;/p&gt; 
&lt;h2&gt;Why Ghidra MCP?&lt;/h2&gt; 
&lt;p&gt;Most Ghidra MCP implementations give you a handful of read-only tools and call it a day. This project is different — it was built by a reverse engineer who uses it daily on real binaries, not as a demo.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;252 MCP tools&lt;/strong&gt; — 3x more than any competing implementation. Not just read operations — full write access for renaming, typing, commenting, structure creation, script execution, P-code emulation, and live debugging.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Battle-tested AI workflows&lt;/strong&gt; — Proven documentation workflows (V5) refined across hundreds of functions. Includes step-by-step prompts, Hungarian notation reference, batch processing guides, and orphaned code discovery.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Production-grade reliability&lt;/strong&gt; — Atomic transactions, batch operations (93% API call reduction), configurable timeouts, and graceful error handling. No silent failures.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cross-binary documentation transfer&lt;/strong&gt; — SHA-256 function hash matching propagates documentation across binary versions automatically. Document once, apply everywhere.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Full Ghidra Server integration&lt;/strong&gt; — Connect to shared Ghidra servers, manage repositories, version control, checkout/checkin workflows, and multi-user collaboration.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Headless and GUI modes&lt;/strong&gt; — Run with or without the Ghidra GUI. Docker-ready for CI/CD pipelines and automated analysis at scale.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Opinionated by design&lt;/strong&gt; — v5.0 moves naming conventions, type safety, and documentation standards into the tool layer. AI agents and human engineers produce consistent output without style guides in every prompt.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Convention Enforcement&lt;/h2&gt; 
&lt;p&gt;You&#39;ve been there: six months into a project you find &lt;code&gt;ProcessItem&lt;/code&gt;, &lt;code&gt;process_items&lt;/code&gt;, &lt;code&gt;handleItem&lt;/code&gt;, and &lt;code&gt;ItemProc&lt;/code&gt; in the same codebase — four functions doing the same thing, named by four different sessions or engineers with no shared contract. Fixing it takes longer than it should, and the problem will happen again.&lt;/p&gt; 
&lt;p&gt;v5.0 moves conventions from &quot;things to remember&quot; into the tool layer, where they can actually be enforced.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Tier&lt;/th&gt; 
   &lt;th&gt;Behavior&lt;/th&gt; 
   &lt;th&gt;Example&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Auto-fix&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Applied silently&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;count&lt;/code&gt; field on a &lt;code&gt;uint32&lt;/code&gt; → auto-prefixed &lt;code&gt;dwCount&lt;/code&gt; on save&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Warn&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Change goes through, warning returned&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;processData&lt;/code&gt; → &quot;name should be PascalCase with a verb: &lt;code&gt;ProcessData&lt;/code&gt;&quot;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Reject&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Change blocked with explanation&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;undefined → undefined&lt;/code&gt; type change → &quot;no-op rejected, type unchanged&quot;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;For AI agents&lt;/strong&gt;, this means consistent output across every session, every model, every run — without pasting a style guide into every prompt. The tool knows the rules; the model just needs to make the call.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;For teams&lt;/strong&gt;, it eliminates the entire class of review comment that says &quot;that&#39;s not our naming convention.&quot; Convention arbitration stays in the tool, not in code review.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;For solo work at scale&lt;/strong&gt;, &lt;code&gt;analyze_function_completeness&lt;/code&gt; gives you a 0–100% score that measures honestly: structural deductions (unfixable compiler artifacts) are forgiven in your effective score, log-scaling prevents one bad category from burying everything else, and tiered plate comment quality means you know exactly what&#39;s missing and why.&lt;/p&gt; 
&lt;h2&gt;🌟 Features&lt;/h2&gt; 
&lt;h3&gt;Core MCP Integration&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Full MCP Compatibility&lt;/strong&gt; — Complete implementation of Model Context Protocol&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;252 MCP Tools&lt;/strong&gt; — Comprehensive API surface covering every aspect of binary analysis&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Production-Ready Reliability&lt;/strong&gt; — Atomic transactions, batch operations, configurable timeouts&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Real-time Analysis&lt;/strong&gt; — Live integration with Ghidra&#39;s analysis engine&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Compatibility note:&lt;/strong&gt; MCP tool names are normalized for GitHub Copilot CLI and CAPI validation. Exposed tool names use lowercase letters, digits, underscores, and hyphens only; nested HTTP paths such as &lt;code&gt;/debugger/status&lt;/code&gt; are advertised as names like &lt;code&gt;debugger_status_2&lt;/code&gt; when needed to avoid collisions with static bridge tools.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Binary Analysis Capabilities&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Function Analysis&lt;/strong&gt; — Decompilation, call graphs, cross-references, completeness scoring&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Data Flow Analysis&lt;/strong&gt; — PCode-graph value propagation (forward / backward) from any variable or register&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Data Structure Discovery&lt;/strong&gt; — Struct/union/enum creation with field analysis and naming suggestions&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;String Extraction&lt;/strong&gt; — Regex search, quality filtering, and string-anchored function discovery&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Import/Export Analysis&lt;/strong&gt; — Symbol tables, external locations, ordinal import resolution&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Memory &amp;amp; Data Inspection&lt;/strong&gt; — Raw memory reads, byte pattern search, array boundary detection&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cross-Binary Documentation&lt;/strong&gt; — Function hash matching and documentation propagation across versions&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Dynamic Analysis (v5.4.0)&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;P-code Emulation&lt;/strong&gt; — Run any function in isolation via Ghidra&#39;s &lt;code&gt;EmulatorHelper&lt;/code&gt;; brute-force API hash resolution in milliseconds&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Live Debugger Integration&lt;/strong&gt; — 17 Java endpoints + 22 Python bridge tools over Ghidra&#39;s TraceRmi framework (dbgeng on Windows PE, gdb/lldb otherwise): attach, step, breakpoints, registers, memory reads, non-breaking function tracing, ASLR-aware static↔dynamic address translation&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;AI-Powered Reverse Engineering Workflows&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Function Documentation Workflow V5&lt;/strong&gt; — 7-step process for complete function documentation with Hungarian notation, type auditing, and automated verification scoring&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Batch Documentation&lt;/strong&gt; — Parallel subagent dispatch for documenting multiple functions simultaneously&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Orphaned Code Discovery&lt;/strong&gt; — Automated scanner finds undiscovered functions in gaps between known code&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Data Type Investigation&lt;/strong&gt; — Systematic workflows for structure discovery and field analysis&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cross-Version Matching&lt;/strong&gt; — Hash-based function matching across different binary versions&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Development &amp;amp; Automation&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Ghidra Script Management&lt;/strong&gt; — Create, run, update, and delete Ghidra scripts entirely via MCP&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multi-Program Support&lt;/strong&gt; — Switch between and compare multiple open programs&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Batch Operations&lt;/strong&gt; — Bulk renaming, commenting, typing, and label management (93% fewer API calls)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Headless Server&lt;/strong&gt; — Full analysis without Ghidra GUI — Docker and CI/CD ready&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Project &amp;amp; Version Control&lt;/strong&gt; — Create projects, manage files, Ghidra Server integration&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Analysis Control&lt;/strong&gt; — List, configure, and trigger Ghidra analyzers programmatically&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🚀 Quick Start&lt;/h2&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Java 21 LTS&lt;/strong&gt; (OpenJDK recommended)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Apache Maven 3.9+&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Ghidra 12.1&lt;/strong&gt; (or compatible version)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Python 3.10+&lt;/strong&gt; with pip&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Shared Ghidra Server users: Ghidra 12.1 clients require a Ghidra Server at 12.1, 12.0.5, or a newer compatible version. Upgrade the server before using this plugin from a 12.1 client.&lt;/p&gt; 
 &lt;p&gt;Ghidra 12.1 ships Jython as an optional extension. Java scripts work by default, but &lt;code&gt;.py&lt;/code&gt; scripts in &lt;code&gt;ghidra_scripts/&lt;/code&gt; require installing the Jython extension from &lt;strong&gt;File &amp;gt; Install Extensions&lt;/strong&gt; and restarting Ghidra.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Installation&lt;/h3&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Recommended for all platforms: use &lt;code&gt;python -m tools.setup&lt;/code&gt; directly.&lt;/p&gt; 
 &lt;p&gt;&lt;code&gt;ensure-prereqs&lt;/code&gt; installs runtime Python requirements plus the Ghidra JARs needed in the local Maven repository. &lt;code&gt;deploy&lt;/code&gt; copies the build output, installs the user-profile extension, and patches Ghidra user config.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Clone the repository:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/bethington/ghidra-mcp.git
cd ghidra-mcp
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Recommended: run environment preflight first:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;python -m tools.setup preflight --ghidra-path &quot;F:\ghidra_12.1_PUBLIC&quot;
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Build and deploy to Ghidra:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;python -m tools.setup ensure-prereqs --ghidra-path &quot;F:\ghidra_12.1_PUBLIC&quot;
python -m tools.setup build
python -m tools.setup deploy --ghidra-path &quot;F:\ghidra_12.1_PUBLIC&quot;
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;code&gt;deploy&lt;/code&gt; saves/closes an already-running matching Ghidra instance when needed, installs the extension, starts Ghidra, waits for MCP health, and runs schema smoke checks.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Optional strict/manual mode&lt;/strong&gt; (advanced):&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;# Skip automatic prerequisite setup
python -m tools.setup build
python -m tools.setup deploy --ghidra-path &quot;F:\ghidra_12.1_PUBLIC&quot;
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Show command help&lt;/strong&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;python -m tools.setup --help
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Optional build-only mode&lt;/strong&gt; (advanced/troubleshooting):&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;python -m tools.setup build
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Supported build path: &lt;code&gt;python -m tools.setup build&lt;/code&gt; uses Maven under the hood and is the canonical workflow used by the repo tasks and docs.&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Manual Maven build (requires Ghidra deps already installed in local .m2)
mvn clean package assembly:single -DskipTests
&lt;/code&gt;&lt;/pre&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Secondary/manual Gradle build path only (not used by tools.setup or VS Code tasks)
GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Installation (Linux — Ubuntu/Debian)&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Clone the repository:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/bethington/ghidra-mcp.git
cd ghidra-mcp
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Install system prerequisites&lt;/strong&gt; (if not already installed):&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y openjdk-21-jdk maven python3 python3-pip curl jq unzip
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Run environment preflight:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python -m tools.setup preflight --ghidra-path ~/ghidra_12.1_PUBLIC
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Build and deploy to Ghidra (single command):&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python -m tools.setup ensure-prereqs --ghidra-path ~/ghidra_12.1_PUBLIC
python -m tools.setup build
python -m tools.setup deploy --ghidra-path ~/ghidra_12.1_PUBLIC
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;This will:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Install Ghidra JAR dependencies into your local &lt;code&gt;~/.m2/repository&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;Build &lt;code&gt;GhidraMCP-&amp;lt;version&amp;gt;.zip&lt;/code&gt; with Maven&lt;/li&gt; 
   &lt;li&gt;Extract the extension to &lt;code&gt;~/.config/ghidra/ghidra_&amp;lt;version&amp;gt;_PUBLIC/Extensions/&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;Update &lt;code&gt;preferences&lt;/code&gt; with &lt;code&gt;LastExtensionImportDirectory&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;Install Python requirements&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Optional: setup only Maven dependencies:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python -m tools.setup install-ghidra-deps --ghidra-path ~/ghidra_12.1_PUBLIC
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Show command help:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python -m tools.setup --help
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Linux paths:&lt;/strong&gt; The extension is installed to &lt;code&gt;$HOME/.config/ghidra/ghidra_&amp;lt;version&amp;gt;_PUBLIC/Extensions/GhidraMCP/&lt;/code&gt;. Ghidra config files are in &lt;code&gt;$HOME/.config/ghidra/ghidra_&amp;lt;version&amp;gt;_PUBLIC/&lt;/code&gt;.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Installation (macOS — Homebrew)&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Install prerequisites:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;brew install openjdk@21 maven python ghidra
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Clone the repository:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/bethington/ghidra-mcp.git
cd ghidra-mcp
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Install Ghidra JARs into local Maven:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; python -m tools.setup install-ghidra-deps \
    --ghidra-path /opt/homebrew/opt/ghidra/libexec
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Build and deploy:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; python -m tools.setup ensure-prereqs \
    --ghidra-path /opt/homebrew/opt/ghidra/libexec
 python -m tools.setup build
 python -m tools.setup deploy \
    --ghidra-path /opt/homebrew/opt/ghidra/libexec
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;The extension is installed to &lt;code&gt;~/Library/ghidra/ghidra_12.1_PUBLIC/Extensions/GhidraMCP/&lt;/code&gt;.&lt;/p&gt; 
  &lt;blockquote&gt; 
   &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;code&gt;--ghidra-version&lt;/code&gt; is required when using the Homebrew path because the path contains no version string.&lt;/p&gt; 
  &lt;/blockquote&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Start Ghidra and enable the plugin:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;/opt/homebrew/opt/ghidra/libexec/ghidraRun
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;In the main project window: &lt;strong&gt;Tools &amp;gt; GhidraMCP &amp;gt; Start MCP Server&lt;/strong&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Configure Cursor/Claude MCP&lt;/strong&gt; (&lt;code&gt;~/.cursor/mcp.json&lt;/code&gt;):&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;mcpServers&quot;: {
    &quot;ghidra&quot;: {
      &quot;command&quot;: &quot;uv&quot;,
      &quot;args&quot;: [&quot;run&quot;, &quot;--script&quot;, &quot;/path/to/ghidra-mcp/bridge_mcp_ghidra.py&quot;]
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Installation (Arch Linux — AUR)&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/Pandoriaantje&quot;&gt;@Pandoriaantje&lt;/a&gt; maintains community AUR packages:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://aur.archlinux.org/packages/ghidra-mcp-git&quot;&gt;&lt;code&gt;ghidra-mcp-git&lt;/code&gt;&lt;/a&gt; — tracks &lt;code&gt;main&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://aur.archlinux.org/packages/ghidra-mcp&quot;&gt;&lt;code&gt;ghidra-mcp&lt;/code&gt;&lt;/a&gt; — tracks tagged releases&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Install with your AUR helper of choice, e.g.:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;yay -S ghidra-mcp        # or ghidra-mcp-git
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Basic Usage&lt;/h3&gt; 
&lt;h4&gt;Option 1: Stdio Transport (Recommended for AI tools)&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python bridge_mcp_ghidra.py
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Option 2: Streamable HTTP Transport (Recommended for web/HTTP clients)&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python bridge_mcp_ghidra.py --transport streamable-http --mcp-host 127.0.0.1 --mcp-port 8081
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;MCP client config for the HTTP transport (add to your client&#39;s MCP config file):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;mcpServers&quot;: {
    &quot;ghidra-mcp-http&quot;: {
      &quot;url&quot;: &quot;http://127.0.0.1:8081/mcp&quot;
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Option 3: SSE Transport (Deprecated — use streamable-http instead)&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python bridge_mcp_ghidra.py --transport sse --mcp-host 127.0.0.1 --mcp-port 8081
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Bridge advanced flags&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Flag&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--transport&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;stdio&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;stdio&lt;/code&gt; (AI tools), &lt;code&gt;streamable-http&lt;/code&gt; (web clients), &lt;code&gt;sse&lt;/code&gt; (deprecated)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--mcp-host&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;127.0.0.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Bind host for HTTP transports&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--mcp-port&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
   &lt;td&gt;Port for HTTP transports&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--lazy&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;off&lt;/td&gt; 
   &lt;td&gt;Load only the default tool groups on connect. Faster startup, but MCP clients that don&#39;t support &lt;code&gt;tools/list_changed&lt;/code&gt; will see an incomplete tool list. Not recommended for Claude Code.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--no-lazy&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;(default)&lt;/td&gt; 
   &lt;td&gt;Load all tool groups immediately on connect. Required for most AI clients.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--default-groups&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;listing,function,program&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Comma-separated groups loaded on connect when &lt;code&gt;--lazy&lt;/code&gt; is set.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Optional: Start the standalone debugger server&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python -m pip install -r requirements-debugger.txt
python -m debugger
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The debugger server listens on &lt;code&gt;http://127.0.0.1:8099/&lt;/code&gt; by default and is required for the &lt;code&gt;debugger_*&lt;/code&gt; proxy tools exposed by the MCP bridge.&lt;/p&gt; 
&lt;p&gt;Debugger server flags:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Flag&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--port&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;8099&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;HTTP server port&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--host&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;127.0.0.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Bind address (&lt;code&gt;0.0.0.0&lt;/code&gt; to expose on LAN)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--exports-dir&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
   &lt;td&gt;Path to a &lt;code&gt;dll_exports/&lt;/code&gt; directory for ordinal-to-name resolution&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--log-level&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;INFO&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;DEBUG&lt;/code&gt;, &lt;code&gt;INFO&lt;/code&gt;, &lt;code&gt;WARNING&lt;/code&gt;, or &lt;code&gt;ERROR&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Set &lt;code&gt;GHIDRA_DEBUGGER_URL&lt;/code&gt; in &lt;code&gt;.env&lt;/code&gt; if you change the default port or host so the bridge can find it.&lt;/p&gt; 
&lt;h4&gt;In Ghidra&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Start Ghidra and open a &lt;strong&gt;CodeBrowser&lt;/strong&gt; window&lt;/li&gt; 
 &lt;li&gt;In &lt;strong&gt;CodeBrowser&lt;/strong&gt;, enable the plugin via &lt;strong&gt;File &amp;gt; Configure &amp;gt; Configure All Plugins &amp;gt; GhidraMCP&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Optional: configure custom port via &lt;strong&gt;CodeBrowser &amp;gt; Edit &amp;gt; Tool Options &amp;gt; GhidraMCP HTTP Server&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Start the server via &lt;strong&gt;Tools &amp;gt; GhidraMCP &amp;gt; Start MCP Server&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;The server runs on &lt;code&gt;http://127.0.0.1:8089/&lt;/code&gt; by default&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;Verify It&#39;s Working&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Quick health check
curl http://127.0.0.1:8089/check_connection
# Expected: &quot;Connected: GhidraMCP plugin running with program &#39;&amp;lt;name&amp;gt;&#39;&quot;

# Get version info
curl http://127.0.0.1:8089/get_version
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Support This Project&lt;/h2&gt; 
&lt;p&gt;If Ghidra MCP saves you engineering or reverse-engineering time, consider &lt;a href=&quot;https://github.com/sponsors/bethington&quot;&gt;sponsoring the project&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;One-time sponsorship helps fund fixes, compatibility updates, and release work.&lt;/li&gt; 
 &lt;li&gt;Recurring sponsorship helps keep maintenance, docs, and production hardening moving.&lt;/li&gt; 
 &lt;li&gt;Company support helps prioritize long-term reliability for the bridge, headless server, debugger integration, and workflow tooling.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🔒 Security&lt;/h2&gt; 
&lt;p&gt;GhidraMCP is designed for &lt;strong&gt;localhost-only development&lt;/strong&gt;. The default configuration — HTTP server bound to &lt;code&gt;127.0.0.1&lt;/code&gt;, no authentication — is safe on a trusted single-user workstation and matches pre-v5.4.1 behavior.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;If you expose the server beyond loopback, configure these three environment variables first.&lt;/strong&gt; The server refuses to start on a non-loopback bind without a token.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Env var&lt;/th&gt; 
   &lt;th&gt;Effect&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GHIDRA_MCP_AUTH_TOKEN&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;When set, every HTTP request must carry &lt;code&gt;Authorization: Bearer &amp;lt;token&amp;gt;&lt;/code&gt;. Timing-safe comparison. &lt;code&gt;/mcp/health&lt;/code&gt;, &lt;code&gt;/health&lt;/code&gt;, &lt;code&gt;/check_connection&lt;/code&gt; are exempt.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GHIDRA_MCP_ALLOW_SCRIPTS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Set to &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;true&lt;/code&gt;, or &lt;code&gt;yes&lt;/code&gt; to enable &lt;code&gt;/run_script_inline&lt;/code&gt; and &lt;code&gt;/run_ghidra_script&lt;/code&gt;. &lt;strong&gt;Off by default as of v5.4.1&lt;/strong&gt; — these endpoints execute arbitrary Java against the Ghidra process. In headless mode this also triggers OSGi &lt;code&gt;BundleHost&lt;/code&gt; initialization at server startup (Felix framework, ~hundreds of ms); leave it off if you don&#39;t need script execution.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GHIDRA_MCP_FILE_ROOT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;When set to a directory path, filesystem-path endpoints (&lt;code&gt;/load_program&lt;/code&gt;, &lt;code&gt;/import_file&lt;/code&gt;, &lt;code&gt;/open_project&lt;/code&gt;, &lt;code&gt;/delete_file&lt;/code&gt;, etc.) canonicalize the input and require it to fall under this root. Prevents path-traversal.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Name-quality enforcement is separate from security. By default, &lt;code&gt;rename_function_by_address&lt;/code&gt; and global write endpoints reject names that fail the built-in quality gates, and struct field writes apply the built-in field prefix convention. Disable the built-in convention layer with &lt;strong&gt;Edit &amp;gt; Tool Options &amp;gt; GhidraMCP HTTP Server &amp;gt; Strict Naming Enforcement&lt;/strong&gt;. The same Tool Options checkbox covers &lt;code&gt;rename_data&lt;/code&gt;, &lt;code&gt;rename_global_variable&lt;/code&gt;, &lt;code&gt;set_global&lt;/code&gt;, the &lt;code&gt;apply_data_type&lt;/code&gt; prefix/type guard, and struct-field Hungarian prefix auto-fixes in &lt;code&gt;create_struct&lt;/code&gt;, &lt;code&gt;add_struct_field&lt;/code&gt;, and &lt;code&gt;modify_struct_field&lt;/code&gt;. The setting is read when the MCP server starts or restarts. Function/global convention warnings are still returned when enforcement is disabled.&lt;/p&gt; 
&lt;h3&gt;Example: exposing to a private LAN with auth&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export GHIDRA_MCP_AUTH_TOKEN=$(openssl rand -hex 32)
export GHIDRA_MCP_ALLOW_SCRIPTS=1     # only if your workflow needs it
export GHIDRA_MCP_FILE_ROOT=/srv/ghidra/inputs

java -jar GhidraMCPHeadless.jar --bind 0.0.0.0 --port 8089
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Ghidra Server authentication&lt;/h3&gt; 
&lt;p&gt;When connecting to a shared Ghidra Server, GhidraMCP can suppress the password dialog automatically. It resolves credentials in this order (first non-empty value wins):&lt;/p&gt; 
&lt;p&gt;Compatibility note: Ghidra 12.1 clients require Ghidra Server 12.1, 12.0.5, or a newer compatible server. Older shared servers are not safe targets for a 12.1 client upgrade.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;GHIDRA_SERVER_PASSWORD&lt;/code&gt; environment variable (or &lt;code&gt;.env&lt;/code&gt; file in the Ghidra install directory or &lt;code&gt;~&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;~/.ghidra-cred&lt;/code&gt; — single-line password file in your home directory&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;&amp;lt;ghidra-install-dir&amp;gt;/.ghidra-cred&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Username resolves similarly: &lt;code&gt;GHIDRA_SERVER_USER&lt;/code&gt; env var → &lt;code&gt;user.name&lt;/code&gt; system property.&lt;/p&gt; 
&lt;p&gt;If no password is found, Ghidra shows its normal GUI prompt. Set these in &lt;code&gt;.env&lt;/code&gt; (see &lt;code&gt;.env.template&lt;/code&gt; for the full block) to enable silent auth.&lt;/p&gt; 
&lt;h3&gt;Migration from v5.4.0 → v5.4.1&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Script endpoints now default-off.&lt;/strong&gt; If you relied on &lt;code&gt;/run_script_inline&lt;/code&gt; or &lt;code&gt;/run_ghidra_script&lt;/code&gt;, export &lt;code&gt;GHIDRA_MCP_ALLOW_SCRIPTS=1&lt;/code&gt;. This is a deliberate breaking change; the prior default was unsafe.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Localhost-only deployments need no changes.&lt;/strong&gt; Auth, bind refusal, and path-root checks are all opt-in.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;❓ Troubleshooting&lt;/h2&gt; 
&lt;h3&gt;&quot;GhidraMCP&quot; menu not appearing in Tools&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; Plugin not enabled or installed incorrectly.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Verify extension is installed: &lt;strong&gt;File &amp;gt; Install Extensions&lt;/strong&gt; — GhidraMCP should be listed&lt;/li&gt; 
 &lt;li&gt;Enable the plugin: &lt;strong&gt;File &amp;gt; Configure &amp;gt; Configure All Plugins &amp;gt; GhidraMCP&lt;/strong&gt; (check the box)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Restart Ghidra&lt;/strong&gt; after installation/enabling&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Server not responding / Connection refused&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; Server not started or wrong port.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Ensure you started the server: &lt;strong&gt;Tools &amp;gt; GhidraMCP &amp;gt; Start MCP Server&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Check configured port: &lt;strong&gt;Edit &amp;gt; Tool Options &amp;gt; GhidraMCP HTTP Server&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Check if port is in use:&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Linux/macOS
lsof -i :8089
# Windows
netstat -ano | findstr :8089
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Look for errors in Ghidra console: &lt;strong&gt;Window &amp;gt; Console&lt;/strong&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;&lt;code&gt;python -m debugger&lt;/code&gt; fails with &lt;code&gt;ModuleNotFoundError&lt;/code&gt; for &lt;code&gt;pybag&lt;/code&gt; or &lt;code&gt;comtypes&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; The standalone debugger server uses optional Windows-only Python dependencies that are not installed by the base requirements file.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;python -m pip install -r requirements-debugger.txt
python -m debugger
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you have both a global Python and a project venv, make sure you install into and run from the same interpreter.&lt;/p&gt; 
&lt;h3&gt;500 Internal Server Errors&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; Server-side exception, often due to missing program data.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Ensure a binary is loaded in CodeBrowser&lt;/li&gt; 
 &lt;li&gt;Run auto-analysis first: &lt;strong&gt;Analysis &amp;gt; Auto Analyze&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Check Ghidra console (&lt;strong&gt;Window &amp;gt; Console&lt;/strong&gt;) for Java exceptions&lt;/li&gt; 
 &lt;li&gt;Some operations require fully analyzed binaries&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;404 Not Found Errors&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; Endpoint doesn&#39;t exist or wrong URL.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Verify endpoint exists: &lt;code&gt;curl http://127.0.0.1:8089/get_version&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Check for typos in endpoint name&lt;/li&gt; 
 &lt;li&gt;Ensure you&#39;re using correct HTTP method (GET vs POST)&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Python Ghidra scripts fail with &quot;No script provider found&quot;&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; In Ghidra 12.1, Jython support is no longer enabled by default. &lt;code&gt;.py&lt;/code&gt; scripts need the bundled Jython extension; Python 3 scripts should use PyGhidra instead of the Ghidra Script Manager.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;In the Ghidra Front End, open &lt;strong&gt;File &amp;gt; Install Extensions&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Check &lt;strong&gt;Jython&lt;/strong&gt;, restart Ghidra, then refresh Script Manager.&lt;/li&gt; 
 &lt;li&gt;For new automation, prefer Java Ghidra scripts or PyGhidra.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Extension not appearing in Install Extensions&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; JAR file in wrong location.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Manual install location: &lt;code&gt;~/.ghidra/ghidra_12.1_PUBLIC/Extensions/GhidraMCP/lib/GhidraMCP.jar&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Or use: &lt;strong&gt;File &amp;gt; Install Extensions &amp;gt; Add&lt;/strong&gt; and select the ZIP file&lt;/li&gt; 
 &lt;li&gt;Ensure JAR/ZIP was built for your Ghidra version&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Build fails with &quot;Ghidra dependencies not found&quot;&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; Ghidra JARs not installed in local Maven repository.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;# Windows (recommended)
python -m tools.setup install-ghidra-deps --ghidra-path &quot;C:\ghidra_12.1_PUBLIC&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;📊 Production Performance&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;MCP Tools&lt;/strong&gt;: 252 tools fully implemented&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Speed&lt;/strong&gt;: Sub-second response for most operations&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Efficiency&lt;/strong&gt;: 93% reduction in API calls via batch operations&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Reliability&lt;/strong&gt;: Atomic transactions with all-or-nothing semantics&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;AI Workflows&lt;/strong&gt;: Proven documentation prompts refined across hundreds of real functions&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Deployment&lt;/strong&gt;: Automated version-aware deployment script&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🛠️ API Reference&lt;/h2&gt; 
&lt;h3&gt;Core Operations&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;check_connection&lt;/code&gt; - Verify MCP connectivity&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_metadata&lt;/code&gt; - Program metadata and info&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_version&lt;/code&gt; - Server version information&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_function_count&lt;/code&gt; - Return total function count for a program&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_entry_points&lt;/code&gt; - Binary entry points discovery&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_current_address&lt;/code&gt; - Get cursor address (GUI only)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_current_function&lt;/code&gt; - Get function at cursor (GUI only)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_current_selection&lt;/code&gt; - Get current selection context (address + function)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;read_memory&lt;/code&gt; - Read raw bytes from memory&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;save_program&lt;/code&gt; - Save the current program&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;exit_ghidra&lt;/code&gt; - Save and exit Ghidra gracefully&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Function Analysis&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;list_functions&lt;/code&gt; - List all functions (paginated)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_functions_enhanced&lt;/code&gt; - List with isThunk/isExternal flags&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_classes&lt;/code&gt; - List namespace/class names (paginated)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;search_functions_enhanced&lt;/code&gt; - Advanced function search with filters&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;decompile_function&lt;/code&gt; - Decompile function to C pseudocode&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;force_decompile&lt;/code&gt; - Force fresh decompilation (bypass cache)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;batch_decompile&lt;/code&gt; - Batch decompile multiple functions&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_function_callers&lt;/code&gt; - Get function callers&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_function_callees&lt;/code&gt; - Get function callees&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_function_call_graph&lt;/code&gt; - Function relationship graph&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_full_call_graph&lt;/code&gt; - Complete call graph for program&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_function_signature&lt;/code&gt; - Get function prototype string&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_function_hash&lt;/code&gt; - SHA-256 hash of normalized function opcodes&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_bulk_function_hashes&lt;/code&gt; - Paginated bulk hashing with filter&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_function_jump_targets&lt;/code&gt; - Get jump target addresses from disassembly&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_function_metrics&lt;/code&gt; - Get complexity metrics for a function&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_function_xrefs&lt;/code&gt; - Get function cross-references&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;analyze_function_full&lt;/code&gt; - Comprehensive function analysis&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;analyze_function_completeness&lt;/code&gt; - Documentation completeness score&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;batch_analyze_completeness&lt;/code&gt; - Batch completeness analysis for multiple functions&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;find_similar_functions_across_programs&lt;/code&gt; - Cross-program similarity matching&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;bulk_fuzzy_match_functions&lt;/code&gt; - Bulk fuzzy match across all functions&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;diff_functions&lt;/code&gt; - Diff two functions side by side&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;validate_function_prototype&lt;/code&gt; - Validate a function prototype string&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;can_rename_at_address&lt;/code&gt; - Check if address can be renamed&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;delete_function&lt;/code&gt; - Delete function at address&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Memory &amp;amp; Data&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;list_segments&lt;/code&gt; - Memory segments and layout&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_data_items&lt;/code&gt; - List defined data labels and values (paginated)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_data_items_by_xrefs&lt;/code&gt; - Data items sorted by xref count&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_function_by_address&lt;/code&gt; - Function at address&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;disassemble_function&lt;/code&gt; - Disassembly listing&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;disassemble_bytes&lt;/code&gt; - Raw byte disassembly&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_xrefs_to&lt;/code&gt; - Cross-references to address&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_xrefs_from&lt;/code&gt; - Cross-references from address&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_bulk_xrefs&lt;/code&gt; - Bulk cross-reference lookup&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;analyze_data_region&lt;/code&gt; - Analyze memory region structure&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;inspect_memory_content&lt;/code&gt; - View raw memory content&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;detect_array_bounds&lt;/code&gt; - Detect array boundaries&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;search_byte_patterns&lt;/code&gt; - Search for byte patterns&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;create_memory_block&lt;/code&gt; - Create a new memory block&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Cross-Binary Documentation&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;get_function_documentation&lt;/code&gt; - Export complete function documentation&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;apply_function_documentation&lt;/code&gt; - Import documentation to target function&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;compare_programs_documentation&lt;/code&gt; - Compare documentation between programs&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;build_function_hash_index&lt;/code&gt; - Build persistent JSON index&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lookup_function_by_hash&lt;/code&gt; - Find matching functions in index&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;propagate_documentation&lt;/code&gt; - Apply docs to all matching instances&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Data Types &amp;amp; Structures&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;list_data_types&lt;/code&gt; - Available data types&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;search_data_types&lt;/code&gt; - Search for data types&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_data_type_size&lt;/code&gt; - Get byte size of a data type&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_valid_data_types&lt;/code&gt; - Get list of valid Ghidra builtin types&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_struct_layout&lt;/code&gt; - Get detailed field layout of a structure&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;validate_data_type&lt;/code&gt; - Validate data type syntax&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;validate_data_type_exists&lt;/code&gt; - Check if a data type exists&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;create_struct&lt;/code&gt; - Create custom structure&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;add_struct_field&lt;/code&gt; - Add field to structure&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;modify_struct_field&lt;/code&gt; - Modify existing field&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;remove_struct_field&lt;/code&gt; - Remove field from structure&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;create_enum&lt;/code&gt; - Create enumeration&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_enum_values&lt;/code&gt; - Get enumeration values&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;create_array_type&lt;/code&gt; - Create array data type&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;create_typedef&lt;/code&gt; - Create typedef alias&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;create_union&lt;/code&gt; - Create union data type&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;create_pointer_type&lt;/code&gt; - Create pointer data type&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;clone_data_type&lt;/code&gt; - Clone a data type with a new name&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;apply_data_type&lt;/code&gt; - Apply type to address&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;delete_data_type&lt;/code&gt; - Delete a data type&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;consolidate_duplicate_types&lt;/code&gt; - Merge duplicate types&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;suggest_field_names&lt;/code&gt; - AI-assisted field name suggestions for a structure&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;create_data_type_category&lt;/code&gt; - Create a category folder in the type manager&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;move_data_type_to_category&lt;/code&gt; - Move a type to a different category&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_data_type_categories&lt;/code&gt; - List all data type categories&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;import_data_types&lt;/code&gt; - Import types from a GDT/header file&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Symbols &amp;amp; Labels&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;list_imports&lt;/code&gt; - Imported symbols and libraries&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_exports&lt;/code&gt; - Exported symbols and functions&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_external_locations&lt;/code&gt; - External location references&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_external_location&lt;/code&gt; - Specific external location detail&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_strings&lt;/code&gt; - Extracted strings with analysis&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;search_memory_strings&lt;/code&gt; - Search strings by regex/substring pattern&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_namespaces&lt;/code&gt; - Available namespaces&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_globals&lt;/code&gt; - Global variables&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;create_label&lt;/code&gt; - Create label at address&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;batch_create_labels&lt;/code&gt; - Bulk label creation&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;delete_label&lt;/code&gt; - Delete label at address&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;batch_delete_labels&lt;/code&gt; - Bulk label deletion&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;rename_label&lt;/code&gt; - Rename existing label&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;rename_or_label&lt;/code&gt; - Rename or create label&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Renaming &amp;amp; Documentation&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;rename_function&lt;/code&gt; - Rename function by name&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;rename_function_by_address&lt;/code&gt; - Rename function by address&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;rename_data&lt;/code&gt; - Rename data item&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;rename_variables&lt;/code&gt; - Rename function variables&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;rename_global_variable&lt;/code&gt; - Rename global variable&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;rename_external_location&lt;/code&gt; - Rename external reference&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;batch_rename_function_components&lt;/code&gt; - Bulk renaming&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;set_decompiler_comment&lt;/code&gt; - Set decompiler comment&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;set_disassembly_comment&lt;/code&gt; - Set disassembly comment&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;set_plate_comment&lt;/code&gt; - Set function plate comment&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_plate_comment&lt;/code&gt; - Get function plate comment&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;batch_set_comments&lt;/code&gt; - Bulk comment setting&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;clear_function_comments&lt;/code&gt; - Clear all comments for a function&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_bookmarks&lt;/code&gt; - List all bookmarks&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;set_bookmark&lt;/code&gt; - Create or update a bookmark&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;delete_bookmark&lt;/code&gt; - Delete a bookmark&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Type System&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;set_function_prototype&lt;/code&gt; - Set function signature&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;set_local_variable_type&lt;/code&gt; - Set variable type&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;set_parameter_type&lt;/code&gt; - Set parameter type&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;batch_set_variable_types&lt;/code&gt; - Bulk type setting&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;set_variable_storage&lt;/code&gt; - Control variable storage location&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;set_function_no_return&lt;/code&gt; - Mark function as non-returning&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;clear_instruction_flow_override&lt;/code&gt; - Clear flow override on instruction&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_calling_conventions&lt;/code&gt; - Available calling conventions&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_function_variables&lt;/code&gt; - Get all function variables&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_function_labels&lt;/code&gt; - Get labels in function&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Ghidra Script Management&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;list_scripts&lt;/code&gt; - List available scripts&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_ghidra_scripts&lt;/code&gt; - List custom Ghidra scripts&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;save_ghidra_script&lt;/code&gt; - Save new script&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_ghidra_script&lt;/code&gt; - Get script contents&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;run_ghidra_script&lt;/code&gt; - Execute Ghidra script by name&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;run_script_inline&lt;/code&gt; - Execute inline script code&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;update_ghidra_script&lt;/code&gt; - Update existing script&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;delete_ghidra_script&lt;/code&gt; - Delete script&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Multi-Program Support&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;list_open_programs&lt;/code&gt; - List all open programs&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_current_program_info&lt;/code&gt; - Current program details&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;switch_program&lt;/code&gt; - Switch active program&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_project_files&lt;/code&gt; - List project files&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;open_program&lt;/code&gt; - Open program from project&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Project Lifecycle&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;create_project&lt;/code&gt; - Create a new Ghidra project&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;open_project&lt;/code&gt; - Open an existing project&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;close_project&lt;/code&gt; - Close the current project&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;delete_project&lt;/code&gt; - Delete a project&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_projects&lt;/code&gt; - List Ghidra projects in a directory&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Project Organization&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;create_folder&lt;/code&gt; - Create a folder in the project tree&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;move_file&lt;/code&gt; - Move a domain file to another folder&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;move_folder&lt;/code&gt; - Move a folder to another location&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;delete_file&lt;/code&gt; - Delete a domain file from the project&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Analysis Tools&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;find_next_undefined_function&lt;/code&gt; - Find undefined functions&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;find_undocumented_by_string&lt;/code&gt; - Find functions by string reference&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;find_undocumented_functions_by_strings&lt;/code&gt; - Find undocumented functions by string references&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_assembly_context&lt;/code&gt; - Get assembly context&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;analyze_struct_field_usage&lt;/code&gt; - Analyze structure field access&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_field_access_context&lt;/code&gt; - Get field access patterns&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;create_function&lt;/code&gt; - Create function at address&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;analyze_control_flow&lt;/code&gt; - Cyclomatic complexity and loop detection&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;analyze_call_graph&lt;/code&gt; - Build function call graph&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;analyze_api_call_chains&lt;/code&gt; - Detect API call threat patterns&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;detect_malware_behaviors&lt;/code&gt; - Detect malware behavior categories&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;find_anti_analysis_techniques&lt;/code&gt; - Find anti-analysis techniques&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;find_dead_code&lt;/code&gt; - Detect unreachable code&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;extract_iocs_with_context&lt;/code&gt; - Extract IOCs from strings&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;apply_data_classification&lt;/code&gt; - Apply data classification to addresses&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Analysis Control&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;list_analyzers&lt;/code&gt; - List all available Ghidra analyzers&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;configure_analyzer&lt;/code&gt; - Enable/disable or configure an analyzer&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;run_analysis&lt;/code&gt; - Trigger Ghidra auto-analysis programmatically&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Server Connection (Ghidra Server)&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;connect_server&lt;/code&gt; - Connect to a Ghidra Server&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;disconnect_server&lt;/code&gt; - Disconnect from Ghidra Server&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;server_status&lt;/code&gt; - Check server connection status&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_repositories&lt;/code&gt; - List repositories on the server&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;create_repository&lt;/code&gt; - Create a new repository&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_repository_files&lt;/code&gt; - List files in a server repository folder&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_repository_file&lt;/code&gt; - Get metadata for a file in a server repository&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Version Control&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;checkout_file&lt;/code&gt; - Check out a file from version control&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;checkin_file&lt;/code&gt; - Check in a file with a comment&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;undo_checkout&lt;/code&gt; - Undo a checkout without committing&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;add_to_version_control&lt;/code&gt; - Add a file to version control&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Version History&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;get_version_history&lt;/code&gt; - Get full version history for a file&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;get_checkouts&lt;/code&gt; - Get active checkout status&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Admin&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;terminate_checkout&lt;/code&gt; - Forcibly terminate a user&#39;s checkout&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;list_server_users&lt;/code&gt; - List all users on the Ghidra Server&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;set_user_permissions&lt;/code&gt; - Set a user&#39;s repository access level&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/CHANGELOG.md&quot;&gt;CHANGELOG.md&lt;/a&gt; for version history.&lt;/p&gt; 
&lt;h2&gt;🏗️ Architecture&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   AI/Automation │◄──►│   MCP Bridge    │◄──►│  Ghidra Plugin  │
│     Tools       │    │ (bridge_mcp_    │    │ (GhidraMCP.jar) │
│  (Claude, etc.) │    │  ghidra.py)     │    │                 │
└─────────────────┘    └─────────────────┘    └─────────────────┘
        │                       │                       │
   MCP Protocol            HTTP REST              Ghidra API
   (stdio/SSE)          (localhost:8089)      (Program, Listing)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Components&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;bridge_mcp_ghidra.py&lt;/strong&gt; — Python MCP server that translates MCP protocol to HTTP calls (225 catalog entries)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;GhidraMCP.jar&lt;/strong&gt; — Ghidra plugin that exposes analysis capabilities via HTTP (175 GUI endpoints)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;GhidraMCPHeadlessServer&lt;/strong&gt; — Standalone headless server — 183 endpoints, no GUI required&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;ghidra_scripts/&lt;/strong&gt; — Collection of automation scripts for common tasks&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🔧 Development&lt;/h2&gt; 
&lt;h3&gt;Building from Source&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Recommended: direct Python-first workflow
python -m tools.setup ensure-prereqs --ghidra-path &quot;C:\ghidra_12.1_PUBLIC&quot;
python -m tools.setup build
python -m tools.setup deploy --ghidra-path &quot;C:\ghidra_12.1_PUBLIC&quot;

# Version bump (updates all maintained version references atomically)
python -m tools.setup bump-version --new X.Y.Z
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The authoritative build system today is Maven. &lt;code&gt;tools.setup&lt;/code&gt;, the VS Code tasks, and the documented deploy flow all build through &lt;code&gt;pom.xml&lt;/code&gt; and write artifacts to &lt;code&gt;target/&lt;/code&gt;. &lt;code&gt;build.gradle&lt;/code&gt; remains in the repo as a manual fallback for direct Ghidra/Gradle users, but it is not the primary path.&lt;/p&gt; 
&lt;h3&gt;Command Reference&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Command&lt;/th&gt; 
   &lt;th&gt;What it does&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;ensure-prereqs&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Install Python deps + Ghidra Maven JARs in one shot. Start here on a new machine.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;preflight&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Validate Python, build tool, Ghidra path, and JAR availability without making changes. Add &lt;code&gt;--strict&lt;/code&gt; to also check network reachability.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;build&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Build the plugin JAR and extension ZIP via Maven (or Gradle when &lt;code&gt;TOOLS_SETUP_BACKEND=gradle&lt;/code&gt;).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;deploy&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Copy the built extension into the Ghidra profile and patch &lt;code&gt;FrontEndTool.xml&lt;/code&gt; for auto-activation.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;start-ghidra&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Launch the configured Ghidra installation.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;clean&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Remove Maven/Gradle build outputs (&lt;code&gt;target/&lt;/code&gt;, &lt;code&gt;build/&lt;/code&gt;).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;clean-all&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Remove build outputs plus local cache artifacts (&lt;code&gt;.m2&lt;/code&gt; Ghidra JARs, etc.).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;install-ghidra-deps&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Install only the Ghidra JARs into &lt;code&gt;~/.m2&lt;/code&gt;. Useful when the build environment changes.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;install-python-deps&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Install only the Python requirements files.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;run-tests&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Run the Java offline test suite (no live Ghidra needed).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;verify-version&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Check that version strings are consistent across &lt;code&gt;pom.xml&lt;/code&gt;, &lt;code&gt;CHANGELOG.md&lt;/code&gt;, and &lt;code&gt;README.md&lt;/code&gt;.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;bump-version --new X.Y.Z&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Atomically update all version references. Pass &lt;code&gt;--tag&lt;/code&gt; to create a git tag.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Common flags accepted by most commands:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Flag&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--ghidra-path PATH&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Ghidra installation directory. Defaults to &lt;code&gt;GHIDRA_PATH&lt;/code&gt; from &lt;code&gt;.env&lt;/code&gt;.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--dry-run&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Print actions without executing them.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--force&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Reinstall Ghidra JARs even if already present (&lt;code&gt;install-ghidra-deps&lt;/code&gt;, &lt;code&gt;ensure-prereqs&lt;/code&gt;).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--with-debugger&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Force-install debugger Python requirements (Windows only).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--use-debugger-toggle&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Read &lt;code&gt;INSTALL_DEBUGGER_DEPS&lt;/code&gt; from &lt;code&gt;.env&lt;/code&gt; to decide whether to install debugger deps.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--test TIER&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;(&lt;code&gt;deploy&lt;/code&gt; only) Opt into live deploy regression tiers such as &lt;code&gt;release&lt;/code&gt; or &lt;code&gt;debugger-live&lt;/code&gt;.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;--strict&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;(&lt;code&gt;preflight&lt;/code&gt; only) Also check network reachability for Maven Central and PyPI.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Deploy test tiers are opt-in because benchmark tiers can import/reset &lt;code&gt;Benchmark.dll&lt;/code&gt; and &lt;code&gt;BenchmarkDebug.exe&lt;/code&gt; in the active Ghidra project. Use &lt;code&gt;--test release&lt;/code&gt; before cutting releases, or set &lt;code&gt;GHIDRA_MCP_DEPLOY_TESTS=release&lt;/code&gt; in a local &lt;code&gt;.env&lt;/code&gt; when you want every deploy on your machine to run the live benchmark regression. See &lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/docs/TESTING.md&quot;&gt;Testing and Release Regression&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;# Standard first-time setup and deploy
python -m tools.setup ensure-prereqs --ghidra-path &quot;C:\ghidra_12.1_PUBLIC&quot;
python -m tools.setup build
python -m tools.setup deploy --ghidra-path &quot;C:\ghidra_12.1_PUBLIC&quot;

# Preflight check before deploying
python -m tools.setup preflight --strict --ghidra-path &quot;C:\ghidra_12.1_PUBLIC&quot;

# Version bump and tag
python -m tools.setup bump-version --new X.Y.Z --tag

# Run offline Java tests
python -m tools.setup run-tests

# Show full help
python -m tools.setup --help
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Project Structure&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;ghidra-mcp/
├── bridge_mcp_ghidra.py     # MCP server (Python, 225 catalog entries)
├── src/main/java/           # Ghidra plugin + headless server (Java)
│   └── com/xebyte/
│       ├── GhidraMCPPlugin.java         # GUI plugin (196 endpoints)
│       ├── headless/                    # Headless server (183 endpoints)
│       └── core/                        # Shared service layer (12 services)
├── debugger/                # Optional standalone debugger server (port 8099)
├── ghidra_scripts/          # Automation scripts for batch workflows
├── tests/                   # Python unit tests + endpoint catalog
│   ├── unit/               # Catalog consistency, schema, tool function tests
│   └── endpoints.json      # Endpoint specification (225 entries)
├── docs/                    # Documentation
│   ├── prompts/            # AI workflow prompts (V5 documentation workflows)
│   ├── releases/           # Version release notes
│   └── project-management/ # Contributor planning docs (Gradle migration, etc.)
├── tools/setup/             # Build and deployment CLI (python -m tools.setup)
├── fun-doc/                 # Internal RE curation tool — not part of the MCP plugin
│                            #   Priority-queue worker, LLM scoring, web dashboard.
│                            #   See fun-doc/README.md for details.
└── .github/workflows/      # CI/CD pipelines
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Library Dependencies&lt;/h3&gt; 
&lt;p&gt;Ghidra JARs must be installed into your local Maven repository (&lt;code&gt;~/.m2/repository&lt;/code&gt;) before compilation. This is a one-time setup per machine, and again when your Ghidra version changes. &lt;code&gt;-Deploy&lt;/code&gt; now installs these automatically by default.&lt;/p&gt; 
&lt;p&gt;The tool enforces version consistency between:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;pom.xml&lt;/code&gt; (&lt;code&gt;ghidra.version&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--ghidra-path&lt;/code&gt; version segment (e.g., &lt;code&gt;ghidra_12.1_PUBLIC&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If these do not match, deployment fails fast with a clear error.&lt;/p&gt; 
&lt;h3&gt;Troubleshooting: Version Mismatch&lt;/h3&gt; 
&lt;p&gt;If you see a version mismatch error, align both values:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;pom.xml&lt;/code&gt; → &lt;code&gt;ghidra.version&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--ghidra-path&lt;/code&gt; version segment (&lt;code&gt;ghidra_X.Y.Z_PUBLIC&lt;/code&gt;)&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Then rerun:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;python -m tools.setup preflight --ghidra-path &quot;C:\ghidra_12.1_PUBLIC&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;# Windows
python -m tools.setup install-ghidra-deps --ghidra-path &quot;C:\path\to\ghidra_12.1_PUBLIC&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Required Libraries (14 JARs, ~37MB):&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Library&lt;/th&gt; 
   &lt;th&gt;Source Path&lt;/th&gt; 
   &lt;th&gt;Purpose&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Base.jar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Features/Base/lib/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Core Ghidra functionality&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Decompiler.jar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Features/Decompiler/lib/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Decompilation engine&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;PDB.jar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Features/PDB/lib/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Microsoft PDB symbol support&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;FunctionID.jar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Features/FunctionID/lib/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Function identification&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;SoftwareModeling.jar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Framework/SoftwareModeling/lib/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Program model API&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Project.jar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Framework/Project/lib/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Project management&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Docking.jar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Framework/Docking/lib/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;UI docking framework&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Generic.jar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Framework/Generic/lib/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Generic utilities&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Utility.jar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Framework/Utility/lib/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Core utilities&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Gui.jar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Framework/Gui/lib/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;GUI components&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;FileSystem.jar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Framework/FileSystem/lib/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;File system support&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Graph.jar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Framework/Graph/lib/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Graph/call graph analysis&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;DB.jar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Framework/DB/lib/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Database operations&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Emulation.jar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Framework/Emulation/lib/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;P-code emulation&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Libraries are NOT included in the repository (see &lt;code&gt;.gitignore&lt;/code&gt;). You must install them from your Ghidra installation before building.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Automation entry point&lt;/strong&gt;:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;python -m tools.setup&lt;/code&gt; is the supported setup/build/deploy/versioning interface&lt;/li&gt; 
  &lt;li&gt;use &lt;code&gt;ensure-prereqs&lt;/code&gt;, &lt;code&gt;build&lt;/code&gt;, &lt;code&gt;deploy&lt;/code&gt;, &lt;code&gt;preflight&lt;/code&gt;, &lt;code&gt;clean-all&lt;/code&gt;, and &lt;code&gt;bump-version&lt;/code&gt; directly&lt;/li&gt; 
  &lt;li&gt;these commands currently use Maven as the canonical Java build backend&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Development Features&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Automated Deployment&lt;/strong&gt;: Version-aware deployment script&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Batch Operations&lt;/strong&gt;: Reduces API calls by 93%&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Atomic Transactions&lt;/strong&gt;: All-or-nothing semantics&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Comprehensive Logging&lt;/strong&gt;: Debug and trace capabilities&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;📚 Documentation&lt;/h2&gt; 
&lt;h3&gt;Core Documentation&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/docs/README.md&quot;&gt;Documentation Index&lt;/a&gt; - Complete documentation navigation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/docs/PROJECT_STRUCTURE.md&quot;&gt;Project Structure&lt;/a&gt; - Project organization guide&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/docs/TESTING.md&quot;&gt;Testing and Release Regression&lt;/a&gt; - Local tests, CI, live Ghidra regression, and release gates&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/docs/NAMING_CONVENTIONS.md&quot;&gt;Naming Conventions&lt;/a&gt; - Code naming standards&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/docs/HUNGARIAN_NOTATION.md&quot;&gt;Hungarian Notation&lt;/a&gt; - Variable naming guide&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;AI Workflow Prompts&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/docs/prompts/FUNCTION_DOC_WORKFLOW_V5.md&quot;&gt;Function Documentation V5&lt;/a&gt; — Primary workflow: 7-step process with Hungarian notation, type auditing, and verification scoring&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/docs/prompts/FUNCTION_DOC_WORKFLOW_V5_BATCH.md&quot;&gt;Batch Documentation V5&lt;/a&gt; — Parallel subagent dispatch for multi-function processing&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/docs/prompts/ORPHANED_CODE_DISCOVERY_WORKFLOW.md&quot;&gt;Orphaned Code Discovery&lt;/a&gt; — Automated scanner for undiscovered functions&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/docs/prompts/DATA_TYPE_INVESTIGATION_WORKFLOW.md&quot;&gt;Data Type Investigation&lt;/a&gt; — Systematic structure discovery&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/docs/prompts/CROSS_VERSION_MATCHING_COMPREHENSIVE.md&quot;&gt;Cross-Version Matching&lt;/a&gt; — Hash-based function matching&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/docs/prompts/QUICK_START_PROMPT.md&quot;&gt;Quick Start Prompt&lt;/a&gt; — Simplified beginner workflow&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/docs/prompts/README.md&quot;&gt;All Prompts&lt;/a&gt; — Complete prompt index&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Release History&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/CHANGELOG.md&quot;&gt;Complete Changelog&lt;/a&gt; - All version release notes&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/docs/releases/&quot;&gt;Release Notes&lt;/a&gt; - Detailed release documentation&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🐳 Headless Server (Docker)&lt;/h2&gt; 
&lt;p&gt;GhidraMCP includes a headless server mode for automated analysis without the Ghidra GUI.&lt;/p&gt; 
&lt;h3&gt;Quick Start with Docker&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Build and run
docker-compose up -d ghidra-mcp

# Test connection
curl http://localhost:8089/check_connection
# Connection OK - GhidraMCP Headless Server v5.12.0
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Headless API Workflow&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. Load a binary
curl -X POST -d &quot;file=/data/program.exe&quot; http://localhost:8089/load_program

# 2. Run auto-analysis (identifies functions, strings, data types)
curl -X POST http://localhost:8089/run_analysis

# 3. List discovered functions
curl &quot;http://localhost:8089/list_functions?limit=20&quot;

# 4. Decompile a function
curl &quot;http://localhost:8089/decompile_function?address=0x401000&quot;

# 5. Get metadata
curl http://localhost:8089/get_metadata
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Key Headless Endpoints&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Endpoint&lt;/th&gt; 
   &lt;th&gt;Method&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;/load_program&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;POST&lt;/td&gt; 
   &lt;td&gt;Load binary file for analysis&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;/run_analysis&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;POST&lt;/td&gt; 
   &lt;td&gt;Run Ghidra auto-analysis&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;/list_functions&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;GET&lt;/td&gt; 
   &lt;td&gt;List all discovered functions&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;/list_exports&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;GET&lt;/td&gt; 
   &lt;td&gt;List exported symbols&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;/list_imports&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;GET&lt;/td&gt; 
   &lt;td&gt;List imported symbols&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;/decompile_function&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;GET&lt;/td&gt; 
   &lt;td&gt;Decompile function to C code&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;/create_function&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;POST&lt;/td&gt; 
   &lt;td&gt;Create function at address&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;/get_metadata&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;GET&lt;/td&gt; 
   &lt;td&gt;Get program metadata&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;/create_project&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;POST&lt;/td&gt; 
   &lt;td&gt;Create a Ghidra project&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;/list_analyzers&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;GET&lt;/td&gt; 
   &lt;td&gt;List available analyzers&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;/server/status&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;GET&lt;/td&gt; 
   &lt;td&gt;Check Ghidra Server connection&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Configuration&lt;/h3&gt; 
&lt;p&gt;Environment variables for Docker:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;GHIDRA_MCP_PORT&lt;/code&gt; - Server port (default: 8089)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;GHIDRA_MCP_BIND_ADDRESS&lt;/code&gt; - Bind address (default: 0.0.0.0 in Docker)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;JAVA_OPTS&lt;/code&gt; - JVM options (default: -Xmx4g -XX:+UseG1GC)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🤝 Contributing&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for detailed contribution guidelines.&lt;/p&gt; 
&lt;h3&gt;Quick Start&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Fork the repository&lt;/li&gt; 
 &lt;li&gt;Create a feature branch (&lt;code&gt;git checkout -b feature/amazing-feature&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;Build and test your changes (&lt;code&gt;mvn clean package assembly:single -DskipTests&lt;/code&gt; or &lt;code&gt;GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;Update documentation as needed&lt;/li&gt; 
 &lt;li&gt;Commit your changes (&lt;code&gt;git commit -m &#39;Add amazing feature&#39;&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;Push to the branch (&lt;code&gt;git push origin feature/amazing-feature&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;Open a Pull Request&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;📄 License&lt;/h2&gt; 
&lt;p&gt;This project is licensed under the Apache License 2.0 - see the &lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/LICENSE&quot;&gt;LICENSE&lt;/a&gt; file for details.&lt;/p&gt; 
&lt;h2&gt;🏆 Production Status&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Metric&lt;/th&gt; 
   &lt;th&gt;Value&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;5.12.0&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;MCP Tools&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;252 fully implemented&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;GUI Endpoints&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;196 (GhidraMCPPlugin)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Headless Endpoints&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;195 (GhidraMCPHeadlessServer)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Compilation&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;✅ 100% success&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Batch Efficiency&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;93% API call reduction&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;AI Workflows&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;7 proven documentation workflows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Ghidra Scripts&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Automation scripts included&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Documentation&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Comprehensive with AI prompts&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/CHANGELOG.md&quot;&gt;CHANGELOG.md&lt;/a&gt; for version history and release notes.&lt;/p&gt; 
&lt;h2&gt;🙏 Acknowledgments&lt;/h2&gt; 
&lt;p&gt;This project was originally derived from &lt;a href=&quot;https://github.com/LaurieWired/GhidraMCP&quot;&gt;LaurieWired/GhidraMCP&lt;/a&gt; in August 2025 and has since been substantially rewritten and extended. We acknowledge LaurieWired&#39;s original work as the starting point. See &lt;a href=&quot;https://raw.githubusercontent.com/bethington/ghidra-mcp/main/NOTICE&quot;&gt;NOTICE&lt;/a&gt; for license attribution.&lt;/p&gt; 
&lt;h2&gt;👥 Contributors&lt;/h2&gt; 
&lt;p&gt;This project has benefited from the work of dedicated contributors:&lt;/p&gt; 
&lt;h3&gt;Core Contributors&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/heeen&quot;&gt;@heeen&lt;/a&gt;&lt;/strong&gt; — Significant contributions including:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Fuzzy function matching and structured diff for cross-binary comparison (#13)&lt;/li&gt; 
 &lt;li&gt;Script execution improvements and bug fixes (#12)&lt;/li&gt; 
 &lt;li&gt;New API endpoints: &lt;code&gt;save_program&lt;/code&gt;, &lt;code&gt;exit_ghidra&lt;/code&gt;, &lt;code&gt;delete_function&lt;/code&gt;, &lt;code&gt;create_memory_block&lt;/code&gt;, &lt;code&gt;run_script_inline&lt;/code&gt; (#11)&lt;/li&gt; 
 &lt;li&gt;Architectural vision: annotation-driven design, UDS transport, Python bridge optimization proposals&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/huehuehuehueing&quot;&gt;@huehuehuehueing&lt;/a&gt;&lt;/strong&gt; — Significant contributions including:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Address-space prefix support — added &lt;code&gt;&amp;lt;space&amp;gt;:&amp;lt;hex&amp;gt;&lt;/code&gt; syntax (e.g., &lt;code&gt;mem:1000&lt;/code&gt;, &lt;code&gt;code:ff00&lt;/code&gt;) to address parsing across the entire endpoint surface, unlocking multi-space targets like embedded firmware (#84, closes #65)&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Optional &lt;code&gt;program&lt;/code&gt; parameter + required-param schema fixes — made &lt;code&gt;program&lt;/code&gt; optional on every endpoint with a sane currentProgram fallback, and fixed several required-vs-optional schema bugs the catalog had inherited (#92)&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Seeded #44 (data-type / enum tools) — the issue that motivated the v5.0 enum + struct enforcement layer&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Ghidra Team&lt;/strong&gt; - For the incredible reverse engineering platform&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Model Context Protocol&lt;/strong&gt; - For the standardized AI integration framework&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Contributors&lt;/strong&gt; - For testing, feedback, and improvements&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🔗 Related Projects&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bethington/re-universe&quot;&gt;re-universe&lt;/a&gt; — Ghidra BSim PostgreSQL platform for large-scale binary similarity analysis. Pairs perfectly with GhidraMCP for AI-driven reverse engineering workflows.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bethington/cheat-engine-server-python&quot;&gt;cheat-engine-server-python&lt;/a&gt; — MCP server for dynamic memory analysis and debugging.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;p&gt;&lt;strong&gt;Ready for production deployment with enterprise-grade reliability and comprehensive binary analysis capabilities.&lt;/strong&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/38251c9dfc25573169e5900eed22e2ff15e1b23ee36fe3fa8d8786c35e93edc6/bethington/ghidra-mcp" medium="image" />
      
    </item>
    
    <item>
      <title>openrewrite/rewrite</title>
      <link>https://github.com/openrewrite/rewrite</link>
      <description>&lt;p&gt;Automated mass refactoring of source code.&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://docs.openrewrite.org&quot;&gt; 
  &lt;picture&gt; 
   &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://github.com/openrewrite/rewrite/raw/main/doc/logo-oss-dark.svg&quot; /&gt; 
   &lt;source media=&quot;(prefers-color-scheme: light)&quot; srcset=&quot;https://github.com/openrewrite/rewrite/raw/main/doc/logo-oss-light.svg&quot; /&gt; 
   &lt;img alt=&quot;OpenRewrite Logo&quot; src=&quot;https://github.com/openrewrite/rewrite/raw/main/doc/logo-oss-light.svg?sanitize=true&quot; width=&quot;600px&quot; /&gt; 
  &lt;/picture&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;!-- Keep the gap above this line, otherwise they won&#39;t render correctly! --&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/openrewrite/rewrite/actions/workflows/ci.yml&quot;&gt;&lt;img src=&quot;https://github.com/openrewrite/rewrite/actions/workflows/ci.yml/badge.svg?sanitize=true&quot; alt=&quot;ci&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.apache.org/licenses/LICENSE-2.0&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/openrewrite/rewrite.svg?sanitize=true&quot; alt=&quot;Apache 2.0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://mvnrepository.com/artifact/org.openrewrite/rewrite-java&quot;&gt;&lt;img src=&quot;https://img.shields.io/maven-central/v/org.openrewrite/rewrite-java.svg?sanitize=true&quot; alt=&quot;Maven Central&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://ge.openrewrite.org/scans&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Revved%20up%20by-Develocity-06A0CE?logo=Gradle&amp;amp;labelColor=02303A&quot; alt=&quot;Revved up by Develocity&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/openrewrite/.github/raw/main/CONTRIBUTING.md&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Contributing-Guide-informational&quot; alt=&quot;Contributing Guide&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h1 align=&quot;center&quot;&gt;Fast, repeatable refactoring for developers&lt;/h1&gt; 
&lt;p&gt;The OpenRewrite project (managed by &lt;a href=&quot;https://www.moderne.ai/&quot;&gt;Moderne&lt;/a&gt;) is an open-source automated refactoring ecosystem for source code, enabling developers to effectively eliminate technical debt within their repositories.&lt;/p&gt; 
&lt;p&gt;It consists of an auto-refactoring engine that runs prepackaged, open source refactoring recipes for common framework migrations, security fixes, and stylistic consistency tasks—reducing your coding effort from hours or days to minutes.&lt;/p&gt; 
&lt;p&gt;OpenRewrite provides open-source parsers and base recipes for &lt;a href=&quot;https://docs.openrewrite.org/reference/supported-languages&quot;&gt;multiple languages&lt;/a&gt;, including Java, Kotlin, Groovy, JavaScript/TypeScript, Python, and C#. For Java, the &lt;a href=&quot;https://docs.openrewrite.org/reference/gradle-plugin-configuration&quot;&gt;OpenRewrite Gradle Plugin&lt;/a&gt; and &lt;a href=&quot;https://docs.openrewrite.org/reference/rewrite-maven-plugin&quot;&gt;OpenRewrite Maven Plugin&lt;/a&gt; let you run one recipe at a time against a single repository. Recipes are easy to customize, so you can adapt any of them - or even write your own.&lt;/p&gt; 
&lt;p&gt;Start with our &lt;a href=&quot;https://docs.openrewrite.org/running-recipes/getting-started&quot;&gt;quickstart guide&lt;/a&gt; and let OpenRewrite handle the boring parts of software development for you.&lt;/p&gt; 
&lt;p&gt;Get and stay informed:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Read the &lt;a href=&quot;http://docs.openrewrite.org&quot;&gt;documentation&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Join us on &lt;a href=&quot;https://join.slack.com/t/rewriteoss/shared_invite/zt-nj42n3ea-b~62rIHzb3Vo0E1APKCXEA&quot;&gt;Slack&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/xk3ZKrhWAb&quot;&gt;Discord&lt;/a&gt;! We&#39;re happy to answer your questions directly.&lt;/li&gt; 
 &lt;li&gt;Check out &lt;a href=&quot;https://www.youtube.com/@moderne-and-openrewrite/streams&quot;&gt;Code Remix Weekly&lt;/a&gt; where we deep dive topics and answer questions.&lt;/li&gt; 
 &lt;li&gt;Subscribe to our &lt;a href=&quot;https://www.youtube.com/@moderne-and-openrewrite&quot;&gt;YouTube&lt;/a&gt; channel for great videos on OpenRewrite recipes.&lt;/li&gt; 
 &lt;li&gt;Follow us on &lt;a href=&quot;https://x.com/openrewrite&quot;&gt;X&lt;/a&gt; and &lt;a href=&quot;https://www.linkedin.com/company/moderneinc&quot;&gt;LinkedIn&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;OpenRewrite is maintained by Moderne. The core framework is Apache2 licensed and will always be open source, as are many recipes in the catalog. See &lt;a href=&quot;https://docs.openrewrite.org/licensing/openrewrite-licensing&quot;&gt;Licensing&lt;/a&gt; for how the framework and recipes are licensed.&lt;/p&gt; 
&lt;h2&gt;Building on OpenRewrite with Moderne&lt;/h2&gt; 
&lt;p&gt;OpenRewrite is built to migrate, secure, and refactor code one repository at a time. &lt;a href=&quot;https://www.moderne.ai/&quot;&gt;Moderne&lt;/a&gt; is the commercial platform built on that foundation, running the same recipes across hundreds or thousands of repositories at once. Migrations are a common starting point with OpenRewrite, and the platform expands on this to include large-scale impact analysis, security remediation, and the tools coding agents use to understand and change code across a whole organization. Moderne also extends OpenRewrite from Java to additional languages and from individual developers to teams and coding agents. While the parsers and base recipes for those additional languages are open source, running recipes against them requires a Moderne license.&lt;/p&gt; 
&lt;p&gt;A lot of this comes down to how the &lt;a href=&quot;https://docs.openrewrite.org/concepts-and-explanations/lossless-semantic-trees&quot;&gt;Lossless Semantic Tree (LST)&lt;/a&gt; is handled. The LST is OpenRewrite&#39;s type-aware model of your source code, built in memory each time a recipe runs. Moderne batch-builds LSTs once and serializes them, so they can be reused across repos and across teams without rebuilding. That same LST gives coding agents pre-computed context, type-aware search, and direct access to OpenRewrite recipes as deterministic tool calls through tools like &lt;a href=&quot;https://docs.moderne.io/user-documentation/agent-tools/prethink&quot;&gt;Prethink&lt;/a&gt;, &lt;a href=&quot;https://docs.moderne.io/user-documentation/agent-tools/trigrep&quot;&gt;Trigrep&lt;/a&gt;, and a &lt;a href=&quot;https://docs.moderne.io/user-documentation/agent-tools/mcp&quot;&gt;local MCP server&lt;/a&gt;. Agents work with less token overhead and more accuracy than they would reading a codebase file by file.&lt;/p&gt; 
&lt;p&gt;See how Moderne and OpenRewrite work in different ways to transform your code:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Q-ej2lCJHRs&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/openrewrite/rewrite/main/doc/openrewrite_v_moderne.png&quot; alt=&quot;Moderne&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Moderne also includes a &lt;a href=&quot;https://docs.moderne.io/user-documentation/moderne-cli/getting-started/cli-intro&quot;&gt;multi-repo command line interface (CLI)&lt;/a&gt; for building LSTs, running recipes locally, and developing custom recipes across many repositories.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=fdPX9e2vsFw&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/openrewrite/rewrite/main/doc/moderne_cli.png&quot; alt=&quot;Moderne&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Moderne runs a free &lt;a href=&quot;https://www.moderne.io/try-moderne&quot;&gt;public service&lt;/a&gt; for the benefit of tens of thousands of open source projects. To learn more about how Moderne can help your team, &lt;a href=&quot;https://www.moderne.io/contact-us&quot;&gt;contact us&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;We appreciate all types of contributions. See the &lt;a href=&quot;https://github.com/openrewrite/.github/raw/main/CONTRIBUTING.md&quot;&gt;contributing guide&lt;/a&gt; for detailed instructions on how to get started.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/e3af7df8874264a8e4946bb098cdd60e7a11aff0ac652db86a721ddd0db9ffa0/openrewrite/rewrite" medium="image" />
      
    </item>
    
    <item>
      <title>alibaba/arthas</title>
      <link>https://github.com/alibaba/arthas</link>
      <description>&lt;p&gt;Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas&lt;/p&gt;&lt;hr&gt;&lt;h2&gt;Arthas&lt;/h2&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/site/docs/.vuepress/public/images/arthas.png&quot; alt=&quot;arthas&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/alibaba/arthas/actions&quot;&gt;&lt;img src=&quot;https://github.com/alibaba/arthas/workflows/JavaCI/badge.svg?sanitize=true&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/alibaba/arthas/releases/latest&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/downloads/alibaba/arthas/total?label=Downloads&quot; alt=&quot;download&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://search.maven.org/search?q=g:com.taobao.arthas&quot;&gt;&lt;img src=&quot;https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?sanitize=true&quot; alt=&quot;maven&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/github/license/alibaba/arthas.svg?sanitize=true&quot; alt=&quot;license&quot; /&gt; &lt;a href=&quot;https://isitmaintained.com/project/alibaba/arthas&quot; title=&quot;Average time to resolve an issue&quot;&gt;&lt;img src=&quot;https://isitmaintained.com/badge/resolution/alibaba/arthas.svg?sanitize=true&quot; alt=&quot;Average time to resolve an issue&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://isitmaintained.com/project/alibaba/arthas&quot; title=&quot;Percentage of issues still open&quot;&gt;&lt;img src=&quot;https://isitmaintained.com/badge/open/alibaba/arthas.svg?sanitize=true&quot; alt=&quot;Percentage of issues still open&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opensource.alibaba.com/contribution_leaderboard/details?projectValue=arthas&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Arthas-Check%20Your%20Contribution-orange&quot; alt=&quot;Leaderboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;Arthas&lt;/code&gt; is a Java Diagnostic tool open sourced by Alibaba.&lt;/p&gt; 
&lt;p&gt;Arthas allows developers to troubleshoot production issues for Java applications without modifying code or restarting servers.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/README_CN.md&quot;&gt;中文说明/Chinese Documentation&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Background&lt;/h3&gt; 
&lt;p&gt;Often times, the production system network is inaccessible from the local development environment. If issues are encountered in production systems, it is impossible to use IDEs to debug the application remotely. More importantly, debugging in production environment is unacceptable, as it will suspend all the threads, resulting in the suspension of business services.&lt;/p&gt; 
&lt;p&gt;Developers could always try to reproduce the same issue on the test/staging environment. However, this is tricky as some issues cannot be reproduced easily on a different environment, or even disappear once restarted.&lt;/p&gt; 
&lt;p&gt;And if you&#39;re thinking of adding some logs to your code to help troubleshoot the issue, you will have to go through the following lifecycle; test, staging, and then to production. Time is money! This approach is inefficient! Besides, the issue may not be reproducible once the JVM is restarted, as described above.&lt;/p&gt; 
&lt;p&gt;Arthas was built to solve these issues. A developer can troubleshoot your production issues on-the-fly. No JVM restart, no additional code changes. Arthas works as an observer, which will never suspend your existing threads.&lt;/p&gt; 
&lt;h3&gt;Key features&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Check whether a class is loaded, or where the class is being loaded. (Useful for troubleshooting jar file conflicts)&lt;/li&gt; 
 &lt;li&gt;Decompile a class to ensure the code is running as expected.&lt;/li&gt; 
 &lt;li&gt;View classloader statistics, e.g. the number of classloaders, the number of classes loaded per classloader, the classloader hierarchy, possible classloader leaks, etc.&lt;/li&gt; 
 &lt;li&gt;View the method invocation details, e.g. method parameter, return object, thrown exception, and etc.&lt;/li&gt; 
 &lt;li&gt;Check the stack trace of specified method invocation. This is useful when a developers wants to know the caller of the said method.&lt;/li&gt; 
 &lt;li&gt;Trace the method invocation to find slow sub-invocations.&lt;/li&gt; 
 &lt;li&gt;Monitor method invocation statistics, e.g. qps, rt, success rate and etc.&lt;/li&gt; 
 &lt;li&gt;Monitor system metrics, thread states and cpu usage, gc statistics, and etc.&lt;/li&gt; 
 &lt;li&gt;Supports command line interactive mode, with auto-complete feature enabled.&lt;/li&gt; 
 &lt;li&gt;Supports telnet and websocket, which enables both local and remote diagnostics with command line and browsers.&lt;/li&gt; 
 &lt;li&gt;Supports profiler/Flame Graph&lt;/li&gt; 
 &lt;li&gt;Support get objects in the heap that are instances of the specified class.&lt;/li&gt; 
 &lt;li&gt;Supports JDK 8+ in version 4.x, including JDK 17, JDK 21, and JDK 25.&lt;/li&gt; 
 &lt;li&gt;Supports Linux/Mac/Windows.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Online Tutorials(Recommended)&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&quot;&gt;View&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Quick start&lt;/h3&gt; 
&lt;h4&gt;Use &lt;code&gt;arthas-boot&lt;/code&gt;(Recommended)&lt;/h4&gt; 
&lt;p&gt;Download&lt;code&gt;arthas-boot.jar&lt;/code&gt;，Start with &lt;code&gt;java&lt;/code&gt; command:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Print usage:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;java -jar arthas-boot.jar -h
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Use &lt;code&gt;as.sh&lt;/code&gt;&lt;/h4&gt; 
&lt;p&gt;You can install Arthas with one single line command on Linux, Unix, and Mac. Copy the following command and paste it into the command line, then press &lt;em&gt;Enter&lt;/em&gt; to run:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -L https://arthas.aliyun.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The command above will download the bootstrap script &lt;code&gt;as.sh&lt;/code&gt; to the current directory. You can move it any other place you want, or put its location in &lt;code&gt;$PATH&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;You can enter its interactive interface by executing &lt;code&gt;as.sh&lt;/code&gt;, or execute &lt;code&gt;as.sh -h&lt;/code&gt; for more help information.&lt;/p&gt; 
&lt;h3&gt;Documentation&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&quot;&gt;Online Tutorials(Recommended)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en&quot;&gt;User manual&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/install-detail.html&quot;&gt;Installation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/download.html&quot;&gt;Download&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/quick-start.html&quot;&gt;Quick start&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/advanced-use.html&quot;&gt;Advanced usage&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/commands.html&quot;&gt;Commands&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/web-console.html&quot;&gt;WebConsole&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/docker.html&quot;&gt;Docker&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/spring-boot-starter.html&quot;&gt;Arthas Spring Boot Starter&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/alibaba/arthas/issues?q=label%3Auser-case&quot;&gt;User cases&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/faq&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/alibaba/arthas/raw/master/CONTRIBUTING.md&quot;&gt;Compile and debug/How to contribute&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/alibaba/arthas/releases&quot;&gt;Release Notes&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Feature Showcase&lt;/h3&gt; 
&lt;h4&gt;Dashboard&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/dashboard&quot;&gt;https://arthas.aliyun.com/doc/en/dashboard&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/site/docs/.vuepress/public/images/dashboard.png&quot; alt=&quot;dashboard&quot; /&gt;&lt;/p&gt; 
&lt;h4&gt;Thread&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/thread&quot;&gt;https://arthas.aliyun.com/doc/en/thread&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See what is eating your CPU (ranked by top CPU usage) and what is going on there in one glance:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ thread -n 3
&quot;as-command-execute-daemon&quot; Id=29 cpuUsage=75% RUNNABLE
    at sun.management.ThreadImpl.dumpThreads0(Native Method)
    at sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:440)
    at com.taobao.arthas.core.command.monitor200.ThreadCommand$1.action(ThreadCommand.java:58)
    at com.taobao.arthas.core.command.handler.AbstractCommandHandler.execute(AbstractCommandHandler.java:238)
    at com.taobao.arthas.core.command.handler.DefaultCommandHandler.handleCommand(DefaultCommandHandler.java:67)
    at com.taobao.arthas.core.server.ArthasServer$4.run(ArthasServer.java:276)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

    Number of locked synchronizers = 1
    - java.util.concurrent.ThreadPoolExecutor$Worker@6cd0b6f8

&quot;as-session-expire-daemon&quot; Id=25 cpuUsage=24% TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at com.taobao.arthas.core.server.DefaultSessionManager$2.run(DefaultSessionManager.java:85)

&quot;Reference Handler&quot; Id=2 cpuUsage=0% WAITING on java.lang.ref.Reference$Lock@69ba0f27
    at java.lang.Object.wait(Native Method)
    -  waiting on java.lang.ref.Reference$Lock@69ba0f27
    at java.lang.Object.wait(Object.java:503)
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;jad&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/jad&quot;&gt;https://arthas.aliyun.com/doc/en/jad&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Decompile your class with one shot:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;$ jad javax.servlet.Servlet

ClassLoader:
+-java.net.URLClassLoader@6108b2d7
  +-sun.misc.Launcher$AppClassLoader@18b4aac2
    +-sun.misc.Launcher$ExtClassLoader@1ddf84b8

Location:
/Users/xxx/work/test/lib/servlet-api.jar

/*
 * Decompiled with CFR 0_122.
 */
package javax.servlet;

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public interface Servlet {
    public void init(ServletConfig var1) throws ServletException;

    public ServletConfig getServletConfig();

    public void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    public String getServletInfo();

    public void destroy();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;mc&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/mc&quot;&gt;https://arthas.aliyun.com/doc/en/mc&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Memory compiler, compiles &lt;code&gt;.java&lt;/code&gt; files into &lt;code&gt;.class&lt;/code&gt; files in memory.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ mc /tmp/Test.java
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;retransform&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/retransform&quot;&gt;https://arthas.aliyun.com/doc/en/retransform&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Load the external &lt;code&gt;*.class&lt;/code&gt; files to retransform/hotswap the loaded classes in JVM.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;retransform /tmp/Test.class
retransform -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;sc&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/sc&quot;&gt;https://arthas.aliyun.com/doc/en/sc&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Search any loaded class with detailed information.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ sc -d org.springframework.web.context.support.XmlWebApplicationContext
 class-info        org.springframework.web.context.support.XmlWebApplicationContext
 code-source       /Users/xxx/work/test/WEB-INF/lib/spring-web-3.2.11.RELEASE.jar
 name              org.springframework.web.context.support.XmlWebApplicationContext
 isInterface       false
 isAnnotation      false
 isEnum            false
 isAnonymousClass  false
 isArray           false
 isLocalClass      false
 isMemberClass     false
 isPrimitive       false
 isSynthetic       false
 simple-name       XmlWebApplicationContext
 modifier          public
 annotation
 interfaces
 super-class       +-org.springframework.web.context.support.AbstractRefreshableWebApplicationContext
                     +-org.springframework.context.support.AbstractRefreshableConfigApplicationContext
                       +-org.springframework.context.support.AbstractRefreshableApplicationContext
                         +-org.springframework.context.support.AbstractApplicationContext
                           +-org.springframework.core.io.DefaultResourceLoader
                             +-java.lang.Object
 class-loader      +-org.apache.catalina.loader.ParallelWebappClassLoader
                     +-java.net.URLClassLoader@6108b2d7
                       +-sun.misc.Launcher$AppClassLoader@18b4aac2
                         +-sun.misc.Launcher$ExtClassLoader@1ddf84b8
 classLoaderHash   25131501

&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;vmtool&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/vmtool&quot;&gt;https://arthas.aliyun.com/doc/en/vmtool&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Get objects in the heap that are instances of the specified class.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ vmtool --action getInstances --className java.lang.String --limit 10
@String[][
    @String[com/taobao/arthas/core/shell/session/Session],
    @String[com.taobao.arthas.core.shell.session.Session],
    @String[com/taobao/arthas/core/shell/session/Session],
    @String[com/taobao/arthas/core/shell/session/Session],
    @String[com/taobao/arthas/core/shell/session/Session.class],
    @String[com/taobao/arthas/core/shell/session/Session.class],
    @String[com/taobao/arthas/core/shell/session/Session.class],
    @String[com/],
    @String[java/util/concurrent/ConcurrentHashMap$ValueIterator],
    @String[java/util/concurrent/locks/LockSupport],
]
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;stack&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/stack&quot;&gt;https://arthas.aliyun.com/doc/en/stack&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;View the call stack of &lt;code&gt;test.arthas.TestStack#doGet&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ stack test.arthas.TestStack doGet
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 286 ms.
ts=2018-09-18 10:11:45;thread_name=http-bio-8080-exec-10;id=d9;is_daemon=true;priority=5;TCCL=org.apache.catalina.loader.ParallelWebappClassLoader@25131501
    @test.arthas.TestStack.doGet()
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
        ...
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:451)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1121)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Trace&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/trace&quot;&gt;https://arthas.aliyun.com/doc/en/trace&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See what is slowing down your method invocation with trace command:&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/site/docs/.vuepress/public/images/trace.png&quot; alt=&quot;trace&quot; /&gt;&lt;/p&gt; 
&lt;h4&gt;Watch&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/watch&quot;&gt;https://arthas.aliyun.com/doc/en/watch&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Watch the first parameter and thrown exception of &lt;code&gt;test.arthas.TestWatch#doGet&lt;/code&gt; only if it throws exception.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ watch test.arthas.TestWatch doGet {params[0], throwExp} -e
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 65 ms.
ts=2018-09-18 10:26:28;result=@ArrayList[
    @RequestFacade[org.apache.catalina.connector.RequestFacade@79f922b2],
    @NullPointerException[java.lang.NullPointerException],
]
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Monitor&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/monitor&quot;&gt;https://arthas.aliyun.com/doc/en/monitor&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Monitor a specific method invocation statistics, including the total number of invocations, average response time, success rate, and every 5 seconds:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ monitor -c 5 org.apache.dubbo.demo.provider.DemoServiceImpl sayHello
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 109 ms.
 timestamp            class                                           method    total  success  fail  avg-rt(ms)  fail-rate
----------------------------------------------------------------------------------------------------------------------------
 2018-09-20 09:45:32  org.apache.dubbo.demo.provider.DemoServiceImpl  sayHello  5      5        0     0.67        0.00%

 timestamp            class                                           method    total  success  fail  avg-rt(ms)  fail-rate
----------------------------------------------------------------------------------------------------------------------------
 2018-09-20 09:45:37  org.apache.dubbo.demo.provider.DemoServiceImpl  sayHello  5      5        0     1.00        0.00%

 timestamp            class                                           method    total  success  fail  avg-rt(ms)  fail-rate
----------------------------------------------------------------------------------------------------------------------------
 2018-09-20 09:45:42  org.apache.dubbo.demo.provider.DemoServiceImpl  sayHello  5      5        0     0.43        0.00%
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Time Tunnel(tt)&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/tt&quot;&gt;https://arthas.aliyun.com/doc/en/tt&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Record method invocation data, so that you can check the method invocation parameters, returned value, and thrown exceptions later. It works as if you could come back and replay the past method invocation via time tunnel.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ tt -t org.apache.dubbo.demo.provider.DemoServiceImpl sayHello
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 75 ms.
 INDEX   TIMESTAMP            COST(ms)  IS-RET  IS-EXP   OBJECT         CLASS                          METHOD
-------------------------------------------------------------------------------------------------------------------------------------
 1000    2018-09-20 09:54:10  1.971195  true    false    0x55965cca     DemoServiceImpl                sayHello
 1001    2018-09-20 09:54:11  0.215685  true    false    0x55965cca     DemoServiceImpl                sayHello
 1002    2018-09-20 09:54:12  0.236303  true    false    0x55965cca     DemoServiceImpl                sayHello
 1003    2018-09-20 09:54:13  0.159598  true    false    0x55965cca     DemoServiceImpl                sayHello
 1004    2018-09-20 09:54:14  0.201982  true    false    0x55965cca     DemoServiceImpl                sayHello
 1005    2018-09-20 09:54:15  0.214205  true    false    0x55965cca     DemoServiceImpl                sayHello
 1006    2018-09-20 09:54:16  0.241863  true    false    0x55965cca     DemoServiceImpl                sayHello
 1007    2018-09-20 09:54:17  0.305747  true    false    0x55965cca     DemoServiceImpl                sayHello
 1008    2018-09-20 09:54:18  0.18468   true    false    0x55965cca     DemoServiceImpl                sayHello
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Classloader&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/classloader&quot;&gt;https://arthas.aliyun.com/doc/en/classloader&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ classloader
 name                                                  numberOfInstances  loadedCountTotal
 BootstrapClassLoader                                  1                  3346
 com.taobao.arthas.agent.ArthasClassloader             1                  1262
 java.net.URLClassLoader                               2                  1033
 org.apache.catalina.loader.ParallelWebappClassLoader  1                  628
 sun.reflect.DelegatingClassLoader                     166                166
 sun.misc.Launcher$AppClassLoader                      1                  31
 com.alibaba.fastjson.util.ASMClassLoader              6                  15
 sun.misc.Launcher$ExtClassLoader                      1                  7
 org.jvnet.hk2.internal.DelegatingClassLoader          2                  2
 sun.reflect.misc.MethodUtil                           1                  1
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Web Console&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/web-console&quot;&gt;https://arthas.aliyun.com/doc/en/web-console&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/site/docs/.vuepress/public/images/web-console-local.png&quot; alt=&quot;web console&quot; /&gt;&lt;/p&gt; 
&lt;h4&gt;Profiler/FlameGraph&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/en/profiler&quot;&gt;https://arthas.aliyun.com/doc/en/profiler&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ profiler start
Started [cpu] profiling
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;$ profiler stop
profiler output file: /tmp/demo/arthas-output/20211207-111550.html
OK
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;View profiler results under arthas-output via browser:&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/site/docs/.vuepress/public/images/arthas-output-svg.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt; 
&lt;h4&gt;Arthas Spring Boot Starter&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arthas.aliyun.com/doc/spring-boot-starter.html&quot;&gt;Arthas Spring Boot Starter&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Known Users&lt;/h3&gt; 
&lt;p&gt;Arthas has more than 120 registered users, &lt;a href=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/USERS.md&quot;&gt;View All&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Welcome to register the company name in this issue: &lt;a href=&quot;https://github.com/alibaba/arthas/issues/111&quot;&gt;https://github.com/alibaba/arthas/issues/111&lt;/a&gt; (in order of registration)&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/static/alibaba.png&quot; alt=&quot;Alibaba&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/static/alipay.png&quot; alt=&quot;Alipay&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/static/aliyun.png&quot; alt=&quot;Aliyun&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/static/taobao.png&quot; alt=&quot;Taobao&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/static/icbc.png&quot; alt=&quot;ICBC&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/static/xueqiu.png&quot; alt=&quot;雪球财经&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/static/sf.png&quot; alt=&quot;顺丰科技&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/static/ke.png&quot; alt=&quot;贝壳找房&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/static/vipkid.png&quot; alt=&quot;vipkid&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/static/baidufengchao.png&quot; alt=&quot;百度凤巢&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/static/youzan.png&quot; alt=&quot;有赞&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/static/iflytek.png&quot; alt=&quot;科大讯飞&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/static/zhaopin.png&quot; alt=&quot;智联招聘&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/alibaba/arthas/master/static/dms.png&quot; alt=&quot;达美盛&quot; /&gt;&lt;/p&gt; 
&lt;h3&gt;Derivative Projects&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/qunarcorp/bistoury&quot;&gt;Bistoury: A project that integrates Arthas&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/XhinLiang/arthas&quot;&gt;A fork of arthas using MVEL&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Credits&lt;/h3&gt; 
&lt;h4&gt;Contributors&lt;/h4&gt; 
&lt;p&gt;This project exists, thanks to all the people who contributed.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/alibaba/arthas/graphs/contributors&quot;&gt;&lt;img src=&quot;https://opencollective.com/arthas/contributors.svg?width=890&amp;amp;button=false&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h4&gt;Projects&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/alibaba/bytekit&quot;&gt;bytekit&lt;/a&gt; Java Bytecode Kit.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/oldmanpushcart/greys-anatomy&quot;&gt;greys-anatomy&lt;/a&gt;: The Arthas code base has derived from Greys, we thank for the excellent work done by Greys.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/alibaba/termd&quot;&gt;termd&lt;/a&gt;: Arthas&#39;s terminal implementation is based on termd, an open source library for writing terminal applications in Java.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/crashub/crash&quot;&gt;crash&lt;/a&gt;: Arthas&#39;s text based user interface rendering is based on codes extracted from &lt;a href=&quot;https://github.com/crashub/crash/tree/1.3.2/shell&quot;&gt;here&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/alibaba/cli&quot;&gt;cli&lt;/a&gt;: Arthas&#39;s command line interface implementation is based on cli, open sourced by vert.x&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/skalogs/SkaETL/tree/master/compiler&quot;&gt;compiler&lt;/a&gt; Arthas&#39;s memory compiler.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://commons.apache.org/proper/commons-net/&quot;&gt;Apache Commons Net&lt;/a&gt; Arthas&#39;s telnet client.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jvm-profiling-tools/async-profiler&quot;&gt;async-profiler&lt;/a&gt; Arthas&#39;s profiler command.&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/711bae932512982c1ae7945a8f8dfd218630ed9d33f226b6ed9e56308108682a/alibaba/arthas" medium="image" />
      
    </item>
    
    <item>
      <title>emanuele-f/PCAPdroid</title>
      <link>https://github.com/emanuele-f/PCAPdroid</link>
      <description>&lt;p&gt;No-root network monitor, firewall and PCAP dumper for Android&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;PCAPdroid&lt;/h1&gt; 
&lt;p&gt;PCAPdroid is a privacy-friendly open source app which lets you track, analyze and block the connections made by the other apps in your device. It also allows you to export a PCAP dump of the traffic, inspect HTTP, decrypt TLS traffic and much more!&lt;/p&gt; 
&lt;p&gt;PCAPdroid simulates a VPN in order to capture the network traffic without root. It does not use a remote VPN server, instead data is processed locally on the device.&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/emanuele-f/PCAPdroid/master/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg&quot; width=&quot;190&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/emanuele-f/PCAPdroid/master/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg&quot; width=&quot;190&quot; /&gt; &lt;/p&gt; 
&lt;p&gt;Features:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Log and examine the connections made by user and system apps&lt;/li&gt; 
 &lt;li&gt;Extract the SNI, DNS query, HTTP URL and the remote IP address&lt;/li&gt; 
 &lt;li&gt;Inspect HTTP requests and replies thanks to the built-in decoders&lt;/li&gt; 
 &lt;li&gt;Inspect the full connections payload as hexdump/text&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://emanuele-f.github.io/PCAPdroid/tls_decryption&quot;&gt;Decrypt the HTTPS/TLS traffic&lt;/a&gt; and export the SSLKEYLOGFILE&lt;/li&gt; 
 &lt;li&gt;Dump the traffic to a PCAP file, download it from a browser, or stream it to a remote receiver for real-time analysis (e.g. Wireshark)&lt;/li&gt; 
 &lt;li&gt;Create rules to filter out the good traffic and easily spot anomalies&lt;/li&gt; 
 &lt;li&gt;Identify the country and ASN of remote server via offline DB lookups&lt;/li&gt; 
 &lt;li&gt;On rooted devices, capture the traffic while other VPN apps are running&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Paid features:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://emanuele-f.github.io/PCAPdroid/paid_features#51-firewall&quot;&gt;Firewall&lt;/a&gt;: create rules to block individual apps, domains and IP addresses&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://emanuele-f.github.io/PCAPdroid/paid_features#52-malware-detection&quot;&gt;Malware detection&lt;/a&gt;: detect malicious connections by using third-party blacklists&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://emanuele-f.github.io/PCAPdroid/paid_features#53-pcapng-format&quot;&gt;PCAPng format&lt;/a&gt;: makes it easier to export and analyze decrypted traffic&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If you plan to use PCAPdroid to perform packet analysis, please check out &lt;a href=&quot;https://emanuele-f.github.io/PCAPdroid/quick_start#14-packet-analysis&quot;&gt;the specific section&lt;/a&gt; of the manual.&lt;/p&gt; 
&lt;a href=&quot;https://f-droid.org/packages/com.emanuelef.remote_capture&quot;&gt; &lt;img src=&quot;https://fdroid.gitlab.io/artwork/badge/get-it-on.png&quot; alt=&quot;Get it on F-Droid&quot; height=&quot;80&quot; /&gt; &lt;/a&gt; 
&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.emanuelef.remote_capture&quot;&gt;&lt;img height=&quot;80&quot; alt=&quot;Get it on Google Play&quot; src=&quot;https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png&quot; /&gt;&lt;/a&gt; 
&lt;p&gt;You can test the latest features before the official release by adding the &lt;a href=&quot;https://pcapdroid.org/fdroid/repo/&quot;&gt;Beta repository&lt;/a&gt; to the F-Droid app.&lt;/p&gt; 
&lt;h2&gt;User Guide&lt;/h2&gt; 
&lt;p&gt;Check out the &lt;a href=&quot;https://emanuele-f.github.io/PCAPdroid/quick_start&quot;&gt;quick start instructions&lt;/a&gt; or the full &lt;a href=&quot;https://emanuele-f.github.io/PCAPdroid&quot;&gt;User Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Sponsors&lt;/h2&gt; 
&lt;p&gt;The PCAPdroid project is sponsored by &lt;a href=&quot;https://aveq.info&quot;&gt;AVEQ GmbH&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;If you want to sponsor this project &lt;a href=&quot;mailto:black.silver@hotmail.it?subject=PCAPdroid%20sponsorship&quot;&gt;drop me an email&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Community&lt;/h2&gt; 
&lt;p&gt;You can help the PCAPdroid project in many ways:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://emanuele-f.github.io/PCAPdroid/donate&quot;&gt;Make a donation&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Translate the app on &lt;a href=&quot;https://hosted.weblate.org/engage/pcapdroid/&quot;&gt;Weblate&lt;/a&gt; &lt;a href=&quot;https://hosted.weblate.org/engage/pcapdroid/&quot;&gt; &lt;img src=&quot;https://hosted.weblate.org/widgets/pcapdroid/-/app/multi-auto.svg?sanitize=true&quot; alt=&quot;Translation status&quot; /&gt; &lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/emanuele-f/PCAPdroid/discussions&quot;&gt;Discuss&lt;/a&gt; new features&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Improve the app theme and layout&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Star the project on Github and on &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.emanuelef.remote_capture&quot;&gt;Google Play&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Of course provide code pull requests!&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Join the international PCAPdroid community &lt;a href=&quot;https://t.me/PCAPdroid&quot;&gt;on Telegram&lt;/a&gt; or &lt;a href=&quot;https://matrix.to/#/#pcapdroid:matrix.org&quot;&gt;on Matrix&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Integrating into your APP&lt;/h2&gt; 
&lt;p&gt;Some features of PCAPdroid can be integrated into a third-party app to provide packet capture capabilities.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;For rooted devices, the &lt;a href=&quot;https://github.com/emanuele-f/PCAPdroid/tree/master/app/src/main/jni/pcapd&quot;&gt;pcapd daemon&lt;/a&gt; can be directly integrated into your APK to capture network packets.&lt;/li&gt; 
 &lt;li&gt;For all the devices, PCAPdroid &lt;a href=&quot;https://github.com/emanuele-f/PCAPdroid/raw/master/docs/app_api.md&quot;&gt;exposes an API&lt;/a&gt; to control the packet capture and send the captured packets via UDP to your app. This requires to install PCAPdroid along with your app.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Open Source&lt;/h2&gt; 
&lt;p&gt;PCAPdroid is powered by open source technologies.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ntop/nDPI&quot;&gt;nDPI&lt;/a&gt;: deep packet inspection library, provides the connections metadata&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mitmproxy/mitmproxy&quot;&gt;mitmproxy&lt;/a&gt;: a local proxy for the TLS decryption&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/emanuele-f/zdtun&quot;&gt;zdtun&lt;/a&gt;: minimal TCP/IP stack for the non-root capture&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For the complete list of third party libraries check out the &quot;About&quot; page in the app.&lt;/p&gt; 
&lt;h2&gt;Building&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;On Windows, install &lt;a href=&quot;https://gitforwindows.org&quot;&gt;gitforwindows&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Clone this repo&lt;/li&gt; 
 &lt;li&gt;Inside the repo dir, run &lt;code&gt;git submodule update --init&lt;/code&gt;. The &lt;code&gt;submodules&lt;/code&gt; directory should get populated.&lt;/li&gt; 
 &lt;li&gt;Open the project in Android Studio, install the appropriate SDK and the NDK&lt;/li&gt; 
 &lt;li&gt;Build the app&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: If you get &quot;No valid CMake executable was found&quot;, be sure to install the CMake version used by PCAPdroid (currently &lt;a href=&quot;https://github.com/emanuele-f/PCAPdroid/raw/master/app/build.gradle&quot;&gt;3.22.1&lt;/a&gt;) from the SDK manager&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/35ba97cfd18448d6352af1412580438ac41bd12d7bac3cb32968c0e998266bf5/emanuele-f/PCAPdroid" medium="image" />
      
    </item>
    
    <item>
      <title>apache/iceberg</title>
      <link>https://github.com/apache/iceberg</link>
      <description>&lt;p&gt;Apache Iceberg&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;img src=&quot;https://iceberg.apache.org/assets/images/Iceberg-logo.svg?sanitize=true&quot; alt=&quot;Iceberg&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/apache/iceberg/actions/workflows/java-ci.yml&quot;&gt;&lt;img src=&quot;https://github.com/apache/iceberg/actions/workflows/java-ci.yml/badge.svg?sanitize=true&quot; alt=&quot;&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://apache-iceberg.slack.com/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/chat-on%20Slack-brightgreen.svg?sanitize=true&quot; alt=&quot;Slack&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Iceberg is a high-performance format for huge analytic tables. Iceberg brings the reliability and simplicity of SQL tables to big data, while making it possible for engines like Spark, Trino, Flink, Presto, Hive and Impala to safely work with the same tables, at the same time.&lt;/p&gt; 
&lt;p&gt;Background and documentation is available at &lt;a href=&quot;https://iceberg.apache.org&quot;&gt;https://iceberg.apache.org&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Status&lt;/h2&gt; 
&lt;p&gt;Iceberg is under active development at the Apache Software Foundation.&lt;/p&gt; 
&lt;p&gt;The &lt;a href=&quot;https://iceberg.apache.org/spec/&quot;&gt;Iceberg format specification&lt;/a&gt; is stable and new features are added with each version.&lt;/p&gt; 
&lt;p&gt;The core Java library is located in this repository and is the reference implementation for other libraries.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://iceberg.apache.org/docs/latest/&quot;&gt;Documentation&lt;/a&gt; is available for all libraries and integrations.&lt;/p&gt; 
&lt;h2&gt;Collaboration&lt;/h2&gt; 
&lt;p&gt;Iceberg tracks issues in GitHub and prefers to receive contributions as pull requests.&lt;/p&gt; 
&lt;p&gt;Community discussions happen primarily on the &lt;a href=&quot;mailto:dev@iceberg.apache.org&quot;&gt;dev mailing list&lt;/a&gt; or on specific issues.&lt;/p&gt; 
&lt;h3&gt;Building&lt;/h3&gt; 
&lt;p&gt;Iceberg is built using Gradle with Java 17 or 21.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;To invoke a build and run tests: &lt;code&gt;./gradlew build&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;To skip tests: &lt;code&gt;./gradlew build -x test -x integrationTest&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;To fix code style for default versions: &lt;code&gt;./gradlew spotlessApply&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;To fix code style for all versions of Spark/Hive/Flink:&lt;code&gt;./gradlew spotlessApply -DallModules&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Iceberg table support is organized in library modules:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;iceberg-common&lt;/code&gt; contains utility classes used in other modules&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;iceberg-api&lt;/code&gt; contains the public Iceberg API&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;iceberg-core&lt;/code&gt; contains implementations of the Iceberg API and support for Avro data files, &lt;strong&gt;this is what processing engines should depend on&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;iceberg-parquet&lt;/code&gt; is an optional module for working with tables backed by Parquet files&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;iceberg-arrow&lt;/code&gt; is an optional module for reading Parquet into Arrow memory&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;iceberg-orc&lt;/code&gt; is an optional module for working with tables backed by ORC files&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;iceberg-hive-metastore&lt;/code&gt; is an implementation of Iceberg tables backed by the Hive metastore Thrift client&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;iceberg-data&lt;/code&gt; is an optional module for working with tables directly from JVM applications&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Iceberg also has modules for adding Iceberg support to processing engines:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;iceberg-spark&lt;/code&gt; is an implementation of Spark&#39;s Datasource V2 API for Iceberg with submodules for each spark versions (use &lt;a href=&quot;https://iceberg.apache.org/multi-engine-support/#runtime-jar&quot;&gt;runtime jars&lt;/a&gt; for a shaded version to avoid dependency conflicts)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;iceberg-flink&lt;/code&gt; contains classes for integrating with Apache Flink (use &lt;a href=&quot;https://iceberg.apache.org/multi-engine-support/#runtime-jar&quot;&gt;iceberg-flink-runtime&lt;/a&gt; for a shaded version)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;iceberg-mr&lt;/code&gt; contains an InputFormat and other classes for integrating with Apache Hive&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;The tests require Docker to execute. On macOS (with Docker Desktop), you might need to create a symbolic name to the docker socket in order to be detected by the tests:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo ln -s $HOME/.docker/run/docker.sock /var/run/docker.sock
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;In some cases the testcontainer may exit with an initialization error because of an illegal state exception in the GenericContainer. One work around for this problem is to set &lt;code&gt;selinux&lt;/code&gt; into permissive mode before running the tests.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo setenforce Permissive
./gradlew ...
sudo setenforce Enforcing
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h4&gt;Documentation&lt;/h4&gt; 
&lt;p&gt;For information about building the documentation, see &lt;a href=&quot;https://raw.githubusercontent.com/apache/iceberg/main/site/README.md&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Engine Compatibility&lt;/h3&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://iceberg.apache.org/multi-engine-support/&quot;&gt;Multi-Engine Support&lt;/a&gt; page to know about Iceberg compatibility with different Spark, Flink and Hive versions. For other engines such as Presto or Trino, please visit their websites for Iceberg integration details.&lt;/p&gt; 
&lt;h3&gt;Implementations&lt;/h3&gt; 
&lt;p&gt;This repository contains the Java implementation of Iceberg. Other implementations can be found at:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Go&lt;/strong&gt;: &lt;a href=&quot;https://github.com/apache/iceberg-go&quot;&gt;iceberg-go&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;PyIceberg&lt;/strong&gt; (Python): &lt;a href=&quot;https://github.com/apache/iceberg-python&quot;&gt;iceberg-python&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Rust&lt;/strong&gt;: &lt;a href=&quot;https://github.com/apache/iceberg-rust&quot;&gt;iceberg-rust&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;C++&lt;/strong&gt;: &lt;a href=&quot;https://github.com/apache/iceberg-cpp&quot;&gt;iceberg-cpp&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/8ca61070bfd536ef7c1eacfe237d813d68517d04655d7497f27a0d28f7f94b3b/apache/iceberg" medium="image" />
      
    </item>
    
    <item>
      <title>kestra-io/kestra</title>
      <link>https://github.com/kestra-io/kestra</link>
      <description>&lt;p&gt;Event Driven Orchestration &amp; Scheduling Platform for Mission Critical Applications&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://www.kestra.io&quot;&gt; &lt;img src=&quot;https://kestra.io/banner.png&quot; alt=&quot;Kestra workflow orchestrator&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;h1 align=&quot;center&quot; style=&quot;border-bottom: none&quot;&gt; Open-source orchestration platform for data, AI, and infrastructure workflows &lt;/h1&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;a href=&quot;https://github.com/kestra-io/kestra/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/tag/kestra-io/kestra.svg?sort=semver&amp;amp;include_prereleases&amp;amp;color=blueviolet&quot; alt=&quot;Last Version&quot; /&gt;&lt;/a&gt; 
 &lt;a href=&quot;https://github.com/kestra-io/kestra/raw/develop/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/kestra-io/kestra?color=blueviolet&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt; 
 &lt;a href=&quot;https://github.com/kestra-io/kestra/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/kestra-io/kestra?color=blueviolet&amp;amp;logo=github&quot; alt=&quot;Github star&quot; /&gt;&lt;/a&gt; 
 &lt;br /&gt; 
 &lt;a href=&quot;https://kestra.io&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Website-kestra.io-192A4E?color=blueviolet&quot; alt=&quot;Kestra infinitely scalable orchestration and scheduling platform&quot; /&gt;&lt;/a&gt; 
 &lt;a href=&quot;https://kestra.io/slack&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Slack-Join%20Community-blueviolet?logo=slack&quot; alt=&quot;Slack&quot; /&gt;&lt;/a&gt; 
&lt;/div&gt; 
&lt;br /&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://x.com/kestra_io&quot; style=&quot;margin: 0 10px;&quot;&gt; &lt;img height=&quot;25&quot; src=&quot;https://kestra.io/twitter.svg?sanitize=true&quot; alt=&quot;twitter&quot; width=&quot;35&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.linkedin.com/company/kestra/&quot; style=&quot;margin: 0 10px;&quot;&gt; &lt;img height=&quot;25&quot; src=&quot;https://kestra.io/linkedin.svg?sanitize=true&quot; alt=&quot;linkedin&quot; width=&quot;35&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.youtube.com/@kestra-io&quot; style=&quot;margin: 0 10px;&quot;&gt; &lt;img height=&quot;25&quot; src=&quot;https://kestra.io/youtube.svg?sanitize=true&quot; alt=&quot;youtube&quot; width=&quot;35&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://trendshift.io/repositories/2714&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://trendshift.io/api/badge/repositories/2714&quot; alt=&quot;kestra-io%2Fkestra | Trendshift&quot; width=&quot;250&quot; height=&quot;55&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://www.producthunt.com/posts/kestra?embed=true&amp;amp;utm_source=badge-top-post-badge&amp;amp;utm_medium=badge&amp;amp;utm_souce=badge-kestra&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=612077&amp;amp;theme=light&amp;amp;period=daily&amp;amp;t=1740737506162&quot; alt=&quot;Kestra - All-in-one automation &amp;amp; orchestration platform | Product Hunt&quot; style=&quot;width: 250px; height: 54px;&quot; width=&quot;250&quot; height=&quot;54&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://go.kestra.io/video/product-overview&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://kestra.io/startvideo.png&quot; alt=&quot;Get started in 3 minutes with Kestra&quot; width=&quot;640px&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot; style=&quot;color:grey;&quot;&gt;&lt;i&gt;Click on the image to learn how to get started with Kestra in 3 minutes.&lt;/i&gt;&lt;/p&gt; 
&lt;h2&gt;🌟 What is Kestra?&lt;/h2&gt; 
&lt;p&gt;Kestra is an open-source, event-driven orchestration platform for data, AI, and infrastructure workflows. It unifies &lt;strong&gt;scheduled&lt;/strong&gt; and &lt;strong&gt;event-driven&lt;/strong&gt; automation behind a declarative, language-agnostic interface. By bringing &lt;strong&gt;Infrastructure as Code&lt;/strong&gt; best practices to your data, process, and microservice pipelines, you can build reliable &lt;a href=&quot;https://kestra.io/docs/quickstart&quot;&gt;workflows&lt;/a&gt; directly from the UI in just a few lines of YAML.&lt;/p&gt; 
&lt;h2&gt;📖 Table of Contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kestra-io/kestra/develop/#-quick-start&quot;&gt;🚀 Quick Start&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kestra-io/kestra/develop/#-plugin-ecosystem&quot;&gt;🧩 Plugin Ecosystem&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kestra-io/kestra/develop/#-key-concepts&quot;&gt;📚 Key Concepts&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kestra-io/kestra/develop/#-build-workflows-visually&quot;&gt;🎨 Build Workflows Visually&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kestra-io/kestra/develop/#-extensible-and-developer-friendly&quot;&gt;🔧 Extensible and Developer-Friendly&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kestra-io/kestra/develop/#-join-the-community&quot;&gt;🌐 Join the Community&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kestra-io/kestra/develop/#-contributing&quot;&gt;🤝 Contributing&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kestra-io/kestra/develop/#-license&quot;&gt;📄 License&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kestra-io/kestra/develop/#%EF%B8%8F-stay-updated&quot;&gt;⭐️ Stay Updated&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Everything as Code and from the UI:&lt;/strong&gt; keep &lt;strong&gt;workflows as code&lt;/strong&gt; with a &lt;strong&gt;Git Version Control&lt;/strong&gt; integration, even when building them from the UI.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Event-Driven &amp;amp; Scheduled Workflows:&lt;/strong&gt; automate both &lt;strong&gt;scheduled&lt;/strong&gt; and &lt;strong&gt;real-time&lt;/strong&gt; event-driven workflows via a simple &lt;code&gt;trigger&lt;/code&gt; definition.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Declarative YAML Interface:&lt;/strong&gt; define workflows using a simple configuration in the &lt;strong&gt;built-in code editor&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Rich Plugin Ecosystem:&lt;/strong&gt; hundreds of plugins built in to extract data from any database, cloud storage, or API, and &lt;strong&gt;run scripts in any language&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Intuitive UI &amp;amp; Code Editor:&lt;/strong&gt; build and visualize workflows directly from the UI with syntax highlighting, auto-completion and real-time syntax validation.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Scalable:&lt;/strong&gt; designed to handle millions of workflows, with high availability and fault tolerance.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Version Control Friendly:&lt;/strong&gt; write your workflows from the built-in code Editor and push them to your preferred Git branch directly from Kestra, enabling best practices with CI/CD pipelines and version control systems.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Structure &amp;amp; Resilience&lt;/strong&gt;: tame chaos and bring resilience to your workflows with &lt;strong&gt;namespaces&lt;/strong&gt;, &lt;strong&gt;labels&lt;/strong&gt;, &lt;strong&gt;subflows&lt;/strong&gt;, &lt;strong&gt;retries&lt;/strong&gt;, &lt;strong&gt;timeout&lt;/strong&gt;, &lt;strong&gt;error handling&lt;/strong&gt;, &lt;strong&gt;inputs&lt;/strong&gt;, &lt;strong&gt;outputs&lt;/strong&gt; that generate artifacts in the UI, &lt;strong&gt;variables&lt;/strong&gt;, &lt;strong&gt;conditional branching&lt;/strong&gt;, &lt;strong&gt;advanced scheduling&lt;/strong&gt;, &lt;strong&gt;event triggers&lt;/strong&gt;, &lt;strong&gt;backfills&lt;/strong&gt;, &lt;strong&gt;dynamic tasks&lt;/strong&gt;, &lt;strong&gt;sequential and parallel tasks&lt;/strong&gt;, and skip tasks or triggers when needed by setting the flag &lt;code&gt;disabled&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;🧑‍💻 The YAML definition gets automatically adjusted any time you make changes to a workflow from the UI or via an API call. Therefore, the orchestration logic is &lt;strong&gt;always managed declaratively in code&lt;/strong&gt;, even if you modify your workflows in other ways (UI, CI/CD, Terraform, API calls).&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; 
 &lt;video src=&quot;https://github.com/user-attachments/assets/8bb47d22-848d-4281-a0ca-9790803ce1ea&quot; autoplay loop muted playsinline width=&quot;640&quot;&gt;
   Your browser does not support the video tag. 
  &lt;a href=&quot;https://go.kestra.io/video/product-overview&quot;&gt;Watch the demo here&lt;/a&gt;. 
 &lt;/video&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🚀 Quick Start&lt;/h2&gt; 
&lt;h3&gt;Launch on AWS (CloudFormation)&lt;/h3&gt; 
&lt;p&gt;Deploy Kestra on AWS using our CloudFormation template:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://console.aws.amazon.com/cloudformation/home#/stacks/create/review?templateURL=https://kestra-deployment-templates.s3.eu-west-3.amazonaws.com/aws/cloudformation/ec2-rds-s3/kestra-oss.yaml&amp;amp;stackName=kestra-oss&quot;&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/buildkite/cloudformation-launch-stack-button-svg@master/launch-stack.svg?sanitize=true&quot; alt=&quot;Launch Stack&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Launch on Google Cloud (Terraform deployment)&lt;/h3&gt; 
&lt;p&gt;Deploy Kestra on Google Cloud Infrastructure Manager using &lt;a href=&quot;https://github.com/kestra-io/deployment-templates/tree/main/gcp/terraform/infrastructure-manager/vm-sql-gcs&quot;&gt;our Terraform module&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Get Started Locally in 5 Minutes&lt;/h3&gt; 
&lt;h4&gt;Launch Kestra in Docker&lt;/h4&gt; 
&lt;p&gt;Make sure that Docker is running. Then, start Kestra in a single command:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run --pull=always -it -p 8080:8080 --user=root \
  --name kestra --restart=always \
  -v kestra_data:/app/storage \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /tmp:/tmp \
  kestra/kestra:latest server local
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you&#39;re on Windows and use PowerShell:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;docker run --pull=always -it -p 8080:8080 --user=root `
  --name kestra --restart=always `
  -v &quot;kestra_data:/app/storage&quot; `
  -v &quot;/var/run/docker.sock:/var/run/docker.sock&quot; `
  -v &quot;C:/Temp:/tmp&quot; `
  kestra/kestra:latest server local
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you&#39;re on Windows and use Command Prompt (CMD):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cmd&quot;&gt;docker run --pull=always -it -p 8080:8080 --user=root ^
  --name kestra --restart=always ^
  -v &quot;kestra_data:/app/storage&quot; ^
  -v &quot;/var/run/docker.sock:/var/run/docker.sock&quot; ^
  -v &quot;C:/Temp:/tmp&quot; ^
  kestra/kestra:latest server local
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you&#39;re on Windows and use WSL (Linux-based environment in Windows):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run --pull=always -it -p 8080:8080 --user=root \
  --name kestra --restart=always \
  -v kestra_data:/app/storage \
  -v &quot;/var/run/docker.sock:/var/run/docker.sock&quot; \
  -v &quot;/mnt/c/Temp:/tmp&quot; \
  kestra/kestra:latest server local
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Check our &lt;a href=&quot;https://kestra.io/docs/installation&quot;&gt;Installation Guide&lt;/a&gt; for other deployment options (Docker Compose, Podman, Kubernetes, AWS, GCP, Azure, and more).&lt;/p&gt; 
&lt;p&gt;Access the Kestra UI at &lt;a href=&quot;http://localhost:8080&quot;&gt;http://localhost:8080&lt;/a&gt; and start building your first flow!&lt;/p&gt; 
&lt;h4&gt;Your First Hello World Flow&lt;/h4&gt; 
&lt;p&gt;Create a new flow with the following content:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;id: hello_world
namespace: dev

tasks:
  - id: say_hello
    type: io.kestra.plugin.core.log.Log
    message: &quot;Hello, World!&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Run the flow and see the output in the UI!&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🧩 Plugin Ecosystem&lt;/h2&gt; 
&lt;p&gt;Kestra&#39;s functionality is extended through a rich &lt;a href=&quot;https://kestra.io/plugins&quot;&gt;ecosystem of plugins&lt;/a&gt; that empower you to run tasks anywhere and code in any language, including Python, Node.js, R, Go, Shell, and more. Here&#39;s how Kestra plugins enhance your workflows:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Run Anywhere:&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;Local or Remote Execution:&lt;/strong&gt; Execute tasks on your local machine, remote servers via SSH, or scale out to serverless containers using &lt;a href=&quot;https://kestra.io/docs/task-runners&quot;&gt;Task Runners&lt;/a&gt;.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Docker and Kubernetes Support:&lt;/strong&gt; Seamlessly run Docker containers within your workflows or launch Kubernetes jobs to handle compute-intensive workloads.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Code in Any Language:&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;Scripting Support:&lt;/strong&gt; Write scripts in your preferred programming language. Kestra supports Python, Node.js, R, Go, Shell, and others, allowing you to integrate existing codebases and deployment patterns.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Flexible Automation:&lt;/strong&gt; Execute shell commands, run SQL queries against various databases, and make HTTP requests to interact with APIs.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Event-Driven and Real-Time Processing:&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;Real-Time Triggers:&lt;/strong&gt; React to events from external systems in real-time, such as file arrivals, new messages in message buses (Kafka, Redis, Pulsar, AMQP, MQTT, NATS, AWS SQS, Google Pub/Sub, Azure Event Hubs), and more.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Custom Events:&lt;/strong&gt; Define custom events to trigger flows based on specific conditions or external signals, enabling highly responsive workflows.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Cloud Integrations:&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;AWS, Google Cloud, Azure:&lt;/strong&gt; Integrate with a variety of cloud services to interact with storage solutions, messaging systems, compute resources, and more.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Big Data Processing:&lt;/strong&gt; Run big data processing tasks using tools like Apache Spark or interact with analytics platforms like Google BigQuery.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Monitoring and Notifications:&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;Stay Informed:&lt;/strong&gt; Send messages to Slack channels, email notifications, or trigger alerts in PagerDuty to keep your team updated on workflow statuses.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Kestra&#39;s plugin ecosystem is continually expanding, allowing you to tailor the platform to your specific needs. Whether you&#39;re orchestrating complex data pipelines, automating scripts across multiple environments, or integrating with cloud services, there&#39;s likely a plugin to assist. And if not, you can always &lt;a href=&quot;https://kestra.io/docs/plugin-developer-guide/&quot;&gt;build your own plugins&lt;/a&gt; to extend Kestra&#39;s capabilities.&lt;/p&gt; 
&lt;p&gt;🧑‍💻 &lt;strong&gt;Note:&lt;/strong&gt; This is just a glimpse of what Kestra plugins can do. Explore the full list on our &lt;a href=&quot;https://kestra.io/plugins&quot;&gt;Plugins Page&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📚 Key Concepts&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Flows:&lt;/strong&gt; the core unit in Kestra, representing a workflow composed of tasks.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tasks:&lt;/strong&gt; individual units of work, such as running a script, moving data, or calling an API.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Namespaces:&lt;/strong&gt; logical grouping of flows for organization and isolation.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Triggers:&lt;/strong&gt; schedule or events that initiate the execution of flows.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Inputs &amp;amp; Variables:&lt;/strong&gt; parameters and dynamic data passed into flows and tasks.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🎨 Build Workflows Visually&lt;/h2&gt; 
&lt;p&gt;Kestra provides an intuitive UI that allows you to interactively build and visualize your workflows:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Drag-and-Drop Interface:&lt;/strong&gt; add and rearrange tasks from the Topology Editor.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Real-Time Validation:&lt;/strong&gt; instant feedback on your workflow&#39;s syntax and structure to catch errors early.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Auto-Completion:&lt;/strong&gt; smart suggestions as you type to write flow code quickly and without syntax errors.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Live Topology View:&lt;/strong&gt; see your workflow as a Directed Acyclic Graph (DAG) that updates in real-time.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🔧 Extensible and Developer-Friendly&lt;/h2&gt; 
&lt;h3&gt;Plugin Development&lt;/h3&gt; 
&lt;p&gt;Create custom plugins to extend Kestra&#39;s capabilities. Check out our &lt;a href=&quot;https://kestra.io/docs/plugin-developer-guide/&quot;&gt;Plugin Developer Guide&lt;/a&gt; to get started.&lt;/p&gt; 
&lt;h3&gt;Infrastructure as Code&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Version Control:&lt;/strong&gt; store your flows in Git repositories.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;CI/CD Integration:&lt;/strong&gt; automate deployment of flows using CI/CD pipelines.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Terraform Provider:&lt;/strong&gt; manage Kestra resources with the &lt;a href=&quot;https://kestra.io/docs/terraform/&quot;&gt;official Terraform provider&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🌐 Join the Community&lt;/h2&gt; 
&lt;p&gt;Stay connected and get support:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Slack:&lt;/strong&gt; Join our &lt;a href=&quot;https://kestra.io/slack&quot;&gt;Slack community&lt;/a&gt; to ask questions and share ideas.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt; Follow us on &lt;a href=&quot;https://www.linkedin.com/company/kestra/&quot;&gt;LinkedIn&lt;/a&gt; — next to Slack and GitHub, this is our main channel to share updates and product announcements.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;YouTube:&lt;/strong&gt; Subscribe to our &lt;a href=&quot;https://www.youtube.com/@kestra-io&quot;&gt;YouTube channel&lt;/a&gt; for educational video content. We publish new videos every week!&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;X:&lt;/strong&gt; Follow us on &lt;a href=&quot;https://x.com/kestra_io&quot;&gt;X&lt;/a&gt; if you&#39;re still active there.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🤝 Contributing&lt;/h2&gt; 
&lt;p&gt;We welcome contributions of all kinds!&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Report Issues:&lt;/strong&gt; Found a bug or have a feature request? Open an &lt;a href=&quot;https://github.com/kestra-io/kestra/issues&quot;&gt;issue on GitHub&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Contribute Code:&lt;/strong&gt; Check out our &lt;a href=&quot;https://kestra.io/docs/contribute-to-kestra&quot;&gt;Contributor Guide&lt;/a&gt; for initial guidelines, and explore our &lt;a href=&quot;https://go.kestra.io/contributing&quot;&gt;good first issues&lt;/a&gt; for beginner-friendly tasks to tackle first.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Develop Plugins:&lt;/strong&gt; Build and share plugins using our &lt;a href=&quot;https://kestra.io/docs/plugin-developer-guide/&quot;&gt;Plugin Developer Guide&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Contribute to our Docs:&lt;/strong&gt; Contribute edits or updates to keep our &lt;a href=&quot;https://github.com/kestra-io/docs&quot;&gt;documentation&lt;/a&gt; top-notch.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📄 License&lt;/h2&gt; 
&lt;p&gt;Kestra is licensed under the Apache 2.0 License © &lt;a href=&quot;https://kestra.io&quot;&gt;Kestra Technologies&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;⭐️ Stay Updated&lt;/h2&gt; 
&lt;p&gt;Give our repository a star to stay informed about the latest features and updates!&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/kestra-io/kestra&quot;&gt;&lt;img src=&quot;https://kestra.io/star.gif&quot; alt=&quot;Star the Repo&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;p&gt;Thank you for considering Kestra for your workflow orchestration needs. We can&#39;t wait to see what you&#39;ll build!&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/204164353/3f02eda2-04a4-47da-a0a5-76617a8617b3" medium="image" />
      
    </item>
    
    <item>
      <title>dataease/dataease</title>
      <link>https://github.com/dataease/dataease</link>
      <description>&lt;p&gt;🔥 人人可用的开源 BI 工具，数据可视化神器。An open-source BI tool alternative to Tableau.&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://dataease.cn&quot;&gt;&lt;img src=&quot;https://dataease.oss-cn-hangzhou.aliyuncs.com/img/dataease-logo.png&quot; alt=&quot;DataEase&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3 align=&quot;center&quot;&gt;人人可用的开源 BI 工具&lt;/h3&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/dataease/dataease?color=%231890FF&quot; alt=&quot;License: GPL v3&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://app.codacy.com/gh/dataease/dataease?utm_source=github.com&amp;amp;utm_medium=referral&amp;amp;utm_content=dataease/dataease&amp;amp;utm_campaign=Badge_Grade_Dashboard&quot;&gt;&lt;img src=&quot;https://app.codacy.com/project/badge/Grade/da67574fd82b473992781d1386b937ef&quot; alt=&quot;Codacy&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/dataease/dataease&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/dataease/dataease?color=%231890FF&amp;amp;style=flat-square&quot; alt=&quot;GitHub Stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/dataease/dataease/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/dataease/dataease&quot; alt=&quot;GitHub release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://gitee.com/fit2cloud-feizhiyun/DataEase&quot;&gt;&lt;img src=&quot;https://gitee.com/fit2cloud-feizhiyun/DataEase/badge/star.svg?theme=gvp&quot; alt=&quot;Gitee Stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://gitcode.com/feizhiyun/DataEase&quot;&gt;&lt;img src=&quot;https://gitcode.com/feizhiyun/DataEase/star/badge.svg?sanitize=true&quot; alt=&quot;GitCode Stars&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/dataease/dataease/dev-v2/README.md&quot;&gt;&lt;img alt=&quot;中文(简体)&quot; src=&quot;https://img.shields.io/badge/中文(简体)-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/dataease/dataease/dev-v2/docs/README.en.md&quot;&gt;&lt;img alt=&quot;English&quot; src=&quot;https://img.shields.io/badge/English-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/dataease/dataease/dev-v2/docs/README.zh-Hant.md&quot;&gt;&lt;img alt=&quot;中文(繁體)&quot; src=&quot;https://img.shields.io/badge/中文(繁體)-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/dataease/dataease/dev-v2/docs/README.ja.md&quot;&gt;&lt;img alt=&quot;日本語&quot; src=&quot;https://img.shields.io/badge/日本語-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/dataease/dataease/dev-v2/docs/README.pt-br.md&quot;&gt;&lt;img alt=&quot;Português (Brasil)&quot; src=&quot;https://img.shields.io/badge/Português (Brasil)-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/dataease/dataease/dev-v2/docs/README.ar.md&quot;&gt;&lt;img alt=&quot;العربية&quot; src=&quot;https://img.shields.io/badge/العربية-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/dataease/dataease/dev-v2/docs/README.de.md&quot;&gt;&lt;img alt=&quot;Deutsch&quot; src=&quot;https://img.shields.io/badge/Deutsch-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/dataease/dataease/dev-v2/docs/README.es.md&quot;&gt;&lt;img alt=&quot;Español&quot; src=&quot;https://img.shields.io/badge/Español-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/dataease/dataease/dev-v2/docs/README.fr.md&quot;&gt;&lt;img alt=&quot;français&quot; src=&quot;https://img.shields.io/badge/français-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/dataease/dataease/dev-v2/docs/README.ko.md&quot;&gt;&lt;img alt=&quot;한국어&quot; src=&quot;https://img.shields.io/badge/한국어-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/dataease/dataease/dev-v2/docs/README.id.md&quot;&gt;&lt;img alt=&quot;Bahasa Indonesia&quot; src=&quot;https://img.shields.io/badge/Bahasa Indonesia-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/dataease/dataease/dev-v2/docs/README.tr.md&quot;&gt;&lt;img alt=&quot;Türkçe&quot; src=&quot;https://img.shields.io/badge/Türkçe-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://trendshift.io/repositories/1563&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://trendshift.io/api/badge/repositories/1563&quot; alt=&quot;dataease%2Fdataease | Trendshift&quot; style=&quot;width: 250px; height: 55px;&quot; width=&quot;250&quot; height=&quot;55&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;什么是 DataEase？&lt;/h2&gt; 
&lt;p&gt;DataEase 是开源的 BI 工具，帮助用户快速分析数据并洞察业务趋势，从而实现业务的改进与优化。DataEase 支持丰富的数据源连接，能够通过拖拉拽方式快速制作图表，并可以方便的与他人分享。&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;👉 观看视频：&lt;a href=&quot;https://www.bilibili.com/video/BV1Y8dAYLErb/&quot;&gt;DataEase 两分钟介绍视频 &lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;👉 观看PPT：&lt;a href=&quot;https://fit2cloud.com/dataease/download/introduce-dataease_2026.pdf&quot;&gt;DataEase PPT 材料&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;👉 购买图书：&lt;a href=&quot;https://item.jd.com/10207058297099.html&quot;&gt;《DataEase 数据可视化分析与实践》&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;DataEase 的优势：&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;开源开放：零门槛，线上快速获取和安装，按月迭代；&lt;/li&gt; 
 &lt;li&gt;简单易用：极易上手，通过鼠标点击和拖拽即可完成分析；&lt;/li&gt; 
 &lt;li&gt;全场景支持：多平台安装和多样化嵌入支持；&lt;/li&gt; 
 &lt;li&gt;安全分享：支持多种数据分享方式，确保数据安全；&lt;/li&gt; 
 &lt;li&gt;AI 加持：无缝集成 &lt;a href=&quot;https://github.com/dataease/SQLBot&quot;&gt;SQLBot&lt;/a&gt; 实现智能问数。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;DataEase 支持的数据源：&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;OLTP 数据库： MySQL、Oracle、SQL Server、PostgreSQL、MariaDB、Db2、TiDB、MongoDB-BI 等；&lt;/li&gt; 
 &lt;li&gt;OLAP 数据库： ClickHouse、Apache Doris、Apache Impala、StarRocks 等；&lt;/li&gt; 
 &lt;li&gt;数据仓库/数据湖： Amazon RedShift 等；&lt;/li&gt; 
 &lt;li&gt;数据文件： Excel、CSV 等；&lt;/li&gt; 
 &lt;li&gt;API 数据源。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;快速开始&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;# 准备一台 2 核 4G 以上的 Linux 服务器，并以 root 用户运行以下一键安装脚本：

curl -sSL https://dataease.oss-cn-hangzhou.aliyuncs.com/quick_start_v2.sh | bash

# 用户名: admin
# 密码: DataEase@123456
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;如果是用于生产环境，推荐使用 &lt;a href=&quot;https://dataease.io/docs/v2/installation/offline_INSTL_and_UPG/&quot;&gt;离线安装包方式&lt;/a&gt; 进行安装部署。&lt;/p&gt; 
&lt;p&gt;如你有更多问题，可以查看在线文档，或者通过论坛和交流群与我们交流。&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dataease.cn/docs/v2/&quot;&gt;在线文档&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://bbs.fit2cloud.com/c/de/6&quot;&gt;社区论坛&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;微信交流群&lt;/li&gt; 
&lt;/ul&gt; 
&lt;img width=&quot;150&quot; height=&quot;150&quot; alt=&quot;image&quot; src=&quot;https://github.com/user-attachments/assets/a8e4cd48-ed0f-4754-ba34-d047063b1633&quot; /&gt; 
&lt;h2&gt;UI 展示&lt;/h2&gt; 
&lt;table style=&quot;border-collapse: collapse; border: 1px solid black;&quot;&gt; 
 &lt;tbody&gt;
  &lt;tr&gt; 
   &lt;td style=&quot;padding: 5px;background-color:#fff;&quot;&gt;&lt;img src=&quot;https://github.com/dataease/dataease/assets/41712985/8dbed4e1-39f0-4392-aa8c-d1fd83ba42eb&quot; alt=&quot;DataEase 工作台&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;padding: 5px;background-color:#fff;&quot;&gt;&lt;img src=&quot;https://github.com/dataease/dataease/assets/41712985/7c54cb07-51ef-4bb6-a931-8a95c64c7e11&quot; alt=&quot;DataEase 仪表板&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;padding: 5px;background-color:#fff;&quot;&gt;&lt;img src=&quot;https://github.com/dataease/dataease/assets/41712985/ffa79361-a7b3-4486-b14a-f3fd3a28f01a&quot; alt=&quot;DataEase 数据源&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;padding: 5px;background-color:#fff;&quot;&gt;&lt;img src=&quot;https://github.com/dataease/dataease/assets/41712985/bb28f4e4-636e-4ab0-85c5-1dfbd7a5397e&quot; alt=&quot;DataEase 模板中心&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt;
&lt;/table&gt; 
&lt;h2&gt;技术栈&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;前端：&lt;a href=&quot;https://vuejs.org/&quot;&gt;Vue.js&lt;/a&gt;、&lt;a href=&quot;https://element.eleme.cn/&quot;&gt;Element&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;图库：&lt;a href=&quot;https://antv.vision/zh&quot;&gt;AntV&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;后端：&lt;a href=&quot;https://spring.io/projects/spring-boot&quot;&gt;Spring Boot&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;数据库：&lt;a href=&quot;https://www.mysql.com/&quot;&gt;MySQL&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;数据处理：&lt;a href=&quot;https://github.com/apache/calcite/&quot;&gt;Apache Calcite&lt;/a&gt;、&lt;a href=&quot;https://github.com/apache/seatunnel&quot;&gt;Apache SeaTunnel&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;基础设施：&lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;飞致云的其他明星项目&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/1panel-dev/1panel/&quot;&gt;1Panel&lt;/a&gt; - 现代化、开源的 Linux 服务器运维管理面板&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/1panel-dev/MaxKB/&quot;&gt;MaxKB&lt;/a&gt; - 基于 LLM 大语言模型的开源知识库问答系统&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jumpserver/jumpserver/&quot;&gt;JumpServer&lt;/a&gt; - 广受欢迎的开源堡垒机&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/1Panel-dev/CordysCRM&quot;&gt;Cordys CRM&lt;/a&gt; - 新一代的开源 AI CRM 系统&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/halo-dev/halo/&quot;&gt;Halo&lt;/a&gt; - 强大易用的开源建站工具&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/metersphere/metersphere/&quot;&gt;MeterSphere&lt;/a&gt; - 新一代的开源持续测试工具&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Copyright (c) 2014-2026 &lt;a href=&quot;https://fit2cloud.com/&quot;&gt;FIT2CLOUD 飞致云&lt;/a&gt;, All rights reserved.&lt;/p&gt; 
&lt;p&gt;Licensed under The GNU General Public License version 3 (GPLv3) (the &quot;License&quot;); you may not use this file except in compliance with the License. You may obtain a copy of the License at&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot;&gt;https://www.gnu.org/licenses/gpl-3.0.html&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/15f22ffc7fed7aca81fb244b3296bf7c8e2d4f69d3a7b4c0a1d2c18260ef279e/dataease/dataease" medium="image" />
      
    </item>
    
    <item>
      <title>kekingcn/kkFileView</title>
      <link>https://github.com/kekingcn/kkFileView</link>
      <description>&lt;p&gt;Universal File Online Preview Project based on Spring-Boot&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;kkFileView&lt;/h1&gt; 
&lt;h3&gt;Introduction&lt;/h3&gt; 
&lt;p&gt;Document online preview project solution, built using the popular Spring Boot framework for easy setup and deployment. This versatile open source project provides basic support for a wide range of document formats, including:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Supports Office documents such as &lt;code&gt;doc&lt;/code&gt;, &lt;code&gt;docx&lt;/code&gt;, &lt;code&gt;xls&lt;/code&gt;, &lt;code&gt;xlsx&lt;/code&gt;, &lt;code&gt;xlsm&lt;/code&gt;, &lt;code&gt;ppt&lt;/code&gt;, &lt;code&gt;pptx&lt;/code&gt;, &lt;code&gt;csv&lt;/code&gt;, &lt;code&gt;tsv&lt;/code&gt;, , &lt;code&gt;dotm&lt;/code&gt;, &lt;code&gt;xlt&lt;/code&gt;, &lt;code&gt;xltm&lt;/code&gt;, &lt;code&gt;dot&lt;/code&gt;, &lt;code&gt;xlam&lt;/code&gt;, &lt;code&gt;dotx&lt;/code&gt;, &lt;code&gt;xla,&lt;/code&gt; ,&lt;code&gt;pages&lt;/code&gt; ,&lt;code&gt;pptm&lt;/code&gt; etc.&lt;/li&gt; 
 &lt;li&gt;Supports domestic WPS Office documents such as &lt;code&gt;wps&lt;/code&gt;, &lt;code&gt;dps&lt;/code&gt;, &lt;code&gt;et&lt;/code&gt; , &lt;code&gt;ett&lt;/code&gt;, &lt;code&gt; wpt&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Supports OpenOffice, LibreOffice office documents such as &lt;code&gt;odt&lt;/code&gt;, &lt;code&gt;ods&lt;/code&gt;, &lt;code&gt;ots&lt;/code&gt;, &lt;code&gt;odp&lt;/code&gt;, &lt;code&gt;otp&lt;/code&gt;, &lt;code&gt;six&lt;/code&gt;, &lt;code&gt;ott&lt;/code&gt;, &lt;code&gt;fodt&lt;/code&gt; and &lt;code&gt;fods&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Supports Visio flowchart files such as &lt;code&gt;vsd&lt;/code&gt;, &lt;code&gt;vsdx&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Supports Windows system image files such as &lt;code&gt;wmf&lt;/code&gt;, &lt;code&gt;emf&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Supports Photoshop software model files such as &lt;code&gt;psd&lt;/code&gt; ,&lt;code&gt;eps&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Supports document formats like &lt;code&gt;pdf&lt;/code&gt;, &lt;code&gt;ofd&lt;/code&gt;, and &lt;code&gt;rtf&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Supports software model files like &lt;code&gt;xmind&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Support for &lt;code&gt;bpmn&lt;/code&gt; workflow files.&lt;/li&gt; 
 &lt;li&gt;Support for &lt;code&gt;eml&lt;/code&gt; , &lt;code&gt;msg&lt;/code&gt; mail files&lt;/li&gt; 
 &lt;li&gt;Support for &lt;code&gt;epub&lt;/code&gt; book documents&lt;/li&gt; 
 &lt;li&gt;Supports 3D model files like &lt;code&gt;obj&lt;/code&gt;, &lt;code&gt;3ds&lt;/code&gt;, &lt;code&gt;stl&lt;/code&gt;, &lt;code&gt;ply&lt;/code&gt;, &lt;code&gt;gltf&lt;/code&gt;, &lt;code&gt;glb&lt;/code&gt;, &lt;code&gt;off&lt;/code&gt;, &lt;code&gt;3dm&lt;/code&gt;, &lt;code&gt;fbx&lt;/code&gt;, &lt;code&gt;dae&lt;/code&gt;, &lt;code&gt;wrl&lt;/code&gt;, &lt;code&gt;3mf&lt;/code&gt;, &lt;code&gt;ifc&lt;/code&gt;, &lt;code&gt;brep&lt;/code&gt;, &lt;code&gt;step&lt;/code&gt;, &lt;code&gt;iges&lt;/code&gt;, &lt;code&gt;fcstd&lt;/code&gt;, &lt;code&gt;bim&lt;/code&gt;, etc.&lt;/li&gt; 
 &lt;li&gt;Supports CAD model files such as &lt;code&gt;dwg&lt;/code&gt;, &lt;code&gt;dxf&lt;/code&gt;, &lt;code&gt;dwf&lt;/code&gt; &lt;code&gt;iges&lt;/code&gt; ,&lt;code&gt; igs&lt;/code&gt;, &lt;code&gt;dwt&lt;/code&gt; , &lt;code&gt;dng&lt;/code&gt; , &lt;code&gt;ifc&lt;/code&gt; , &lt;code&gt;dwfx&lt;/code&gt; , &lt;code&gt;stl&lt;/code&gt; , &lt;code&gt;cf2&lt;/code&gt; , &lt;code&gt;plt&lt;/code&gt;, etc.&lt;/li&gt; 
 &lt;li&gt;Supports all plain text files such as &lt;code&gt;txt&lt;/code&gt;, &lt;code&gt;xml&lt;/code&gt; (rendering), &lt;code&gt;md&lt;/code&gt; (rendering), &lt;code&gt;java&lt;/code&gt;, &lt;code&gt;php&lt;/code&gt;, &lt;code&gt;py&lt;/code&gt;, &lt;code&gt;js&lt;/code&gt;, &lt;code&gt;css&lt;/code&gt;, etc.&lt;/li&gt; 
 &lt;li&gt;Supports compressed packages such as &lt;code&gt;zip&lt;/code&gt;, &lt;code&gt;rar&lt;/code&gt;, &lt;code&gt;jar&lt;/code&gt;, &lt;code&gt;tar&lt;/code&gt;, &lt;code&gt;gzip&lt;/code&gt;, &lt;code&gt;7z&lt;/code&gt;, etc.&lt;/li&gt; 
 &lt;li&gt;Supports image previewing (flip, zoom, mirror) of &lt;code&gt;jpg&lt;/code&gt;, &lt;code&gt;jpeg&lt;/code&gt;, &lt;code&gt;png&lt;/code&gt;, &lt;code&gt;gif&lt;/code&gt;, &lt;code&gt;bmp&lt;/code&gt;, &lt;code&gt;ico&lt;/code&gt;, &lt;code&gt;jfif&lt;/code&gt;, &lt;code&gt;webp&lt;/code&gt;, &lt;code&gt;heic&lt;/code&gt;, ,&lt;code&gt;heif&lt;/code&gt; etc.&lt;/li&gt; 
 &lt;li&gt;Supports image information model files such as &lt;code&gt;tif&lt;/code&gt; and &lt;code&gt;tiff&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Supports image format files such as &lt;code&gt;tga&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Supports vector image format files such as &lt;code&gt;svg&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Supports &lt;code&gt;mp3&lt;/code&gt;,&lt;code&gt;wav&lt;/code&gt;,&lt;code&gt;mp4&lt;/code&gt;,&lt;code&gt;flv&lt;/code&gt; .&lt;/li&gt; 
 &lt;li&gt;Supports many audio and video format files such as &lt;code&gt;avi&lt;/code&gt;, &lt;code&gt;mov&lt;/code&gt;, &lt;code&gt;wmv&lt;/code&gt;, &lt;code&gt;mkv&lt;/code&gt;, &lt;code&gt;3gp&lt;/code&gt;, and &lt;code&gt;rm&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Supports for &lt;code&gt;dcm&lt;/code&gt; .&lt;/li&gt; 
 &lt;li&gt;Supports for &lt;code&gt;drawio&lt;/code&gt; .&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Features&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Build with the popular frame spring boot&lt;/li&gt; 
 &lt;li&gt;Easy to build and deploy&lt;/li&gt; 
 &lt;li&gt;Basically support online preview of mainstream office documents, such as Doc, docx, Excel, PDF, TXT, zip, rar, pictures, etc&lt;/li&gt; 
 &lt;li&gt;REST API&lt;/li&gt; 
 &lt;li&gt;Abstract file preview interface so that it is easy to extend more file extensions and develop this project on your own&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Official website and DOCS&lt;/h3&gt; 
&lt;p&gt;URL：&lt;a href=&quot;https://kkview.cn/&quot;&gt;https://kkview.cn&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Live demo&lt;/h3&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Please treat public service kindly, or this would stop at any time.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;URL：&lt;a href=&quot;https://file.kkview.cn&quot;&gt;https://file.kkview.cn&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Contact Us&lt;/h3&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;We will answer your questions carefully and solve any problems you encounter while using the project. We also kindly ask that you at least Google or Baidu before asking questions in order to save time and avoid ineffective communication. Let&#39;s cherish our lives and stay away from ineffective communication.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;img src=&quot;./doc/github星球.png/&quot; width=&quot;50%&quot; /&gt; 
&lt;h3&gt;Quick Start&lt;/h3&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Technology stack&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ul&gt; 
 &lt;li&gt;Spring boot： &lt;a href=&quot;http://www.kailing.pub/PdfReader/web/viewer.html?file=springboot&quot;&gt;spring boot Development Reference Guide&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Freemarker&lt;/li&gt; 
 &lt;li&gt;Redisson&lt;/li&gt; 
 &lt;li&gt;Jodconverter&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Dependencies&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ul&gt; 
 &lt;li&gt;Redis(Optional, Unnecessary by default)&lt;/li&gt; 
 &lt;li&gt;OpenOffice or LibreOffice(Integrated on Windows, will be installed automatically on Linux, need to be manually installed on Mac OS)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;First step：&lt;code&gt;git pull https://github.com/kekingcn/kkFileView.git&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;second step：Run the main method of &lt;code&gt;/server/src/main/java/cn/keking/ServerMain.java&lt;/code&gt;. After starting,visit &lt;code&gt;http://localhost:8012/&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Change History&lt;/h2&gt; 
&lt;h3&gt;Version 5.0.0 (April 14, 2026)&lt;/h3&gt; 
&lt;h4&gt;Improvements&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Enhanced xlsx front-end parsing - Improved Excel file front-end rendering performance&lt;/li&gt; 
 &lt;li&gt;Optimized image parsing - Enhanced image processing mechanism&lt;/li&gt; 
 &lt;li&gt;Improved tif parsing - Enhanced TIF format support&lt;/li&gt; 
 &lt;li&gt;Enhanced svg parsing - Optimized SVG vector image rendering&lt;/li&gt; 
 &lt;li&gt;Improved json parsing - Enhanced JSON file processing&lt;/li&gt; 
 &lt;li&gt;Optimized ftp multi-client access - Improved FTP service compatibility&lt;/li&gt; 
 &lt;li&gt;Enhanced home page directory access - Implemented post server-side pagination mechanism&lt;/li&gt; 
 &lt;li&gt;Improved marked parsing - Enhanced Markdown rendering&lt;/li&gt; 
 &lt;li&gt;Redesigned archive preview into a single workspace with a collapsible tree and inline file preview&lt;/li&gt; 
 &lt;li&gt;Improved archive preview file-type badges and single-image preview styling&lt;/li&gt; 
 &lt;li&gt;Added an agent-focused repository guide for engineering automation and maintenance&lt;/li&gt; 
 &lt;li&gt;Refreshed the demo portal pages, including the index, integration guide, release record, and sponsor pages&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;New Features&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;msg email parsing - Added support for msg format email file preview&lt;/li&gt; 
 &lt;li&gt;heic image parsing - Added support for HEIC format image preview&lt;/li&gt; 
 &lt;li&gt;Cross-domain methods - Added cross-domain processing mechanism&lt;/li&gt; 
 &lt;li&gt;Highlighting methods - Added text highlighting functionality&lt;/li&gt; 
 &lt;li&gt;Pagination methods - Added document page control&lt;/li&gt; 
 &lt;li&gt;AES encryption methods - Added AES encryption support&lt;/li&gt; 
 &lt;li&gt;Basic authentication methods - Added Basic authentication mechanism&lt;/li&gt; 
 &lt;li&gt;Key management methods - Added key management functionality&lt;/li&gt; 
 &lt;li&gt;Anti-duplicate conversion - Added duplicate file conversion protection&lt;/li&gt; 
 &lt;li&gt;Async waiting - Added asynchronous processing mechanism&lt;/li&gt; 
 &lt;li&gt;Upload restrictions - Added restrictions for unsupported file uploads&lt;/li&gt; 
 &lt;li&gt;cadviewer conversion methods - Added CAD viewer conversion functionality&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;Fixed Issues&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Compressed file path issues - Fixed internal path handling in compressed files&lt;/li&gt; 
 &lt;li&gt;Security issues - Fixed security vulnerabilities&lt;/li&gt; 
 &lt;li&gt;Incomplete image watermark issues - Fixed incomplete watermark display&lt;/li&gt; 
 &lt;li&gt;SSL self-signed certificate access issues - Fixed compatibility with self-signed certificates&lt;/li&gt; 
 &lt;li&gt;Fixed archive-contained Office files that could stay stuck on loading because repeated extraction appended to existing files&lt;/li&gt; 
 &lt;li&gt;Default Office preview now prefers PDF mode, and PDF preview opens with the thumbnail sidebar visible by default&lt;/li&gt; 
 &lt;li&gt;Updated startup scripts to discover the packaged jar dynamically instead of relying on stale hard-coded jar names&lt;/li&gt; 
 &lt;li&gt;Updated Docker and release helper docs to align with the 5.0.0 release line&lt;/li&gt; 
 &lt;li&gt;Fixed OFD table border overflow rendering issues&lt;/li&gt; 
 &lt;li&gt;Refined the PDF.js compatibility polyfill to avoid preview errors in compatibility environments&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;Updates&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;JDK version requirement - Mandatory requirement for JDK 21 or higher&lt;/li&gt; 
 &lt;li&gt;pdf front-end parsing update - Upgraded PDF front-end rendering component&lt;/li&gt; 
 &lt;li&gt;odf front-end parsing update - Upgraded ODF document front-end rendering&lt;/li&gt; 
 &lt;li&gt;3D model front-end parsing update - Upgraded 3D model viewer&lt;/li&gt; 
 &lt;li&gt;pdf backend async conversion optimization - Implemented multi-threaded asynchronous conversion&lt;/li&gt; 
 &lt;li&gt;tif backend async conversion optimization - Implemented multi-threaded asynchronous conversion&lt;/li&gt; 
 &lt;li&gt;Video backend async conversion optimization - Implemented multi-threaded asynchronous conversion&lt;/li&gt; 
 &lt;li&gt;CAD backend async conversion optimization - Implemented multi-threaded asynchronous conversion&lt;/li&gt; 
 &lt;li&gt;Default preview configuration strategy adjusted - Office preview now defaults to PDF mode, the mode switch is hidden by default, and PDF preview opens with the thumbnail sidebar visible. If you need the previous image-first behavior after upgrade, explicitly set &lt;code&gt;office.preview.type=image&lt;/code&gt; and &lt;code&gt;office.preview.switch.disabled=false&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Trust host configuration matching expanded - &lt;code&gt;trust.host&lt;/code&gt; and related rules now support wildcard and CIDR matching, which may broaden or narrow effective allow/deny behavior after upgrade depending on your patterns&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Version 4.4.0 (January 16, 2025)&lt;/h3&gt; 
&lt;h4&gt;New Features&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;xlsx printing support&lt;/li&gt; 
 &lt;li&gt;Added GZIP compression enablement in configuration&lt;/li&gt; 
 &lt;li&gt;CAD format now supports conversion to SVG and TIF formats, added timeout termination and thread management&lt;/li&gt; 
 &lt;li&gt;Added captcha verification for file deletion&lt;/li&gt; 
 &lt;li&gt;Added xbrl format preview support&lt;/li&gt; 
 &lt;li&gt;PDF preview added control over signatures, drawings, illustration control, search positioning pagination, and display content definition&lt;/li&gt; 
 &lt;li&gt;Added CSV format front-end parsing support&lt;/li&gt; 
 &lt;li&gt;Added Docker image support for ARM64&lt;/li&gt; 
 &lt;li&gt;Added Office preview conversion timeout property setting&lt;/li&gt; 
 &lt;li&gt;Added preview file host blacklist mechanism&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;Optimizations&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Optimized OFD mobile preview page adaptability&lt;/li&gt; 
 &lt;li&gt;Updated xlsx front-end parsing component to accelerate parsing speed&lt;/li&gt; 
 &lt;li&gt;Upgraded CAD component&lt;/li&gt; 
 &lt;li&gt;Office function adjustments, supporting comments, conversion page limit, watermark generation, etc.&lt;/li&gt; 
 &lt;li&gt;Upgraded markdown component&lt;/li&gt; 
 &lt;li&gt;Upgraded dcm parsing component&lt;/li&gt; 
 &lt;li&gt;Upgraded PDF.JS parsing component&lt;/li&gt; 
 &lt;li&gt;Changed video player plugin to ckplayer&lt;/li&gt; 
 &lt;li&gt;Smarter tif parsing, supporting modified image formats&lt;/li&gt; 
 &lt;li&gt;Improved character encoding detection accuracy for large and small text files, handling concurrency vulnerabilities&lt;/li&gt; 
 &lt;li&gt;Refactored file download code, added general file server authentication access design&lt;/li&gt; 
 &lt;li&gt;Updated bootstrap component and streamlined unnecessary files&lt;/li&gt; 
 &lt;li&gt;Updated epub version, optimized epub display effect&lt;/li&gt; 
 &lt;li&gt;Fixed issue where scheduled cache cleanup only deleted disk cache files for multimedia file types&lt;/li&gt; 
 &lt;li&gt;Auto-detection of installed Office components, added default paths for LibreOffice 7.5 &amp;amp; 7.6 versions&lt;/li&gt; 
 &lt;li&gt;Changed drawio default to preview mode&lt;/li&gt; 
 &lt;li&gt;Added PDF thread management, timeout management, memory cache management, updated PDF parsing component version&lt;/li&gt; 
 &lt;li&gt;Optimized Dockerfile for true cross-platform image building&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;Fixes&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Fixed forceUpdatedCache property setting issue where local cache files weren&#39;t updated&lt;/li&gt; 
 &lt;li&gt;Fixed PDF decryption error after successful encrypted file conversion&lt;/li&gt; 
 &lt;li&gt;Fixed BPMN cross-domain support issue&lt;/li&gt; 
 &lt;li&gt;Fixed special character error in compressed package secondary reverse proxy&lt;/li&gt; 
 &lt;li&gt;Fixed video cross-domain configuration causing video preview failure&lt;/li&gt; 
 &lt;li&gt;Fixed TXT text pagination secondary loading issue&lt;/li&gt; 
 &lt;li&gt;Fixed Drawio missing Base64 component issue&lt;/li&gt; 
 &lt;li&gt;Fixed Markdown escaping issue&lt;/li&gt; 
 &lt;li&gt;Fixed EPUB cross-domain error&lt;/li&gt; 
 &lt;li&gt;Fixed URL special character issues&lt;/li&gt; 
 &lt;li&gt;Fixed compressed package traversal vulnerability&lt;/li&gt; 
 &lt;li&gt;Fixed compressed file path errors, image collection path errors, watermark issues, etc.&lt;/li&gt; 
 &lt;li&gt;Fixed front-end parsing XLSX containing EMF format file errors&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Version 4.3.0 (July 5, 2023)&lt;/h3&gt; 
&lt;h4&gt;New Features&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Added DCM medical digital imaging preview&lt;/li&gt; 
 &lt;li&gt;Added drawio drawing preview&lt;/li&gt; 
 &lt;li&gt;Added command to regenerate with cache enabled: &amp;amp;forceUpdatedCache=true&lt;/li&gt; 
 &lt;li&gt;Added dwg CAD file preview&lt;/li&gt; 
 &lt;li&gt;Added PDF file password support&lt;/li&gt; 
 &lt;li&gt;Added DPI customization for PDF file image generation&lt;/li&gt; 
 &lt;li&gt;Added configuration to delete converted OFFICE, CAD, TIFF, compressed package source files (enabled by default to save disk space)&lt;/li&gt; 
 &lt;li&gt;Added front-end xlsx parsing method&lt;/li&gt; 
 &lt;li&gt;Added support for pages, eps, iges, igs, dwt, dng, ifc, dwfx, stl, cf2, plt and other formats&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;Optimizations&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Modified generated PDF file names to include file extensions to prevent duplicate names&lt;/li&gt; 
 &lt;li&gt;Adjusted SQL file preview method&lt;/li&gt; 
 &lt;li&gt;Optimized OFD preview compatibility&lt;/li&gt; 
 &lt;li&gt;Beautified TXT text pagination box display&lt;/li&gt; 
 &lt;li&gt;Upgraded Linux/Docker built-in office to LibreOffice-7.5.3&lt;/li&gt; 
 &lt;li&gt;Upgraded Windows built-in office to LibreOffice-7.5.3 Portable&lt;/li&gt; 
 &lt;li&gt;Other functional optimizations&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;Fixes&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Fixed compressed package path errors in reverse proxy scenarios&lt;/li&gt; 
 &lt;li&gt;Fixed .click error when image preview URLs contain &amp;amp;&lt;/li&gt; 
 &lt;li&gt;Fixed known OFD preview issues&lt;/li&gt; 
 &lt;li&gt;Fixed page error when clicking on file directories (tree nodes) in compressed package preview&lt;/li&gt; 
 &lt;li&gt;Other known issue fixes&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Version 4.2.1 (April 18, 2023)&lt;/h3&gt; 
&lt;h4&gt;Change Log&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Fixed null pointer bug in dwg file preview&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Version 4.2.0 (April 13, 2023)&lt;/h3&gt; 
&lt;h4&gt;New Features&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Added SVG format file preview support&lt;/li&gt; 
 &lt;li&gt;Added encrypted Office file preview support&lt;/li&gt; 
 &lt;li&gt;Added encrypted zip, rar, and other compressed package file preview support&lt;/li&gt; 
 &lt;li&gt;Added xmind software model file preview support&lt;/li&gt; 
 &lt;li&gt;Added BPMN workflow model file preview support&lt;/li&gt; 
 &lt;li&gt;Added eml email file preview support&lt;/li&gt; 
 &lt;li&gt;Added EPUB e-book file preview support&lt;/li&gt; 
 &lt;li&gt;Added office document format support: dotm, ett, xlt, xltm, wpt, dot, xlam, xla, dotx, etc.&lt;/li&gt; 
 &lt;li&gt;Added 3D model file support: obj, 3ds, stl, ply, gltf, glb, off, 3dm, fbx, dae, wrl, 3mf, ifc, brep, step, iges, fcstd, bim, etc.&lt;/li&gt; 
 &lt;li&gt;Added configurable high-risk file upload restrictions (e.g., exe files)&lt;/li&gt; 
 &lt;li&gt;Added configurable site filing information&lt;/li&gt; 
 &lt;li&gt;Added password requirement for demo site file deletion&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;Optimizations&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Added caching for text document preview&lt;/li&gt; 
 &lt;li&gt;Beautified 404, 500 error pages&lt;/li&gt; 
 &lt;li&gt;Optimized invoice and other OFD file preview seal rendering compatibility&lt;/li&gt; 
 &lt;li&gt;Removed office-plugin module, using new jodconverter component&lt;/li&gt; 
 &lt;li&gt;Optimized Excel file preview effect&lt;/li&gt; 
 &lt;li&gt;Optimized CAD file preview effect&lt;/li&gt; 
 &lt;li&gt;Updated xstream, junrar, pdfbox, and other dependency versions&lt;/li&gt; 
 &lt;li&gt;Updated TIF to PDF conversion plugin, added conversion cache&lt;/li&gt; 
 &lt;li&gt;Optimized demo page UI deployment&lt;/li&gt; 
 &lt;li&gt;Compressed package file preview supports directories&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;Fixes&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;Fixed XSS issues in some interfaces&lt;/li&gt; 
 &lt;li&gt;Fixed console printed demo address not following content-path configuration&lt;/li&gt; 
 &lt;li&gt;Fixed OFD file preview cross-domain issues&lt;/li&gt; 
 &lt;li&gt;Fixed internal self-signed certificate HTTPS URL file download issues&lt;/li&gt; 
 &lt;li&gt;Fixed special character file deletion issues&lt;/li&gt; 
 &lt;li&gt;Fixed OOM caused by unreclaimed memory in PDF to image conversion&lt;/li&gt; 
 &lt;li&gt;Fixed garbled preview for xlsx 7.4+ version files&lt;/li&gt; 
 &lt;li&gt;Fixed TrustHostFilter not intercepting cross-domain interfaces (security issue - upgrade required if using TrustHost)&lt;/li&gt; 
 &lt;li&gt;Fixed compressed package file preview filename garbled issue on Linux systems&lt;/li&gt; 
 &lt;li&gt;Fixed OFD file preview only displaying 10 pages&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Changelog&lt;/h3&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;December 14, 2022, version 4.1.0 released:&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol&gt; 
 &lt;li&gt;Updated homepage design by @wsd7747.&lt;/li&gt; 
 &lt;li&gt;Compatible with multipage tif for pdf and jpg conversion and multiple page online preview for tif image preview by @zhangzhen1979.&lt;/li&gt; 
 &lt;li&gt;Optimized docker build, using layered build method by @yl-yue.&lt;/li&gt; 
 &lt;li&gt;Implemented file encryption based on userToken cache by @yl-yue.&lt;/li&gt; 
 &lt;li&gt;Implemented preview for encrypted Word, PPT, and Excel files by @yl-yue.&lt;/li&gt; 
 &lt;li&gt;Upgraded Linux &amp;amp; Docker images to LibreOffice 7.3.&lt;/li&gt; 
 &lt;li&gt;Updated OFD preview component, tif preview component, and added support for PPT watermarking.&lt;/li&gt; 
 &lt;li&gt;Numerous other upgrades, optimizations, and bug fixes. We thank @yl-yue, @wsd7747, @zhangzhen1979, @tomhusky, @shenghuadun, and @kischn.sun for their code contributions.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;July 6, 2021, version 4.0.0 released:&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol&gt; 
 &lt;li&gt;The integration of OpenOffice in the underlying system has been replaced with LibreOffice, resulting in enhanced compatibility and improved preview effects for Office files.&lt;/li&gt; 
 &lt;li&gt;Fixed the directory traversal vulnerability in compressed files.&lt;/li&gt; 
 &lt;li&gt;Fixed the issue where previewing PPT files in PDF mode was ineffective.&lt;/li&gt; 
 &lt;li&gt;Fixed the issue where the front-end display of image preview mode for PPT files was abnormal.&lt;/li&gt; 
 &lt;li&gt;Added a new feature: the file upload function on the homepage can be enabled or disabled in real-time through configuration.&lt;/li&gt; 
 &lt;li&gt;Optimized the logging of Office process shutdown.&lt;/li&gt; 
 &lt;li&gt;Optimized the logic for finding Office components in Windows environment, with built-in LibreOffice taking priority.&lt;/li&gt; 
 &lt;li&gt;Optimized the synchronous execution of starting Office processes.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;June 17, 2021, version 3.6.0 released:&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;This version includes support for OFD file type versions, and all the important features in this release were contributed by the community. We thank @gaoxingzaq and @zhangxiaoxiao9527 for their code contributions.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Added support for previewing OFD type files. OFD is a domestically produced file format similar to PDF.&lt;/li&gt; 
 &lt;li&gt;Added support for transcoding and previewing video files through ffmpeg. With transcoding enabled, theoretically, all mainstream video file formats such as RM, RMVB, FLV, etc. are supported for preview.&lt;/li&gt; 
 &lt;li&gt;Beautified the preview effect of PPT and PPTX file types, much better looking than the previous version.&lt;/li&gt; 
 &lt;li&gt;Updated the versions of dependencies such as pdfbox, xstream, common-io.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;January 28, 2021:&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;The final update of the Lunar New Year 2020 has been released, mainly including some UI improvements, bug fixes reported by QQ group users and issues, and most importantly, it is a new version for a good year.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Introduced galimatias to solve the problem of abnormal file download caused by non-standard file names.&lt;/li&gt; 
 &lt;li&gt;Updated UI style of index access demonstration interface.&lt;/li&gt; 
 &lt;li&gt;Updated UI style of markdown file preview.&lt;/li&gt; 
 &lt;li&gt;Updated UI style of XML file preview, adjusted the architecture of text file preview to facilitate expansion.&lt;/li&gt; 
 &lt;li&gt;Updated UI style of simTxT file preview.&lt;/li&gt; 
 &lt;li&gt;Adjusted the UI of continuous preview of multiple images to flip up and down.&lt;/li&gt; 
 &lt;li&gt;Simplified all file download IO operations by adopting the apache-common-io package.&lt;/li&gt; 
 &lt;li&gt;XML file preview supports switching to pure text mode.&lt;/li&gt; 
 &lt;li&gt;Enhanced prompt information when url base64 decoding fails.&lt;/li&gt; 
 &lt;li&gt;Fixed import errors and image preview bug.&lt;/li&gt; 
 &lt;li&gt;Fixed the problem of missing log directory when running the release package.&lt;/li&gt; 
 &lt;li&gt;Fixed the bug of continuous preview of multiple images in the compressed package.&lt;/li&gt; 
 &lt;li&gt;Fixed the problem of no universal matching for file type suffixes in uppercase and lowercase.&lt;/li&gt; 
 &lt;li&gt;Specified the use of the Apache Commons-code implementation for Base64 encoding to fix exceptions occurring in some JDK versions.&lt;/li&gt; 
 &lt;li&gt;Fixed the bug of HTML file preview of text-like files.&lt;/li&gt; 
 &lt;li&gt;Fixed the problem of inability to switch between jpg and pdf when previewing dwg files.&lt;/li&gt; 
 &lt;li&gt;Escaped dangerous characters to prevent reflected xss.&lt;/li&gt; 
 &lt;li&gt;Fixed the problem of duplicate encoding causing the failure of document-to-image preview and standardized the encoding.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;December 27, 2020:&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;The year-end major update of 2020 includes comprehensive architecture design, complete code refactoring, significant improvement in code quality, and more convenient secondary development. We welcome you to review the source code and contribute to building by raising issues and pull requests.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Adjusted architecture modules, extensively refactored code, and improved code quality by several levels. Please feel free to review.&lt;/li&gt; 
 &lt;li&gt;Enhanced XML file preview effect and added preview of XML document structure.&lt;/li&gt; 
 &lt;li&gt;Added support for markdown file preview, including support for md rendering and switching between source text and preview.&lt;/li&gt; 
 &lt;li&gt;Switched the underlying web server to jetty, resolving the issue: &lt;a href=&quot;https://github.com/kekingcn/kkFileView/issues/168&quot;&gt;https://github.com/kekingcn/kkFileView/issues/168&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Introduced cpdetector to solve the problem of file encoding recognition.&lt;/li&gt; 
 &lt;li&gt;Adopted double encoding with base64 and urlencode for URLs to completely solve preview problems with bizarre file names.&lt;/li&gt; 
 &lt;li&gt;Added configuration item office.preview.switch.disabled to control the switch of office file preview.&lt;/li&gt; 
 &lt;li&gt;Optimized text file preview logic, transmitting content through Base64 to avoid requesting file content again during preview.&lt;/li&gt; 
 &lt;li&gt;Disabled the image zoom effect in office preview mode to achieve consistent experience with image and pdf preview.&lt;/li&gt; 
 &lt;li&gt;Directly set pdfbox to be compatible with lower version JDK, and there will be no warning prompts even when run in IDEA.&lt;/li&gt; 
 &lt;li&gt;Removed non-essential toolkits like Guava and Hutool to reduce code volume.&lt;/li&gt; 
 &lt;li&gt;Asynchronous loading of Office components speeds up application launch to within 5 seconds.&lt;/li&gt; 
 &lt;li&gt;Reasonable settings of the number of threads in the preview consumption queue.&lt;/li&gt; 
 &lt;li&gt;Fixed the bug where files in compressed packages failed to preview again.&lt;/li&gt; 
 &lt;li&gt;Fixed the bug in image preview.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;May 20th 2020 ：&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol&gt; 
 &lt;li&gt;Support for global watermark and dynamic change of watermark content through parameters&lt;/li&gt; 
 &lt;li&gt;Support for CAD file Preview&lt;/li&gt; 
 &lt;li&gt;Add configuration item base.url, support using nginx reverse proxy and set context-path&lt;/li&gt; 
 &lt;li&gt;All configuration items can be read from environment variables, which is convenient for docker image deployment and large-scale use in cluster&lt;/li&gt; 
 &lt;li&gt;Support the configuration of TrustHost (only the file source from the trust site can be previewed), and protect the preview service from abuse&lt;/li&gt; 
 &lt;li&gt;Support configuration of customize cache cleanup time (cron expression)&lt;/li&gt; 
 &lt;li&gt;All recognizable plain text can be previewed directly without downloading, such as .md .java .py, etc&lt;/li&gt; 
 &lt;li&gt;Support configuration to limit PDF file download after conversion&lt;/li&gt; 
 &lt;li&gt;Optimize Maven packaging configuration to solve the problem of line break in .sh script&lt;/li&gt; 
 &lt;li&gt;Place all CDN dependencies on the front end locally for users without external network connection&lt;/li&gt; 
 &lt;li&gt;Comment Service on home page switched from Sohu ChangYan to gitalk&lt;/li&gt; 
 &lt;li&gt;Fixed preview exceptions that may be caused by special characters in the URL&lt;/li&gt; 
 &lt;li&gt;Fixed the addtask exception of the transformation file queue&lt;/li&gt; 
 &lt;li&gt;Fixed other known issues&lt;/li&gt; 
 &lt;li&gt;Official website build: &lt;a href=&quot;https://kkview.cn&quot;&gt;https://kkview.cn&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Official docker image repository build: &lt;a href=&quot;https://hub.docker.com/r/keking/kkfileview&quot;&gt;https://hub.docker.com/r/keking/kkfileview&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;June 18th 2019 ：&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol&gt; 
 &lt;li&gt;Support automatic cleaning of cache and preview files&lt;/li&gt; 
 &lt;li&gt;Support http/https stream url file preview&lt;/li&gt; 
 &lt;li&gt;Support FTP url file preview&lt;/li&gt; 
 &lt;li&gt;Add Docker build&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;April 8th 2019&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol&gt; 
 &lt;li&gt;Cache and queue implementations abstract, providing JDK and REDIS implementations (REDIS becomes optional dependencies)&lt;/li&gt; 
 &lt;li&gt;Provides zip and tar.gz packages, and provides a one-click startup script&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;January 17th 2018&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol&gt; 
 &lt;li&gt;Refined the project directory, abstract file preview interface, Easy to extend more file extensions and depoly this project on your own&lt;/li&gt; 
 &lt;li&gt;Added English documentation (@幻幻Fate，@汝辉) contribution&lt;/li&gt; 
 &lt;li&gt;Support for more image file extensions&lt;/li&gt; 
 &lt;li&gt;Fixed the issue that image carousel in zip file will always start from the first&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;January 12th 2018&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol&gt; 
 &lt;li&gt;Support for multiple images preview&lt;/li&gt; 
 &lt;li&gt;Support for images rotation preview in rar/zip&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;January 2nd 2018&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol&gt; 
 &lt;li&gt;Fixed gibberish issue when preview a txt document caused by the file encoding problem&lt;/li&gt; 
 &lt;li&gt;Fixed the issue that some module dependencies can not be found&lt;/li&gt; 
 &lt;li&gt;Add a spring boot profile, and support for Multi-environment configuration&lt;/li&gt; 
 &lt;li&gt;Add &lt;code&gt;pdf.js&lt;/code&gt; to preview the documents such as doc,etc.,support for generating doc headlines as pdf menu，support for mobile preview&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Sponsor Us&lt;/h3&gt; 
&lt;p&gt;If this project has been helpful to you, we welcome your sponsorship. Your support is our greatest motivation.！&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/a47913f8b796e9a7eb0f3872796d8e63e5c7c1f4fd5bcfd8558018f92d88a640/kekingcn/kkFileView" medium="image" />
      
    </item>
    
    <item>
      <title>tonikelope/megabasterd</title>
      <link>https://github.com/tonikelope/megabasterd</link>
      <description>&lt;p&gt;Yet another unofficial (and ugly) cross-platform MEGA downloader/uploader/streaming suite.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;MegaBasterd&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Maintained%3F-yes-green.svg?sanitize=true&quot; alt=&quot;Maintenance&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-GPLv3-blue.svg?sanitize=true&quot; alt=&quot;License: GPL v3&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;&lt;i&gt;&quot;If it compiles, it&#39;s good; if it boots up, it&#39;s perfect.&quot; (Linus Torvalds)&lt;/i&gt;&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://github.com/tonikelope/megabasterd/releases/latest&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/tonikelope/megabasterd/master/src/main/resources/images/mbasterd_logo_git.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2 align=&quot;center&quot;&gt;&lt;a href=&quot;https://github.com/tonikelope/megabasterd/releases/latest&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Download latest build&lt;/b&gt;&lt;/a&gt;&lt;/h2&gt; 
&lt;h3 align=&quot;center&quot;&gt;&lt;i&gt;Note: MegaBasterd jar version requires &lt;a href=&quot;https://adoptium.net/es/temurin/releases/?version=11&quot; target=&quot;_blank&quot;&gt;Java 8 or later&lt;/a&gt;.&lt;/i&gt;&lt;/h3&gt; 
&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://github.com/tonikelope/megabasterd/releases/latest&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/tonikelope/megabasterd/master/src/main/resources/images/linux-mac-windows.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://github.com/tonikelope/megabasterd/issues/397&quot;&gt;&lt;b&gt;Would you like to help by translating MegaBasterd into your favorite language?&lt;/b&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/tonikelope/megabasterd/master/src/main/resources/images/mbasterd_screen.png&quot; alt=&quot;Screnshot&quot; /&gt;&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://youtu.be/5TkBXT7osQI&quot;&gt;&lt;b&gt;MegaBasterd DEMO&lt;/b&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/tonikelope/megabasterd/master/coffee.png&quot; /&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/tonikelope/megabasterd/master/src/main/resources/images/ethereum_toni.png&quot; /&gt;&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://github.com/tonikelope/megabasterd/issues/385#issuecomment-1019215670&quot;&gt;BONUS: Why the f*ck has MegaBasterd stopped downloading?&lt;/a&gt;&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;&lt;b&gt;IMPORTANT:&lt;/b&gt; You are not authorized to use MegaBasterd in any way that violates &lt;a href=&quot;https://mega.io/es/terms&quot;&gt;&lt;b&gt;MEGA&#39;s terms of use&lt;/b&gt;&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/c005df225c2f76acee498150bf8f4656629e140b0ed79a858694d29e243e39d7/tonikelope/megabasterd" medium="image" />
      
    </item>
    
    <item>
      <title>NationalSecurityAgency/ghidra</title>
      <link>https://github.com/NationalSecurityAgency/ghidra</link>
      <description>&lt;p&gt;Ghidra is a software reverse engineering (SRE) framework&lt;/p&gt;&lt;hr&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NationalSecurityAgency/ghidra/master/Ghidra/Features/Base/src/main/resources/images/GHIDRA_3.png&quot; width=&quot;400&quot; /&gt; 
&lt;h1&gt;Ghidra Software Reverse Engineering Framework&lt;/h1&gt; 
&lt;p&gt;Ghidra is a software reverse engineering (SRE) framework created and maintained by the &lt;a href=&quot;https://www.nsa.gov&quot;&gt;National Security Agency&lt;/a&gt; Research Directorate. This framework includes a suite of full-featured, high-end software analysis tools that enable users to analyze compiled code on a variety of platforms including Windows, macOS, and Linux. Capabilities include disassembly, assembly, decompilation, graphing, and scripting, along with hundreds of other features. Ghidra supports a wide variety of processor instruction sets and executable formats and can be run in both user-interactive and automated modes. Users may also develop their own Ghidra extension components and/or scripts using Java or Python.&lt;/p&gt; 
&lt;p&gt;In support of NSA&#39;s Cybersecurity mission, Ghidra was built to solve scaling and teaming problems on complex SRE efforts, and to provide a customizable and extensible SRE research platform. NSA has applied Ghidra SRE capabilities to a variety of problems that involve analyzing malicious code and generating deep insights for SRE analysts who seek a better understanding of potential vulnerabilities in networks and systems.&lt;/p&gt; 
&lt;p&gt;If you are a U.S. citizen interested in projects like this, to develop Ghidra and other cybersecurity tools for NSA to help protect our nation and its allies, consider applying for a &lt;a href=&quot;https://www.intelligencecareers.gov/nsa&quot;&gt;career with us&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Security Warning&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;WARNING:&lt;/strong&gt; There are known security vulnerabilities within certain versions of Ghidra. Before proceeding, please read through Ghidra&#39;s &lt;a href=&quot;https://github.com/NationalSecurityAgency/ghidra/security/advisories&quot;&gt;Security Advisories&lt;/a&gt; for a better understanding of how you might be impacted.&lt;/p&gt; 
&lt;h2&gt;Install&lt;/h2&gt; 
&lt;p&gt;To install an official pre-built multi-platform Ghidra release:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Install &lt;a href=&quot;https://adoptium.net/temurin/releases&quot;&gt;JDK 21 64-bit&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Download a Ghidra &lt;a href=&quot;https://github.com/NationalSecurityAgency/ghidra/releases&quot;&gt;release file&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; The official multi-platform release file is named &lt;code&gt;ghidra_&amp;lt;version&amp;gt;_&amp;lt;release&amp;gt;_&amp;lt;date&amp;gt;.zip&lt;/code&gt; which can be found under the &quot;Assets&quot; drop-down. Downloading either of the files named &quot;Source Code&quot; is not correct for this step.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Extract the Ghidra release file 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Do not extract on top of an existing installation&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Launch Ghidra: &lt;code&gt;./ghidraRun&lt;/code&gt; (&lt;code&gt;ghidraRun.bat&lt;/code&gt; for Windows) 
  &lt;ul&gt; 
   &lt;li&gt;or launch &lt;a href=&quot;https://raw.githubusercontent.com/NationalSecurityAgency/ghidra/master/Ghidra/Features/PyGhidra/README.md&quot;&gt;PyGhidra&lt;/a&gt;: &lt;code&gt;./support/pyghidraRun&lt;/code&gt; (&lt;code&gt;support\pyghidraRun.bat&lt;/code&gt; for Windows)&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For additional information and troubleshooting tips about installing and running a Ghidra release, please refer to the &lt;a href=&quot;https://raw.githubusercontent.com/NationalSecurityAgency/ghidra/master/GhidraDocs/GettingStarted.md&quot;&gt;Getting Started&lt;/a&gt; document which can be found at the root of a Ghidra installation directory.&lt;/p&gt; 
&lt;h2&gt;Build&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/NationalSecurityAgency/ghidra/actions/workflows/build-ghidra.yml&quot;&gt;&lt;img src=&quot;https://github.com/NationalSecurityAgency/ghidra/actions/workflows/build-ghidra.yml/badge.svg?sanitize=true&quot; alt=&quot;Build Ghidra&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;To create the latest development build for your platform from this source repository:&lt;/p&gt; 
&lt;h5&gt;Install build tools:&lt;/h5&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://adoptium.net/temurin/releases&quot;&gt;JDK 21 64-bit&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://gradle.org/releases/&quot;&gt;Gradle 8.5+&lt;/a&gt; (or provided Gradle wrapper if Internet connection is available)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.python.org/downloads/&quot;&gt;Python3&lt;/a&gt; (version 3.9 to 3.14) with bundled pip&lt;/li&gt; 
 &lt;li&gt;GCC or Clang, and make (Linux/macOS-only)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://visualstudio.microsoft.com/vs/community/&quot;&gt;Microsoft Visual Studio&lt;/a&gt; 2017+ or &lt;a href=&quot;https://visualstudio.microsoft.com/visual-cpp-build-tools/&quot;&gt;Microsoft C++ Build Tools&lt;/a&gt; with the following components installed (Windows-only): 
  &lt;ul&gt; 
   &lt;li&gt;MSVC&lt;/li&gt; 
   &lt;li&gt;Windows SDK&lt;/li&gt; 
   &lt;li&gt;C++ ATL&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h5&gt;Download and extract the source:&lt;/h5&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/NationalSecurityAgency/ghidra/archive/refs/heads/master.zip&quot;&gt;Download from GitHub&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;unzip ghidra-master
cd ghidra-master
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Instead of downloading the compressed source, you may instead want to clone the GitHub repository: &lt;code&gt;git clone https://github.com/NationalSecurityAgency/ghidra.git&lt;/code&gt;&lt;/p&gt; 
&lt;h5&gt;Download additional build dependencies into source repository:&lt;/h5&gt; 
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; If an Internet connection is available and you did not install Gradle, the &lt;code&gt;./gradlew&lt;/code&gt; (or &lt;code&gt;gradlew.bat&lt;/code&gt;) command may be used in place of the &lt;code&gt;gradle&lt;/code&gt; command in the following instructions.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gradle -I gradle/support/fetchDependencies.gradle
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;Create development build:&lt;/h5&gt; 
&lt;pre&gt;&lt;code&gt;gradle buildGhidra
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The compressed development build will be located at &lt;code&gt;build/dist/&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;For more detailed information on building Ghidra, please read the &lt;a href=&quot;https://raw.githubusercontent.com/NationalSecurityAgency/ghidra/master/DevGuide.md&quot;&gt;Developer&#39;s Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;For issues building, please check the &lt;a href=&quot;https://raw.githubusercontent.com/NationalSecurityAgency/ghidra/master/DevGuide.md#known-issues&quot;&gt;Known Issues&lt;/a&gt; section for possible solutions.&lt;/p&gt; 
&lt;h2&gt;Develop&lt;/h2&gt; 
&lt;h3&gt;User Scripts and Extensions&lt;/h3&gt; 
&lt;p&gt;Ghidra installations support users writing custom scripts and extensions via the &lt;em&gt;GhidraDev&lt;/em&gt; plugin for Eclipse. The plugin and its corresponding instructions can be found within a Ghidra release at &lt;code&gt;Extensions/Eclipse/GhidraDev/&lt;/code&gt; or at &lt;a href=&quot;https://raw.githubusercontent.com/NationalSecurityAgency/ghidra/master/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/README.md&quot;&gt;this link&lt;/a&gt;. Alternatively, Visual Studio Code may be used to edit scripts by clicking the Visual Studio Code icon in the Script Manager. Fully-featured Visual Studio Code projects can be created from a Ghidra CodeBrowser window at &lt;em&gt;Tools -&amp;gt; Create VSCode Module project&lt;/em&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Both the &lt;em&gt;GhidraDev&lt;/em&gt; plugin for Eclipse and Visual Studio Code integrations only support developing against fully built Ghidra installations which can be downloaded from the &lt;a href=&quot;https://github.com/NationalSecurityAgency/ghidra/releases&quot;&gt;Releases&lt;/a&gt; page.&lt;/p&gt; 
&lt;h3&gt;Advanced Development&lt;/h3&gt; 
&lt;p&gt;To develop the Ghidra tool itself, it is highly recommended to use Eclipse, which the Ghidra development process has been highly customized for.&lt;/p&gt; 
&lt;h5&gt;Install build and development tools:&lt;/h5&gt; 
&lt;ul&gt; 
 &lt;li&gt;Follow the above &lt;a href=&quot;https://raw.githubusercontent.com/NationalSecurityAgency/ghidra/master/#build&quot;&gt;build instructions&lt;/a&gt; so the build completes without errors&lt;/li&gt; 
 &lt;li&gt;Install &lt;a href=&quot;https://www.eclipse.org/downloads/packages/&quot;&gt;Eclipse IDE for Java Developers&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h5&gt;Prepare the development environment:&lt;/h5&gt; 
&lt;pre&gt;&lt;code&gt;gradle prepdev eclipse buildNatives
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;Import Ghidra projects into Eclipse:&lt;/h5&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;em&gt;File&lt;/em&gt; -&amp;gt; &lt;em&gt;Import...&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;em&gt;General&lt;/em&gt; | &lt;em&gt;Existing Projects into Workspace&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;Select root directory to be your downloaded or cloned ghidra source repository&lt;/li&gt; 
 &lt;li&gt;Check &lt;em&gt;Search for nested projects&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;Click &lt;em&gt;Finish&lt;/em&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;When Eclipse finishes building the projects, Ghidra can be launched and debugged with the provided &lt;strong&gt;Ghidra&lt;/strong&gt; Eclipse &lt;em&gt;run configuration&lt;/em&gt;.&lt;/p&gt; 
&lt;p&gt;For more detailed information on developing Ghidra, please read the &lt;a href=&quot;https://raw.githubusercontent.com/NationalSecurityAgency/ghidra/master/DevGuide.md&quot;&gt;Developer&#39;s Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Contribute&lt;/h2&gt; 
&lt;p&gt;If you would like to contribute bug fixes, improvements, and new features back to Ghidra, please take a look at our &lt;a href=&quot;https://raw.githubusercontent.com/NationalSecurityAgency/ghidra/master/CONTRIBUTING.md&quot;&gt;Contributor&#39;s Guide&lt;/a&gt; to see how you can participate in this open source project.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/2bee03b3a61f9520eb021de2ff8e6658ecaaf21d5133ea039039118abddd8dba/NationalSecurityAgency/ghidra" medium="image" />
      
    </item>
    
    <item>
      <title>diffplug/spotless</title>
      <link>https://github.com/diffplug/spotless</link>
      <description>&lt;p&gt;Keep your code spotless&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;&lt;img align=&quot;left&quot; src=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/_images/spotless_logo.png&quot; /&gt; Spotless: Keep your code spotless&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/plugin-gradle&quot;&gt;&lt;img src=&quot;https://img.shields.io/gradle-plugin-portal/v/com.diffplug.spotless?color=blue&amp;amp;label=gradle%20plugin&quot; alt=&quot;Gradle Plugin&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/plugin-maven&quot;&gt;&lt;img src=&quot;https://img.shields.io/maven-central/v/com.diffplug.spotless/spotless-maven-plugin?color=blue&amp;amp;label=maven%20plugin&quot; alt=&quot;Maven Plugin&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/moznion/sbt-spotless&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/sbt%20plugin-0.1.3-blue&quot; alt=&quot;SBT Plugin&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Spotless can format &amp;lt;antlr | c | c# | c++ | css | flow | graphql | groovy | html | java | javascript | json | jsx | kotlin | less | license headers | markdown | objective-c | protobuf | python | scala | scss | shell | sql | typeScript | vue | yaml | anything&amp;gt; using &amp;lt;gradle | maven | sbt | anything&amp;gt;.&lt;/p&gt; 
&lt;p&gt;You probably want one of the links below:&lt;/p&gt; 
&lt;h2&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/plugin-gradle&quot;&gt;❇️ Spotless for Gradle&lt;/a&gt; (with integrations for &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=richardwillis.vscode-spotless-gradle&quot;&gt;VS Code&lt;/a&gt; and &lt;a href=&quot;https://plugins.jetbrains.com/plugin/18321-spotless-gradle&quot;&gt;IntelliJ&lt;/a&gt;)&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;user@machine repo % ./gradlew build
:spotlessJavaCheck FAILED
  The following files had format violations:
  src\main\java\com\diffplug\gradle\spotless\FormatExtension.java
    -\t\t····if·(targets.length·==·0)·{
    +\t\tif·(targets.length·==·0)·{
  Run &#39;./gradlew spotlessApply&#39; to fix these violations.
user@machine repo % ./gradlew spotlessApply
:spotlessApply
BUILD SUCCESSFUL
user@machine repo % ./gradlew build
BUILD SUCCESSFUL
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/plugin-maven&quot;&gt;❇️ Spotless for Maven&lt;/a&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;user@machine repo % mvn spotless:check
[ERROR]  &amp;gt; The following files had format violations:
[ERROR]  src\main\java\com\diffplug\gradle\spotless\FormatExtension.java
[ERROR]    -\t\t····if·(targets.length·==·0)·{
[ERROR]    +\t\tif·(targets.length·==·0)·{
[ERROR]  Run &#39;mvn spotless:apply&#39; to fix these violations.
user@machine repo % mvn spotless:apply
[INFO] BUILD SUCCESS
user@machine repo % mvn spotless:check
[INFO] BUILD SUCCESS
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;a href=&quot;https://github.com/moznion/sbt-spotless&quot;&gt;❇️ Spotless for SBT (external for now)&lt;/a&gt;&lt;/h2&gt; 
&lt;h2&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/CONTRIBUTING.md#how-to-add-a-new-plugin-for-a-build-system&quot;&gt;Other build systems&lt;/a&gt;&lt;/h2&gt; 
&lt;h2&gt;How it works (for potential contributors)&lt;/h2&gt; 
&lt;p&gt;Ideally, a code formatter can do more than just find formatting errors - it should fix them as well. Such a formatter is just a &lt;code&gt;Function&amp;lt;String, String&amp;gt;&lt;/code&gt;, which returns a formatted version of its potentially unformatted input.&lt;/p&gt; 
&lt;p&gt;It&#39;s easy to build such a function, but there are some gotchas and lots of integration work (&lt;a href=&quot;https://github.com/diffplug/spotless/tree/main/plugin-gradle#line-endings-and-encodings-invisible-stuff&quot;&gt;newlines&lt;/a&gt;, character &lt;a href=&quot;https://github.com/diffplug/spotless/raw/08340a11566cdf56ecf50dbd4d557ed84a70a502/testlib/src/test/java/com/diffplug/spotless/EncodingErrorMsgTest.java#L34-L38&quot;&gt;encodings&lt;/a&gt;, &lt;a href=&quot;https://github.com/diffplug/spotless/raw/main/PADDEDCELL.md&quot;&gt;idempotency&lt;/a&gt;, git &lt;a href=&quot;https://github.com/diffplug/spotless/tree/main/plugin-gradle#ratchet&quot;&gt;ratcheting&lt;/a&gt;, and build-system integration). Spotless tackles those for you &lt;strong&gt;so you can focus on just a simple &lt;code&gt;Function&amp;lt;String, String&amp;gt;&lt;/code&gt; which can compose with any of the other formatters and build tools in Spotless&#39; arsenal&lt;/strong&gt;.&lt;/p&gt; 
&lt;h2&gt;Current feature matrix&lt;/h2&gt; 
&lt;!--freshmark matrix
function lib(className)   { return &#39;| [`&#39; + className + &#39;`](lib/src/main/java/com/diffplug/spotless/&#39; + className.replaceAll(&#39;\\.&#39;, &#39;/&#39;) + &#39;.java) | &#39; }
function extra(className) { return &#39;| [`&#39; + className + &#39;`](lib-extra/src/main/java/com/diffplug/spotless/extra/&#39; + className.replaceAll(&#39;\\.&#39;, &#39;/&#39;) + &#39;.java) | &#39; }

//                                               | GRADLE        | MAVEN        | SBT          | (new)   |
output = [
&#39;| Feature / FormatterStep                       | [gradle](plugin-gradle/README.md) | [maven](plugin-maven/README.md) | [sbt](https://github.com/moznion/sbt-spotless) | [(Your build tool here)](CONTRIBUTING.md#how-to-add-a-new-plugin-for-a-build-system) |&#39;,
&#39;| --------------------------------------------- | ------------- | ------------ | ------------ | --------|&#39;,
&#39;| Automatic [idempotency safeguard](PADDEDCELL.md) | {{yes}}    | {{yes}}      | {{yes}}      | {{no}}  |&#39;,
&#39;| Misconfigured [encoding safeguard](https://github.com/diffplug/spotless/blob/08340a11566cdf56ecf50dbd4d557ed84a70a502/testlib/src/test/java/com/diffplug/spotless/EncodingErrorMsgTest.java#L34-L38) | {{yes}}    | {{yes}}      | {{yes}}       | {{no}}  |&#39;,
&#39;| Toggle with [`spotless:off` and `spotless:on`](plugin-gradle/#spotlessoff-and-spotlesson) | {{yes}}    | {{yes}}      | {{no}}       | {{no}}  |&#39;,
&#39;| [Ratchet from](https://github.com/diffplug/spotless/tree/main/plugin-gradle#ratchet) `origin/main` or other git ref | {{yes}}    | {{yes}}      | {{no}}       | {{no}}  |&#39;,
&#39;| Define [line endings using git](https://github.com/diffplug/spotless/tree/main/plugin-gradle#line-endings-and-encodings-invisible-stuff) | {{yes}}    | {{yes}}      | {{yes}}       | {{no}}  |&#39;,
&#39;| Fast incremental format and up-to-date check   | {{yes}}      | {{yes}}      | {{no}}       | {{no}}  |&#39;,
&#39;| Fast format on fresh checkout using buildcache | {{yes}}      | {{no}}       | {{no}}       | {{no}}  |&#39;,
lib(&#39;generic.EndWithNewlineStep&#39;)                +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;generic.IndentStep&#39;)                        +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;generic.Jsr223Step&#39;)                        +&#39;{{no}}        | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;generic.LicenseHeaderStep&#39;)                 +&#39;{{yes}}       | {{yes}}      | {{yes}}      | {{no}}  |&#39;,
lib(&#39;generic.NativeCmdStep&#39;)                     +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;generic.ReplaceRegexStep&#39;)                  +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;generic.ReplaceStep&#39;)                       +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;generic.TrimTrailingWhitespaceStep&#39;)        +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;antlr4.Antlr4FormatterStep&#39;)                +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;biome.BiomeStep&#39;)                           +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;cpp.ClangFormatStep&#39;)                       +&#39;{{yes}}       | {{no}}       | {{no}}       | {{no}}  |&#39;,
extra(&#39;cpp.EclipseFormatterStep&#39;)                +&#39;{{yes}}       | {{yes}}      | {{yes}}      | {{no}}  |&#39;,
lib(&#39;go.GofmtFormatStep&#39;)                        +&#39;{{yes}}       | {{no}}       | {{no}}       | {{no}}  |&#39;,
lib(&#39;gherkin.GherkinUtilsStep&#39;)                  +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
extra(&#39;groovy.GrEclipseFormatterStep&#39;)           +&#39;{{yes}}       | {{yes}}      | {{yes}}      | {{no}}  |&#39;,
lib(&#39;java.GoogleJavaFormatStep&#39;)                 +&#39;{{yes}}       | {{yes}}      | {{yes}}      | {{no}}  |&#39;,
lib(&#39;java.ImportOrderStep&#39;)                      +&#39;{{yes}}       | {{yes}}      | {{yes}}      | {{no}}  |&#39;,
lib(&#39;java.PalantirJavaFormatStep&#39;)               +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;java.RemoveUnusedImportsStep&#39;)              +&#39;{{yes}}       | {{yes}}      | {{yes}}      | {{no}}  |&#39;,
lib(&#39;java.ExpandWildcardImportsStep&#39;)            +&#39;{{yes}}       | {{no}}       | {{no}}       | {{no}}  |&#39;,
lib(&#39;java.ForbidWildcardImportsStep&#39;)            +&#39;{{yes}}       | {{yes}}      | {{yes}}      | {{no}}  |&#39;,
lib(&#39;java.ForbidModuleImportsStep&#39;)              +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
extra(&#39;java.EclipseJdtFormatterStep&#39;)            +&#39;{{yes}}       | {{yes}}      | {{yes}}      | {{no}}  |&#39;,
lib(&#39;java.FormatAnnotationsStep&#39;)                +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;java.CleanthatJavaStep&#39;)                    +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;java.TableTestFormatterStep&#39;)               +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;json.gson.GsonStep&#39;)                        +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;json.JacksonJsonStep&#39;)                      +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;json.JsonSimpleStep&#39;)                       +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;json.JsonPatchStep&#39;)                        +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;kotlin.KtLintStep&#39;)                         +&#39;{{yes}}       | {{yes}}      | {{yes}}      | {{no}}  |&#39;,
lib(&#39;kotlin.KtfmtStep&#39;)                          +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;kotlin.DiktatStep&#39;)                         +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;markdown.FreshMarkStep&#39;)                    +&#39;{{yes}}       | {{no}}       | {{no}}       | {{no}}  |&#39;,
lib(&#39;markdown.FlexmarkStep&#39;)                     +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;npm.EslintFormatterStep&#39;)                   +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;npm.PrettierFormatterStep&#39;)                 +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;npm.TsFmtFormatterStep&#39;)                    +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;pom.SortPomStep&#39;)                           +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;protobuf.BufStep&#39;)                          +&#39;{{yes}}       | {{no}}       | {{no}}       | {{no}}  |&#39;,
lib(&#39;python.BlackStep&#39;)                          +&#39;{{yes}}       | {{no}}       | {{no}}       | {{no}}  |&#39;,
lib(&#39;rdf.RdfFormatterStep&#39;)                      +&#39;{{no}}        | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;scala.ScalaFmtStep&#39;)                        +&#39;{{yes}}       | {{yes}}      | {{yes}}      | {{no}}  |&#39;,
lib(&#39;shell.ShfmtStep&#39;)                           +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;sql.DBeaverSQLFormatterStep&#39;)               +&#39;{{yes}}       | {{yes}}      | {{yes}}      | {{no}}  |&#39;,
extra(&#39;wtp.EclipseWtpFormatterStep&#39;)             +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
lib(&#39;yaml.JacksonYamlStep&#39;)                      +&#39;{{yes}}       | {{yes}}      | {{no}}       | {{no}}  |&#39;,
&#39;| [(Your FormatterStep here)](CONTRIBUTING.md#how-to-add-a-new-formatterstep) | {{no}} | {{no}} | {{no}} | {{no}} |&#39;,
].join(&#39;\n&#39;);
--&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Feature / FormatterStep&lt;/th&gt; 
   &lt;th&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/plugin-gradle/README.md&quot;&gt;gradle&lt;/a&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/plugin-maven/README.md&quot;&gt;maven&lt;/a&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;a href=&quot;https://github.com/moznion/sbt-spotless&quot;&gt;sbt&lt;/a&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/CONTRIBUTING.md#how-to-add-a-new-plugin-for-a-build-system&quot;&gt;(Your build tool here)&lt;/a&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Automatic &lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/PADDEDCELL.md&quot;&gt;idempotency safeguard&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Misconfigured &lt;a href=&quot;https://github.com/diffplug/spotless/raw/08340a11566cdf56ecf50dbd4d557ed84a70a502/testlib/src/test/java/com/diffplug/spotless/EncodingErrorMsgTest.java#L34-L38&quot;&gt;encoding safeguard&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Toggle with &lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/plugin-gradle/#spotlessoff-and-spotlesson&quot;&gt;&lt;code&gt;spotless:off&lt;/code&gt; and &lt;code&gt;spotless:on&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/diffplug/spotless/tree/main/plugin-gradle#ratchet&quot;&gt;Ratchet from&lt;/a&gt; &lt;code&gt;origin/main&lt;/code&gt; or other git ref&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Define &lt;a href=&quot;https://github.com/diffplug/spotless/tree/main/plugin-gradle#line-endings-and-encodings-invisible-stuff&quot;&gt;line endings using git&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Fast incremental format and up-to-date check&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Fast format on fresh checkout using buildcache&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/generic/EndWithNewlineStep.java&quot;&gt;&lt;code&gt;generic.EndWithNewlineStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/generic/IndentStep.java&quot;&gt;&lt;code&gt;generic.IndentStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/generic/Jsr223Step.java&quot;&gt;&lt;code&gt;generic.Jsr223Step&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/generic/LicenseHeaderStep.java&quot;&gt;&lt;code&gt;generic.LicenseHeaderStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/generic/NativeCmdStep.java&quot;&gt;&lt;code&gt;generic.NativeCmdStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/generic/ReplaceRegexStep.java&quot;&gt;&lt;code&gt;generic.ReplaceRegexStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/generic/ReplaceStep.java&quot;&gt;&lt;code&gt;generic.ReplaceStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/generic/TrimTrailingWhitespaceStep.java&quot;&gt;&lt;code&gt;generic.TrimTrailingWhitespaceStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/antlr4/Antlr4FormatterStep.java&quot;&gt;&lt;code&gt;antlr4.Antlr4FormatterStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/biome/BiomeStep.java&quot;&gt;&lt;code&gt;biome.BiomeStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/cpp/ClangFormatStep.java&quot;&gt;&lt;code&gt;cpp.ClangFormatStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib-extra/src/main/java/com/diffplug/spotless/extra/cpp/EclipseFormatterStep.java&quot;&gt;&lt;code&gt;cpp.EclipseFormatterStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/go/GofmtFormatStep.java&quot;&gt;&lt;code&gt;go.GofmtFormatStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/gherkin/GherkinUtilsStep.java&quot;&gt;&lt;code&gt;gherkin.GherkinUtilsStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib-extra/src/main/java/com/diffplug/spotless/extra/groovy/GrEclipseFormatterStep.java&quot;&gt;&lt;code&gt;groovy.GrEclipseFormatterStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/java/GoogleJavaFormatStep.java&quot;&gt;&lt;code&gt;java.GoogleJavaFormatStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/java/ImportOrderStep.java&quot;&gt;&lt;code&gt;java.ImportOrderStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/java/PalantirJavaFormatStep.java&quot;&gt;&lt;code&gt;java.PalantirJavaFormatStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/java/RemoveUnusedImportsStep.java&quot;&gt;&lt;code&gt;java.RemoveUnusedImportsStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/java/ExpandWildcardImportsStep.java&quot;&gt;&lt;code&gt;java.ExpandWildcardImportsStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/java/ForbidWildcardImportsStep.java&quot;&gt;&lt;code&gt;java.ForbidWildcardImportsStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/java/ForbidModuleImportsStep.java&quot;&gt;&lt;code&gt;java.ForbidModuleImportsStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib-extra/src/main/java/com/diffplug/spotless/extra/java/EclipseJdtFormatterStep.java&quot;&gt;&lt;code&gt;java.EclipseJdtFormatterStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/java/FormatAnnotationsStep.java&quot;&gt;&lt;code&gt;java.FormatAnnotationsStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/java/CleanthatJavaStep.java&quot;&gt;&lt;code&gt;java.CleanthatJavaStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/java/TableTestFormatterStep.java&quot;&gt;&lt;code&gt;java.TableTestFormatterStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/json/gson/GsonStep.java&quot;&gt;&lt;code&gt;json.gson.GsonStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/json/JacksonJsonStep.java&quot;&gt;&lt;code&gt;json.JacksonJsonStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/json/JsonSimpleStep.java&quot;&gt;&lt;code&gt;json.JsonSimpleStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/json/JsonPatchStep.java&quot;&gt;&lt;code&gt;json.JsonPatchStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/kotlin/KtLintStep.java&quot;&gt;&lt;code&gt;kotlin.KtLintStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/kotlin/KtfmtStep.java&quot;&gt;&lt;code&gt;kotlin.KtfmtStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/kotlin/DiktatStep.java&quot;&gt;&lt;code&gt;kotlin.DiktatStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/markdown/FreshMarkStep.java&quot;&gt;&lt;code&gt;markdown.FreshMarkStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/markdown/FlexmarkStep.java&quot;&gt;&lt;code&gt;markdown.FlexmarkStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/npm/EslintFormatterStep.java&quot;&gt;&lt;code&gt;npm.EslintFormatterStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/npm/PrettierFormatterStep.java&quot;&gt;&lt;code&gt;npm.PrettierFormatterStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/npm/TsFmtFormatterStep.java&quot;&gt;&lt;code&gt;npm.TsFmtFormatterStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/pom/SortPomStep.java&quot;&gt;&lt;code&gt;pom.SortPomStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/protobuf/BufStep.java&quot;&gt;&lt;code&gt;protobuf.BufStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/python/BlackStep.java&quot;&gt;&lt;code&gt;python.BlackStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/rdf/RdfFormatterStep.java&quot;&gt;&lt;code&gt;rdf.RdfFormatterStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/scala/ScalaFmtStep.java&quot;&gt;&lt;code&gt;scala.ScalaFmtStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/shell/ShfmtStep.java&quot;&gt;&lt;code&gt;shell.ShfmtStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/sql/DBeaverSQLFormatterStep.java&quot;&gt;&lt;code&gt;sql.DBeaverSQLFormatterStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib-extra/src/main/java/com/diffplug/spotless/extra/wtp/EclipseWtpFormatterStep.java&quot;&gt;&lt;code&gt;wtp.EclipseWtpFormatterStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/lib/src/main/java/com/diffplug/spotless/yaml/JacksonYamlStep.java&quot;&gt;&lt;code&gt;yaml.JacksonYamlStep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;👍&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/diffplug/spotless/main/CONTRIBUTING.md#how-to-add-a-new-formatterstep&quot;&gt;(Your FormatterStep here)&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
   &lt;td&gt;⬜&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;!--freshmark /matrix --&gt; 
&lt;h3&gt;Why are there empty squares?&lt;/h3&gt; 
&lt;p&gt;Many projects get harder to work on as they get bigger. Spotless is easier to work on than ever, and one of the reasons why is that we don&#39;t require contributors to &quot;fill the matrix&quot;. If you want to &lt;a href=&quot;https://github.com/diffplug/spotless/issues/76&quot;&gt;add Bazel support&lt;/a&gt;, we&#39;d happily accept the PR even if it only supports the one formatter you use. And if you want to add FooFormatter support, we&#39;ll happily accept the PR even if it only supports the one build system you use.&lt;/p&gt; 
&lt;p&gt;Once someone has filled in one square of the formatter/build system matrix, it&#39;s easy for interested parties to fill in any empty squares, since you&#39;ll now have a working example for every piece needed.&lt;/p&gt; 
&lt;h2&gt;Acknowledgements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/diffplug/spotless/graphs/contributors&quot;&gt;over 200 contributors with merged PRs&lt;/a&gt;, and also to everyone who helped with code review, file reproducible bugs, etc. A few contributions stand out as especially significant to the history of the project, though regrettably there are certain to be some important omissions!&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/Goooler&quot;&gt;Zongle Wang&lt;/a&gt; for an &lt;a href=&quot;https://github.com/diffplug/spotless/issues?q=is%3Apr%20is%3Aclosed%20author%3AGoooler&quot;&gt;enormous mound of contributions&lt;/a&gt;, but especially for &lt;a href=&quot;https://github.com/diffplug/spotless/issues/1274#issuecomment-2146972303&quot;&gt;his near-rewrite&lt;/a&gt; so that Spotless could support Gradle&#39;s configuration cache natively.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/simschla&quot;&gt;Simon Gamma&lt;/a&gt; for &lt;a href=&quot;https://github.com/diffplug/spotless/pull/283&quot;&gt;adding support for npm-based formatters&lt;/a&gt;, &lt;a href=&quot;https://github.com/diffplug/spotless/pull/606&quot;&gt;twice&lt;/a&gt; including &lt;code&gt;prettier&lt;/code&gt; and &lt;code&gt;tsfmt&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/lutovich&quot;&gt;Konstantin Lutovich&lt;/a&gt; for &lt;a href=&quot;https://github.com/diffplug/spotless/pull/188&quot;&gt;implementing and maintaining the Maven plugin&lt;/a&gt;, as well as fixing &lt;a href=&quot;https://github.com/diffplug/spotless/pull/571&quot;&gt;remote-build cache support for Gradle&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/fvgh&quot;&gt;Frank Vennemeyer&lt;/a&gt; for &lt;a href=&quot;https://github.com/diffplug/spotless/issues/13&quot;&gt;Groovy support via greclipse&lt;/a&gt;, &lt;a href=&quot;https://github.com/diffplug/spotless/issues/232&quot;&gt;C++ support via CDT&lt;/a&gt;, &lt;a href=&quot;https://github.com/diffplug/spotless/pull/241&quot;&gt;XML support via WTP&lt;/a&gt; and a huge body of work with other eclipse-based formatters.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/jbduncan&quot;&gt;Jonathan Bluett-Duncan&lt;/a&gt; for 
  &lt;ul&gt; 
   &lt;li&gt;implementing up-to-date checking &lt;a href=&quot;https://github.com/diffplug/spotless/issues/31&quot;&gt;#31&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;breaking spotless into libraries &lt;a href=&quot;https://github.com/diffplug/spotless/issues/56&quot;&gt;#56&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;lots of other things, but especially the diff support in &lt;code&gt;spotlessCheck&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;constant improvements on a variety of topics with high-quality code reviews&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/bigdaz&quot;&gt;Daz DeBoer&lt;/a&gt; for the reworking the guts of our Gradle plugin to support &lt;a href=&quot;https://github.com/diffplug/spotless/pull/576&quot;&gt;buildcache&lt;/a&gt;, &lt;a href=&quot;https://github.com/diffplug/spotless/pull/607&quot;&gt;InputChanges&lt;/a&gt;, and &lt;a href=&quot;https://github.com/diffplug/spotless/pull/617&quot;&gt;lazy configuration&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/badsyntax&quot;&gt;Richard Willis&lt;/a&gt; for creating the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=richardwillis.vscode-spotless-gradle&quot;&gt;VS Code extension for Spotless Gradle&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/ragurney&quot;&gt;Ryan Gurney&lt;/a&gt; for creating the &lt;a href=&quot;https://plugins.jetbrains.com/plugin/18321-spotless-gradle&quot;&gt;IntelliJ plugin for Spotless Gradle&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/lazer-dev&quot;&gt;Alex Danylenko&lt;/a&gt; for creating the &lt;a href=&quot;https://github.com/diffplug/spotless/pull/2553&quot;&gt;git pre-push hook&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/tisoft&quot;&gt;Markus Heberling&lt;/a&gt; for adding &lt;a href=&quot;https://github.com/diffplug/spotless/pull/949&quot;&gt;generic native formatters&lt;/a&gt;, &lt;a href=&quot;https://github.com/diffplug/spotless/pull/945&quot;&gt;jsr-223 formatters&lt;/a&gt;, and &lt;a href=&quot;https://github.com/diffplug/spotless/pull/946&quot;&gt;maven pom sorting&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/matthiasbalke&quot;&gt;Matthias Balke&lt;/a&gt; for &lt;a href=&quot;https://github.com/diffplug/spotless/pull/328&quot;&gt;adding support for Antlr&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/benkard&quot;&gt;Matthias Andreas Benkard&lt;/a&gt; for adding support for google-java-format 1.8+ (&lt;a href=&quot;https://github.com/diffplug/spotless/pull/563&quot;&gt;#563&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/tbroyer&quot;&gt;Thomas Broyer&lt;/a&gt; for adding support for google-java-format&#39;s &lt;a href=&quot;https://github.com/diffplug/spotless/pull/929&quot;&gt;skip-reflowing-long-strings option&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/hakanai&quot;&gt;Hakanai&lt;/a&gt; for adding &lt;a href=&quot;https://github.com/diffplug/spotless/pull/956&quot;&gt;wildcards last support to the import sorter&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/k-brooks&quot;&gt;Kevin Brooks&lt;/a&gt; for &lt;a href=&quot;https://github.com/diffplug/spotless/pull/482&quot;&gt;updating all eclipse-based formatters to 4.13&lt;/a&gt; and &lt;a href=&quot;https://github.com/diffplug/spotless/issues/877&quot;&gt;fixing Groovy for multiproject&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/dylanbaroody&quot;&gt;Dylan Baroody&lt;/a&gt; for fixing &lt;a href=&quot;https://github.com/diffplug/spotless/pull/955&quot;&gt;sql formatting support for JDBI bind list params&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/figroc&quot;&gt;figroc&lt;/a&gt; for adding &lt;a href=&quot;https://github.com/diffplug/spotless/pull/944#issuecomment-927565149&quot;&gt;custom mavenCoordinate support to google-java-format&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/tglaeser&quot;&gt;Thomas Glaeser&lt;/a&gt; for &lt;a href=&quot;https://github.com/diffplug/spotless/issues/654&quot;&gt;finding&lt;/a&gt; and &lt;a href=&quot;https://github.com/diffplug/spotless/pull/656&quot;&gt;fixing&lt;/a&gt; a file-permissions-clobbering bug.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/joan38&quot;&gt;Joan Goyeau&lt;/a&gt; for &lt;a href=&quot;https://github.com/diffplug/spotless/pull/260&quot;&gt;fixing scalafmt integration&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/nsutcliffe&quot;&gt;Nick Sutcliffe&lt;/a&gt; for &lt;a href=&quot;https://github.com/diffplug/spotless/pull/416&quot;&gt;fixing scalafmt post-2.0&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/baptistemesta&quot;&gt;Baptiste Mesta&lt;/a&gt; for 
  &lt;ul&gt; 
   &lt;li&gt;porting the DBeaver formatter to Spotless, and thanks to &lt;a href=&quot;https://dbeaver.jkiss.org/&quot;&gt;DBeaver&lt;/a&gt; and &lt;a href=&quot;https://github.com/serge-rider/dbeaver/graphs/contributors&quot;&gt;its authors&lt;/a&gt; for their excellent SQL formatter.&lt;/li&gt; 
   &lt;li&gt;making license headers date-aware &lt;a href=&quot;https://github.com/diffplug/spotless/pull/179&quot;&gt;#179&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/vmdominguez&quot;&gt;vmdominguez&lt;/a&gt; and &lt;a href=&quot;https://github.com/luis-fors-cb&quot;&gt;Luis Fors&lt;/a&gt; for adding the ability to limit formatting to specific files in Gradle (&lt;a href=&quot;https://github.com/diffplug/spotless/pull/322&quot;&gt;#322&lt;/a&gt;) and Maven (&lt;a href=&quot;https://github.com/diffplug/spotless/pull/392&quot;&gt;#392&lt;/a&gt;), respectively.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/bender316&quot;&gt;bender316&lt;/a&gt; for fixing classloading on Java 9 (&lt;a href=&quot;https://github.com/diffplug/spotless/pull/426&quot;&gt;#426&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/oehme&quot;&gt;Stefan Oehme&lt;/a&gt; for tons of help on the internal mechanics of Gradle.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/eyalkaspi&quot;&gt;eyalkaspi&lt;/a&gt; for adding configurable date ranges to the date-aware license headers.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/andrewparmet&quot;&gt;Andrew Parmet&lt;/a&gt; for adding &lt;a href=&quot;https://github.com/diffplug/spotless/pull/583&quot;&gt;ktfmt support for kotlin gradle&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/ohorn&quot;&gt;Oliver Horn&lt;/a&gt; for adding AOSP support for Spotless&#39; google-java-format integration.&lt;/li&gt; 
 &lt;li&gt;Formatting by Eclipse 
  &lt;ul&gt; 
   &lt;li&gt;Special thanks to &lt;a href=&quot;https://waynebeaton.wordpress.com/2015/03/15/great-fixes-for-mars-winners-part-i/&quot;&gt;Mateusz Matela&lt;/a&gt; for huge improvements to the eclipse code formatter!&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/ZacSweers&quot;&gt;Zac Sweers&lt;/a&gt; for fixing the highly requested ktlint 0.34+ support (&lt;a href=&quot;https://github.com/diffplug/spotless/pull/469&quot;&gt;#469&lt;/a&gt;), multiple build updates and fixing a Gradle deprecation warning (&lt;a href=&quot;https://github.com/diffplug/spotless/pull/434&quot;&gt;#434&lt;/a&gt; and others).&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/smpanaro&quot;&gt;Stephen Panaro&lt;/a&gt; for adding support for ktlint FilenameRule (&lt;a href=&quot;https://github.com/diffplug/spotless/pull/974&quot;&gt;#974&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/runningcode&quot;&gt;Nelson Osacky&lt;/a&gt; for android doc improvements, versions bump, and a build improvement.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/shyiko&quot;&gt;Stanley Shyiko&lt;/a&gt; for his help integrating &lt;a href=&quot;https://github.com/shyiko/ktlint&quot;&gt;ktlint&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/JLLeitschuh&quot;&gt;Jonathan Leitschuh&lt;/a&gt; for adding &lt;a href=&quot;https://github.com/shyiko/ktlint&quot;&gt;ktlint&lt;/a&gt; support for &lt;a href=&quot;https://github.com/gradle/kotlin-dsl&quot;&gt;Gradle Kotlin DSL&lt;/a&gt; files.&lt;/li&gt; 
 &lt;li&gt;Originally forked from &lt;a href=&quot;https://github.com/youribonnaffe/gradle-format-plugin&quot;&gt;gradle-format-plugin&lt;/a&gt; by Youri Bonnaffé.&lt;/li&gt; 
 &lt;li&gt;Thanks to Ismaël Mejía for bumping eclipse-jdt deps to 4.11. &lt;a href=&quot;https://github.com/diffplug/spotless/issues/381&quot;&gt;PR #60&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to Gábor Bernát for improvements to logging and multi-project support.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/source-knights&quot;&gt;Oliver Szymanski&lt;/a&gt; for porting &lt;a href=&quot;https://github.com/diffplug/spotless/pull/553&quot;&gt;tsfmt&lt;/a&gt; and &lt;a href=&quot;https://github.com/diffplug/spotless/pull/555&quot;&gt;prettier&lt;/a&gt; to maven.&lt;/li&gt; 
 &lt;li&gt;Thanks to Andrew Oberstar for improvements to formatting java source in non-java source sets. &lt;a href=&quot;https://github.com/diffplug/spotless/pull/60&quot;&gt;PR #60&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/sameer-b&quot;&gt;Sameer Balasubrahmanyam&lt;/a&gt; for &lt;a href=&quot;https://github.com/diffplug/spotless/pull/542&quot;&gt;adding support for IntelliJ-style year placeholders&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/jamietanna&quot;&gt;Jamie Tanna&lt;/a&gt; for &lt;a href=&quot;https://github.com/diffplug/spotless/pull/853&quot;&gt;adding a simple JSON formatter&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/asaikali&quot;&gt;Adib Saikali&lt;/a&gt; and &lt;a href=&quot;https://github.com/eskatos&quot;&gt;Paul Merlin&lt;/a&gt; for tracking down the tricky cause of &lt;a href=&quot;https://github.com/diffplug/spotless/issues/506&quot;&gt;#506&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Import ordering from &lt;a href=&quot;https://github.com/krasa/EclipseCodeFormatter&quot;&gt;EclipseCodeFormatter&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Built by &lt;a href=&quot;https://gradle.org/&quot;&gt;gradle&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Tested by &lt;a href=&quot;https://junit.org/&quot;&gt;junit&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Maintained by &lt;a href=&quot;https://www.diffplug.com/&quot;&gt;DiffPlug&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/def13c8da3e912c877dd21b50ec2bc39ba1de92858581b3d71495911e2ebc34f/diffplug/spotless" medium="image" />
      
    </item>
    
    <item>
      <title>oasisfeng/island</title>
      <link>https://github.com/oasisfeng/island</link>
      <description>&lt;p&gt;Island for Android&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Island&lt;/h1&gt; 
&lt;p&gt;Island for Android&lt;/p&gt; 
&lt;h2&gt;Build Instructions&lt;/h2&gt; 
&lt;p&gt;Island depends on &lt;a href=&quot;https://github.com/oasisfeng/deagle&quot;&gt;&quot;deagle&quot; library&lt;/a&gt;, which must be cloned alongside Island in the same path.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;\--
  \- island
  \- deagle
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This project is constructed into several modules, with &lt;strong&gt;assembly&lt;/strong&gt; module as the build portal, to support separate &quot;light&quot; build for core modules, in the form of &quot;product flavor&quot; in Gradle build configuration.&lt;/p&gt; 
&lt;p&gt;The &lt;strong&gt;&quot;engine&quot;&lt;/strong&gt; module shares the same package name with the &lt;strong&gt;&quot;complete&quot;&lt;/strong&gt; build, to inherit the profile/device owner privilege. The &lt;strong&gt;&quot;mobile&quot;&lt;/strong&gt; and other modules can be installed and updated separately alongside &lt;strong&gt;&quot;engine&quot;&lt;/strong&gt; module for development convenience.&lt;/p&gt; 
&lt;h2&gt;Open API&lt;/h2&gt; 
&lt;p&gt;Due to the exclusivity nature, user could only use one Android DPC app at a time, and price of switching DPC is far too heavy. To encourage active exploration and broader development in the capabilities of DPC and therefore better benefit users, Island is devoted to build an open collaboration for community developers, either in development of this project or opening DPC capabilities to 3rd-party apps via open API. Island itself will not focus on the rich set of features, but mainly focuses on building a powerful &lt;strong&gt;engine&lt;/strong&gt; as an open platform for much more apps from the community.&lt;/p&gt; 
&lt;p&gt;Starting from the first public version of Island, all APIs are open to 3rd-party apps with the standard runtime-permission of Android as user authorization. Developers can start building apps now to take advantage of the Island open APIs.&lt;/p&gt; 
&lt;p&gt;The protocol of all APIs are well defined and maintained in the &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/oasisfeng/island/master/shared/src/main/java/com/oasisfeng/island/api/Api.java&quot;&gt;class &quot;Api&quot;&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt; 
&lt;h2&gt;Contribution&lt;/h2&gt; 
&lt;p&gt;If you found bugs, made minor improvements or translated the strings, please feel free to send us pull-requests.&lt;/p&gt; 
&lt;p&gt;If you are interested in improving the functionality of Island, please create an issue first to discuss your thoughts with us, we are open to collaboration in future development.&lt;/p&gt; 
&lt;p&gt;If you need new APIs for your apps to take advantage of the DPC capabilities, please feel free to create an issue to describe your app and its use case of those APIs. We are still in the early stage of building a rich set of open APIs.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/e6e25bdfcf59b904adfd6e4b301d76cf69418efe2fd0c12a9ac535a9a3d8e3a2/oasisfeng/island" medium="image" />
      
    </item>
    
    <item>
      <title>doocs/leetcode</title>
      <link>https://github.com/doocs/leetcode</link>
      <description>&lt;p&gt;🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer（第 2 版）》、《程序员面试金典（第 6 版）》题解&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/doocs/leetcode&quot;&gt;&lt;img src=&quot;https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/gh/doocs/leetcode%40main/images/doocs-leetcode.png&quot; alt=&quot;LeetCode-GitHub-Doocs&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://doocs.org&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/organization-join%20us-4051B5?style=flat-square&quot; alt=&quot;open-source-organization&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/doocs/leetcode&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/langs-Python%20%7C%20Java%20%7C%20C++%20%7C%20Go%20%7C%20TypeScript%20%7C%20Rust%20%7C%20...-red?style=flat-square&amp;amp;color=4051B5&quot; alt=&quot;languages&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/doocs/leetcode/raw/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/doocs/leetcode?color=4051B5&amp;amp;style=flat-square&quot; alt=&quot;LICENSE&quot; /&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href=&quot;https://github.com/doocs/leetcode/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/doocs/leetcode?color=4051B5&amp;amp;logo=github&amp;amp;style=flat-square&quot; alt=&quot;stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/doocs/leetcode/network/members&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/forks/doocs/leetcode?color=4051B5&amp;amp;logo=github&amp;amp;style=flat-square&quot; alt=&quot;forks&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/doocs-leetcode&quot; alt=&quot;backers on Open Collective&quot;&gt;&lt;img src=&quot;https://img.shields.io/opencollective/backers/doocs-leetcode?color=4051B5&amp;amp;style=flat-square&amp;amp;logo=open%20collective&amp;amp;logoColor=ffffff&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;h2&gt;介绍&lt;/h2&gt; 
&lt;p&gt;本项目包含 LeetCode、《剑指 Offer（第 2 版）》、《剑指 Offer（专项突击版）》、《程序员面试金典（第 6 版）》等题目的相关题解。所有题解均由多种编程语言实现，包括但不限于：Java、Python、C++、Go、TypeScript、Rust。我们正在全力更新，欢迎 Star 🌟 关注&lt;a href=&quot;https://github.com/doocs/leetcode&quot;&gt;本项目&lt;/a&gt;，获取项目最新动态。&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/README_EN.md&quot;&gt;English Version&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;站点&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://leetcode.doocs.org&quot;&gt;https://leetcode.doocs.org&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;算法全解&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/README.md&quot;&gt;LeetCode&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/CONTEST_README.md&quot;&gt;往期竞赛合集&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/lcof/README.md&quot;&gt;剑指 Offer（第 2 版）&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/lcof2/README.md&quot;&gt;剑指 Offer（专项突击版）&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/lcci/README.md&quot;&gt;程序员面试金典（第 6 版）&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;专项突破&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/JAVASCRIPT_README.md&quot;&gt;JavaScript 专项练习&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/DATABASE_README.md&quot;&gt;数据库专项练习&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;算法提升专题&lt;/h2&gt; 
&lt;h3&gt;1. 基础算法&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0000-0099/0034.Find%20First%20and%20Last%20Position%20of%20Element%20in%20Sorted%20Array/README.md&quot;&gt;在排序数组中查找元素的第一个和最后一个位置&lt;/a&gt; - &lt;code&gt;二分查找&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1800-1899/1870.Minimum%20Speed%20to%20Arrive%20on%20Time/README.md&quot;&gt;准时到达的列车最小时速&lt;/a&gt; - &lt;code&gt;二分查找&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1800-1899/1898.Maximum%20Number%20of%20Removable%20Characters/README.md&quot;&gt;可移除字符的最大数目&lt;/a&gt; - &lt;code&gt;二分查找&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0900-0999/0912.Sort%20an%20Array/README.md&quot;&gt;排序数组&lt;/a&gt; - &lt;code&gt;快速排序&lt;/code&gt;、&lt;code&gt;归并排序&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0400-0499/0415.Add%20Strings/README.md&quot;&gt;字符串相加&lt;/a&gt; - &lt;code&gt;高精度加法&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0000-0099/0043.Multiply%20Strings/README.md&quot;&gt;字符串相乘&lt;/a&gt; - &lt;code&gt;高精度乘法&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0303.Range%20Sum%20Query%20-%20Immutable/README.md&quot;&gt;区域和检索 - 数组不可变&lt;/a&gt; - &lt;code&gt;前缀和&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0304.Range%20Sum%20Query%202D%20-%20Immutable/README.md&quot;&gt;二维区域和检索 - 矩阵不可变&lt;/a&gt; - &lt;code&gt;二维前缀和&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0370.Range%20Addition/README.md&quot;&gt;区间加法&lt;/a&gt; - &lt;code&gt;前缀和&lt;/code&gt;、&lt;code&gt;差分&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/2100-2199/2132.Stamping%20the%20Grid/README.md&quot;&gt;用邮票贴满网格图&lt;/a&gt; - &lt;code&gt;二维前缀和&lt;/code&gt;、&lt;code&gt;二维差分&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0000-0099/0003.Longest%20Substring%20Without%20Repeating%20Characters/README.md&quot;&gt;无重复字符的最长子串&lt;/a&gt; - &lt;code&gt;双指针&lt;/code&gt;、&lt;code&gt;哈希表&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0713.Subarray%20Product%20Less%20Than%20K/README.md&quot;&gt;乘积小于 K 的子数组&lt;/a&gt; - &lt;code&gt;双指针&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0100-0199/0191.Number%20of%201%20Bits/README.md&quot;&gt;位 1 的个数&lt;/a&gt; - &lt;code&gt;位运算&lt;/code&gt;、&lt;code&gt;lowbit&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0000-0099/0056.Merge%20Intervals/README.md&quot;&gt;合并区间&lt;/a&gt; - &lt;code&gt;区间合并&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;2. 数据结构&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0707.Design%20Linked%20List/README.md&quot;&gt;设计链表&lt;/a&gt; - &lt;code&gt;单链表&lt;/code&gt;、&lt;code&gt;指针引用&lt;/code&gt;、&lt;code&gt;数组实现&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0400-0499/0496.Next%20Greater%20Element%20I/README.md&quot;&gt;下一个更大元素 I&lt;/a&gt; - &lt;code&gt;单调栈&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0739.Daily%20Temperatures/README.md&quot;&gt;每日温度&lt;/a&gt; - &lt;code&gt;单调栈&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0900-0999/0907.Sum%20of%20Subarray%20Minimums/README.md&quot;&gt;子数组的最小值之和&lt;/a&gt; - &lt;code&gt;单调栈&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0900-0999/0962.Maximum%20Width%20Ramp/README.md&quot;&gt;最大宽度坡&lt;/a&gt; - &lt;code&gt;单调栈&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0768.Max%20Chunks%20To%20Make%20Sorted%20II/README.md&quot;&gt;最多能完成排序的块 II&lt;/a&gt; - &lt;code&gt;单调栈&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/2100-2199/2104.Sum%20of%20Subarray%20Ranges/README.md&quot;&gt;子数组范围和&lt;/a&gt; - &lt;code&gt;单调栈&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1800-1899/1856.Maximum%20Subarray%20Min-Product/README.md&quot;&gt;子数组最小乘积的最大值&lt;/a&gt; - &lt;code&gt;单调栈&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0200-0299/0239.Sliding%20Window%20Maximum/README.md&quot;&gt;滑动窗口最大值&lt;/a&gt; - &lt;code&gt;单调队列&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1400-1499/1499.Max%20Value%20of%20Equation/README.md&quot;&gt;满足不等式的最大值&lt;/a&gt; - &lt;code&gt;单调队列&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0800-0899/0862.Shortest%20Subarray%20with%20Sum%20at%20Least%20K/README.md&quot;&gt;和至少为 K 的最短子数组&lt;/a&gt; - &lt;code&gt;单调队列&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1400-1499/1425.Constrained%20Subsequence%20Sum/README.md&quot;&gt;带限制的子序列和&lt;/a&gt; - &lt;code&gt;动态规划&lt;/code&gt;、&lt;code&gt;单调队列优化&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0200-0299/0291.Word%20Pattern%20II/README.md&quot;&gt;单词规律 II&lt;/a&gt; - &lt;code&gt;哈希表&lt;/code&gt;、&lt;code&gt;回溯&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0200-0299/0214.Shortest%20Palindrome/README.md&quot;&gt;最短回文串&lt;/a&gt; - &lt;code&gt;字符串哈希&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0336.Palindrome%20Pairs/README.md&quot;&gt;回文对&lt;/a&gt; - &lt;code&gt;字符串哈希&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1000-1099/1044.Longest%20Duplicate%20Substring/README.md&quot;&gt;最长重复子串&lt;/a&gt; - &lt;code&gt;字符串哈希&lt;/code&gt;、&lt;code&gt;二分查找&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1300-1399/1316.Distinct%20Echo%20Substrings/README.md&quot;&gt;不同的循环子字符串&lt;/a&gt; - &lt;code&gt;字符串哈希&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;3. 搜索&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0733.Flood%20Fill/README.md&quot;&gt;图像渲染&lt;/a&gt;- &lt;code&gt;BFS&lt;/code&gt;、&lt;code&gt;DFS&lt;/code&gt;、&lt;code&gt;Flood Fill 算法&lt;/code&gt;、&lt;code&gt;连通性模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0200-0299/0200.Number%20of%20Islands/README.md&quot;&gt;岛屿数量&lt;/a&gt; - &lt;code&gt;BFS&lt;/code&gt;、&lt;code&gt;Flood Fill 算法&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0500-0599/0542.01%20Matrix/README.md&quot;&gt;01 矩阵&lt;/a&gt; - &lt;code&gt;多源 BFS&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1700-1799/1765.Map%20of%20Highest%20Peak/README.md&quot;&gt;地图中的最高点&lt;/a&gt; - &lt;code&gt;多源 BFS&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1100-1199/1197.Minimum%20Knight%20Moves/README.md&quot;&gt;进击的骑士&lt;/a&gt; - &lt;code&gt;BFS&lt;/code&gt;、&lt;code&gt;最短路模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1000-1099/1091.Shortest%20Path%20in%20Binary%20Matrix/README.md&quot;&gt;二进制矩阵中的最短路径&lt;/a&gt; - &lt;code&gt;BFS&lt;/code&gt;、&lt;code&gt;最短路模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1900-1999/1926.Nearest%20Exit%20from%20Entrance%20in%20Maze/README.md&quot;&gt;迷宫中离入口最近的出口&lt;/a&gt; - &lt;code&gt;BFS&lt;/code&gt;、&lt;code&gt;最短路模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1200-1299/1293.Shortest%20Path%20in%20a%20Grid%20with%20Obstacles%20Elimination/README.md&quot;&gt;网格中的最短路径&lt;/a&gt; - &lt;code&gt;BFS&lt;/code&gt;、&lt;code&gt;最短路模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0752.Open%20the%20Lock/README.md&quot;&gt;打开转盘锁&lt;/a&gt; - &lt;code&gt;最小步数模型&lt;/code&gt;、&lt;code&gt;双向 BFS&lt;/code&gt;、&lt;code&gt;A* 算法&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0100-0199/0127.Word%20Ladder/README.md&quot;&gt;单词接龙&lt;/a&gt; - &lt;code&gt;最小步数模型&lt;/code&gt;、&lt;code&gt;双向 BFS&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/2000-2099/2059.Minimum%20Operations%20to%20Convert%20Number/README.md&quot;&gt;转化数字的最小运算数&lt;/a&gt; - &lt;code&gt;最小步数模型&lt;/code&gt;、&lt;code&gt;双向 BFS&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0773.Sliding%20Puzzle/README.md&quot;&gt;滑动谜题&lt;/a&gt; - &lt;code&gt;BFS&lt;/code&gt;、&lt;code&gt;最小步数模型&lt;/code&gt;、&lt;code&gt;A* 算法&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0800-0899/0847.Shortest%20Path%20Visiting%20All%20Nodes/README.md&quot;&gt;访问所有节点的最短路径&lt;/a&gt; - &lt;code&gt;BFS&lt;/code&gt;、&lt;code&gt;最小步数模型&lt;/code&gt;、&lt;code&gt;A* 算法&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0600-0699/0675.Cut%20Off%20Trees%20for%20Golf%20Event/README.md&quot;&gt;为高尔夫比赛砍树&lt;/a&gt; - &lt;code&gt;BFS&lt;/code&gt;、&lt;code&gt;A* 算法&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1300-1399/1368.Minimum%20Cost%20to%20Make%20at%20Least%20One%20Valid%20Path%20in%20a%20Grid/README.md&quot;&gt;使网格图至少有一条有效路径的最小代价&lt;/a&gt; - &lt;code&gt;双端队列 BFS&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/2200-2299/2290.Minimum%20Obstacle%20Removal%20to%20Reach%20Corner/README.md&quot;&gt;到达角落需要移除障碍物的最小数目&lt;/a&gt; - &lt;code&gt;双端队列 BFS&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0400-0499/0490.The%20Maze/README.md&quot;&gt;迷宫&lt;/a&gt; - &lt;code&gt;DFS&lt;/code&gt;、&lt;code&gt;连通性模型&lt;/code&gt;、&lt;code&gt;Flood Fill 算法&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0000-0099/0079.Word%20Search/README.md&quot;&gt;单词搜索&lt;/a&gt; - &lt;code&gt;DFS&lt;/code&gt;、&lt;code&gt;搜索顺序&lt;/code&gt;、&lt;code&gt;回溯&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1200-1299/1219.Path%20with%20Maximum%20Gold/README.md&quot;&gt;黄金矿工&lt;/a&gt; - &lt;code&gt;DFS&lt;/code&gt;、&lt;code&gt;搜索顺序&lt;/code&gt;、&lt;code&gt;回溯&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0400-0499/0473.Matchsticks%20to%20Square/README.md&quot;&gt;火柴拼正方形&lt;/a&gt; - &lt;code&gt;DFS&lt;/code&gt;、&lt;code&gt;回溯&lt;/code&gt;、&lt;code&gt;剪枝&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0600-0699/0698.Partition%20to%20K%20Equal%20Sum%20Subsets/README.md&quot;&gt;划分为 k 个相等的子集&lt;/a&gt; - &lt;code&gt;DFS&lt;/code&gt;、&lt;code&gt;回溯&lt;/code&gt;、&lt;code&gt;剪枝&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1700-1799/1723.Find%20Minimum%20Time%20to%20Finish%20All%20Jobs/README.md&quot;&gt;完成所有工作的最短时间&lt;/a&gt; - &lt;code&gt;DFS&lt;/code&gt;、&lt;code&gt;回溯&lt;/code&gt;、&lt;code&gt;剪枝&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/2300-2399/2305.Fair%20Distribution%20of%20Cookies/README.md&quot;&gt;公平分发饼干&lt;/a&gt; - &lt;code&gt;DFS&lt;/code&gt;、&lt;code&gt;回溯&lt;/code&gt;、&lt;code&gt;剪枝&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0329.Longest%20Increasing%20Path%20in%20a%20Matrix/README.md&quot;&gt;矩阵中的最长递增路径&lt;/a&gt; - &lt;code&gt;DFS&lt;/code&gt;、&lt;code&gt;记忆化搜索&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/2300-2399/2328.Number%20of%20Increasing%20Paths%20in%20a%20Grid/README.md&quot;&gt;网格图中递增路径的数目&lt;/a&gt; - &lt;code&gt;DFS&lt;/code&gt;、&lt;code&gt;记忆化搜索&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0200-0299/0294.Flip%20Game%20II/README.md&quot;&gt;翻转游戏 II&lt;/a&gt; - &lt;code&gt;DFS&lt;/code&gt;、&lt;code&gt;状态压缩&lt;/code&gt;、&lt;code&gt;记忆化搜索&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1500-1599/1575.Count%20All%20Possible%20Routes/README.md&quot;&gt;统计所有可行路径&lt;/a&gt; - &lt;code&gt;DFS&lt;/code&gt;、&lt;code&gt;记忆化搜索&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1400-1499/1444.Number%20of%20Ways%20of%20Cutting%20a%20Pizza/README.md&quot;&gt;切披萨的方案数&lt;/a&gt; - &lt;code&gt;DFS&lt;/code&gt;、&lt;code&gt;记忆化搜索&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- DFS 待补充 --&gt; 
&lt;h3&gt;4. 动态规划（DP）&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0100-0199/0118.Pascal&#39;s%20Triangle/README.md&quot;&gt;杨辉三角&lt;/a&gt; - &lt;code&gt;线性 DP&lt;/code&gt;、&lt;code&gt;数字三角形模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0000-0099/0064.Minimum%20Path%20Sum/README.md&quot;&gt;最小路径和&lt;/a&gt; - &lt;code&gt;线性 DP&lt;/code&gt;、&lt;code&gt;数字三角形模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0741.Cherry%20Pickup/README.md&quot;&gt;摘樱桃&lt;/a&gt; - &lt;code&gt;线性 DP&lt;/code&gt;、&lt;code&gt;数字三角形模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1400-1499/1463.Cherry%20Pickup%20II/README.md&quot;&gt;摘樱桃 II&lt;/a&gt; - &lt;code&gt;线性 DP&lt;/code&gt;、&lt;code&gt;数字三角形模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0300.Longest%20Increasing%20Subsequence/README.md&quot;&gt;最长递增子序列&lt;/a&gt; - &lt;code&gt;线性 DP&lt;/code&gt;、&lt;code&gt;最长上升子序列模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0400-0499/0435.Non-overlapping%20Intervals/README.md&quot;&gt;无重叠区间&lt;/a&gt; - &lt;code&gt;线性 DP&lt;/code&gt;、&lt;code&gt;最长上升子序列模型&lt;/code&gt;、&lt;code&gt;贪心优化&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0900-0999/0960.Delete%20Columns%20to%20Make%20Sorted%20III/README.md&quot;&gt;删列造序 III&lt;/a&gt; - &lt;code&gt;线性 DP&lt;/code&gt;、&lt;code&gt;最长上升子序列模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0354.Russian%20Doll%20Envelopes/README.md&quot;&gt;俄罗斯套娃信封问题&lt;/a&gt; - &lt;code&gt;线性 DP&lt;/code&gt;、&lt;code&gt;最长上升子序列模型&lt;/code&gt;、&lt;code&gt;贪心优化&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1600-1699/1691.Maximum%20Height%20by%20Stacking%20Cuboids/README.md&quot;&gt;堆叠长方体的最大高度&lt;/a&gt; - &lt;code&gt;排序&lt;/code&gt;、&lt;code&gt;线性 DP&lt;/code&gt;、&lt;code&gt;最长上升子序列模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1600-1699/1626.Best%20Team%20With%20No%20Conflicts/README.md&quot;&gt;无矛盾的最佳球队&lt;/a&gt; - &lt;code&gt;排序&lt;/code&gt;、&lt;code&gt;线性 DP&lt;/code&gt;、&lt;code&gt;最长上升子序列模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1100-1199/1143.Longest%20Common%20Subsequence/README.md&quot;&gt;最长公共子序列&lt;/a&gt; - &lt;code&gt;线性 DP&lt;/code&gt;、&lt;code&gt;最长公共子序列模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0712.Minimum%20ASCII%20Delete%20Sum%20for%20Two%20Strings/README.md&quot;&gt;两个字符串的最小 ASCII 删除和&lt;/a&gt; - &lt;code&gt;线性 DP&lt;/code&gt;、&lt;code&gt;最长公共子序列模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0500-0599/0583.Delete%20Operation%20for%20Two%20Strings/README.md&quot;&gt;两个字符串的删除操作&lt;/a&gt; - &lt;code&gt;线性 DP&lt;/code&gt;、&lt;code&gt;最长公共子序列模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0400-0499/0494.Target%20Sum/README.md&quot;&gt;目标和&lt;/a&gt; - &lt;code&gt;0-1 背包问题&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0400-0499/0416.Partition%20Equal%20Subset%20Sum/README.md&quot;&gt;分割等和子集&lt;/a&gt; - &lt;code&gt;0-1 背包问题&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1000-1099/1049.Last%20Stone%20Weight%20II/README.md&quot;&gt;最后一块石头的重量 II&lt;/a&gt; - &lt;code&gt;0-1 背包问题&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0322.Coin%20Change/README.md&quot;&gt;零钱兑换&lt;/a&gt; - &lt;code&gt;完全背包问题&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0377.Combination%20Sum%20IV/README.md&quot;&gt;组合总和 Ⅳ&lt;/a&gt; - &lt;code&gt;完全背包问题&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/2200-2299/2218.Maximum%20Value%20of%20K%20Coins%20From%20Piles/README.md&quot;&gt;从栈中取出 K 个硬币的最大面值和&lt;/a&gt; - &lt;code&gt;分组背包问题&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0200-0299/0233.Number%20of%20Digit%20One/README.md&quot;&gt;数字 1 的个数&lt;/a&gt; - &lt;code&gt;数位 DP&lt;/code&gt;、&lt;code&gt;记忆化搜索&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0357.Count%20Numbers%20with%20Unique%20Digits/README.md&quot;&gt;统计各位数字都不同的数字个数&lt;/a&gt; - &lt;code&gt;数位 DP&lt;/code&gt;、&lt;code&gt;记忆化搜索&lt;/code&gt;、&lt;code&gt;状态压缩&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0600-0699/0600.Non-negative%20Integers%20without%20Consecutive%20Ones/README.md&quot;&gt;不含连续 1 的非负整数&lt;/a&gt; - &lt;code&gt;数位 DP&lt;/code&gt;、&lt;code&gt;记忆化搜索&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0788.Rotated%20Digits/README.md&quot;&gt;旋转数字&lt;/a&gt; - &lt;code&gt;数位 DP&lt;/code&gt;、&lt;code&gt;记忆化搜索&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0900-0999/0902.Numbers%20At%20Most%20N%20Given%20Digit%20Set/README.md&quot;&gt;最大为 N 的数字组合&lt;/a&gt; - &lt;code&gt;数位 DP&lt;/code&gt;、&lt;code&gt;记忆化搜索&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/2300-2399/2376.Count%20Special%20Integers/README.md&quot;&gt;统计特殊整数&lt;/a&gt; - &lt;code&gt;数位 DP&lt;/code&gt;、&lt;code&gt;记忆化搜索&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- 背包问题、状态机模型、状压DP、区间DP、树形DP、数位DP 待补充 --&gt; 
&lt;h3&gt;5. 高级数据结构&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1500-1599/1559.Detect%20Cycles%20in%202D%20Grid/README.md&quot;&gt;二维网格图中探测环&lt;/a&gt; - &lt;code&gt;并查集&lt;/code&gt;、&lt;code&gt;检测环&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0399.Evaluate%20Division/README.md&quot;&gt;除法求值&lt;/a&gt; - &lt;code&gt;并查集&lt;/code&gt;、&lt;code&gt;权值维护&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0900-0999/0959.Regions%20Cut%20By%20Slashes/README.md&quot;&gt;由斜杠划分区域&lt;/a&gt; - &lt;code&gt;并查集&lt;/code&gt;、&lt;code&gt;连通分量个数&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0778.Swim%20in%20Rising%20Water/README.md&quot;&gt;水位上升的泳池中游泳&lt;/a&gt; - &lt;code&gt;并查集&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1200-1299/1202.Smallest%20String%20With%20Swaps/README.md&quot;&gt;交换字符串中的元素&lt;/a&gt; - &lt;code&gt;并查集&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0800-0899/0803.Bricks%20Falling%20When%20Hit/README.md&quot;&gt;打砖块&lt;/a&gt; - &lt;code&gt;并查集&lt;/code&gt;、&lt;code&gt;逆向思维&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0900-0999/0928.Minimize%20Malware%20Spread%20II/README.md&quot;&gt;尽量减少恶意软件的传播 II&lt;/a&gt; - &lt;code&gt;并查集&lt;/code&gt;、&lt;code&gt;逆向思维&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1600-1699/1697.Checking%20Existence%20of%20Edge%20Length%20Limited%20Paths/README.md&quot;&gt;检查边长度限制的路径是否存在&lt;/a&gt; - &lt;code&gt;并查集&lt;/code&gt;、&lt;code&gt;离线思维&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1500-1599/1579.Remove%20Max%20Number%20of%20Edges%20to%20Keep%20Graph%20Fully%20Traversable/README.md&quot;&gt;保证图可完全遍历&lt;/a&gt; - &lt;code&gt;双并查集&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0307.Range%20Sum%20Query%20-%20Mutable/README.md&quot;&gt;区域和检索 - 数组可修改&lt;/a&gt; - &lt;code&gt;树状数组&lt;/code&gt;、&lt;code&gt;线段树&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1600-1699/1649.Create%20Sorted%20Array%20through%20Instructions/README.md&quot;&gt;通过指令创建有序数组&lt;/a&gt; - &lt;code&gt;树状数组&lt;/code&gt;、&lt;code&gt;线段树&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/2100-2199/2179.Count%20Good%20Triplets%20in%20an%20Array/README.md&quot;&gt;统计数组中好三元组数目&lt;/a&gt; - &lt;code&gt;树状数组&lt;/code&gt;、&lt;code&gt;线段树&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1500-1599/1505.Minimum%20Possible%20Integer%20After%20at%20Most%20K%20Adjacent%20Swaps%20On%20Digits/README.md&quot;&gt;最多 K 次交换相邻数位后得到的最小整数&lt;/a&gt; - &lt;code&gt;树状数组&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0308.Range%20Sum%20Query%202D%20-%20Mutable/README.md&quot;&gt;二维区域和检索 - 可变&lt;/a&gt; - &lt;code&gt;二维树状数组&lt;/code&gt;、&lt;code&gt;线段树&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0315.Count%20of%20Smaller%20Numbers%20After%20Self/README.md&quot;&gt;计算右侧小于当前元素的个数&lt;/a&gt; - &lt;code&gt;离散化树状数组&lt;/code&gt;、&lt;code&gt;线段树&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0300-0399/0327.Count%20of%20Range%20Sum/README.md&quot;&gt;区间和的个数&lt;/a&gt; - &lt;code&gt;离散化树状数组&lt;/code&gt;、&lt;code&gt;线段树&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0400-0499/0493.Reverse%20Pairs/README.md&quot;&gt;翻转对&lt;/a&gt; - &lt;code&gt;离散化树状数组&lt;/code&gt;、&lt;code&gt;分治归并&lt;/code&gt;、&lt;code&gt;线段树&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0600-0699/0673.Number%20of%20Longest%20Increasing%20Subsequence/README.md&quot;&gt;最长递增子序列的个数&lt;/a&gt; - &lt;code&gt;离散化树状数组&lt;/code&gt;、&lt;code&gt;区间最值问题&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1600-1699/1622.Fancy%20Sequence/README.md&quot;&gt;奇妙序列&lt;/a&gt; - &lt;code&gt;动态开点线段树&lt;/code&gt;、&lt;code&gt;懒标记&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0715.Range%20Module/README.md&quot;&gt;Range 模块&lt;/a&gt; - &lt;code&gt;动态开点线段树&lt;/code&gt;、&lt;code&gt;懒标记&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0732.My%20Calendar%20III/README.md&quot;&gt;我的日程安排表 III&lt;/a&gt; - &lt;code&gt;动态开点线段树&lt;/code&gt;、&lt;code&gt;懒标记&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/2100-2199/2158.Amount%20of%20New%20Area%20Painted%20Each%20Day/README.md&quot;&gt;每天绘制的新区域数量&lt;/a&gt; - &lt;code&gt;动态开点线段树&lt;/code&gt;、&lt;code&gt;懒标记&lt;/code&gt;、&lt;code&gt;区间染色模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/2200-2299/2213.Longest%20Substring%20of%20One%20Repeating%20Character/README.md&quot;&gt;由单个字符重复的最长子字符串&lt;/a&gt; - &lt;code&gt;线段树&lt;/code&gt;、&lt;code&gt;动态最大子段和模型&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0800-0899/0850.Rectangle%20Area%20II/README.md&quot;&gt;矩形面积 II&lt;/a&gt; - &lt;code&gt;线段树&lt;/code&gt;、&lt;code&gt;离散化&lt;/code&gt;、&lt;code&gt;扫描线&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;6. 图论&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0743.Network%20Delay%20Time/README.md&quot;&gt;网络延迟时间&lt;/a&gt; - &lt;code&gt;最短路&lt;/code&gt;、&lt;code&gt;Dijkstra 算法&lt;/code&gt;、&lt;code&gt;Bellman Ford 算法&lt;/code&gt;、&lt;code&gt;SPFA 算法&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/2200-2299/2203.Minimum%20Weighted%20Subgraph%20With%20the%20Required%20Paths/README.md&quot;&gt;得到要求路径的最小带权子图&lt;/a&gt; - &lt;code&gt;最短路&lt;/code&gt;、&lt;code&gt;Dijkstra 算法&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1500-1599/1584.Min%20Cost%20to%20Connect%20All%20Points/README.md&quot;&gt;连接所有点的最小费用&lt;/a&gt; - &lt;code&gt;最小生成树&lt;/code&gt;、&lt;code&gt;Prim 算法&lt;/code&gt;、&lt;code&gt;Kruskal 算法&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1100-1199/1135.Connecting%20Cities%20With%20Minimum%20Cost/README.md&quot;&gt;最低成本联通所有城市&lt;/a&gt; - &lt;code&gt;最小生成树&lt;/code&gt;、&lt;code&gt;Kruskal 算法&lt;/code&gt;、&lt;code&gt;并查集&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1100-1199/1168.Optimize%20Water%20Distribution%20in%20a%20Village/README.md&quot;&gt;水资源分配优化&lt;/a&gt; - &lt;code&gt;最小生成树&lt;/code&gt;、&lt;code&gt;Kruskal 算法&lt;/code&gt;、&lt;code&gt;并查集&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/1400-1499/1489.Find%20Critical%20and%20Pseudo-Critical%20Edges%20in%20Minimum%20Spanning%20Tree/README.md&quot;&gt;找到最小生成树里的关键边和伪关键边&lt;/a&gt; - &lt;code&gt;最小生成树&lt;/code&gt;、&lt;code&gt;Kruskal 算法&lt;/code&gt;、&lt;code&gt;并查集&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/solution/0700-0799/0785.Is%20Graph%20Bipartite/README.md&quot;&gt;判断二分图&lt;/a&gt; - &lt;code&gt;染色法判定二分图&lt;/code&gt;、&lt;code&gt;并查集&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;加入我们&lt;/h2&gt; 
&lt;p&gt;刷编程题的最大好处就是可以锻炼解决问题的思维能力。相信我，「如何去思考」​ 本身也是一项需要不断学习和练习的技能。非常感谢前微软工程师、现蚂蚁金服技术专家 &lt;a href=&quot;https://github.com/kfstorm&quot;&gt;@kfstorm&lt;/a&gt; 贡献了本项目的所有 &lt;a href=&quot;https://github.com/doocs/leetcode/pull/245&quot;&gt;C# 题解&lt;/a&gt;。&lt;/p&gt; 
&lt;p&gt;如果你对本项目感兴趣，并且希望加入我们刷题小分队，欢迎随时提交 &lt;a href=&quot;https://github.com/doocs/leetcode/pulls&quot;&gt;PR&lt;/a&gt;。请参考如下步骤：&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;将本项目 fork 到你的个人 GitHub 帐户，然后 clone 到你的本地机器；&lt;/li&gt; 
 &lt;li&gt;进入 leetcode 目录，切换到一个新的分支；&lt;/li&gt; 
 &lt;li&gt;对项目做出一些变更，然后使用 git add、commit、push 等命令将你的本地变更提交到你的远程 GitHub 仓库；&lt;/li&gt; 
 &lt;li&gt;将你的变更以 PR 的形式提交过来，项目的维护人员会在第一时间对你的变更进行 review！&lt;/li&gt; 
 &lt;li&gt;你也可以参考帮助文档 &lt;a href=&quot;https://help.github.com/cn&quot;&gt;https://help.github.com/cn&lt;/a&gt; 了解更多细节。&lt;/li&gt; 
&lt;/ol&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/gh/doocs/leetcode%40main/images/pr.svg?sanitize=true&quot; width=&quot;320px&quot; /&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/codespaces/new?hide_repo_select=true&amp;amp;ref=main&amp;amp;repo=149001365&amp;amp;machine=basicLinux32gb&amp;amp;location=SoutheastAsia&quot;&gt;&lt;img src=&quot;https://github.com/codespaces/badge.svg?sanitize=true&quot; alt=&quot;Open in GitHub Codespaces&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Stars 趋势&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/doocs/leetcode/stargazers&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/doocs/leetcode/main/images/starcharts.svg?sanitize=true&quot; alt=&quot;Stargazers over time&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;a href=&quot;https://next.ossinsight.io/widgets/official/analyze-repo-stars-map?repo_id=149001365&amp;amp;activity=stars&quot; target=&quot;_blank&quot; style=&quot;display: block&quot; align=&quot;center&quot;&gt; 
 &lt;picture&gt; 
  &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://next.ossinsight.io/widgets/official/analyze-repo-stars-map/thumbnail.png?repo_id=149001365&amp;amp;activity=stars&amp;amp;image_size=auto&amp;amp;color_scheme=dark&quot; width=&quot;721&quot; height=&quot;auto&quot; /&gt; 
  &lt;img alt=&quot;Star Geographical Distribution of doocs/leetcode&quot; src=&quot;https://next.ossinsight.io/widgets/official/analyze-repo-stars-map/thumbnail.png?repo_id=149001365&amp;amp;activity=stars&amp;amp;image_size=auto&amp;amp;color_scheme=light&quot; width=&quot;721&quot; height=&quot;auto&quot; /&gt; 
 &lt;/picture&gt; &lt;/a&gt; 
&lt;h2&gt;贡献者&lt;/h2&gt; 
&lt;p&gt;感谢以下所有朋友对本项目的贡献！&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/doocs/leetcode/graphs/contributors&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://contrib.rocks/image?repo=doocs/leetcode&amp;amp;max=500&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;版权&lt;/h2&gt; 
&lt;p&gt;本项目著作权归 &lt;a href=&quot;https://github.com/doocs&quot;&gt;GitHub 开源社区 Doocs&lt;/a&gt; 所有，商业转载请联系 @yanglbme 获得授权，非商业转载请注明出处。&lt;/p&gt; 
&lt;h2&gt;联系我们 &amp;amp; 支持项目&lt;/h2&gt; 
&lt;p&gt;欢迎各位小伙伴们添加 @yanglbme 的个人微信（微信号：YLB0109），备注 「&lt;strong&gt;leetcode&lt;/strong&gt;」。后续我们会创建算法、技术相关的交流群，大家一起交流学习，分享经验，共同进步。&lt;/p&gt; 
&lt;p&gt;如果你觉得这个项目对你有帮助，也欢迎通过微信扫码赞赏我们 ☕️ ～&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;img src=&quot;https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/gh/doocs/images/qrcode-for-yanglbme.png&quot; width=&quot;260px&quot; align=&quot;center&quot; /&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;img src=&quot;https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/gh/doocs/leetcode%40main/images/support1.jpg&quot; width=&quot;260px&quot; align=&quot;center&quot; /&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
&lt;/table&gt; 
&lt;h2&gt;许可证&lt;/h2&gt; 
&lt;p&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-sa/4.0/&quot;&gt;知识共享 版权归属-相同方式共享 4.0 国际 公共许可证&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/149001365/edbec400-5dfe-11ea-9642-9206a3606bca" medium="image" />
      
    </item>
    
  </channel>
</rss>
