Files
nomad/website/content/plugins/author/index.mdx
Aimee Ukasick d305f32017 Docs: Plugin authoring guide (#26395)
* create plugin author guide; remove concepts/plugins

* style guide; update links

* update cni redirect

* move host-volume plugin to /plugins/. Add arch host volume content.

* Apply Jeff's style guide updates

Co-authored-by: Jeff Boruszak <104028618+boruszak@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Jeff Boruszak <104028618+boruszak@users.noreply.github.com>

* Create Base plugin API section, link to BasePlugin interface

---------

Co-authored-by: Jeff Boruszak <104028618+boruszak@users.noreply.github.com>
2025-08-08 14:55:58 -05:00

36 lines
1.5 KiB
Plaintext

---
layout: docs
page_title: Nomad plugin authoring guide
description: |-
Expand Nomad functionality by authoring your own plugins.
---
# Nomad plugin authoring guide
Nomad implements a plugin framework that lets you extend the functionality of
some components within Nomad. The design of the plugin system is inspired by the
lessons learned from plugin systems implemented in other HashiCorp products such
as Terraform and Vault.
The following components are currently pluggable within Nomad:
- [Device](/nomad/plugins/author/device): Extend workload functionality with a
custom hardware device.
- [Host volume](/nomad/plugins/author/host-volume): Extend workload storage
functionality with a plugin specific to your local storage environment.
- [Task driver](/nomad/plugins/author/task-driver): Extend task execution
functionality with a custom task driver.
## Architecture
The Nomad task driver and device plugin framework uses the [go-plugin][goplugin]
project to expose a language-independent plugin interface. Plugins implement a
set of gRPC services and methods that Nomad manages by running the plugin and
calling the implemented RPCs. As a result, plugins are free to be implemented
in the author's language of choice. To facilitate plugin development, a set of
Go interfaces and structs exist for each plugin type that abstracts away
go-plugin and the gRPC interface. The guides in this documentation reference
these abstractions for ease of use.
[goplugin]: https://github.com/hashicorp/go-plugin