VCL based device detection for Varnish Cache.
Perl Python Makefile
Latest commit f0a10c4 Jun 23, 2016 @KeyserSosa KeyserSosa committed on GitHub Merge pull request #33 from behid/master
New format for GoogleBot Mobile and support for BingBot Mobile
Failed to load latest commit information.
backend Add IPv6, be more friendly. Dec 19, 2014
tests Add more overengineering. Dec 19, 2014
.gitignore Big rework of example VCL testing. Dec 19, 2014
CONTRIBUTORS Credit due Jan 15, 2014
INSTALL.rst Use elsif everywhere for consistency Jun 23, 2015
LICENSE Add a license file. Solves #5 Mar 18, 2013
Makefile Wildcard expansion time in make is complicated. Dec 19, 2014
README.rst Announcing new maintainer. Jan 4, 2016
controlset.txt Update controlset to exactly match Google Specifications adn also upd… Jun 21, 2016
devicedetect-dev.vcl Remove set resp.response / resp.http.response Dec 10, 2015
devicedetect.vcl Update controlset to exactly match Google Specifications adn also upd… Jun 21, 2016


Device detection in Varnish


The goal of this VCL set is to provide a simple & easy way of getting device detection going in Varnish Cache. (

Specific problems we want to solve:

  1. Detect the most common and easily detected (mobile/tablet) platforms.
  2. Provide example VCL for using devicedetect.vcl with your existing VCL.

These are explicit not goals for this project:

  • Create a comprehensive set of capabilities per client. We don't want to spend a lot of effort on maintenance.
  • Be perfect. It usually works, but if you need guarantees you should consider the commercial offerings instead.

This project is maintained and updated by the community. If you see any false positives or missing strings, fork the git repository and send a pull request.


You need a recent Varnish release. It may function with some adjustments on previous versions, but you are on your own.

It is worth noting that there is no compilation/linking required. This is VCL code only.

Your backends needs to be able to do produce different content based on what type of device this is. This can be signalled to the backend through the URL, with an extra HTTP header or with a cookie. See the INSTALL.rst file for examples.

Use cases

The following uses are envisioned for this VCL:


See the INSTALL.rst file for details.

Similar efforts

These similar efforts for User-Agent insights are known to us:


This project lives on Github:

Feature requests, bug reports and such can be added to the Github issue tracker.

This code is currently maintained by Christopher Slowe <>.