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 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.
iOS 27 brings significant updates to Live Activities and the Dynamic Island, including new expanded presentations, richer interactivity via App Intents directly from the island, and updated layout APIs for more expressive minimal and compact views.
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 brings a sweeping set of SwiftUI enhancements including Liquid Glass design adoption, new toolbar visibility and overflow APIs, document architecture improvements with Observable, and resizable iPhone app support โ all designed to modernize app UIs with minimal code changes.