Avantgarde: Get Notified of Updates to Packages

Avantgarde checks your projects’ dependencies for outdated packages and informs you by e-mail or on the console. It works with Homebrew, Rubygems, and NPM. Both the package management systems as well as the notification methods are easily extendable.

It is a fork of CheckZilla by Michael Bensoussan, which is no longer maintained.


For issue tracking and more see the github repository.


$> gem install avantgarde
$> avantgarde -i
$> <edit config file at ~/.avantgarde/config.rb>
$> avantgarde

The annotated sample configuration with all available checkers, notifiers and option:'%<new_updates> updates available for %<hostname>') do

  ## Checkers find updated packages for your system or projects
  # Check for updates to a project's Rubygem dependencies

   check_updates :rubygem do |my_project|
     my_project.path = "/Users/me/projects/my_project"

  # Checkers can be used multiple times to cover multiple projects

  check_updates :rubygem do |my_other_project|
    my_other_project.path = "/Users/me/projects/my_other_project"

 # Checking for updated npm packages

  check_updates :npm do |hipster_project|
     hipster_project.path = "/Users/me/Desktop/playground/my_node_project"

  # Checks for HomeBrew updates. No options

  check_updates :homebrew

  ## Notifiers define how you will be informed of changes

  # Send notification by email

  notify_by :email do |email|
    email.pony_settings = {
      to: '',

      # Available named references are
      # %{new_updates} The number of newly found updates to defined dependencies
      # %{old_updates} The number of available updates that were already included in previous notifications
      # %{hostname}
      # Default is the model's name as specified at the beginning of this file

      subject: '%<new_updates> updates available',
      from: '',
      via: :smtp,
      via_options: {
        address:              '',
        port:                 '587',
        enable_starttls_auto: true,
        user_name:            'me_me_me',
        password:             '********',
        authentication:       :plain,
        domain:               "localhost.localdomain"

  # A notfier that prints the report to STDOUT

  notify_by :console do |console|
    # default: console.template = 'console.ansi.erb'


Checkers are defined by extending Avantgarde::Checker::BaseChecker. They are required to implement two methods:

# Override this method and implement the specific
      # command to get outdated package information
      # @example return `cd #{@path}; npm outdated --silent`
      # @return [String] usually the output of a command like npm outdated, to be processed via regex in the next step
      def native_outdated_command_results
        fail "get_outdated needs to be overridden for a specific checker"

      # extracts information about outdated packages from the raw results
      # @param [String] raw_results usually produced by ::native_outdated_command_results
      # @return [Hash] {'package_name_1': {versions: {installed: '1.0.0', latested: '1.1.0', wanted: '1.0.5'}}}
      def extract_package_information(raw_results)
        fail "extract_package_information needs to be overridden for a specific checker and do something with #{raw_results}"


Notifiers are defined by inheriting from Avantgarde::Notifier::Console.


  • Persistence layer (no need to be fancy, a .yml could do it) so you can send incremental updates
  • Add notifiers global options like only and except. They would both take an array of checkers.
  • Checkers: apt-get, apm etc.
  • HTML report

Helping out

  • Feedback is good
  • Issue reporting is better
  • Pull requests are way better
  • Awesome pull requests are obviously awesome