Where evaluation runs
In your process, by default. SDKs seed a snapshot, then poll for changes and evaluate locally, byte-identical across the Go SDK, TS SDK and server, pinned by shared CI vectors. Local evaluation isn't a mode you opt into; it's how the SDKs work.
Remote by default: the server calls PostHog's /flags API on every flag check, a network round-trip, and a billed request, each time. Local evaluation exists on the server SDKs (Node, Python, Go, Ruby, Java, .NET, PHP, Rust) but is opt-in: it needs a secure key plus polling, you must supply every property a condition depends on, and their docs warn edge/lambda and stateless setups hit "performance issues and inflated costs" without an external cache.