Hard limits for your social media time (not reminders).
Limitra is a Chromium extension designed to enforce hard limits on how you spend your time online - not with reminders or nudges, but with strict blocking once your limits are reached, helping you break out of endless scrolling loops.
- Overview
- Screenshots
- Why Limitra?
- Features
- Supported Languages
- Project Structure
- Getting Started
- Changelog (Summary)
- Roadmap
- Contributing
- License
- Trademark
- Contact / Links
Limitra is a Chromium extension designed to enforce hard limits on high-distraction social media platforms like YouTube and Instagram.
Instead of reminders or nudges, it applies strict blocking once your limits are reached - helping you break out of endless scrolling loops.
You can define limits based on:
- Number of videos watched
- Active session time
- Or both combined - with your choice of Strict (either limit triggers) or Flexible (both limits must be reached) enforcement
When a limit is exceeded, Limitra immediately blocks playback using a fullscreen overlay that cannot be easily bypassed.
Built on Chrome Manifest V3, Limitra focuses on reliability, resistance to tampering, and a fast, distraction-free experience.
See Limitra in action:
Quick access to your limits, real-time stats, and progress tracking.
Limitra immediately blocks access when limits are reached - no reminders, no bypass.
Configure your limits, tracking mode, block condition, block duration, theme, and behavior from a dedicated control panel.
Track long-term usage patterns, session timelines, and platform-specific activity with interactive analytics.
- Hard limits that actually stop you: playback is paused, muted, and blocked the moment you hit your limit.
- Two dimensions of control: track by watched video count, session time, or both together.
- Your rules, your conditions: choose whether one limit or both limits must be reached before enforcement kicks in.
- Designed against easy workarounds: Limitra watches for counter resets, suspicious wipes, and hidden overlays - and locks settings during active blocks.
- Built for practical daily use: quick popup stats, clear settings, theme support, and multilingual UI.
- Dual-limit system based on video count and active session time
- Block Condition setting:
Strict(OR - either limit triggers a block) orFlexible(AND - both limits must be reached) - Customizable block duration: choose how long a block lasts, from 15 minutes to 24 hours
- Fullscreen enforcement overlay triggered instantly on limit breach
- Dynamic enforcement reason display:
Count,Time,Time & Video Limits, orBypass - Automatic pause and mute of active videos
- Disables playback-related keyboard shortcuts
- Settings are locked during an active block to prevent last-second changes
- YouTube Shorts & Watch: tracks video count and session time with specific watch thresholds (1.5s for Shorts, 10s for Watch).
- Instagram Reels & Feed: full enforcement support for tracking scrolling and viewing behavior on Instagram.
- Hot-swap detection: automatically switches tracking context when navigating between modes (e.g., Shorts to Watch) without a page reload.
- Persistent IndexedDB-backed analytics engine with interactive platform breakdowns and long-term usage tracking.
- Session Stitching: intelligently merges interrupted sessions across refreshes and tab switches within a 15-minute grace period.
Strict: tracks total time while the tab is openPlaying Only: counts only active playback timeSmart: tracks playback and meaningful interaction- Background heartbeat to prevent time-skipping and detect idle gaps
- Detects manual counter resets and storage manipulation
- Prevents overlay removal via DevTools or CSS tampering
- Identifies rapid storage wipe attempts
- Smart session lock: block duration is frozen at enforcement time to prevent clock manipulation
- Central
isCurrentlyBlocked()gatekeeper enforced before any punishment executes - Enforces immediate blocking when suspicious behavior is detected
- Live usage stats and progress bars in the popup
- Context-aware popup: auto-selects the active platform or shows a platform selector on unsupported pages
- Dedicated Command Center dashboard for managing limits, modes, block condition, block duration, themes, and behavior
- Motivational quote system with multiple tone styles: Random, Gentle, Harsh, Philosophical, Sarcastic, Stoic
- Brutalist tooltip components for inline option explanations
- Confirmation modal for destructive actions (e.g., global settings reset)
- Light, Dark, and System themes
- Clean and responsive UI across all views
- English
- Arabic
Automatic RTL/LTR layout switching
src/
├── adapters/ # Environment-specific implementations (Composition Layer)
│ ├── browser/ # Browser-agnostic web APIs (e.g., IndexedDB)
│ └── chrome/ # Chrome-specific extension APIs
├── app/
│ └── orchestrator.ts # Wires core components, owns the content-side block flow
├── core/
│ ├── analytics/ # Continuous tracking, aggregators, formatters, and reports
│ ├── interfaces/ # Abstract contracts (Ports) - no platform dependencies
│ ├── storage/ # Persistence layer - settings, stats, sessions, security
│ ├── subscription/ # Centralized policy engine (plans, capabilities, limits)
│ ├── background-orchestrator.ts # Environment-agnostic background logic
│ ├── limiter.ts # Pure counting and limit enforcement logic
│ ├── session.ts # Heartbeat, activity tracking, and unload handling
│ ├── tracker.ts # Delegates URL observation to the active adapter
│ └── messenger.ts # Typed message bus wrapper
├── platforms/
│ ├── instagram/ # Instagram specific parsers and enforcers
│ ├── youtube/ # YouTube specific parsers and enforcers
│ └── generic/ # Fallback adapter
├── ui/
│ ├── popup/ # Extension popup UI
│ ├── settings/ # Command Center dashboard & analytics
│ ├── overlay/ # Blocking screen (renderer, controller, persistence)
│ └── components/ # Reusable UI components (tooltip, modal, custom-select)
├── i18n/ # Internationalization (types, singleton, locale files)
├── _locales/ # Chrome manifest-level translations
├── assets/ # Icons and static assets
├── background.ts # Composition Root - Service Worker entry point
├── content.ts # Composition Root - injected page script entry point
└── types.ts # Shared types (PlatformId, AppAction, messages)
The easiest and most secure way to install Limitra and receive automatic updates:
Firefox and Safari support coming soon.
If you want to contribute or build the extension locally:
- Node.js 18+
- Chrome / Chromium
git clone https://github.com/YazanAmmar/limitra.git
cd limitra
npm install
# Run code formatting, linting, and type checking
npm run check
# Development build (with sourcemaps for debugging)
npm run dev
# Production build (minified, ready for publishing)
npm run build- Open
chrome://extensions - Enable Developer mode (top right)
- Click Load unpacked
- Select the
dist/folder
npm testFor full release notes, see CHANGELOG.md.
- 1.2.0: Full Instagram support, IndexedDB-backed analytics engine, interactive dashboard, and robust session stitching for multi-tab synchronization.
- 1.1.0: YouTube Watch support, flexible block conditions (AND/OR), customizable block duration, improved anti-bypass logic, new UI components (modal, tooltip), and major internal architecture upgrades.
- 1.0.0: First stable release with dual-limit enforcement, blocking overlay, anti-bypass protection, popup stats, settings dashboard, theme support, and English/Arabic localization.
- Expand support to additional high-distraction platforms such as TikTok, X/Twitter, Reddit, and Facebook Reels.
- Add richer analytics and historical usage views.
- Improve anti-bypass hardening for more edge cases.
- Introduce smarter recovery, reset, and scheduling options.
- Refine the public website, docs, and release assets around the extension.
Want to contribute to Limitra?
Please read the contribution guidelines before opening a pull request: CONTRIBUTING.md
If you find Limitra useful and want to support its development: Support & Sponsor
Limitra is licensed under the Business Source License 1.1 (BSL).
- Production Use: Allowed, provided you do not offer Limitra to third parties as a commercial service, SaaS, or monetized product.
- Commercial Use: Offering Limitra as a hosted service, SaaS, or monetized product requires explicit permission.
- Open Source Conversion: This version automatically converts to the Apache License 2.0 on January 1, 2030.
This license allows production use, but restricts offering Limitra as a commercial hosted service or SaaS.
For full details, please see the LICENSE file.
"Limitra" is a trademark of Yazan Ammar.
You are welcome to fork, modify, and contribute to this project.
To avoid confusion, please do not use the name "Limitra", logo, or branding in derivative works without permission.
For collaborations or commercial inquiries, feel free to reach out.
- Website: https://limitra.xyz
- Chrome Web Store: https://chromewebstore.google.com/detail/limitra/gbokphfkigfopbhfeeeiibifoaaldcjo
- Privacy Policy: https://limitra.xyz/privacy
- Support: https://limitra.xyz/#support
- GitHub Repo: https://github.com/YazanAmmar/limitra
- Releases: https://github.com/YazanAmmar/limitra/releases
- Issues: https://github.com/YazanAmmar/limitra/issues
- Email: support@limitra.xyz



