# `GSNode setAttribute:forKey:`

*Instance Method*

Sets or removes an attribute.

## Declaration

```swift
func setAttribute(_ value: Any?, forKey key: GSShapeKey)
```

```objc
- (void) setAttribute:(id) value forKey:(GSShapeKey) key;
```

```python
setAttribute_forKey_(value: object, key: GSShapeKey)
```

## Parameters

- `value` — A value that supports property-list encoding, or `nil` to remove the attribute.

## Discussion

Setting an attribute registers undo and notifies the path. Passing `nil` as the value removes the attribute.

## See Also

### Attributes

- [`GSNode.attributes`](/Core/GlyphsCore/GSNode/attributes) — Additional values associated with the node.
- [`GSNode.countOfAttributes`](/Core/GlyphsCore/GSNode/countOfAttributes) — The number of attributes.
- [`GSNode attributeForKey:`](/Core/GlyphsCore/GSNode/attributeForKey:) — The value for an attribute key, or `nil` if no value is set.
- [`GSNode setAttributes:format:`](/Core/GlyphsCore/GSNode/setAttributes:format:) — Replaces all attributes using values encoded for a file format version.
- [`GSNode setAttributesFast:format:`](/Core/GlyphsCore/GSNode/setAttributesFast:format:) — Replaces all attributes without registering undo or notifying the path.
- [`GSNode removeAttributeForKey:`](/Core/GlyphsCore/GSNode/removeAttributeForKey:) — Removes an attribute.

