diff --git a/modules/form_decorator_example/src/FormDecorator/DependencyInjection.php b/modules/form_decorator_example/src/FormDecorator/DependencyInjection.php
index 836ff8187ea7aa3cf2d72ba5a6275a7be57085d1..84638b0f75747446e3feb379f30142f2fe1653c5 100644
--- a/modules/form_decorator_example/src/FormDecorator/DependencyInjection.php
+++ b/modules/form_decorator_example/src/FormDecorator/DependencyInjection.php
@@ -9,15 +9,13 @@ use Drupal\form_decorator\FormDecoratorBase;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\form_decorator\Attribute\FormDecorator;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Adds dependency injection to the user login form.
- *
- * @FormDecorator(
- *   hook = "form_user_login_form_alter"
- * )
  */
+#[FormDecorator('form_user_login_form_alter')]
 final class DependencyInjection extends FormDecoratorBase implements ContainerFactoryPluginInterface {
 
   use StringTranslationTrait;
diff --git a/modules/form_decorator_example/src/FormDecorator/NodeCreatedDate.php b/modules/form_decorator_example/src/FormDecorator/NodeCreatedDate.php
index b475fcd7277d9157999ba9e1632145a36eb1742a..4b26adf64c06433469ce1a9d79df125d8517b90f 100644
--- a/modules/form_decorator_example/src/FormDecorator/NodeCreatedDate.php
+++ b/modules/form_decorator_example/src/FormDecorator/NodeCreatedDate.php
@@ -7,15 +7,13 @@ namespace Drupal\form_decorator_example\FormDecorator;
 use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\form_decorator\FormDecoratorBase;
+use Drupal\form_decorator\Attribute\FormDecorator;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 
 /**
  * Adds a created date picker to the node form.
- *
- * @FormDecorator(
- *   hook = "form_node_form_alter"
- * )
  */
+#[FormDecorator('form_node_form_alter')]
 final class NodeCreatedDate extends FormDecoratorBase {
 
   use StringTranslationTrait;
diff --git a/modules/form_decorator_example/src/FormDecorator/ValidateOnly.php b/modules/form_decorator_example/src/FormDecorator/ValidateOnly.php
index 4f35e16191924f52c5524bd83f43a342803f2061..430c4345307bb358f4f0d43fd14659f1aa1234f5 100644
--- a/modules/form_decorator_example/src/FormDecorator/ValidateOnly.php
+++ b/modules/form_decorator_example/src/FormDecorator/ValidateOnly.php
@@ -5,16 +5,14 @@ declare(strict_types=1);
 namespace Drupal\form_decorator_example\FormDecorator;
 
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\form_decorator\FormDecoratorBase;
+use Drupal\form_decorator\Attribute\FormDecorator;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 
 /**
  * Provides additional validation for the user registration form.
- *
- * @FormDecorator(
- *   hook = "form_user_register_form_alter"
- * )
  */
+#[FormDecorator('form_user_register_form_alter')]
 final class ValidateOnly extends FormDecoratorBase {
 
   use StringTranslationTrait;
diff --git a/src/Attribute/FormDecorator.php b/src/Attribute/FormDecorator.php
new file mode 100644
index 0000000000000000000000000000000000000000..e3136bb51da83e48525f31ac86b7b6aeb536a1e1
--- /dev/null
+++ b/src/Attribute/FormDecorator.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Drupal\form_decorator\Attribute;
+
+use Drupal\Component\Plugin\Attribute\Plugin;
+
+/**
+ * The FormDecorator attribute.
+ */
+#[\Attribute(\Attribute::TARGET_CLASS)]
+class FormDecorator extends Plugin {
+
+  /**
+   * Constructs a FormDecorator attribute.
+   *
+   * @param string $hook
+   *   The form alter hook.
+   */
+  public function __construct(
+    public readonly string $hook = '',
+  ) {}
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getId():string {
+    return $this->getClass();
+  }
+
+}
diff --git a/src/FormDecoratorPluginManager.php b/src/FormDecoratorPluginManager.php
index 8ffca4ce83dbbd206cf3f739954d72c24952f7f0..3f89280c40e81b3ec835c0cd59554c0b5fe36a09 100644
--- a/src/FormDecoratorPluginManager.php
+++ b/src/FormDecoratorPluginManager.php
@@ -7,7 +7,8 @@ namespace Drupal\form_decorator;
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Plugin\DefaultPluginManager;
 use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\form_decorator\Annotation\FormDecorator;
+use Drupal\form_decorator\Attribute\FormDecorator;
+use Drupal\form_decorator\Annotation\FormDecorator as FormDecoratorAnnotation;
 
 /**
  * FormDecorator plugin manager.
@@ -18,7 +19,7 @@ final class FormDecoratorPluginManager extends DefaultPluginManager {
    * Constructs a new \Drupal\form_decorator\FormDecoratorPluginManager object.
    */
   public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
-    parent::__construct('FormDecorator', $namespaces, $module_handler, FormDecoratorInterface::class, FormDecorator::class);
+    parent::__construct('FormDecorator', $namespaces, $module_handler, FormDecoratorInterface::class, FormDecorator::class, FormDecoratorAnnotation::class);
     $this->alterInfo('form_decorator_info');
     $this->setCacheBackend($cache_backend, 'form_decorator_plugins');
   }