# Upgrading io-notifier-twilio

## 3.1.5 → 4.0.0 — the io 6 line

Breaking only in what it requires. **No class in this package moved, and no
signature changed** — the namespace was already `Apexl\Io\NotifierTwilio\` and
the layout already `src/`, so a consumer's imports and its
`config/modules.php` entry are untouched.

Requires **`apexl/io` ^6.0**, **`apexl/io-notifier` ^4.0**, **`apexl/dto` ^3.0**.
This package skips the io 4 and io 5 lines entirely; it was last released
against io ^3.0 in May 2026.

### What changed

- **Imports follow io 6's namespace normalisation.** All five were external:
  `Module`, `Dto`, `ConfigurationInterface`, and io-notifier's
  `SmsNotifierDriverInterface` / `NotifierException`.
- **`NotifierTwilioModule` is `readonly`**, which io 6 requires of every module
  — `Module` is `abstract readonly` and PHP makes that viral.

`TwilioSmsNotifierDriver::send(string $to, string $body): void` is unchanged and
still satisfies io-notifier 4's `SmsNotifierDriverInterface`.

### For consumers

Nothing to edit. Bind the driver as before:

```php
SmsNotifierDriverInterface::class => \DI\autowire(TwilioSmsNotifierDriver::class),
```

Note the interface itself moved with io-notifier 4, from
`apexl\Io\modules\notifier\interfaces\smsNotifierDriverInterface` to
`Apexl\Io\Notifier\Interfaces\SmsNotifierDriverInterface` — that is io-notifier's
change, not this package's, but it is the line a consumer will have to update.
