Skip to content

Repository files navigation

NetflixVision — Netflix on Apple Vision Pro

An unofficial visionOS app that makes netflix.com feel native: system tab bar, glass ornaments, gaze scrolling, and cinema dimming around one persistent web session.


Star this repo    Follow @longevityboris


Swift 6   visionOS 26   MIT License   PRs Welcome


Netflix pulled its web player from visionOS Safari and never shipped a Vision Pro app. This project puts Netflix back on the headset — protected playback included — by wrapping one persistent WKWebView in a genuinely native visionOS shell. Verified playing DRM titles on physical Apple Vision Pro hardware.

Why | What you get | Install | How it works | Legal

NetflixVision running on the Apple Vision Pro simulator: Netflix catalog inside a native visionOS window with the system tab bar ornament

Unofficial. This is an independent, personal-use project with no affiliation to Netflix, Inc. You sign in with your own Netflix account on Netflix's real website. Nothing is scraped, cracked, or bypassed. See Legal.

Why this exists

Watching Netflix on a Vision Pro today means a browser tab that Netflix actively blocks, or mirroring your iPad. Neither survives a headset session. The web app itself still works when it gets the right environment — sign-in, catalog, and FairPlay playback all function inside an embedded web view. What was missing is everything around it: navigation that answers your eyes and hands, chrome that gets out of the way during a film, and a session that survives relaunches.

That shell is what this repo builds. SwiftUI owns the spatial window; Netflix's website owns the content, cookies, and DRM.

What feels native

  • System tab bar — the visionOS glass ornament with gaze-expansion labels for Home, Series, Films, New & Popular, My List, and Search
  • Cinema mode — on playback the chrome hides and your surroundings dim, like a theater
  • Gaze scrolling — the catalog scrolls with Look to Scroll, same as Safari and the TV app
  • Rows answer swipes — Netflix's desktop rows only page via hover arrows; a horizontal swipe now drives them, and drag-release misclicks are swallowed
  • Instant section switches — tab taps reuse WebKit session history or Netflix's own client-side router instead of reloading the page
  • Autoplay unblocked — billboard trailers, hover previews, and post-play next episode run without an extra click
  • Native sign-in flow — a welcome surface when signed out; the real Netflix HTTPS form (with visionOS Password AutoFill) when you sign in
  • No browser tells — no link previews, no drag-a-poster-into-Safari, no web scrollbars, no blue selection, no duplicate website header
  • One persistent session — cookies and sign-in survive relaunches; a Settings sheet holds reload, open-in-Safari, and Clear Sign-In Data
  • Deep linksnetflixvision:// routes for Shortcuts: home, movies, search?q=alien, watch/81234567, and friends

Every page treatment is pure CSS in an isolated content world, scoped to browse surfaces only, and sits behind a Settings kill switch ("Streamlined Web View"). If Netflix renames a class, the page renders exactly as stock — never broken.

Build and install

Requirements: Xcode 26 with the visionOS 26 SDK, and a Netflix account. The checked-in project builds as-is; if you change project.yml, regenerate with XcodeGen.

Simulator (browse and sign-in; DRM playback needs hardware):

xcodebuild -project NetflixVision.xcodeproj -scheme NetflixVision \
  -destination 'platform=visionOS Simulator,name=Apple Vision Pro' build

Device — pair your headset (Settings > General > Remote Devices on the Vision Pro, then Xcode's Devices window), and:

xcodebuild -project NetflixVision.xcodeproj -scheme NetflixVision \
  -configuration Release \
  -destination 'platform=visionOS,id=<VISION_PRO_ID>' \
  -allowProvisioningUpdates -allowProvisioningDeviceRegistration build

xcrun devicectl device install app --device '<VISION_PRO_ID>' \
  <DerivedData>/Build/Products/Release-xros/NetflixVision.app

If Xcode refuses to list a headset that Remote Devices can see, open Safari > Develop > Inspect Apps and Devices and select the Vision Pro once — that establishes the remote-development trust Xcode needs. Set your own development team in project.yml if signing fails.

How it works

Layer Responsibility
NetflixVisionApp Owns the spatial window, keyboard commands, and the session for the life of the app
NetflixExperienceView System TabView, account ornament, Settings sheet, welcome/launch/failure surfaces
PersistentNetflixWebView Hosts the single WKWebView, re-parenting it into whichever tab is selected
NetflixWebSession WebKit configuration, KVO state tracking, navigation policy, crash recovery
NetflixURLPolicy Route allow-listing, signed-out detection, deep links, restoration filtering
NetflixPageTreatments The fail-open CSS/gesture user script behind the kill switch

Three decisions carry the design:

  1. One web view, many tabs. Netflix is a single-page app whose cookies and FairPlay session live in one WKWebView. Every tab hosts the same instance; switching tabs re-parents it. Navigation state comes from KVO on the web view (delegate callbacks miss pushState routing entirely).
  2. The boundary is honest. The app never touches credentials, never calls private API, and never reads DRM material. Sign-in happens on Netflix's HTTPS page, where visionOS Password AutoFill can offer your saved netflix.com password. The app can't see it.
  3. Everything injected fails open. Page treatments are additive CSS with try/catch around every block. A selector miss means the page looks like stock Netflix, not a broken app.

Status

Working on device: sign-in with AutoFill, catalog browsing, genre navigation, search, and protected (FairPlay) playback with cinema dimming. The automated suite covers URL policy; the session layer is verified on hardware. Netflix can change its website at any time — treatments degrade gracefully, but a breaking site change would need a selector update here.

Contributing

Issues and PRs welcome — especially field reports from different Netflix regions (URL shapes differ by locale) and selector updates when Netflix ships a redesign. See CONTRIBUTING.md.

Legal

Netflix and its associated names, logos, and marks are trademarks of Netflix, Inc. This is an unofficial, independent project — not affiliated with, sponsored by, or endorsed by Netflix. It is a personal-use shell around Netflix's own website: use requires your own account and remains subject to Netflix's terms, regional availability, and DRM policy. It is not distributable through the App Store and no claim is made that playback will remain available. Code is MIT licensed; the license covers this repository's code only, not any Netflix property.


Built by Boris Djordjevic at Paperfoot AI


If this put Netflix back on your Vision Pro:

Star this repo    Follow @longevityboris

About

Watch Netflix on Apple Vision Pro — unofficial visionOS app with native tab bar, glass ornaments, and cinema dimming.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages