Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

falood/exsync

Yet another elixir reloader.

falood/exsync.json
{
"createdAt": "2014-11-03T05:03:17Z",
"defaultBranch": "main",
"description": "Yet another elixir reloader.",
"fullName": "falood/exsync",
"homepage": null,
"language": "Elixir",
"name": "exsync",
"pushedAt": "2024-07-14T14:11:37Z",
"stargazersCount": 171,
"topics": [],
"updatedAt": "2025-09-22T13:18:03Z",
"url": "https://github.com/falood/exsync"
}

An Elixir reloader. When your code changes, ExSync automatically recompiles it.

Supports recompiling :path dependencies without additional configuration. Also supports a :reload_callback which is an MFA (Module Function Arguments) that will be called after each time the code is recompiled.

ExSync depends on FileSystem which has some required dependencies.

  1. Create a new application:
Terminal window
mix new my_app
  1. Add exsync to your mix.exs dependencies:
def deps do
[
{:exsync, "~> 0.4", only: :dev},
]
end

NOTE: if you have an umbrella application then add ExSync to one the apps in the umbrella.

All configuration for this library is handled via the application environment.

:addition_dirs - Additional directories to monitor

For example, to monitor the priv directory, add this to your config.exs:

config :exsync, addition_dirs: ["/priv"]

:extensions - List of file extensions to watch for changes. Defaults to: [".erl", ".hrl", ".ex", ".eex"]

:extra_extensions - List of additional extensions to watch for changes (cannot be used with :extensions)

For example, to watch .js and .css files add this to your config.exs:

config :exsync, extra_extensions: [".js", ".css"]

:exclusions - List of regular expressions that, if matched, exclude a file from being noticed by exsync.

For example, to exclude Emacs temporary files:

config :exsync, exclusions: [~r/#/]

:logging_enabled - Set to false to disable logging (default true)

:reload_callback - A callback MFA that is called when a set of files are done reloading. Can be used to implement your own special handling to react to file reloads.

:reload_timeout - Amount of time to wait in milliseconds before triggering the :reload_callback. Defaults to 150ms.

For example, to call MyApp.MyModule.handle_reload() add this to your config.exs:

config :exsync,
reload_timeout: 75,
reload_callback: {MyApp.MyModule, :handle_reload, []}