<!--
{
  "availability" : [

  ],
  "documentType" : "symbol",
  "framework" : "Tor",
  "identifier" : "/documentation/Tor/TorConfiguration",
  "metadataVersion" : "0.1.0",
  "role" : "Structure",
  "symbol" : {
    "kind" : "Structure",
    "modules" : [
      "Tor"
    ],
    "preciseIdentifier" : "s:3Tor0A13ConfigurationV"
  },
  "title" : "TorConfiguration"
}
-->

# TorConfiguration

Value-type configuration passed to [`TorClient`](/documentation/Tor/TorClient) at construction time.

```
struct TorConfiguration
```

## Overview

`TorConfiguration` is the Swift-side projection of the subset of
torrc options swift-tor exposes to callers. All fields map either to
a torrc directive (`DataDirectory`, `CacheDirectory`, `SocksPort`,
`CookieAuthentication`, `HashedControlPassword` — see tor.1.txt) or to
a swift-tor-only convenience ([`ownsDataDirectory`](/documentation/Tor/TorConfiguration/ownsDataDirectory), [`extraArgs`](/documentation/Tor/TorConfiguration/extraArgs)).
The struct is `var`-mutable on purpose: construct a baseline via
[`makeDefault()`](/documentation/Tor/TorConfiguration/makeDefault()) or [`ephemeral(cacheDirectory:)`](/documentation/Tor/TorConfiguration/ephemeral(cacheDirectory:)) and then override
individual fields without using an explicit builder.

> Note: Conformance is `Sendable` — every field is a value type and
> safely crosses concurrency domains. The struct is **not**
> `Equatable`; mutations through an `inout` binding replace the whole
> value via COW.

> Important: Once a ``doc://Tor/documentation/Tor/TorClient`` is constructed, its `configuration`
> is frozen for the life of that session. Mutating the original
> struct does not affect a running Tor instance; changes take effect
> only on the next start.

## Topics

### Core paths

[`dataDirectory`](/documentation/Tor/TorConfiguration/dataDirectory)

Filesystem path where Tor will store persistent state.

[`cacheDirectory`](/documentation/Tor/TorConfiguration/cacheDirectory)

Optional separate path for cached consensus and descriptor files.

[`ownsDataDirectory`](/documentation/Tor/TorConfiguration/ownsDataDirectory)

If `true`, [`stop()`](/documentation/Tor/TorClient/stop()) removes [`dataDirectory`](/documentation/Tor/TorConfiguration/dataDirectory) after
Tor exits.

### Ports & auth

[`socksPort`](/documentation/Tor/TorConfiguration/socksPort)

Policy for Tor’s SOCKS5 listener port.

[`cookieAuthentication`](/documentation/Tor/TorConfiguration/cookieAuthentication)

Request Tor to bind a cookie-authenticated control port.

[`controlPassword`](/documentation/Tor/TorConfiguration/controlPassword)

Optional password used when `HashedControlPassword` is configured.

### Extras

[`extraArgs`](/documentation/Tor/TorConfiguration/extraArgs)

Escape hatch for torrc directives swift-tor does not yet model.

### Construction

[`init(dataDirectory:cacheDirectory:socksPort:cookieAuthentication:controlPassword:extraArgs:ownsDataDirectory:)`](/documentation/Tor/TorConfiguration/init(dataDirectory:cacheDirectory:socksPort:cookieAuthentication:controlPassword:extraArgs:ownsDataDirectory:))

Memberwise initialiser with sensible defaults for every field.

[`makeDefault()`](/documentation/Tor/TorConfiguration/makeDefault())

Returns a configuration rooted at a fresh UUID-suffixed temp
directory.

[`ephemeral(cacheDirectory:)`](/documentation/Tor/TorConfiguration/ephemeral(cacheDirectory:))

Returns a fully self-cleaning ephemeral configuration, optionally
keeping a warm cache.

