Vecto Logo Vecto
GitHub
💻 Built with SwiftUI & AppKit

Vecto

Pivot your display. Realign your Mac.

Designed for Mac musicians using physically rotated portrait-oriented external monitors. Since MacBooks lack built-in screen rotation capabilities, Vecto displays sheet music, PDFs, and web pages vertically while maintaining perfect coordinate mapping. Optimized for remote control using a Bluetooth mouse, foot pedal, or compact 2-button keyset.

Why "Vecto"? The name is derived from vector, representing direction and magnitude. In mathematics and physics, vectors define heading and coordinate translation. Because the app dynamically redirects input coordinate vectors and realigns physical screen layouts to match your rotated display, Vecto perfectly embodies this alignment transformation.

Get Vecto

Download .dmg Quickstart Guide
⚠️
Beta Release Stage Currently in active beta. Report issues on the GitHub Tracker.
🔒
macOS Security Note If Gatekeeper blocks the app, right-click and choose **Open**, or run: xattr -cr /Applications/Vecto.app

Built Specially for Musicians

A collection of deeply thought-out, pixel-perfect capabilities designed to solve hardware rotation constraints.

📶

Wireless Remote Setup

Perfect for custom staging setups using a wireless external monitor paired with a Bluetooth 2-button page-turner pedal or Bluetooth mouse, keeping your workspace untethered.

📂

Directory File Selector

Loads directory folders into a beautiful file selection list detailing PDF names and byte sizes for quick browse-to-open sheet loading.

Default Fullscreen Stand

Launches instantly in borderless fullscreen mode by default, immediately transforming your screen into a professional music stand.

System Architecture & Coordinate Flow

Deep dive into how the app intercepts window event queues, applies rotation offsets, and routes events back into the SwiftUI hierarchy.

System Architecture Diagram

Our specialized Cocoa event router intercepts low-level window events, bypasses standard coordinates conversion, and remaps clicks based on real-time hardware orientation. This guarantees WKWebView and PDFView remain fully functional under rotation.

Challenges

Bridging declarative layout systems with low-level window coordinate conversion matrices.

Resolving why standard SwiftUI buttons and gestures fail to receive clicks when their parent view is rotated using AppKit's frameCenterRotation was the primary engineering challenge. Under rotation, SwiftUI's coordinate tracking engine fails to apply the transformation matrix on mouse-up events, resulting in cancelled gestures.

Coordinate Mismatch Diagram
Read Complete Findings (hardest_part_explanation.html)

Get Started in 60 Seconds

Follow these quick steps to compile and launch the application natively on your Mac.

1 Clone the Repository

git clone https://github.com/j4dy/Vecto.git
cd Vecto

2 Compile Natively

swiftc RotatedBrowserApp.swift ContentView.swift WebView.swift PDFViewWrapper.swift Analytics.swift -o net.j4dy.Vecto

3 Run the Application

./net.j4dy.Vecto