---
title: NewDocumentButton
framework: swiftui
role: symbol
role_heading: Structure
path: swiftui/newdocumentbutton
---

# NewDocumentButton

A button that creates and opens new documents.

## Declaration

```swift
nonisolated struct NewDocumentButton<Label> where Label : View
```

## Overview

Overview Use a new document button to give people the option to create documents in your app. In the following example, there are two new document buttons, both support Text labels. When the user taps or clicks the first button, the system creates a new document in the directory currently open in the document browser. The second button presents a template picker, where a document can be prepopulated or preconfigured using a template. @State private var isTemplatePickerPresented = false @State private var documentCreationContinuation:     CheckedContinuation<TextDocument?, any Error>?

var body: some Scene {     DocumentGroupLaunchScene("My Documents") {         NewDocumentButton(Text("Start Writing…"))         NewDocumentButton(Text("Choose a Template"), for: TextDocument.self) {             try await withCheckedThrowingContinuation { continuation in                 documentCreationContinuation = continuation                 isTemplatePickerPresented = true             }         }         .fullScreenCover(isPresented: $isTemplatePickerPresented) {             TemplatePicker(                 continuation: $documentCreationContinuation             )         }     }

DocumentGroup(newDocument: TextDocument()) { configuration in         MyDocumentView(document: configuration.$document))     } }

struct TemplatePicker: View {     @Binding var continuation:         CheckedContinuation<TextDocument?, any Error>?     @Environment(\.dismiss) var dismiss

var body: some View {         VStack {             Text("Choose a template")                 .font(.title)             Button("Meeting minutes") {                 let document = makeMeetingMinutes()                 documentCreationContinuation?.resume(returning: document)                 dismiss()             }             Button("Letter") {                 let document = makeLetter()                 documentCreationContinuation?.resume(returning: document)                 dismiss()             }             Button("Cancel") {                 documentCreationContinuation?.resume(throwing: CancellationError())                 dismiss()             }         }     }

private func makeMeetingMinutes() -> TextDocument { ... }     private func makeLetter() -> TextDocument { ... } }

struct TextDocument: FileDocument { ... } If you don’t provide a custom label, the system provides a button with the default “Create Document” label.

## Topics

### Initializers

- [init(_:contentType:)](swiftui/newdocumentbutton/init(_:contenttype:).md)
- [init(_:contentType:prepareDocumentURL:)](swiftui/newdocumentbutton/init(_:contenttype:preparedocumenturl:).md)
- [init(_:contentType:source:)](swiftui/newdocumentbutton/init(_:contenttype:source:).md)
- [init(_:contentType:source:_:)](swiftui/newdocumentbutton/init(_:contenttype:source:_:).md)
- [init(_:contentType:source:prepareDocumentURL:)](swiftui/newdocumentbutton/init(_:contenttype:source:preparedocumenturl:).md)
- [init(_:for:contentType:prepareDocument:)](swiftui/newdocumentbutton/init(_:for:contenttype:preparedocument:).md)
- [init(_:for:contentType:source:_:)](swiftui/newdocumentbutton/init(_:for:contenttype:source:_:).md)
- [init(for:source:)](swiftui/newdocumentbutton/init(for:source:).md)
- [init(source:)](swiftui/newdocumentbutton/init(source:).md)

## Relationships

### Conforms To

- [View](swiftui/view.md)

## See Also

### Configuring the document launch experience

- [DocumentGroupLaunchScene](swiftui/documentgrouplaunchscene.md)
- [DocumentLaunchView](swiftui/documentlaunchview.md)
- [documentBrowserContextMenu(_:)](swiftui/view/documentbrowsercontextmenu(_:).md)
- [DocumentLaunchGeometryProxy](swiftui/documentlaunchgeometryproxy.md)
- [DefaultDocumentGroupLaunchActions](swiftui/defaultdocumentgrouplaunchactions.md)
- [NewDocumentButtonDataSource](swiftui/newdocumentbuttondatasource.md)
- [DefaultNewDocumentButtonLabel](swiftui/defaultnewdocumentbuttonlabel.md)
- [DocumentCreationSource](swiftui/documentcreationsource.md)
