--![](/img/Docs-intro-banner.png)--

# Introduction

**EazyNetChecker** is a lightweight, reliable, and powerful Unity tool that accurately determines real internet connectivity across all platforms and devices.
Unity’s built-in `Application.internetReachability` does not verify whether a device is truly online, and it was never designed to. 
Common workarounds like pinging Google can also be misleading, especially on captive portals, hotel Wi-Fi, or restricted networks.

**EazyNetChecker** solves this problem by using Captive Portal Detection, the same technique used by major operating systems such as **Windows**, **Android**, **iOS**, and **macOS**. This ensures fast, consistent, and trustworthy results, so your game can respond appropriately to real connectivity changes.

In addition to built-in, battle-tested endpoints, **EazyNetChecker** allows you to define and validate connectivity against your **own services and endpoints**, using rules that match your project’s exact requirements. You can also run **multiple network checks in parallel**, each with its own criteria, timing, and validation logic, making it ideal for complex online games, backend-heavy apps, or service-specific availability checks.

---

## :sparkles: Key Features

- **Accurate connectivity detection:** Detect real internet access using captive portal checks.
- **Built-in methods:** Supports popular and proven endpoints (Google, Microsoft, Apple).
- **Custom check methods:** Define custom endpoints with flexible validation rules and response criteria.
- **Multi-service monitoring:** Run multiple connectivity checks simultaneously with independent endpoints and rules
- **Flexible scheduling options:** on start, manual, continuous
- **Event-driven architecture:** Hook into check start, completion, status changes, and timeouts.
- **Multiple ways to await results**: Including async and await, coroutines, and callbacks.
- **Import/export:** Easily share and back up your custom methods.
- **Clean and modular API:** Use strongly typed statics, or instances - your choice.
- **DI-friendly:** Designed to work well with dependency injection.
- **Powerful Editor Window:** A modern UI for managing methods, settings, and diagnostics.
- **Comprehensive documentation:** To get you started quickly.

---

## 🧠 Core concepts

- **Net check method:** A set of rules which define a network validation contract (what to call, what to expect). EazyNetChecker comes with built-in methods, and you can create your own custom methods.
- **Net check service:** The runtime service instance that schedules checks, tracks status, and exposes events. Each service uses a check method.
- **Method registry:** Aggregates built-in and custom methods during runtime, and resolves them by id.
- **Service factory:** Creates `NetCheckService` instances with the right runners and settings.
- **Service registry:** Tracks active services so they can be queried and managed.

---

## 🧭 Choose how to use it

EazyNetChecker supports both coding styles. Pick the one that matches your architecture, or mix and match.

1. Instance-based
   - Build and own the system yourself.
   - Useful for dependency injection and explicit lifecycle control.
2. Singleton
   - Use the `EazyNetChecker` facade and its static API.
   - Handy for small projects or when a singleton fits your style.

!!! The system is DI friendly
`EazyNetCheckerSystemBuilder` constructs an `EazyNetCheckerSystem` that you can inject into your own container. The static facade is a convenience layer on top of that system.
!!!

---

## :rocket: Ready to Get Started?

Check out the [Getting Started](./getting-started.md) guide to install and set up your first check in minutes.
