## 2.15 Packs: community add-ons

SWI-Prolog has a mechanism for easy incorporation of community extensions. See the pack landing page for details and available packs. This section documents the built-in predicates to attach packs. Predicates for creating, registering and installing packs are provided by the library `library(prolog_pack)`.

attach_packs
  Attaches all packs in subdirectories of directories that are accessible through the file search path (see absolute_file_name/3) `pack`. The default for this search path is given below. See file_search_path/2 for the `app_data` search path.

      user:file_search_path(pack, app_data(pack)).

  The predicate attach_packs/0 is called on startup of SWI-Prolog.

attach_packs(+Directory)
  Attach all packs in subdirectories of Directory. Same as `attach_packs(Directory,[])`.
attach_packs(+Directory, +Options)
  Attach all packs in subdirectories of Directory. Options is one of:
  search(+Where)
    Determines the order in which pack library directories are searched. Default is to add new packages at the end (`last`). Using `first`, new packages are added at the start.
  duplicate(+Action)
    Determines what happens if a pack with the same name is already attached. Default is `warning`, which prints a warning and ignores the new pack. Other options are `keep`, which is like `warning` but operates silently and `replace`, which detaches the old pack and attaches the new.

  The predicate attach_packs/2 can be used to attach packages that are bundled with an application.