The Varnish Configuration Language is a very powerful programming language, but the scope of its features is entirely focused on the finite state machine, on HTTP requests, HTTP responses, caching objects, and backend fetches.
It is a domain-specific language, and due to its scope, you might run into limitations.
For example, you cannot look up a client IP address in a database for access control purposes. It is also not possible to load balance using a pool of backends using pure VCL.
Luckily Varnish has a good solution for these types of limitations, and the solution comes in the form of Varnish Modules, or VMODs as we tend to call them.
VMODs are the focus of this chapter.