ExifTool by Phil Harvey: Metadata Reader and Writer for 200+ File Formats
ExifTool meta information reader/writer
At a glance
- What is it?
- ExifTool is a Perl command-line tool and library that reads and writes metadata across a wider range of file types than any other widely available tool, including EXIF, IPTC, XMP, GPS, and manufacturer-specific maker notes from Canon, Nikon, Sony, and dozens of other camera brands. It runs on all major platforms, requires no compilation to use, and is licensed under GPL-3.0.
- Who is it for?
- ExifTool is the right choice when you need reliable metadata access across a wide variety of file formats from the command line or from a Perl script. It is especially appropriate for digital photographers dealing with proprietary RAW formats from multiple camera manufacturers, for archivists working with heterogeneous file collections, and for anyone who needs to batch-process metadata without writing parsing code from scratch.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 126 days ago.
- What is it written in?
- Mainly Perl, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What ExifTool reads and writes
ExifTool supports reading metadata from well over 100 file types. A representative sample from the README includes JPEG, CR2, CR3, NEF, ARW, RAF, DNG, HEIC, AVIF, MP4, MOV, PDF, TIFF, PNG, GIF, WEBP, PSD, AI, EPS, SVG, XLS, XLSX, DOC, DOCX, and many more. The supported formats cover write capability for a smaller subset and read-write-create capability for a further subset including EXIF, GPS, IPTC, XMP, MIE, and a handful of others.
The metadata formats the tool handles include EXIF, GPS, IPTC, XMP, MakerNotes, Photoshop IRB, ICC Profile, JFIF, PDF, PNG, and several dozen proprietary formats from camera manufacturers. Maker notes are the most specific and valuable capability: these are undocumented vendor-specific fields embedded in image files by cameras from Canon, Casio, DJI, FLIR, FujiFilm, Nikon, Olympus, Panasonic, Pentax, Samsung, Sony, and others. ExifTool decodes them when possible.
The README is also the documentation. It states that `html/index.html` in the distribution provides more details about ExifTool features. The distribution package contains test images in `t/images/` that work as quick sanity checks.
Running ExifTool without installing it
The README distinguishes between running ExifTool directly from the distribution and installing it as a Perl module. For most use cases, installation is not required.
After downloading and extracting the distribution package, the `exiftool` script can be run immediately from the extraction directory. The README gives this example:
./exiftool t/images/ExifTool.jpgThis reads metadata from one of the bundled test images. To use a different image, substitute the path:
cd ~/Desktop
gzip -dc Image-ExifTool-13.59.tar.gz | tar -xf -
cd Image-ExifTool-13.59
./exiftool t/images/ExifTool.jpgThe README notes that Windows cmd shell users may need to rename the script to `exiftool.pl` or invoke it with `perl exiftool`. The `lib/` directory must remain alongside the `exiftool` script unless the Image::ExifTool Perl module is installed system-wide.
For situations where ExifTool needs to be available to other Perl scripts, or available from any directory without specifying the path, the full installation process builds and installs it as a module.
Installing ExifTool as a Perl module
The full installation uses the standard Perl module process described in the README:
perl Makefile.PL
make
make test
make installThe last step requires root access. The README notes that some Perl installations, including the standard macOS installation, may lack the files needed for the first step, but that manual installation by moving the `exiftool` script and `lib/` directory to any directory on the PATH is an alternative.
The README includes a caution for macOS: the system Perl installation may not include everything `Makefile.PL` needs. On macOS, the common approach is to install a separate Perl through Homebrew or Perlbrew and use that environment instead.
There are no npm or pip equivalents. ExifTool is a Perl application and requires Perl to run. On systems where Perl is already present, the direct execution approach is the fastest path to a working setup.
What the maker notes capability means in practice
Maker notes are the most technically interesting part of ExifTool. Camera manufacturers embed proprietary metadata into image files using undocumented binary structures. Canon, Nikon, Sony, and others each have their own formats. Without maker notes support, you can read the standard EXIF fields from a camera's image but cannot access information like lens type, focus mode, flash compensation, or other fields that the camera records in its private namespace.
ExifTool contains decoded specifications for maker notes from Canon, Casio, DJI, FLIR, FujiFilm, GE, HP, JVC/Victor, Kodak, Leaf, Minolta and Konica-Minolta, Nikon, Nintendo, Olympus and Epson, Panasonic and Leica, Pentax and Asahi, Phase One, Reconyx, Ricoh, Samsung, Sanyo, Sigma and Foveon, and Sony, as listed in the README.
This coverage is why ExifTool is the standard tool for photography metadata work. No open-source alternative covers as many camera manufacturers' proprietary formats. The trade-off is that ExifTool can only document what has been reverse-engineered: if a camera model has undocumented proprietary fields not yet decoded, ExifTool will show the raw bytes but not interpret them.
Limitations and when ExifTool is the wrong tool
ExifTool is a Perl command-line application. If your application is written in Python, JavaScript, Go, or another language, you either call ExifTool as a subprocess or use a language-native library. The subprocess approach works but adds a process launch overhead for each file, which becomes significant at high volume. Language-native libraries for metadata access tend to support fewer formats and fewer maker note vendors.
ExifTool does not provide a GUI. Third-party GUIs such as ExifToolGUI exist, but they are separate projects not affiliated with this repository. If your users need to edit metadata through a visual interface, ExifTool is the engine but not the complete solution.
The GPL-3.0 license means that software incorporating ExifTool may have licensing obligations. Commercial applications that distribute ExifTool as part of their product need to satisfy the GPL requirements. Using ExifTool as an external process call does not have the same obligations as linking it into your code, but legal review is advisable for commercial deployments.
ExifTool writes metadata within the file's existing metadata structures. It does not rewrite image pixels or change the visual content of images. If you need to modify visual content, ExifTool is the wrong tool.
Safety and reliability in practice
ExifTool has been under continuous development by Phil Harvey since the 1990s. The README lists no GitHub Releases, but the `Changes` file in the repository tracks version history. The last push was on 2026-05-27.
ExifTool is considered a safe tool to run on untrusted files. It reads metadata and does not execute code embedded in files. The `make test` step in the installation process runs the included test suite against test images in `t/images/`, which provides a baseline verification that the installation functions correctly.
For write operations, ExifTool creates a backup of the original file by default before modifying it, placing the backup in the same directory with an `_original` suffix. This behavior can be changed with command-line flags, but the default protects against data loss during metadata editing operations. The README does not document all command-line flags; those are covered in the documentation at exiftool.org.
Editorial conclusion
ExifTool is the right choice when you need reliable metadata access across a wide variety of file formats from the command line or from a Perl script. It is especially appropriate for digital photographers dealing with proprietary RAW formats from multiple camera manufacturers, for archivists working with heterogeneous file collections, and for anyone who needs to batch-process metadata without writing parsing code from scratch. It is not the right choice when you need a GUI, when your application is not written in Perl or does not call external processes, or when you need to modify the binary content of a file rather than its metadata. Verify that the specific file format and tag combination you need is listed in the supported formats table before building a workflow around ExifTool.
Frequently asked questions
What is ExifTool used for?
ExifTool is used to read, write, and edit metadata in image, audio, video, and document files. Common uses include reading EXIF data from camera photos, editing GPS coordinates, removing personal data from files before sharing, and batch-renaming photos using embedded date information.
Is ExifTool safe to use?
ExifTool reads and writes metadata only. It does not execute code embedded in files. For write operations, it creates a backup of the original file by default before making changes. The GPL-3.0 licensed source code is publicly available for inspection.
Is ExifTool free to use?
Yes. ExifTool is released under the GPL-3.0 license and is free to use. Commercial applications that incorporate ExifTool as a linked library need to comply with GPL requirements. Using it as an external command-line process has different, less restrictive obligations.
What does ExifTool stand for?
ExifTool is named after the EXIF metadata standard it was originally built to handle. EXIF stands for Exchangeable Image File Format, a standard for storing metadata in image files. ExifTool has since expanded to support many other metadata formats and file types beyond EXIF.
How do I use ExifTool to read metadata from a file?
Run the exiftool command followed by the file path, for example: ./exiftool t/images/ExifTool.jpg. This prints all metadata fields found in the file. The README recommends running it from within the distribution directory if you have not installed it system-wide.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/exiftool-exiftool)