DNS usually gets attention only after it stops working.
A user says: “I have internet, but sites won’t load.” The network admin pings 8.8.8.8. The ping works. So DNS must be at fault.
Then the classic ritual begins. Reboot the router. Reboot the computer. Switch DNS to 8.8.8.8. Then to 1.1.1.1. Then someone suggests “just set up Pi-hole.”
There’s another way.
You can deploy a full DNS server that acts as a recursive resolver, authoritative DNS, ad and malware filter, local zone server, centralized DNS control point, and gateway to DoH, DoT, or DoQ, all at once.
One option that does all of this is Technitium DNS Server.
And it’s not just another small utility for a Raspberry Pi. Technitium supports authoritative and recursive DNS, DNSSEC, DNS over HTTPS, DNS over TLS, DNS over QUIC, clustering, OIDC SSO, DHCP, an API, DNS Apps, and a long list of modern DNS mechanisms.
Quick answer: Technitium DNS Server is a full open source DNS server for Linux, Windows, macOS, and Raspberry Pi. It works for a home network as well as for a company infrastructure, if you need more than just a DNS cache: traffic control, filtering, local zones, DNSSEC, and modern encrypted DNS protocols.
At the time of publishing, the current version is 15.4. Before installing it, check the latest release on Technitium’s official site.
1. What Technitium DNS Server Is
Technitium DNS Server is a cross-platform open source DNS server.
It can work as a recursive DNS resolver, walking the full DNS chain from root servers down to the authoritative DNS, and as an authoritative DNS server, answering for your own DNS zones.
That already sets it apart from many popular home solutions.
Pi-hole, for instance, is mostly seen as a DNS filter with nice statistics. AdGuard Home is also perceived primarily as a DNS filter for a network.
Technitium looks at the problem more broadly.
What you get is effectively a full DNS platform.
What Technitium Can Do
- recursive DNS resolution;
- authoritative DNS;
- DNSSEC validation and DNSSEC signed zones;
- DNS-over-TLS;
- DNS-over-HTTPS;
- DNS-over-QUIC;
- DNS caching;
- persistent cache;
- prefetching and serve stale;
- DNS filtering;
- DNS sinkhole;
- local DNS zones;
- conditional forwarding;
- split horizon;
- geolocation-based DNS responses via DNS Apps;
- DHCP;
- DNS API;
- 2FA;
- RBAC;
- clustering;
- OIDC SSO;
- AXFR/IXFR;
- DDNS;
- TSIG;
- XFR-over-TLS;
- XFR-over-QUIC.
The full feature list is noticeably longer. The official documentation positions Technitium as a server you can run for both recursive and authoritative DNS.
2. Why Run Your Own DNS at All
The first question usually sounds like this:
“Why would I need my own DNS? There’s 1.1.1.1 and 8.8.8.8.”
If you have three devices at home, maybe you really don’t.
If you have 30 VLANs, several servers, Docker, Proxmox, cameras, access points, printers, IP telephony, and users who love setting DNS manually, the picture changes.
Your own DNS gives you four things.
Control
You decide where DNS queries go.
You can use plain recursion. You can use Cloudflare, Google, Quad9, or another resolver over DoH, DoT, or DoQ. Technitium supports all these options directly.
Local Names
You can set up:
proxmox.lab.example
zabbix.lab.example
nas.lab.example
git.lab.example
And stop trying to remember which address a server had three months ago.
Filtering
DNS queries can be filtered before the browser even connects to an ad or malware domain.
Technitium can automatically update block list URLs and use them to block ads and malicious domains.
Diagnostics
DNS logs show what’s actually happening on your network.
Which domains a client is requesting. Which server answers. Whether there’s an NXDOMAIN. Which queries suddenly spiked into the thousands.
Sometimes a DNS log tells you more about an infected machine than the user does.
3. Technitium DNS Server Architecture
In the simplest setup, the scheme looks like this:
A client asks for DNS.
Technitium first checks local data and cache. If there’s no answer, the query moves on according to the configured scheme.
That can be its own recursion or a forwarder.
4. Recursive DNS or Forwarder?
This is where the interesting engineering part begins.
There are two basic approaches.
Option 1: Full Recursion
Technitium resolves the domain itself.
Roughly:
client -> Technitium -> root -> TLD -> authoritative server.
The upside is obvious: you depend less on a specific public DNS provider.
The downside is just as obvious: you take on more responsibility for DNS infrastructure.
Option 2: Forwarder
Technitium accepts the query from the client, then forwards it to, say, Cloudflare or Quad9.
And the transport can be encrypted.
Technitium supports DoH, DoT, and DoQ as transport for forwarders.
For a small company, I’d often pick this option.
It’s simpler to operate and gives you a clear control point.
5. DNS over HTTPS, DNS over TLS, and DNS over QUIC
This is where marketing confusion usually kicks in.
DoH, DoT, and DoQ don’t make DNS “magically secure.” They encrypt the transport between the DNS client and the DNS service.
Those are different things.
- DoT uses TLS.
- DoH carries DNS over HTTPS.
- DoQ uses QUIC.
Technitium handles these protocols both as a client toward a forwarder and as a server for network clients. DoH additionally supports HTTP/1.1, HTTP/2, and HTTP/3.
For infrastructure, this matters because you can send DNS outbound through encrypted transport from one central point.
6. DNSSEC
DNSSEC isn’t about encrypting DNS.
It solves a different problem: verifying the cryptographic authenticity of DNS answers.
Technitium supports DNSSEC validation for the recursive resolver and forwarders, as well as DNSSEC-signed zones. RSA, ECDSA, and EdDSA are all supported.
For a corporate network, this is especially useful wherever DNS touches critical services.
But you can’t just flip DNSSEC on and forget about it.
First check the chain of trust. Then test failover behavior.
7. DNS Filtering and Sinkhole
One of the most appealing features of Technitium for home networks and small offices is domain blocking.
The mechanics are simple.
A client asks for DNS:
ads.example.net
Technitium checks the domain against a block list.
If the domain is blocked, normal resolution doesn’t happen.
The ad never gets an IP.
Technitium supports multiple block list URLs and automatically updates them.
There are more advanced options too.
For example, the Advanced Blocking DNS App supports REGEX-based block lists and different lists for different IP addresses or subnets.
This is where Technitium starts to clearly diverge from a simple DNS cache.
8. Split Horizon DNS
One genuinely useful feature for corporate networks.
Take a domain:
example.com
From outside:
www.example.com -> public IP.
From inside:
www.example.com -> 10.10.10.20.
That’s classic split horizon DNS.
Technitium lets you implement these scenarios through DNS Apps and local zones. The official feature list explicitly mentions Split Horizon and geography-based DNS responses via DNS Apps.
This lets you avoid building odd workarounds on the client side.
9. Conditional Forwarding
If Active Directory is already in place, Technitium DNS doesn’t have to replace everything at once.
For example:
*.corp.local -> Windows DNS.
Everything else -> Technitium.
The result:
This makes for a good migration path.
No need to kill the old DNS on a Friday night and see what breaks.
10. Installing Technitium DNS Server on Linux
The official site provides an automatic installer for Linux and Raspberry Pi.
At the time of publishing, the install command looks like this:
curl -sSL https://download.technitium.com/dns/install.sh | sudo bash
After installing, check the service.
sudo systemctl status dns
Verify the unit name on your specific system, since the distro or install method might differ.
Check that the DNS port is listening.
sudo ss -lntup | grep -E ':53|:5380'
The web console is available on port 5380 by default. The official guide points to localhost:5380 as the initial entry point.
11. Practical Example #1: DNS for a Home Network
Say you have:
- a MikroTik router at 192.168.10.1;
- Technitium at 192.168.10.10;
- clients on 192.168.10.0/24.
On MikroTik, you hand out DNS 192.168.10.10 to DHCP clients.
As a result, all DNS traffic on the network goes through Technitium.
Then you enable block lists.
You get centralized DNS filtering for computers, phones, TVs, and IoT.
This works especially well where an app won’t let you install a proper ad blocker.
12. Practical Example #2: Local DNS for Proxmox
Say you have a small server with:
- Proxmox;
- several VMs;
- several LXC containers;
- Docker;
- a NAS;
- Zabbix;
- Grafana.
Without local DNS, you quickly start living among IP addresses.
Create a local DNS zone.
For example:
- pve01.lab.example;
- zabbix.lab.example;
- grafana.lab.example;
- nas.lab.example;
- docker01.lab.example.
Now monitoring and administration use names.
An IP changes, you change one DNS record.
Not twenty config files.
13. Practical Example #3: Technitium + Active Directory
I wouldn’t recommend throwing out Windows DNS right away here.
AD likes its own DNS.
It’s better to set up conditional forwarding.
Technitium accepts DNS from clients.
Queries for the internal AD zone go to Windows DNS.
Internet queries get resolved locally or passed to a forwarder.
The resulting architecture:
This is much safer than staging a DNS revolution during a workday.
14. Practical Example #4: DNS Filter per VLAN
Picture a network with VLANs:
- VLAN 10, employees;
- VLAN 20, guests;
- VLAN 30, IoT;
- VLAN 40, servers.
Technitium can serve as the central DNS for all of them.
Different subnets can use different blocking rules through DNS Apps.
IoT, for example, gets tighter filtering.
The server VLAN gets a minimal set of restrictions.
The guest network gets its own policy.
This turns DNS from a “name translation service” into a piece of network policy.
15. Practical Example #5: Two Technitium DNS Nodes in Production
A single DNS server isn’t high availability.
It’s a SPOF with a nice web interface.
For production, run at least two nodes.
For example:
- dns01 at 10.10.10.53;
- dns02 at 10.10.10.54.
Clients get both addresses.
Technitium has built-in clustering, which lets you manage several DNS Server instances from one admin console and sync shared settings between nodes. This feature arrived as a major addition in version 14 and is present in the current branch.
Version 15 adds SSO integration via OpenID Connect, including automatic user provisioning and group mapping for RBAC.
16. Technitium DNS Server and Docker
If your infrastructure already lives in Docker, you don’t have to install Technitium directly on the host.
The official Docker image is available as:
docker pull technitium/dns-server:latest
The official site also provides a sample docker-compose.yml.
There’s a catch here, though.
DNS is infrastructure. If the Docker host dies, DNS dies too.
So I wouldn’t run the only production DNS instance in a container on the same server that runs half the business.
For a lab, that’s fine.
For production, at least two independent nodes.
17. System Requirements
Technitium is fairly light on hardware.
The official project claims high performance and cites load testing over 100,000 DNS queries per second on an Intel i7-8700 over Gigabit Ethernet. That doesn’t mean your home server needs an i7. For a typical network, that kind of throughput is way more than you’ll ever need.
| Component | Recommendation | Comment |
|---|---|---|
| CPU | 1-2 modern cores | More than enough for a small network |
| RAM | 512 MB – 1 GB+ | Depends on cache, logs, and DNS Apps |
| Disk | SSD | Especially helpful with persistent cache and logging |
| OS | Linux / Windows / macOS | Raspberry Pi is also supported |
| Runtime | .NET 10 for the current branch | Check requirements for the specific release |
| Docker | Yes | Official image available |
At the time of publishing, the current version is 15.4 on .NET 10. Check the latest release before installing.
18. Ports Technitium Needs
| Port | Protocol | Purpose |
|---|---|---|
| 53 | UDP/TCP | Regular DNS |
| 5380 | TCP | Web Console, default |
| 853 | TCP | DNS-over-TLS, with the default config |
| 443 | TCP | DNS-over-HTTPS, when configured |
| 443 | UDP | DNS-over-QUIC, when configured |
Don’t expose the admin panel to the internet just because “it’s password protected.”
The Web Console should only be reachable by admins.
19. Technitium DNS Security
A DNS server usually sits in a very exposed position.
Practically every client talks to it.
So a compromised DNS server turns into a very unpleasant story.
Firewall
Only allow DNS from the networks that need it.
sudo ufw allow from 10.10.0.0/16 to any port 53 proto udp
sudo ufw allow from 10.10.0.0/16 to any port 53 proto tcp
Lock down the admin port even more.
sudo ufw allow from 10.10.10.0/24 to any port 5380 proto tcp
If Technitium is only used internally, the DNS ports shouldn’t be open to the whole internet.
SSH
If the server is managed over SSH, use a dedicated admin account.
Disable root login.
PermitRootLogin no
PasswordAuthentication no
Use SSH keys instead.
Web Console
The built-in panel has RBAC, API tokens, and TOTP-based 2FA. That’s a solid set of options for an infrastructure service.
But having 2FA doesn’t replace a firewall.
20. First Launch: What to Change Right Away
After installation, don’t leave the default login in place.
The official docs state the initial credentials are admin/admin and explicitly warn you to change the password to disable automatic login.
Right away:
- change the admin password;
- enable 2FA;
- restrict access to the Web Console;
- configure upstream DNS or recursion;
- check DNSSEC;
- set up configuration backups;
- enable monitoring;
- test DNS from several VLANs.
21. Testing DNS After Installation
The first test should be as simple as possible.
dig @192.168.10.10 example.com
Check that you get a correct answer.
Then check caching.
dig @192.168.10.10 example.com
dig @192.168.10.10 example.com
Compare the response times.
To test a specific record type:
dig @192.168.10.10 example.com A
dig @192.168.10.10 example.com AAAA
dig @192.168.10.10 example.com MX
dig @192.168.10.10 example.com TXT
To verify DNSSEC:
dig @192.168.10.10 example.com +dnssec
Don’t stop at “the browser loaded the page.”
The browser might be using its own DoH and bypassing your DNS entirely.
22. Troubleshooting: DNS Isn’t Working
Problem: ping to DNS works, but DNS doesn’t respond
Cause: firewall, the service isn’t listening on port 53, or the client is sending queries somewhere else.
Check:
sudo ss -lntup | grep ':53'
Then:
dig @10.10.10.53 example.com
Problem: UDP works, TCP doesn’t
Cause: firewall or incorrect DNS publishing.
DNS isn’t UDP-only.
TCP can be needed for large responses, DNSSEC, and other scenarios.
Check:
dig @10.10.10.53 example.com +tcp
Problem: Technitium works, but clients don’t use it
Cause: DHCP is still handing out the old DNS.
Check your DHCP settings.
On Linux:
resolvectl status
On Windows:
Get-DnsClientServerAddress
Don’t forget about browser DoH.
If Chrome, Firefox, or Edge sends DNS directly over HTTPS, your local DNS might never see part of the traffic.
Problem: local names don’t resolve
Cause: the zone wasn’t created, or the query goes to the internet resolver instead.
Check:
dig @10.10.10.53 server01.lab.example
If Technitium doesn’t answer with the local record, check the zone settings and the order DNS Apps are processed in.
Problem: a site stopped working after enabling a block list
Cause: you blocked a domain that an app needs.
Don’t disable filtering entirely.
Find the specific domain in the query log.
Add an exception.
Then try the request again.
23. Where Technitium Really Wins
Technitium is particularly interesting where a simple DNS filter isn’t enough anymore.
- A home network with a lot of IoT devices.
- A lab running Proxmox and Docker.
- A small office.
- A network with several VLANs.
- Infrastructure with local DNS zones.
- A company that needs authoritative DNS.
- DNSSEC scenarios.
- Infrastructure that needs DoH/DoT/DoQ.
- An environment that needs an API and automation.
24. Where Technitium Might Be Overkill
If all you need is to block ads at home, Technitium might be more than you need.
AdGuard Home is simpler for most home users.
Pi-hole can also be simpler for a specific use case.
If you already have Windows Server with AD DNS running for years, don’t install Technitium just because it looks nice.
A new system should solve a problem.
Not create one.
25. Technitium DNS Server vs Pi-hole
| Feature | Technitium | Pi-hole |
|---|---|---|
| DNS filtering | Yes | Yes |
| Recursive DNS | Yes | Via additional components |
| Authoritative DNS | Yes | Not the main use case |
| DNSSEC | Yes | Depends on the resolver |
| DoH | Yes | Via additional components/configuration |
| DoT | Yes | Not a core feature |
| DoQ | Yes | Not a typical use case |
| Clustering | Yes | Needs extra tooling |
| API | Yes | Yes |
| DHCP | Yes | Yes |
Pi-hole remains a great choice if DNS filtering is your main goal.
Technitium is more interesting if DNS needs to become a full infrastructure service.
26. Technitium DNS Server vs AdGuard Home
AdGuard Home is very convenient.
Its strength is simple operation and good UX for DNS filtering.
Technitium puts the emphasis on deeper DNS functionality.
This is where authoritative zones, AXFR/IXFR, DNSSEC signed zones, advanced forwarding, DNS Apps, clustering, and a long list of modern DNS features come in.
So the question isn’t “which is better.”
It’s “what exactly do you need from DNS.”
27. Technitium DNS Server vs DNS on MikroTik
If you run MikroTik, a reasonable question comes up: why bother with a separate DNS server at all?
MikroTik does a decent job as a DNS cache for small networks.
But Technitium gives you much more for specialized DNS needs.
Especially if you need:
- complex local zones;
- DNSSEC;
- authoritative DNS;
- DoH/DoT/DoQ;
- DNS Apps;
- advanced filtering;
- detailed DNS analytics;
- clustering;
- an API.
I wouldn’t automatically replace DNS on MikroTik.
You can keep MikroTik for DHCP and routing and offload DNS to Technitium.
That’s a clean separation of responsibilities.
28. DNS Apps: One of the Most Interesting Features
DNS Apps let you extend how the DNS server behaves.
This goes well beyond a simple “A record -> IP” setup.
With apps, you can implement extra logic for handling DNS queries.
The official feature list mentions custom DNS Apps that can directly process DNS queries and build responses based on custom business logic.
For an engineer, this is a genuinely interesting mechanism.
DNS turns into a programmable control plane.
But I’d hold myself back here.
If a regular DNS record solves the problem, don’t write a 700-line app.
29. DHCP in Technitium
Technitium has a built-in DHCP Server that can handle multiple networks.
This lets you build a fairly self-contained infrastructure.
But I’d still separate DNS and DHCP where a proper router already exists.
For example:
MikroTik -> DHCP
Technitium -> DNS
Zabbix -> monitoring
Grafana -> visualization
That makes troubleshooting easier.
One service, one responsibility.
30. Monitoring Technitium
DNS needs to be monitored.
A minimal set:
- availability;
- DNS response time;
- NXDOMAIN rate;
- SERVFAIL rate;
- CPU;
- RAM;
- disk;
- query rate;
- upstream errors.
For Zabbix, you can use the HTTP API or your own custom checks.
Technitium has a built-in HTTP API, and the Web Console itself uses this API to perform management operations.
That’s a solid foundation for automation.
31. Backups
Don’t assume DNS is so simple it can be rebuilt “in five minutes.”
Yes, you can stand up DNS itself quickly.
But restoring all the zones, policies, forwarding rules, DNS Apps, ACLs, and other settings without a proper backup is a lot more fun than it sounds.
Back up:
- Technitium configuration;
- local DNS zones;
- DNS App settings;
- filtering policies;
- certificates;
- secrets and API tokens, stored in a secure location.
Keep at least one copy off the DNS server itself.
For production, aim for two independent DNS nodes plus a configuration backup.
32. Updating Technitium
Before updating:
- make a backup;
- check free disk space;
- check the current version;
- read the changelog;
- check .NET runtime compatibility;
- make sure a second DNS node exists.
Version 15 moved to .NET 10, and the Linux and Windows installers got additional hardening, including running the service without root. If you did a manual install or are on an older runtime, keep that in mind when updating.
Update the secondary node first.
Verify it.
Then update the primary.
Don’t update your only DNS server during business hours on a Friday.
33. A Typical Production Architecture
For a small company, I’d look at something like this:
Clients get two DNS addresses.
Both nodes have identical local zones and policies.
Outbound traffic goes through chosen encrypted forwarders, or through recursive resolution.
Monitoring watches both nodes.
34. What Surprised Me About Technitium
What’s interesting here isn’t ad blocking.
Nobody’s impressed by that anymore.
What’s interesting is that Technitium tries to cover nearly the entire DNS lifecycle in one product.
Recursive DNS.
Authoritative DNS.
DNSSEC.
Encrypted DNS.
Clustering.
DNS Apps.
API.
DHCP.
RBAC.
OIDC.
This is no longer “Pi-hole with a few extra checkboxes.”
35. When I’d Choose Technitium
I’d set up Technitium if I needed to:
- centralize DNS across several VLANs;
- build proper local zones;
- have recursive and authoritative DNS in a single product;
- use DNSSEC;
- encrypt upstream DNS;
- filter ads and malware;
- manage multiple DNS nodes;
- automate management through an API;
- get extensibility through DNS Apps.
For home DNS covering two laptops, I wouldn’t bother with all this complexity.
For a lab, a homelab, or small business infrastructure, Technitium looks a lot more compelling.
36. When I Wouldn’t Choose It
If you only need basic ad blocking, AdGuard Home may be more convenient.
If your infrastructure is fully tied to Active Directory, Windows DNS remains the natural choice for the AD zone.
If DNS just needs to live on the router and nothing more is required, MikroTik DNS might be enough.
The rule is simple.
Don’t deploy a separate service just because it can do more.
Extra functionality has a cost too.
37. Common Mistakes During Rollout
Mistake 1: One DNS server for the whole company
One server, one SPOF.
Mistake 2: DNS exposed to the internet
An open recursive resolver is a bad idea.
You don’t want your server to accidentally become a DNS amplification tool.
Mistake 3: Admin panel reachable from every VLAN
Users need DNS.
Users don’t need the admin panel.
Mistake 4: Not checking for browser DoH
Some DNS queries can bypass the local resolver entirely.
Mistake 5: Turning filters on and forgetting about them
Block lists sometimes break apps.
You need logs and a clear exception process.
38. How to Tell If Technitium Fits You
Ask yourself seven questions.
- Do I just need ad-blocking, or a full DNS server?
- Do I need local DNS zones?
- Do I have multiple VLANs?
- Do I need DNSSEC?
- Do I need DoH/DoT/DoQ?
- Do I need authoritative DNS?
- Do I need high availability?
If most answers are “yes,” Technitium is worth trying.
39. FAQ
Is Technitium DNS Server free?
Yes. It’s an open source project under GNU GPLv3. The source code is published on GitHub.
Can I install Technitium DNS Server on Ubuntu?
Yes. The official project provides an automatic installer for Linux. Portable archives are also available.
Can I run Technitium in Docker?
Yes. There’s an official Docker image, technitium/dns-server.
Can Technitium block ads?
Yes. You can connect block list URLs that update automatically, blocking ads and malware at the DNS level.
Does Technitium support DNSSEC?
Yes. It supports DNSSEC validation and DNSSEC signed zones, including RSA, ECDSA, and EdDSA.
Does it support DoH, DoT, and DoQ?
Yes. Technitium supports DNS-over-HTTPS, DNS-over-TLS, and DNS-over-QUIC.
Can Technitium work alongside Active Directory?
Yes. Conditional forwarding is a convenient way to do this, leaving AD DNS responsible for the internal AD zone.
Can Technitium replace Pi-hole?
Yes, if your needs go beyond basic DNS filtering. Technitium offers filtering plus recursive and authoritative DNS, DNSSEC, encrypted DNS, clustering, and other infrastructure features.
Can Technitium replace DNS on MikroTik?
Technically, yes. But it’s not always necessary. MikroTik can keep handling DHCP and routing while Technitium takes over as a dedicated DNS service.
40. Final Verdict
Technitium DNS Server is one of those projects that first looks like “just another DNS server,” and only after digging into its feature set do you realize you’re looking at something far more capable.
It fits homelabs, small businesses, and genuinely serious infrastructure scenarios. At the same time, it stays open source, cross-platform, and runnable on Linux, Windows, macOS, Raspberry Pi, or Docker.
Technitium’s main strength isn’t any single feature.
It’s that recursive DNS, authoritative DNS, DNSSEC, encrypted DNS, filtering, local zones, an API, clustering, and DNS Apps are all bundled into one system.
For a home user, that might be overkill.
For a network engineer, that’s a completely different conversation.
Especially when DNS needs to stop being “a server that just answers queries” and become a proper part of the network architecture.
That’s where Technitium gets genuinely interesting.
I’d start with one VM.
Connect one VLAN.
Test caching, filtering, local zones, and encrypted upstream.
Then add a second node.
Only after that would I decide whether I need clustering, DNS Apps, and the rest of the heavy artillery.
Because good DNS should be boring.
Very boring.
It should just answer.
Fast.
Always.
And if an engineer only remembers it exists because a red trigger just lit up in Zabbix, that means DNS was done right.
If it didn’t work, write in, we’ll sort it out.
Sources and Accuracy
The main source for this review is the official Technitium DNS Server website and project documentation. At the time of publishing, the official site lists version 15.4.
Version 15 was released on April 25, 2026. It introduced OIDC SSO, moved to .NET 10, and added extra hardening mechanisms to the Windows and Linux installers.
The source code for Technitium DNS Server is distributed under GPLv3 and published on GitHub.
Оставайтесь на связи
Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.
Подписаться на IT-Аптеку →



