Discover dead view files in your app. Track view layer render usage
Clone or download
Latest commit 4c8d7b8 Jan 11, 2015
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib update version Jan 11, 2015
test Change specs to consider new target argument. Jan 8, 2015
.gitignore initial commit Apr 8, 2014
Gemfile initial commit Apr 8, 2014
LICENSE.txt initial commit Apr 8, 2014 Update documentation. Jan 8, 2015
Rakefile added test coverage Apr 16, 2014
flatfoot.gemspec got a report about issues with mini:test on Ruby 2.1, by adding test-… Jan 8, 2015


Flatfoot is a synonym for tracker. As the name RenderTracker seemed generic, and gumshoe my favorite was taken.

This gem will help you track unused views in your application.


Add this line to your application's Gemfile:

gem 'flatfoot'

And then execute:

$ bundle

Or install it yourself as:

$ gem install flatfoot


To use this gem, just initialize it in some initializer like config/initializers/notifications.rb

then create an instance and subscribe it to ActiveSupport::Notifications events.


ActiveSupport::Notifications.subscribe /render_partial.action_view|render_template.action_view/ do |name, start, finish, id, payload|
  FLATFOOT.track_views(name, start, finish, id, payload) unless name.include?('!') 

Start up your app and then in console you can check used views or unused views

=> ["app/views/layouts/_old_layout.html.erb",...

=> ["app/views/something/_old_partial.html.erb",...

After making changes deploying or just to clear out the Redis size you can clear the saved data.


If you set the FLATFOOT constant in a initializer you can also use the included rake tasks. Edit your Rakefile and add

require 'flatfoot/tasks'

Then you should have tasks to help view the flatfoot data

rake flatfoot:reset   # reset tracked views
rake flatfoot:unused  # report unused views
rake flatfoot:used    # report used views

Customising Targets

Flatfoot default lookup is app/views/**/*.html.erb rejecting all mailer views. This will cover many apps but sometimes your project has different characteristics as:

  • using other view markup language as Haml;
  • using different folder structure (engines, for example), or;
  • you want to analyze parts of your app (/admin, for example).

The only change you need in your initialize is define your target during tracker initialization as example below:

target = Dir.glob("app/views/admin/**/*.html.haml").reject do |file|
FLATFOOT =, options: { target: target })


  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request


view the LICENSE.txt for details