Full Mode x Light Mode - bjsi/incremental-everything GitHub Wiki

Performance Modes: Quick Reference Card

🎯 Choose Your Mode in 30 Seconds

Do you have an extremely overloaded workflow?

  • YES (50+ articles, 10k+ cards, complex hierarchies) β†’ Full Mode πŸ–₯️
  • NO (Standard learning / Beginner) β†’ Light Mode ⚑

πŸ“Š At a Glance

Full Mode πŸ–₯️

Platform:    πŸ’» Desktop App ONLY
Performance: 🐒 Slower but feature-rich
Features:    πŸŽ›οΈ All advanced features
Startup:     ⏱️ up to 3 min (depending on KB size)
Best For:    πŸ”¬ Overloaded Students, Power Users

Key Features:

  • KB-scoped and Document-scoped relative priority percentiles
  • Priority Shield (KB and Document scope)
  • Priority Shield stats are stored for historical comparison used the Priority Shield Graph
  • Complex hierarchy support

Light Mode ⚑

Platform:    🌐 Web, πŸ“± Mobile, πŸ’» Desktop
Performance: πŸš€ Fast and responsive
Features:    ⚑ Essential features
Startup:     ⚑ <10 seconds
Best For:    πŸŽ“ Beginner and eventual users, Mobile and Web-browser users, users with few flashcards

Key Features:

  • Absolute Priorities (flashcards and IncRems)
  • No need for cache mounting of the startup / queue Enter
  • Universal platform support

🚦 Platform Recommendations

Platform Default Recommended Can Override?
🌐 Web Browser Light Light βœ… Yes (not recommended)
πŸ“± Mobile Light Light βœ… Yes (not recommended)
πŸ’» Desktop App Light Full/Light ⚑ Yes (configurable)

πŸ’‘ Common Scenarios

"I study on my phone during commute"

β†’ Light Mode βœ… (automatic)
Optimized for mobile, won't make the app heavy

"I process 5 articles a week on web browser"

β†’ Light Mode βœ… (automatic)
Fast, stable, perfect for standard IR

"I'm researching my PhD with 100+ papers"

β†’ Full Mode on Desktop App
Need document percentiles and advanced features

"I have 500 cards, use desktop app"

β†’ Light Mode works great! ⚑
Unless you want document-level analytics

"I have 20K+ cards, a large backlog, a huge inflow of information, and a use desktop app"

β†’ Full Mode ! ⚑
You need the full power of relative priorities and priority shield.

"I switch between web and desktop daily"

β†’ Hybrid: Full on Desktop, Light on Web
Automatic switching, best of both worlds


πŸ”§ How to Change Modes

Automatic (Recommended)

The plugin auto-detects your platform (if you chose Full Mode):

βœ… Web β†’ Light Mode
βœ… Mobile β†’ Light Mode  
βœ… Desktop β†’ Full Mode

Manual Override

Settings β†’ Performance Mode

  • Choose "Light Mode" or "Full Mode"

Platform-Specific Settings:

  • "Always use Light Mode on Mobile" (default: ON)
  • "Always use Light Mode on Web Browser" (default: ON)

⚠️ Warning Signs

Using Full Mode on Wrong Platform

Web Browser + Full Mode:

❌ Slow loading
❌ Browser freezing
❌ High memory usage
β†’ Solution: Enable "Light Mode on Web" setting

Mobile + Full Mode:

❌ App crashes
❌ Battery drain
❌ Sluggish interface
β†’ Solution: Enable "Light Mode on Mobile" setting

πŸŽ“ Feature Availability

Feature Full Mode Light Mode
Flashcard Review βœ… βœ…
Incremental Reading βœ… βœ…
Priority System βœ… βœ…
Absolute Priority Number (IncRems and Cards) βœ… βœ…
KB Relative Priorities Percentiles βœ… ❌
Document Relative Priorities Percentiles βœ… ❌
KB Priority Shield (IncRems and Cards) βœ… ❌
Doc Priority Shield (IncRems and Cards) βœ… ❌
Priority Review Docs βœ… βœ…
Card Priority Tagging βœ… Deep βœ… Instant
Fast Startup ❌ βœ…
Mobile Stability ❌ βœ…

If you regularly uses RemNote in the Desktop App, don't fear the FULL MODE: shouldUseLightMode() Decision Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         User Opens RemNote Plugin / Component Loads         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚
                         β–Ό
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
            β”‚ Call shouldUseLightModeβ”‚
            β”‚      (plugin)          β”‚
            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚
                         β–Ό
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
            β”‚ Check: Performance     β”‚
            β”‚ setting === 'light'?   β”‚
            β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”˜
                   β”‚ YES         β”‚ NO
                   β–Ό             β–Ό
            [USE LIGHT MODE]     β”‚
                                 β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚ Check: Is Mobile Device?  β”‚
                    β”‚ (iOS or Android)          β”‚
                    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
                           β”‚ YES         β”‚ NO
                           β–Ό             β”‚
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
            β”‚ Check: alwaysUseLightβ”‚    β”‚
            β”‚ ModeOnMobile enabled?β”‚    β”‚
            β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”˜    β”‚
                   β”‚ YES       β”‚ NO     β”‚
                   β–Ό           β”‚        β”‚
            [USE LIGHT MODE]   β”‚        β”‚
                               β”‚        β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚ Check: Is Web Platform?      β”‚
                    β”‚ (browser vs desktop app)     β”‚
                    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚ YES         β”‚ NO
                           β–Ό             β”‚
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
            β”‚ Check: alwaysUseLightβ”‚    β”‚
            β”‚ ModeOnWeb enabled?   β”‚    β”‚
            β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”˜    β”‚
                   β”‚ YES       β”‚ NO     β”‚
                   β–Ό           β”‚        β”‚
            [USE LIGHT MODE]   β”‚        β”‚
                               β”‚        β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚      USE FULL MODE           β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Startup Detection Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚        Plugin Activates (onActivate)           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”‚
                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     handleMobileDetectionOnStartup(plugin)              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  1. Detect OS (iOS/Android/Windows/Mac/Linux)          β”‚
β”‚  2. Detect Platform (web/app)                          β”‚
β”‚  3. Store in SESSION storage (device-specific):        β”‚
β”‚     - isMobileDeviceKey = true/false                   β”‚
β”‚     - isWebPlatformKey = true/false                    β”‚
β”‚  4. Store in SYNCED storage (for history):             β”‚
β”‚     - lastDetectedOSKey = current OS                   β”‚
β”‚     - lastDetectedPlatformKey = current platform       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚                       β”‚
        β–Ό                       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Mobile?      β”‚    β”‚ Web Platform?     β”‚
β”‚ (iOS/Android)β”‚    β”‚ (browser)         β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚ YES                  β”‚ YES
       β–Ό                      β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Show toast:      β”‚  β”‚ Show toast:          β”‚
β”‚ "πŸ“± iOS detected"β”‚  β”‚ "🌐 Web Browser on   β”‚
β”‚ with mode info   β”‚  β”‚  Windows" + mode     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Storage Architecture

SESSION STORAGE (per-device, doesn't sync)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  isMobileDeviceKey: boolean            β”‚  ← Used by shouldUseLightMode()
β”‚  isWebPlatformKey: boolean             β”‚  ← Used by shouldUseLightMode()
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

SYNCED STORAGE (cross-device)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  lastDetectedOSKey: string             β”‚  ← For tracking changes
β”‚  lastDetectedPlatformKey: Platform     β”‚  ← For tracking changes
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

SETTINGS (user preferences)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  performanceMode: 'light' | 'full'     β”‚  ← Master setting
β”‚  alwaysUseLightModeOnMobileId: bool    β”‚  ← Mobile override
β”‚  alwaysUseLightModeOnWebId: bool       β”‚  ← Web override (NEW)
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Platform Combinations

╔═══════════════════╦════════════╦═══════════╦═════════════════╗
β•‘   Operating       β•‘  Platform  β•‘  Device   β•‘  Default Mode   β•‘
β•‘   System          β•‘            β•‘  Type     β•‘  (recommended)  β•‘
╠═══════════════════╬════════════╬═══════════╬═════════════════╣
β•‘ iOS               β•‘  app       β•‘  Mobile   β•‘  Light          β•‘
β•‘ Android           β•‘  app       β•‘  Mobile   β•‘  Light          β•‘
β•‘ Windows           β•‘  web       β•‘  Desktop  β•‘  Light (NEW)    β•‘
β•‘ Mac               β•‘  web       β•‘  Desktop  β•‘  Light (NEW)    β•‘
β•‘ Linux             β•‘  web       β•‘  Desktop  β•‘  Light (NEW)    β•‘
β•‘ Windows           β•‘  app       β•‘  Desktop  β•‘  Full           β•‘
β•‘ Mac               β•‘  app       β•‘  Desktop  β•‘  Full           β•‘
β•‘ Linux             β•‘  app       β•‘  Desktop  β•‘  Full           β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

Component Usage Pattern

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Any Component (Widget/Popup/Command)               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                     β”‚
β”‚  const useLightMode = await shouldUseLightMode(    β”‚
β”‚    plugin                                           β”‚
β”‚  );                                                 β”‚
β”‚                                                     β”‚
β”‚  if (useLightMode) {                                β”‚
β”‚    // Use optimized, fast path                     β”‚
β”‚    // Skip expensive operations                    β”‚
β”‚    // Use lighter caching                          β”‚
β”‚  } else {                                           β”‚
β”‚    // Use full-featured path                       β”‚
β”‚    // Run comprehensive operations                 β”‚
β”‚    // Use full caching                             β”‚
β”‚  }                                                  β”‚
β”‚                                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Real-World Example: answer_buttons.tsx

User clicks "Done (untag)" button
           β”‚
           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ handleCardPriorityInheritanceβ”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Check existing priority      β”‚
β”‚          β”‚                   β”‚
β”‚          β–Ό                   β”‚
β”‚ const useLightMode =         β”‚
β”‚   await shouldUseLightMode() β”‚
β”‚          β”‚                   β”‚
β”‚     β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”              β”‚
β”‚     β”‚ Light?  β”‚              β”‚
β”‚     β””β”€β”¬β”€β”€β”€β”€β”€β”¬β”€β”˜              β”‚
β”‚ YES   β”‚     β”‚  NO            β”‚
β”‚   β”Œβ”€β”€β”€β–Όβ”€β”   ▼────────┐       β”‚
β”‚   β”‚Skip β”‚   β”‚ Check  β”‚       β”‚
β”‚   β”‚card β”‚   β”‚ cards  β”‚       β”‚
β”‚   β”‚checkβ”‚   β”‚ in Rem β”‚       β”‚
β”‚   β”‚     β”‚   β”‚ and    β”‚       β”‚
β”‚   β”‚Set  β”‚   β”‚ 3 levelβ”‚       β”‚
β”‚   β”‚prio β”‚   β”‚ descendβ”‚       β”‚
β”‚   β”‚NOW  β”‚   β”‚        β”‚       β”‚
β”‚   β””β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚
β”‚   ⚑Fast     πŸ” Thorough      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜