Modules & Packages

Omni is a single Gradle module, but its code is organised into cohesive feature packages. Here’s what lives where.

Feature packages

PackageKey classesResponsibility
browser/adblock/AdBlockManagerFilter engine, providers, block counter
browser/extensions/BuiltInExtensionManager, AiBlockerManager, UniversalCopyManagerWebExtension install/toggle/messaging
browser/tabs/SmartTabManagerDomain-based tab auto-grouping
media/MediaInterceptor, StreamDownloadEngine, FFmpegBridgeStream detection, download, audio extraction
media/player/VideoPlayerScreen, OmniMediaServiceExoPlayer UI + background audio
privacy/FireButton, TorManager, VpnManagerSession burn, Tor, WireGuard
tools/locker/LockerDatabase, LockerAuthManagerEncrypted vault (SQLCipher + biometric)
tools/qrcode/BarcodeGenerator, QrCodeDecoderZXing QR scan/generate
ui/theme/OmniTheme, OmniColors, UiScaleMaterial 3 theming

How they connect

All feature packages hang off the central BrowserViewModel (see Architecture). Each package exposes a focused API that the ViewModel orchestrates — so UI, logic and engine stay cleanly separated.

Adding a feature

  1. Create (or reuse) a feature package under com.rebelroot.omni.
  2. Keep engine/state logic out of composables — expose it through the ViewModel.
  3. Add any user-facing strings to strings.xml.
  4. Wire the entry point into BrowserScreen or Quick Tools.
Single module, many packages

Omni deliberately stays one Gradle module — the package structure provides the modularity, without multi-module build overhead.