[[contributing-to-logstash]]
== Contributing to Logstash

You can add your own input, codec, filter, or output plugins to Logstash. 

[float]
=== Adding plugins

Plugins can be developed and deployed independently of the Logstash
core. Here are some documents to guide you through the process of coding and
deploying your own plugin:

* <<plugin-generator,Generating a New Plugin>>
* <<input-new-plugin,How to write a Logstash input plugin>>
* <<codec-new-plugin,How to write a Logstash codec plugin>>
* <<filter-new-plugin,How to write a Logstash filter plugin>>
* <<output-new-plugin,How to write a Logstash output plugin>>
* <<plugin-doc,Documenting your plugin>>
* <<contributing-patch-plugin,Contributing a Patch to a Logstash Plugin>>
* <<community-maintainer,Community Maintainer's Guide>>
* <<submitting-plugin,Submitting a Plugin>>

[float]
==== Plugin Shutdown APIs

You have three options for shutting down a plugin: `stop`, `stop?`, and `close`.

* Call the `stop` method from outside the plugin thread. This method signals the plugin to stop.
* The `stop?` method returns `true` when the `stop` method has already been called for that plugin.
* The `close` method performs final bookkeeping and cleanup after the plugin's `run` method and the plugin's thread both
exit. The `close` method is a a new name for the method known as `teardown` in previous versions of Logstash.

The `shutdown`, `finished`, `finished?`, `running?`, and `terminating?` methods are redundant and no longer present in the
Plugin Base class.

Sample code for the plugin shutdown APIs is https://github.com/logstash-plugins/logstash-input-example/blob/master/lib/logstash/inputs/example.rb[available].

[float]
=== Extending Logstash core

We also welcome contributions and bug fixes to the Logstash core feature set.

Please read through our
https://github.com/elastic/logstash/blob/master/CONTRIBUTING.md[contribution]
guide, and the Logstash
https://github.com/elastic/logstash/blob/master/README.md[readme]
document.
