app.uti - Uniform Type Identifier API

macOS Uniform Type Identifier (UTI) querying and conversion.

Permission level: L0 (safe, always available)

Methods

app.uti.fromExtension(ext)

Converts a file extension to a UTI.

Parameters:

  • ext (string) - File extension (e.g., “pdf”)

Returns: string, error - UTI string

local uti = app.uti.fromExtension("pdf")    -- "com.adobe.pdf"
local uti = app.uti.fromExtension("png")    -- "public.png"
local uti = app.uti.fromExtension("swift")  -- "public.swift-source"

app.uti.fromMimeType(mime)

Converts a MIME type to a UTI.

Parameters:

  • mime (string) - MIME type

Returns: string, error

local uti = app.uti.fromMimeType("application/pdf")  -- "com.adobe.pdf"
local uti = app.uti.fromMimeType("image/png")        -- "public.png"

app.uti.toExtension(uti)

Converts a UTI to its preferred file extension.

Parameters:

  • uti (string) - UTI string

Returns: string, error

local ext = app.uti.toExtension("com.adobe.pdf")  -- "pdf"
local ext = app.uti.toExtension("public.png")     -- "png"

app.uti.toMimeType(uti)

Converts a UTI to a MIME type.

Parameters:

  • uti (string) - UTI string

Returns: string, error

local mime = app.uti.toMimeType("com.adobe.pdf")  -- "application/pdf"

app.uti.conforms(uti, parent)

Checks whether a UTI conforms to a parent type.

Parameters:

  • uti (string) - UTI string
  • parent (string) - Parent UTI string

Returns: boolean

app.uti.conforms("public.png", "public.image")     -- true
app.uti.conforms("com.adobe.pdf", "public.data")   -- true
app.uti.conforms("public.png", "public.movie")     -- false

app.uti.forFile(path)

Gets the UTI for a file.

Parameters:

  • path (string) - File path

Returns: string, error

local uti = app.uti.forFile("/path/to/image.png")  -- "public.png"

app.uti.description(uti)

Gets the localized description of a UTI.

Parameters:

  • uti (string) - UTI string

Returns: string|nil

local desc = app.uti.description("com.adobe.pdf")  -- "PDF Document"
local desc = app.uti.description("public.png")     -- "PNG Image"

Examples

Classify Files by Type

function MyPlugin:handleClassify(context)
    local categories = {}
    for _, file in ipairs(context.selectedFiles) do
        local uti = app.uti.forFile(file)
        if uti then
            local category = "other"
            if app.uti.conforms(uti, "public.image") then
                category = "images"
            elseif app.uti.conforms(uti, "public.movie") then
                category = "videos"
            elseif app.uti.conforms(uti, "public.audio") then
                category = "audio"
            elseif app.uti.conforms(uti, "public.text") then
                category = "text"
            end

            categories[category] = (categories[category] or 0) + 1
        end
    end

    local info = ""
    for cat, count in pairs(categories) do
        info = info .. cat .. ": " .. count .. "\n"
    end
    app.dialog.alert("File Classification", info)
end
Developer Documentation
User Guide
Getting Started Script Menus FAQ
Script Development
Development Guide
Plugin Development
Quick Start Development Guide Example Plugins
API Reference
Overview API Query Plugin Info Logging Finder Context Plugin Settings Internationalization
UI & Interaction
Dialog Progress Notification Chooser WebView Status Bar Dock
Files & Paths
File Operations Path Utilities Finder Actions Trash Extended Attributes Metadata File Watcher
Data Formats
JSON Plist CSV XML PDF Image
Text & Encoding
String Regex Date & Time Color Crypto
System
Shell Commands Process Application System Info AppleScript Shortcuts
System Info
Network Power/Battery Screen/Appearance Audio Bluetooth Location
Network
HTTP WebSocket URL
Input & Clipboard
Keyboard Mouse Hotkey Clipboard Window
Storage
SQLite Keychain UserDefaults
Media
OCR QR Code
Utilities
Archive UTI Share Timer Wake Lock Thread