> ## Documentation Index
> Fetch the complete documentation index at: https://neo.tvk.company/llms.txt
> Use this file to discover all available pages before exploring further.

# Config

> Global Neo framework configuration seeded at app startup, including button haptic defaults.

`NeoConfig` holds framework-wide settings that apply before the first frame. Pass it to [`NeoApp.config`](/utilities/app), or update it at runtime through `neoConfigProvider`.

## Example

<CodeGroup>
  ```dart Seed via NeoApp lines theme={null}
  NeoApp(
    title: "My Neo App",
    config: NeoConfig(
      enableButtonHaptics: false,
    ),
    routerConfig: neoRouter.config(),
  ),
  ```

  ```dart Update at Runtime lines theme={null}
  ref.read(neoConfigProvider.notifier).updateConfig(
    NeoConfig(enableButtonHaptics: false),
  );
  ```
</CodeGroup>

## Properties

### Content

<ParamField path="enableButtonHaptics" type="bool" default="true">
  When `true`, [`NeoButton`](/widgets/buttons/button) plays light haptic on press down and heavy on release, unless overridden by `NeoButton.enableHaptic`. Ignored for hold-to-confirm buttons.
</ParamField>

## Provider

<ParamField path="neoConfigProvider" type="NotifierProvider">
  Exposes the current `NeoConfig`. Watch it for reactive updates, or call `updateConfig` on the notifier to change settings at runtime.
</ParamField>

## Best Practices

* Prefer seeding config through [`NeoApp.config`](/utilities/app) so the first frame uses your intended defaults.
* Use `NeoButton.enableHaptic` for one-off exceptions instead of flipping the global flag.

## Integration Notes

* [`NeoApp`](/utilities/app) overrides `neoConfigProvider` with your seeded config so there is no post-frame flash.
* Hold-to-confirm buttons manage their own feedback and ignore both `enableButtonHaptics` and `enableHaptic`.
