Equivalents of XDG_CONFIG_HOME and XDG_DATA_HOME on Mac OS X?

LeafStorm picture LeafStorm · Jul 30, 2010 · Viewed 12.1k times · Source

I am planning to develop a cross-platform script. On Linux and other operating systems, it will store configuration in XDG_CONFIG_HOME and data files (specifically, downloaded plugins) in XDG_DATA_HOME. On Windows, it will use APPDATA for both (unless someone has a better idea). However, what would be the proper thing to do on Mac OS X?

On my first glance through a handy Macbook's ~/Library directory, I saw Preferences and Application Support folders. I was originally planning to use those, but Preferences seems to just contain plists with reverse domain names like com.apple.foo.bar.baz.plist, and every folder in Application Support corresponds to a bundle in /Applications, so I'm not sure how well the system would react to files that don't match its standards. Storing them directly in ~/Library might be an option, but I don't want to pollute it with a stray myscript.conf file if there's a better place for it.

Where should I store these files? (And please don't say just ~/.myscript. I know it's the Unix tradition, but it annoys me to see random dotfiles in the home directory.)

Answer

jla picture jla · Feb 22, 2011

Comparing Apple's documentation for the various paths to the XDG Base Directory specifications approximates to the following locations:

  • XDG_CONFIG_HOME ▶︎ ~/Library/Preferences/
  • XDG_DATA_HOME ▶︎ ~/Library/
  • XDG_CACHE_HOME ▶︎ ~/Library/Caches/

Mapping XDG Base Directory Specification locations for "My App" on Mac OS X could look like this:

  • XDG_CONFIG_HOME ▶︎ ~/Library/Preferences/name.often.with.domain.myapp.plist
  • XDG_DATA_HOME ▶︎ ~/Library/My App/
  • XDG_CACHE_HOME ▶︎ ~/Library/Caches/My App/

These mappings seem pretty reasonable but they aren't exact. Some kinds of cache or data may be appropriate for ~/Library/Application Support/My App, and other may be best in the temp locations or the App bundle. All of it is by convention and the same reasons for using the best XDG_ locations apply to using the best locations on the Mac OS X system.

Your annoyance at ~/.myscript is in line with Apple's guidelines: "Don't pollute user space".

References: