PaperKit is Apple's full-featured canvas framework โ previously internal-only โ now publicly available in iOS/macOS/visionOS 27. It powers the drawing and markup experience in Notes, Preview, and Freeform, giving developers access to a complete pencil, shapes, images, and text canvas with a rich data model.
โข Instantly adds a production-quality, fully-interactive canvas to any app without building stroke rendering, shape tools, or selection handling from scratch
โข Fine-grained per-element interaction control (move, resize, delete, style, select) lets you lock down template content while keeping user content editable
โข Adornments system provides a coordinate-anchored overlay layer for custom controls like buttons and collaboration UI that live outside the persisted document
Demonstrates creating a PaperKit canvas with programmatically added read-only shape elements and interactive adornments that float above the canvas without becoming part of the saved document.
import UIKit
import PaperKit
class ComicEditorViewController: UIViewController {
private var paperVC: PaperMarkupViewController!
// Sample panel frames in canvas coordinates
private let panelFrames: [CGRect] = [
CGRect(x: 20, y: 20, width: 340, height: 220),
CGRect(x: 20, y: 260, width: 160, height: 180),
CGRect(x: 200, y: 260, width: 160, height: 180)
]
override func viewDidLoad() {
super.viewDidLoad()
// 1. Create the markup view controller
paperVC = PaperMarkupViewController()
paperVC.delegate = self
addChild(paperVC)
view.addSubview(paperVC.view)
paperVC.view.frame = view.bounds
paperVC.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
paperVC.didMove(toParent: self)
setupTemplateMarkup()
}
private func setupTemplateMarkup() {
// 2. Read existing markup and add shape elements for each panel
var markup = paperVC.markup
let panelElements: [any Markup] = panelFrames.map { frame in
var shape = RectangleMarkup()
shape.frame = frame
shape.strokeColor = UIColor.systemIndigo
shape.fillColor = UIColor.systemIndigo.withAlphaComponent(0.1)
// 3. Lock panels so users cannot move, delete, or restyle them
shape.allowedInteractions = .readOnly
return shape
}
// 4. Insert panels as subelements
var elements = markup.subelements
for panel in panelElements {
elements.append(panel)
}
markup.subelements = elements
paperVC.markup = markup
// 5. Add adornments โ interactive overlays anchored to canvas coords
// They are NOT saved with the document
let adornments: [MarkupAdornment] = panelFrames.map { frame in
var adornment = MarkupAdornment()
adornment.id = UUID().uuidString
adornment.anchorPoint = CGPoint(
x: frame.midX,
y: frame.midY
)
adornment.imageConfiguration = UIImage.SymbolConfiguration(pointSize: 28)
.applying(UIImage.SymbolConfiguration(paletteColors: [.white]))
adornment.image = UIImage(systemName: "plus.circle.fill",
withConfiguration: adornment.imageConfiguration)
return adornment
}
paperVC.adornments = adornments
}
}
// MARK: - PaperMarkupViewControllerDelegate
extension ComicEditorViewController: PaperMarkupViewControllerDelegate {
func paperMarkupViewController(
_ controller: PaperMarkupViewController,
didTapAdornmentWithID id: String
) {
// Respond to taps on the floating panel buttons
print("Adornment tapped: \(id) โ present image picker or AI generator here")
}
}Liquid Glass is Apple's new material and visual design language introduced in iOS 27, bringing translucent, refractive glass-like surfaces to system and custom UI elements. It replaces the frosted vibrancy aesthetic with a more dynamic, depth-aware material that responds to content beneath it.
iOS 27 introduces new SwiftUI drag and drop APIs including reorderable, reorderContainer, dragContainer, and configuration modifiers that enable reordering within and across collections, multi-item drag, and fine-grained control over how data is transferred during drag and drop operations.
Xcode 27 introduces a fully customizable toolbar and theme system, untitled scratch projects, coding agent integration directly in the editor, and the new Device Hub for evaluating apps across simulators and physical devices side-by-side.
In-depth guide
SwiftUI & Liquid Glass in iOS 27 โPaperKit was previously private/internal; the public API surface in iOS 27 beta may have gaps or naming changes before GM. Adornments are not persisted โ they must be reconstructed each time the view controller is presented. PaperKit builds on PencilKit so PKToolPicker and related APIs still apply for pencil tooling.
Apple Pencil input is optional; touch and mouse input also supported. No Apple Intelligence hardware required.
iOS 27 enforces stricter adaptivity requirements for UIKit apps, making iPhone apps fully resizable in iPhone Mirroring and on iPad, while introducing new navigation bar minimization controls, sidebar opt-in for iPhone tab bars, and prominent tab customization.