Why NotionFlow? • 60s Safari Install • Which File to Use? • Add to Home Screen • How It Works • Development & Tests • Contributing • Disclaimer
Power users attempting to use Notion on iPhone or iPad encounter deliberate platform restrictions:
| Scenario | What Happens | The Experience |
|---|---|---|
| Official Notion Mobile App | Administrative settings (Workspace Members, Roles, Billing, Security, Public Domains) are stripped or blocked. Multi-column dashboards collapse into vertical cards. Wide database tables lose overview context. | ❌ Crippled power-user workflows |
| Safari "Request Desktop Website" | Fails completely. Notion executes runtime JavaScript checks ("MacIntel" === platform && "ontouchend" in document) to detect iPads and iPhones, continuing to force mobile home drawer layouts, interstitial banners, and app-redirect modals. |
❌ Frustrating & blocked |
| NotionFlow v1.4.0 (Userscript) 🚀 | Neutralizes Notion's touch detection on prototypes, spoofs macOS Safari, locks CONFIG.isMobile = false, suppresses app banners, and applies responsive desktop CSS in a featherweight ~17 KB package. |
✅ True desktop Notion + 100% native WebKit speed |
Tip
No Mac, Xcode, or developer account required! NotionFlow runs directly inside Safari on your iPhone or iPad using the free, open-source Userscripts extension.
┌────────────────────────┐ ┌────────────────────────┐ ┌────────────────────────┐
│ 1. Get Extension │ ──▶ │ 2. Add NotionFlow │ ──▶ │ 3. Open Notion │
│ Install "Userscripts" │ │ Save notion-flow.user │ │ Enjoy Full Desktop UI │
│ from App Store │ │ into Userscripts folder│ │ at app.notion.com │
└────────────────────────┘ └────────────────────────┘ └────────────────────────┘
- Open the App Store on your iPhone or iPad and install Userscripts (Free, open-source, zero tracking, GPL-3.0).
- Open iOS Settings ➔ Safari ➔ Extensions.
- Tap Userscripts:
- Toggle Allow Extension to ON.
- Under Permissions for Userscripts, tap All Websites and select Allow (or grant access to
notion.soandnotion.com).
- Open the Userscripts app from your home screen once.
- Tap Set Userscripts Directory and select any local folder in the Files app (e.g.,
On My iPhone➔UserscriptsorOn My iPad➔Userscripts).
Choose either method:
-
Method A (Direct File Download — Recommended):
- Download the compiled userscript:
notion-flow.user.js. - Save or move
notion-flow.user.jsinto your configured Userscripts folder in the Files app.
- Download the compiled userscript:
-
Method B (Copy & Paste in Safari):
- Open
notion-flow.user.jsin Safari and copy all contents. - Tap the Safari Extensions icon (🧩 or
aA) ➔ tap Userscripts. - Tap
+(New Script), paste the code, and tap Save.
- Open
- Navigate to
https://app.notion.com(ornotion.so). - Notion will immediately boot in full desktop mode:
- Full desktop sidebar with quick search and workspace navigation.
- Access to desktop Settings & Members (manage workspace billing, members, domains, integrations).
- Side-by-side multi-column layouts and Formulas 2.0.
- Zero intrusive mobile banners or "Open in App" interruptions.
NotionFlow produces two production build artifacts in dist/ and in every GitHub Release:
| File | Format | Description & Compatibility |
|---|---|---|
notion-flow.user.js |
Userscript Bundle (Includes // ==UserScript== header) |
For Safari Extension Managers & Userscript Apps: • Userscripts Safari Extension (iOS / iPadOS / macOS) • Stay for Safari • Orion Browser (iOS / iPadOS) • Tampermonkey / Violentmonkey |
notionflow-injection.js |
Pure Raw JavaScript (Zero metadata comment block) |
For Native iOS Apps & Direct Injections: • Native Swift / Xcode WKWebView via WKUserScript• Safari Web Extensions ( content_scripts)• iOS Shortcuts ("Run JavaScript on Web Page") • Custom WebView wrappers |
- Installing via Safari Userscripts / Stay on your iPhone or iPad? ➔ Use
notion-flow.user.js. - Building a native iOS wrapper app or custom Safari Web Extension? ➔ Use
notionflow-injection.js.
Turn NotionFlow into a distraction-free, full-screen standalone app that removes Safari's browser URL bar and bottom toolbar:
┌───────────────────────────┐ ┌───────────────────────────┐ ┌───────────────────────────┐
│ 1. Open app.notion.com │ ──▶ │ 2. Tap Safari Share (⬆️) │ ──▶ │ 3. Add to Home Screen │
│ In Safari on iPhone/iPad │ │ Scroll down in Share menu │ │ Launches full-screen PWA │
└───────────────────────────┘ └───────────────────────────┘ └───────────────────────────┘
- Open Notion: Navigate to
https://app.notion.comin Safari and log in. - Open Share Menu: Tap the Safari Share icon at the bottom of the screen (the square with an arrow pointing up
⬆️). - Select "Add to Home Screen": Scroll down the share sheet and tap Add to Home Screen.
- Name Your App: Name it Notion Desktop (or NotionFlow) and tap Add in the top-right corner.
- Launch Edge-to-Edge: Tap the new icon on your Home Screen for a clean, full-screen experience with zero browser address bars.
Notion's web client contains aggressive platform-detection logic to keep mobile browsers restricted. NotionFlow operates at document_start before Notion's scripts initialize, dismantling these gates cleanly:
Notion detects iPads and tablets using runtime prototype checks:
// Notion's internal client module 900532 check:
"MacIntel" === a.platform && "ontouchend" in e.documentNotionFlow strips ontouchstart, ontouchend, ontouchmove, and ontouchcancel from Document.prototype, Window.prototype, HTMLElement.prototype, and their respective instances. When Notion evaluates whether the client is a touch tablet, it cleanly evaluates to isIpad = false, isMobile = false, and isDesktop = true.
- Overrides
navigator.platformtoMacIntel. - Overrides
navigator.userAgentandnavigator.appVersionto macOS Safari 17.5. - Sets
navigator.maxTouchPointsto0. - Overrides modern
navigator.userAgentDatawith macOS desktop high-entropy values.
Notion reads window.CONFIG.isMobile to toggle between desktop layouts and mobile layouts. NotionFlow defines a dynamic getter/setter on window.CONFIG that locks isMobile to false without clobbering Notion's internal proxy hosts, asset URLs, or configuration object.
- A lightweight
MutationObserverinstantly detects and strips<meta name="apple-itunes-app">tags to prevent Safari's intrusive Smart App Banners from appearing. - Suppresses native deep-link redirects targeting
notion://anditunes.apple.com. - Hides mobile promotional overlays and "Open in Notion app" bottom sheets.
- Off-Canvas Sidebar Drawer (
< 768px): On smaller mobile screens, the desktop sidebar smoothly docks off-canvas with a slide-over drawer layout so you can easily toggle and navigate pages. - Adaptive Modal Sizing (
< 1080px): Constrains desktop dialogs (Settings & Members, Share menu, Quick Find) to fit neatly within mobile and tablet viewports without clipping. - Momentum Scrolling: Enables native
-webkit-overflow-scrolling: touchfor wide database tables, boards, and timelines.
NotionFlow uses TypeScript and esbuild for instant compilation:
# 1. Clone the repository
git clone https://github.com/intelQong/NotionFlow.git
cd NotionFlow
# 2. Install dependencies (Node 20+)
npm install
# 3. Build userscript and injection bundles
npm run buildThe build outputs:
dist/notion-flow.user.js(~17.3 KB) — Userscript bundle with metadata header.dist/notionflow-injection.js(~16.4 KB) — Pure JavaScript bundle for web extensions and native apps.
NotionFlow includes automated Playwright tests that inject the script into real WebKit browser engines emulating iPhone 14 Pro and iPad Pro viewports against live app.notion.com:
# Run Playwright WebKit test suite
python3 scratch/test_v140_playwright.pyVerified assertions:
window.CONFIG.isMobile === falsenavigator.platform === 'MacIntel'"ontouchend" in document === falsedocument.querySelector('meta[name="apple-itunes-app"]') === null- Notion desktop navigation and settings elements render properly.
Contributions, issues, and feature suggestions are welcome!
- Fork the repository.
- Create your feature branch (
git checkout -b feature/desktop-improvement). - Commit your changes (
git commit -m 'feat: enhance desktop compatibility'). - Push to the branch (
git push origin feature/desktop-improvement). - Open a Pull Request.
Notion is a registered trademark of Notion Labs, Inc.
NotionFlow is an independent open-source project and is not affiliated with, endorsed by, sponsored by, or in any way officially connected with Notion Labs, Inc. or any of its subsidiaries. All product and company names are trademarks™ or registered® trademarks of their respective holders; use of them does not imply any affiliation with or endorsement by them.
Distributed under the MIT License. See LICENSE for details.
Crafted with ❤️ by intelQong.