MetaLens is designed with security-first principles:
- Fully offline β all metadata reading and writing happens on your machine; there is no network call anywhere in the app
- Localhost-only sidecar β the Python (FastAPI) backend binds to
127.0.0.1only, on a dynamically chosen port, never0.0.0.0 - Electron hardening β
nodeIntegration: false,contextIsolation: true; the renderer only reaches the OS through a narrowcontextBridgeAPI (folder/file dialogs, drive listing), never raw Node/fsaccess - Atomic writes β every metadata write copies the file to a
.ml_tmptemp file, applies the change there, then swaps it in withos.replace()(atomic on POSIX and Windows). A crash mid-write leaves the original file untouched - Path validation β a dedicated
core.path_securitymodule validates and normalizes every path (resolves symlinks, blocks traversal) before any filesystem access, across all API routes - Transparent code β all handler and analysis logic is open-source and auditable
- β No user accounts or authentication
- β No telemetry or usage tracking
- β No data collection or analytics
- β No cloud processing or storage
- β No auto-update phone-home (updates are manual, via GitHub Releases)
- β Your files and their metadata never leave your machine
- β Nothing is written anywhere except the file you explicitly edit
- β The undo stack lives in memory only β it is cleared when you close the app, never written to disk
- β Full source code transparency
- Uses established, audited libraries per format: Pillow/piexif (images), mutagen (audio/video), pypdf (PDF), python-docx/openpyxl/python-pptx (Office), olefile (legacy Office), hachoir (fallback)
- Read-only handlers (RAW images, legacy Office, MKV/AVI) are enforced at the API level β
/writeand/deletereturn422if the handler doesn't support the operation - Filesystem access always goes through
validate_file_path/validate_directory_pathbefore touching disk
- The Electron renderer talks to the OS only through the
preload.jscontextBridgesurface (dialogs, path helpers, drive listing) β no direct filesystem or process access - The renderer talks to the Python sidecar only over HTTP to
127.0.0.1:{dynamic_port}, never a hardcoded port
- Code-signed installers β releases are currently unsigned (no purchased certificate). Windows SmartScreen will warn on first run; this is expected, not a compromise indicator. See Installation Guide for how to proceed safely
- Malware/content scanning β MetaLens edits metadata; it does not scan file contents for malicious payloads
- Encryption β files and their metadata are stored and edited in plain form on disk, as with any local file manager
- Guarantee against all data loss β while writes are atomic, always keep backups of files you can't afford to lose
For files handled outside MetaLens, also rely on your OS's built-in protections (Windows Defender / your Linux distro's package signing) and keep regular backups.
If you discover a security vulnerability in MetaLens:
- Do not open a public GitHub issue β this exposes the vulnerability before a fix ships
- Use GitHub Security Advisory:
- Navigate to: https://github.com/overwrite00/MetaLens/security/advisories
- Click "Report a vulnerability"
- Describe the vulnerability in detail, including reproduction steps
- 48 hours: acknowledgment of your report
- 2 weeks (critical): target fix timeline for critical vulnerabilities
- 30 days (high): target fix timeline for high-severity vulnerabilities
- Coordinated disclosure: we'll work with you on a disclosure timeline
We appreciate responsible disclosure and will credit you in the security advisory (unless you prefer anonymity).
- Subscribe to releases: Watch the Releases page
- Check security advisories: GitHub Security Advisory
- Update regularly: dependency security fixes are tracked in CHANGELOG.md
- Code of Conduct β community guidelines
- Contributing Guide β how to contribute securely
- REQUIREMENTS.md β dependency information
- CHANGELOG.md β version history and security fixes
Last updated: 2026-07-14 β Contributing | Back to README β