Spiral is a modernization of Notational Velocity, the modeless, keyboard-focused macOS note-taking application created by Zachary Schneirov. The original Notational Velocity source code provides the foundation for this project.
The project aims to preserve the speed, simplicity, keyboard workflows, and long-lived data compatibility of Notational Velocity while making the application reliable on current Apple platforms.
The work is deliberately incremental. Its priorities are to:
- modernize and maintain the native macOS application;
- preserve existing notes, metadata, encryption compatibility, recovery behavior, and familiar keyboard interaction;
- replace obsolete dependencies and deprecated platform APIs without risking user data;
- extract a tested, platform-neutral core and storage boundary;
- use iCloud Drive as a shared data store while supporting offline use, coordinated writes, conflicts, and safe migration from local collections; and
- maintain the universal iPhone and iPad application with its own platform-appropriate interface.
This is not intended to be a wholesale rewrite. Stable Objective-C and C code can remain where replacing it offers no concrete safety or maintenance benefit. New and deliberately extracted components should use Swift where it provides clearer boundaries and stronger correctness.
The macOS application is being modernized in stages. Automated coverage, the universal iPhone/iPad app, shared SwiftUI features, and the guarded first-run path for copying an existing collection into the shared “Spiral Notes” iCloud Drive container are in place. After the Mac completes its legacy handoff, Mac, iPhone, and iPad all select the same coordinated per-note iCloud store with private reconciliation records. The next migration goal is registered-container and physical-device verification; substantial platform cleanup, distribution, Spotlight, and compatibility work remains.
See MIGRATION_STRATEGY.md for the architecture, migration phases, current progress, and data-safety requirements.
Apps/macOScontains the existing AppKit application.Apps/iOScontains the universal iPhone and iPad application.Sharedcontains tested core and feature code shared across platforms.Testscontains platform-specific and shared test suites.Notation.xcodeprojis the Xcode project.
Contributors should read AGENTS.md before making architectural, persistence, encryption, synchronization, or migration changes.
Developer-team selection is kept out of the project file. Copy Config/Xcode/Local.xcconfig.example to Config/Xcode/Local.xcconfig, then set DEVELOPMENT_TEAM to the 10-character Team ID shown in Xcode or the Apple Developer account. The local file appears in Xcode's Build Configuration group, is loaded by every Spiral application build configuration, and is ignored by Git. Builds that intentionally do not sign can continue to pass CODE_SIGNING_ALLOWED=NO without creating the local file.
This project is distributed under the terms in COPYING.txt.