C Lua Makefile Shell JavaScript C++ Other
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bench tests bench: print commands executed by make Jun 28, 2018
ci update minimal libknot version to 2.7.1 Aug 17, 2018
client use common convention for configuration path and user name Jan 24, 2018
contrib Merge pointer-arith changes into cache-NSEC3 May 29, 2018
daemon cache.clear() tests: add cache.clear('.', true) Aug 17, 2018
distro libkres: bump ABI to 8 Aug 17, 2018
doc update minimal libknot version to 2.7.1 Aug 17, 2018
etc make: install ETCDIR/** as world-readable Feb 22, 2018
lib cache: relocate cache ABI version entry Aug 17, 2018
modules remove memcached and redis modules from source tree Aug 17, 2018
scripts scripts: utility script for OBS test build Aug 17, 2018
tests cache.clear: tests Aug 17, 2018
.clang-tidy lint: enabled several readability linters and fixed issues Jan 12, 2018
.dir-locals.el added surmised C indentation rules for emacs users Apr 14, 2016
.gitignore added package_version() in Lua, removed version module Jul 16, 2018
.gitlab-ci.yml ci: check libkres symbols file Aug 17, 2018
.gitmodules use https for lua-aho-corasick submodule Apr 9, 2018
.luacheckrc cache.clear: clearing root clears everything, not only the root zone Aug 17, 2018
.travis.yml travis: skip Deckard tests Jan 4, 2018
AUTHORS Refresh AUTHORS Jan 16, 2017
COPYING move URLs from http to https where supported Jul 16, 2016
CodingStyle update link to Linux kernel coding style Jan 26, 2017
Makefile remove memcached and redis modules from source tree Aug 17, 2018
NEWS release 3.0.0 Aug 17, 2018
README.md rebrand to "Knot Resolver" Aug 14, 2018
config.mk release 3.0.0 Aug 17, 2018
coverage.mk rebrand to "Knot Resolver" Aug 14, 2018
platform.mk makefile: use python3 to detect modules Feb 27, 2018


Knot Resolver

Build Status Coverage Status Coverity Documentation Status

Knot Resolver is a caching full resolver implementation written in C and LuaJIT, both a resolver library and a daemon. The core architecture is tiny and efficient, and provides a foundation and a state-machine like API for extensions. There are three modules built-in - iterator, validator, cache, and a few more are loaded by default. Most of the rich features are written in Lua(JIT) and C. Batteries are included, but optional.

The LuaJIT modules, support DNS privacy and DNSSEC, and persistent cache with low memory footprint make it a great personal DNS resolver or a research tool to tap into DNS data. TL;DR it's the OpenResty of DNS.

Strong filtering rules, and auto-configuration with etcd make it a great large-scale resolver solution.

The server adopts a different scaling strategy than the rest of the DNS recursors - no threading, shared-nothing architecture (except MVCC cache that may be shared) that allows you to pin instances on available CPU cores and grow by self-replication. You can start and stop additional nodes depending on the contention without downtime.

It also has strong support for DNS over TCP, notably TCP Fast-Open, query pipelining and deduplication, and response reordering.


The latest stable packages for various distributions are available in our upstream repository. Follow the installation instructions to add this repository to your system.

Knot Resolver is also available from the following distributions' repositories.

Building from sources

Knot Resolver mainly depends on Knot DNS libraries, LuaJIT and libuv. See the Building project documentation page for more information.

Docker image

This is simple and doesn't require any dependencies or system modifications, just run:

$ docker run -it cznic/knot-resolver

See the build page hub.docker.com/r/cznic/knot-resolver for more information and options. The images are meant as an easy way to try knot-resolver, and they're not designed for production use.


The project builds a resolver library in the lib directory, and a daemon in the daemon directory. It requires no configuration or parameters to run a server on localhost.

$ kresd

See the documentation at knot-resolver.readthedocs.io for more options.

Contacting us