A library to locate common directories using platform-specific conventions.
What's this?
This library follows platform-specific conventions to locate common directories.
For example, the correct directory to use for application configuration files
might be $HOME/.config/my-app on Linux,
$HOME/Library/Application Support/My App on Macos, and
%APPDATA%\My App\config on Windows.
To use:
var appDirs = getAppDirs(application: 'FooBar App');
// Use this directory for general application configuration files.
var configDir = appDirs.config;
...
// Use this directory for cached information.
var cacheDir = appDirs.cache;
...
See also our API docs.
Mac usage
Mac standards
For MacOS defaults, we follow Apple's
- Standard Directories
docs. This generally puts files in subdirectories of
$HOME/Library, which is appropriate for most Mac apps.
Mac alternate conventions
API clients can opt into a separate set of file location convetions for Macos.
This is done via the preferUnixConventions flag:
var appDirs = getAppDirs(
application: 'FooBar App',
preferUnixConventions: true,
);
This will opt that tool into using Unix style directory conventions - for
example, putting config files into $HOME/.config/foobar-app. While not the
Macos standard file locations, this could better match user expectations for
things like command-line tools.
Linux usage
On Unix OSes, we follow the
XDG Base Directory Specification.
This is generally creating directories under the user's $HOME directory, but
respecting various $XDG_* environment variable overrides.
Windows usage
On Windows, we follow the standard Windows directory structure convention (docuented here and elsewhere).
BaseDirs values
This is the table of directories returned for Directories.baseDirs.
AppDirs - the recommended API for people to use - builds on top of this using
information like the application name, qualifier (org, com, ...) and
organization name.
| Property | Linux | Mac | Windows |
|---|---|---|---|
| home | $HOME |
$HOME |
%USERPROFILE% |
| cache | $XDG_CACHE_HOME or $HOME/.cache |
$HOME/Library/Caches |
%LOCALAPPDATA% |
| config | $XDG_CONFIG_HOME or $HOME/.config |
$HOME/Library/Application Support |
%APPDATA% |
| data | $XDG_DATA_HOME or $HOME/.local/share |
$HOME/Library/Application Support |
%APPDATA% |
| dataLocal | see data | see data | %LOCALAPPDATA% |
| preference | see config | $HOME/Library/Preferences |
see config |
| state | $XDG_STATE_HOME or $HOME/.local/state |
null |
null |
Useful references
Specifications and documentation:
- https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
- developer.apple.com/library/archive/documentation/FileManagement
- https://pureinfotech.com/list-environment-variables-windows-10/
Similar libraries for other platforms:
Publishing automation
For information about our publishing automation and release process, see https://github.com/dart-lang/ecosystem/wiki/Publishing-automation.
Libraries
- app_dirs
- A library to locate common directories using platform-specific conventions.