---
title: Document
framework: swiftui
role: symbol
role_heading: Protocol
platforms: [iOS 27.0+, iPadOS 27.0+, Mac Catalyst 27.0+, macOS 27.0+, visionOS 27.0+]
path: swiftui/document
---

# Document

A document that supports both reading and writing.

## Declaration

```swift
protocol Document : ReadableDocument, WritableDocument
```

## Overview

Overview Document is a convenience protocol that combines ReadableDocument and WritableDocument. Conform to it when your document can both open and save files: @Observable final class TextDocument: Document {     static let readableContentTypes = [UTType.plainText]

var text: String = ""

func reader(configuration: sending ReadConfiguration) -> sending FileWrapperDocumentReader<String> {         FileWrapperDocumentReader(configuration) { fileWrapper in             guard let data =                 fileWrapper.regularFileContents else {                 throw CocoaError(.fileReadCorruptFile)             }             return String(decoding: data, as: UTF8.self)         }     }

func writer(configuration: sending WriteConfiguration) -> sending FileWrapperDocumentWriter<String> {         FileWrapperDocumentWriter(configuration) { snapshot, _ in             FileWrapper(                 regularFileWithContents: Data(snapshot.utf8)             )         }     }

@MainActor     func snapshot(contentType: UTType) async throws -> sending String { text }

@MainActor     func apply(snapshot: sending String, previous: sending String?) async throws {         text = snapshot     } } Use DocumentGroup as your app’s first scene to opt into the document infrastructure (autosaving, file coordination, undo management, conflict resolution): @main struct MyApp: App {     var body: some Scene {         DocumentGroup { document in             TextEditorView(document: document)         } makeDocument: { configuration, context in             TextDocument()         }     } } For a read-only document, conform only to ReadableDocument. The document can be @MainActor or nonisolated, Sendable or not — use whichever works best for the app.

## Relationships

### Inherits From

- [ReadableDocument](swiftui/readabledocument.md)
- [WritableDocument](swiftui/writabledocument.md)

## See Also

### Storing document data in a reference type instance

- [ReadableDocument](swiftui/readabledocument.md)
- [WritableDocument](swiftui/writabledocument.md)
- [URLDocumentConfiguration](swiftui/urldocumentconfiguration.md)
- [DocumentCreationContext](swiftui/documentcreationcontext.md)
- [DocumentBaseBox](swiftui/documentbasebox.md)
