---
title: "setRootTemplate(_:animated:completion:)"
framework: carplay
role: symbol
role_heading: Instance Method
path: "carplay/cpinterfacecontroller/setroottemplate(_:animated:completion:)"
---

# setRootTemplate(_:animated:completion:)

Sets the root template of the navigation hierarchy.

## Declaration

```swift
func setRootTemplate(_ rootTemplate: CPTemplate, animated: Bool, completion: ((Bool, (any Error)?) -> Void)? = nil)
```

```swift
func setRootTemplate(_ rootTemplate: CPTemplate, animated: Bool) async throws -> Bool
```

## Parameters

- `rootTemplate`: The template to use as the root of a new navigation hierarchy.
- `animated`: If doc://com.apple.documentation/documentation/Swift/true, CarPlay animates the presentation of the template. CarPlay ignores this flag when there isn’t an existing navigation hierarchy to replace.
- `completion`: The closure CarPlay calls after it presents the template.

## Discussion

Discussion important: You can call this method from synchronous code using a completion handler, as shown on this page, or you can call it as an asynchronous method that has the following declaration: func setRootTemplate(_ rootTemplate: CPTemplate, animated: Bool) async throws -> Bool For information about concurrency and asynchronous code in Swift, see Calling Objective-C APIs Asynchronously. If you set a root template when a navigation hierarchy already exists, CarPlay replaces the entire hierarchy. CarPlay calls completion after it presents the template. The Boolean parameter is true when the presentation succeeds; otherwise, it’s false and CarPlay provides an error that describes the failure. CarPlay throws an exception if the presentation fails and you don’t provide a closure.

## See Also

### Configuring the Interface Controller

- [delegate](carplay/cpinterfacecontroller/delegate.md)
- [CPInterfaceControllerDelegate](carplay/cpinterfacecontrollerdelegate.md)
- [prefersDarkUserInterfaceStyle](carplay/cpinterfacecontroller/prefersdarkuserinterfacestyle.md)
