Understanding and working with macOS Uniform Type Identifiers (UTIs)
macOS uses Uniform Type Identifiers (UTIs) to identify file types and data formats. This guide covers:
- Understanding UTI structure
- Common content types
- Working with UTIs in queries
- Content type discovery
UTIs follow a reverse-DNS naming convention:
public.image // Base type for all images
com.adobe.photoshop.image // Specific to Photoshop
public.jpeg // JPEG image format
import { QueryBuilder } from 'mdfind-node'
// Basic documents
const docs = await new QueryBuilder().contentType('public.content').execute()
// Text documents
const text = await new QueryBuilder().contentType('public.text').execute()
// PDF documents
const pdfs = await new QueryBuilder().contentType('com.adobe.pdf').execute()// All images
const images = await new QueryBuilder().contentType('public.image').execute()
// Specific formats
const jpegs = await new QueryBuilder().contentType('public.jpeg').execute()
const pngs = await new QueryBuilder().contentType('public.png').execute()
const raws = await new QueryBuilder().contentType('public.camera-raw-image').execute()// All audiovisual content
const media = await new QueryBuilder().contentType('public.audiovisual-content').execute()
// Audio only
const audio = await new QueryBuilder().contentType('public.audio').execute()
// Video only
const video = await new QueryBuilder().contentType('public.movie').execute()// All archives
const archives = await new QueryBuilder().contentType('public.archive').execute()
// Specific formats
const zips = await new QueryBuilder().contentType('public.zip-archive').execute()
const disk = await new QueryBuilder().contentType('public.disk-image').execute()import { getContentTypes } from 'mdfind-node'
// Get all registered types
const types = getContentTypes()
// Check descriptions
console.log(types['public.image']) // "Image files (JPEG, PNG, etc.)"
console.log(types['public.audio']) // "Audio files (MP3, WAV, etc.)"public.item- Base type for all filespublic.content- Base type for all contentpublic.data- Base type for data filespublic.composite-content- Multi-type content
public.text- Plain textpublic.plain-text- Plain text without markuppublic.rtf- Rich Text Formatpublic.html- HTML documentspublic.xml- XML documentspublic.source-code- Source code files
public.image- All imagespublic.jpeg- JPEG imagespublic.png- PNG imagespublic.tiff- TIFF imagespublic.camera-raw-image- Camera RAW files
public.movie- Video filespublic.audio- Audio filespublic.mp3- MP3 audiopublic.mpeg-4- MPEG-4 mediacom.apple.quicktime-movie- QuickTime movies
public.archive- All archivespublic.zip-archive- ZIP archivespublic.disk-image- Disk imagesorg.gnu.gnu-zip-archive- GZIP archives
- Use standard types over vendor-specific ones
- Check type existence before querying
- Handle unknown types gracefully
- Consider platform-specific types
- Use content type tree for inclusive searches
import { QueryBuilder } from 'mdfind-node'
// Find high-quality images
const images = await new QueryBuilder()
.contentType('public.image')
.minImageDimensions(1920, 1080)
.execute()
// Find audio files
const audio = await new QueryBuilder()
.contentType('public.audio')
.minAudioQuality(44100, 320000)
.execute()// Find text documents
const docs = await new QueryBuilder().isText().modifiedAfter(new Date('2024-01-01')).execute()
// Find PDFs
const pdfs = await new QueryBuilder()
.isPDF()
.largerThan(1024 * 1024) // > 1MB
.execute()- mdfind Documentation - Core search functionality
- Query Builder Documentation - Type-safe query construction
- Attributes Documentation - Available metadata attributes