Detect Programming Languages by extensionor or #! or content from files and texts, no dependencies
Switch branches/tags
Pull request Compare This branch is 25 commits ahead, 5254 commits behind github:master.
Latest commit ddc4aeb Apr 6, 2013 @grosser grosser Merge pull request #3 from mattdbridges/fix-bundler-security
Update Gemfile source
Failed to load latest commit information.
bin add tests for cli interface Oct 1, 2011
lib bump version May 5, 2012
test Roughly update the library to have all the languages that upstream Li… May 5, 2012
.gitignore Ignore Gemfile.lock May 11, 2011
.travis.yml give me notifications May 5, 2012
LICENSE Add LICENSE Jun 25, 2011 test and fix top-level interface Oct 1, 2011
Rakefile add bundler tasks Oct 1, 2011
language_sniffer.gemspec add version Oct 1, 2011


Find out what language a given file is.
This is a stripped down version of linguist

  • pure language detection, nothing else ...
  • no dependencies
  • no Github business logic

Language detection

Most languages are detected by their file extension. This is the fastest and most common situation. For script files, which are usually extensionless, we do "deep content inspection"™ and check the shebang of the file. Checking the file's contents may also be used for disambiguating languages. C, C++ and Obj-C all use .h files. Looking for common keywords, we are usually able to guess the correct language.

LanguageSniffer.detect("lib/language_sniffer.rb") #=> "Ruby"

LanguageSniffer.detect("bin/language_sniffer") #=> "Ruby"

You can also just pass :content and :path, no need to have a local file.

LanguageSniffer.detect("xxx/language_sniffer", :content =>'bin/language_sniffer)) #=> "Ruby"

See lib/language_sniffer/language.rb and lib/language_sniffer/languages.yml.


To get it, clone the repo and run Bundler to install its dependencies.

git clone
cd language_sniffer/
bundle install

To run the tests:

bundle exec rake test


  1. Fork it.
  2. Create a branch (git checkout -b detect-foo-language)
  3. Make your changes
  4. Run the tests (bundle install then bundle exec rake)
  5. Commit your changes (git commit -am "Added detection for the new Foo language")
  6. Push to the branch (git push origin detect-foo-language)
  7. Create a Pull Request from your branch.
  8. Promote it. Get others to drop in and +1 it.


Original work by Github,
stripping and simplification by Michael Grosser