# `nupp.io.path.spi`
Implementation interfaces consumed during ordinary module initialization.
Discover with nupp.spi.load; the consumer chooses the unique highest priority.
Omitted priority is zero. Importing these declarations loads no implementation.
## Types
### `Provider` _interface_
```nupp
interface Provider ...
```
Environmental path facts, independent of lexical path manipulation.
separator reports the host convention. currentDirectory and canonicalize may
return nil with an explanatory message when the host has no such facility or
an operating-system operation fails. Public Path identity remains in nupp.io.path.
#### Members
| Name | Kind | Description |
| --- | --- | --- |
| [`priority`](#nupp.io.path.spi.Provider.priority) | field | |
| [`separator`](#nupp.io.path.spi.Provider.separator) | method | Returns the host path separator. |
| [`currentDirectory`](#nupp.io.path.spi.Provider.currentDirectory) | method | Returns the process directory or nil and an environmental error. |
| [`canonicalize`](#nupp.io.path.spi.Provider.canonicalize) | method | Resolves a host filesystem path or returns nil and an error. |
#### `priority` _field_
```nupp
priority: integer?
```
`@readonly`
#### `separator` _method_
```nupp
separator: function(): string
```
`@readonly`
Returns the host path separator.
##### Returns
| Type | Description |
| --- | --- |
| `string` | |
#### `currentDirectory` _method_
```nupp
currentDirectory: function(): (string?, string?)
```
`@readonly`
Returns the process directory or nil and an environmental error.
##### Returns
| Type | Description |
| --- | --- |
| `string?` | |
| `string?` | |
#### `canonicalize` _method_
```nupp
canonicalize: function(path: string): (string?, string?)
```
`@readonly`
Resolves a host filesystem path or returns nil and an error.
##### Arguments
| Name | Type | Description |
| --- | --- | --- |
| `path` | `string` | |
##### Returns
| Type | Description |
| --- | --- |
| `string?` | |
| `string?` | |