A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir". https://platformdirs.readthedocs.io
Find a file
2026-09-08 22:07:03 +00:00
.github [pre-commit.ci] pre-commit autoupdate (#536) 2026-08-31 12:40:32 -07:00
docs Release 4.11.8 2026-09-08 22:07:03 +00:00
src/platformdirs fix: retain Homebrew site directories inside virtual environments (#543) 2026-09-08 20:07:00 +00:00
tests fix: retain Homebrew site directories inside virtual environments (#543) 2026-09-08 20:07:00 +00:00
.gitignore Let the non-ctypes resolvers find the desktop folder (#519) 2026-08-07 22:56:22 +00:00
.pre-commit-config.yaml [pre-commit.ci] pre-commit autoupdate (#541) 2026-09-08 05:30:39 +02:00
.proselintrc.json 📚 docs: split usage guide into tutorial, how-to, and reference (#441) 2026-02-14 17:14:22 +00:00
.readthedocs.yml 🔧 build: migrate from hatch to tox with ty (#415) 2026-02-11 21:04:02 -08:00
CONTRIBUTING.md 📝 docs: enhance README, fix issues, and reorganize platforms.rst (#445) 2026-02-14 21:00:36 +00:00
LICENSE Fix LICENSE 2022-07-06 00:18:07 -07:00
pyproject.toml [pre-commit.ci] pre-commit autoupdate (#536) 2026-08-31 12:40:32 -07:00
README.md feat: add user_publicshare_dir, user_templates_dir, user_fonts_dir, user_preference_dir (#491) 2026-05-28 03:27:55 +00:00
tox.toml 👷 ci: run the test suite against Python 3.15 (#512) 2026-07-20 23:35:29 -07:00

platformdirs

PyPI version Python versions CI Downloads

A Python package for determining platform-specific directories (e.g. user data, config, cache, logs). Handles the differences between macOS, Windows, Linux/Unix, and Android so you don't have to.

Quick start

from platformdirs import PlatformDirs

dirs = PlatformDirs("MyApp", "MyCompany")
dirs.user_data_dir  # ~/.local/share/MyApp (Linux)
dirs.user_config_dir  # ~/.config/MyApp (Linux)
dirs.user_cache_dir  # ~/.cache/MyApp (Linux)
dirs.user_state_dir  # ~/.local/state/MyApp (Linux)
dirs.user_log_dir  # ~/.local/state/MyApp/log (Linux)
dirs.user_documents_dir  # ~/Documents
dirs.user_downloads_dir  # ~/Downloads
dirs.user_runtime_dir  # /run/user/<uid>/MyApp (Linux)

For Path objects instead of strings:

from platformdirs import PlatformDirs

dirs = PlatformDirs("MyApp", "MyCompany")
dirs.user_data_path  # pathlib.Path('~/.local/share/MyApp')
dirs.user_config_path  # pathlib.Path('~/.config/MyApp')

Convenience functions for quick access:

from platformdirs import user_data_dir, user_config_path

user_data_dir("MyApp", "MyCompany")  # returns str
user_config_path("MyApp", "MyCompany")  # returns pathlib.Path

Directory types

Application directories — scoped to your app name and version:

  • Data: Persistent application data (user_data_dir, site_data_dir)
  • Config: Configuration files and settings (user_config_dir, site_config_dir)
  • Preference: User preferences, distinct from config on macOS (user_preference_dir)
  • Cache: Cached data that can be regenerated (user_cache_dir, site_cache_dir)
  • State: Non-essential runtime state like window positions (user_state_dir, site_state_dir)
  • Logs: Log files (user_log_dir, site_log_dir)
  • Runtime: Runtime files like sockets and PIDs (user_runtime_dir, site_runtime_dir)

App dirs have both user_* (per-user, writable) and site_* (system-wide, read-only) variants where applicable.

User media directories — standard user-facing folders, not scoped to app name:

  • Documents (user_documents_dir), Downloads (user_downloads_dir)
  • Pictures (user_pictures_dir), Videos (user_videos_dir), Music (user_music_dir)
  • Desktop (user_desktop_dir), Projects (user_projects_dir)
  • Public share (user_publicshare_dir), Templates (user_templates_dir)
  • Fonts (user_fonts_dir) — user-writable font installation directory
  • Executable (user_bin_dir, site_bin_dir), Applications (user_applications_dir, site_applications_dir)

Documentation

Full documentation is available at platformdirs.readthedocs.io:

Contributions are welcome! See CONTRIBUTING.md for details.