---
layout: docs
page_title: Plugins
description: Learn about how external plugins work in the Nomad Autoscaler.
---

# Plugins

The Nomad Autoscaler uses a plugin framework which allows users to extend its
functionality. The design of the plugin system is inspired by the
[plugin system][nomad_plugin_system] used in Nomad for task drivers and
devices.

The following components are currently pluggable within the Nomad Autoscaler:

- [APMs](/tools/autoscaling/internals/plugins/apm)
- [Strategies](/tools/autoscaling/internals/plugins/strategy)
- [Targets](/tools/autoscaling/internals/plugins/target)

In addition, each plugin implements a [base](/tools/autoscaling/internals/plugins/base)
plugin functionality.

# Architecture

The Nomad Autoscaler plugin framework uses the [go-plugin][goplugin] project to expose
a language-independent plugin interface. Plugins implement a set of gRPC
services and methods which the Autoscaler agent manages by running the plugin
and calling the implemented RPCs. This means that plugins are free to be
implemented in the author's language of choice.

To make plugin development easier, a set of Go interfaces and structs exist for
each plugin type that abstract the `go-plugin` and gRPC interfaces. The guides in
this documentation reference these abstractions for ease of use.

The existing plugins can serve as examples; in addition, no-op external plugins
are available in the [autoscaler repo][noop_plugins].

[goplugin]: https://github.com/hashicorp/go-plugin
[nomad_plugin_system]: /docs/internals/plugins
[noop_plugins]: https://github.com/hashicorp/nomad-autoscaler/tree/main/plugins/test
