PHPackages                             athwari/laravel-zkteco-adms - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. athwari/laravel-zkteco-adms

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

athwari/laravel-zkteco-adms
===========================

Laravel package implementing the ZKTeco ADMS protocol for biometric attendance devices.

00[2 PRs](https://github.com/athwari/laravel-zkteco-adms/pulls)PHPCI failing

Since Jun 27Pushed todayCompare

[ Source](https://github.com/athwari/laravel-zkteco-adms)[ Packagist](https://packagist.org/packages/athwari/laravel-zkteco-adms)[ RSS](/packages/athwari-laravel-zkteco-adms/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (3)Used By (0)

Laravel ZKteco ADMS
===================

[](#laravel-zkteco-adms)

[![Latest Version on Packagist](https://camo.githubusercontent.com/245ad3f662628d1a5cabde7daddf92e903b8b53797c127e59633e73d781b0341/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f617468776172692f6c61726176656c2d7a6b7465636f2d61646d732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/athwari/laravel-zkteco-adms)[![GitHub Tests Action Status](https://camo.githubusercontent.com/dbf38287843b80cd01435f71837df2f65c8952fa2c78e6a49fd341ee49fa8c2c/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f617468776172692f6c61726176656c2d7a6b7465636f2d61646d732f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/athwari/laravel-zkteco-adms/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/a0a4bed1f2b7ef7e539cd8252f4af64cf94c1d368def901e6b8c6972d18de837/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f617468776172692f6c61726176656c2d7a6b7465636f2d61646d732f6669782d7068702d636f64652d7374796c652e796d6c3f6272616e63683d6d61696e266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/athwari/laravel-zkteco-adms/actions?query=workflow%3A%22Fix+PHP+code+style%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/a702b3fc0de1ec3df4ecae522fe19c8ca7046a58df25c5df551b479f93f21a61/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f617468776172692f6c61726176656c2d7a6b7465636f2d61646d732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/athwari/laravel-zkteco-adms)

This package provides the backend ADMS protocol implementation for ZKTeco biometric devices in Laravel.

It handles device communication, attendance ingestion, user synchronization, and command dispatching. The package is intentionally tenancy-agnostic.

If you need tenant-aware behavior in Filament, use athwari/filament-zkteco-adms, which owns tenancy configuration and tenant column management.

Features
--------

[](#features)

- Device lifecycle management (registration, activity tracking, stale device eviction command)
- ADMS protocol endpoints for cdata, registry, getrequest, devicecmd, inspect, and test
- Attendance log parsing and persistence
- User synchronization from device operation logs and user query responses
- Command queueing, polling, and confirmation handling
- Configurable model bindings via zkteco-adms.models.\*
- Optional event dispatching for device, attendance, command, and user sync flows

Installation
------------

[](#installation)

Install the package via Composer:

```
composer require athwari/laravel-zkteco-adms
```

Configuration
-------------

[](#configuration)

Publish the configuration file:

```
php artisan vendor:publish --tag="zkteco-adms-config"
```

Migrations are loaded automatically by the service provider.

Main configuration areas in config/zkteco-adms.php:

- table\_prefix: prefix used for all ZKTeco tables
- routes: endpoint prefix, middleware, and optional domain
- device: registration and limits configuration
- response: handshake defaults
- models: model class overrides for device, user, attendance log, command, and event
- events: per-event dispatch toggles
- enable\_inspect: enables the inspect endpoint

Usage
-----

[](#usage)

### ADMS Endpoints

[](#adms-endpoints)

By default, routes are mounted under /iclock (configurable via zkteco-adms.routes.prefix):

- GET/POST /iclock/cdata
- GET/POST /iclock/registry
- GET /iclock/getrequest
- POST /iclock/devicecmd
- GET /iclock/inspect (when enabled)
- GET/POST /iclock/test

### Services

[](#services)

Core services are container singletons:

- Athwari\\LaravelZktecoAdms\\Services\\DeviceManager
- Athwari\\LaravelZktecoAdms\\Services\\CommandManager
- Athwari\\LaravelZktecoAdms\\Services\\AttendanceParser
- Athwari\\LaravelZktecoAdms\\Services\\DeviceCommandBuilder

### Models

[](#models)

Default models:

- `Athwari\LaravelZktecoAdms\Models\ZktecoDevice`
- `Athwari\LaravelZktecoAdms\Models\ZktecoUser`
- `Athwari\LaravelZktecoAdms\Models\ZktecoAttendanceLog`
- `Athwari\LaravelZktecoAdms\Models\ZktecoDeviceCommand`
- `Athwari\LaravelZktecoAdms\Models\ZktecoDeviceEvent`

You can override these through config('zkteco-adms.models.\*') in your application.

### Facade

[](#facade)

The package ships with an auto-discovered facade alias: ZktecoAdms

```
use ZktecoAdms;

$device = ZktecoAdms::registerDevice('SN123456');

if (ZktecoAdms::deviceExists('SN123456')) {
    ZktecoAdms::setDeviceTimezone('SN123456', 'Asia/Riyadh');
}

$commandId = ZktecoAdms::sendCheckCommand('SN123456');

ZktecoAdms::commandBuilder()->reboot('SN123456');
```

If you prefer explicit imports:

```
use Athwari\LaravelZktecoAdms\Facades\ZktecoAdms;
```

Testing
-------

[](#testing)

Run the test suite with:

```
composer test
```

Additional useful scripts:

```
composer test-coverage
composer analyse
composer format
```

Tenancy Boundary
----------------

[](#tenancy-boundary)

This package no longer owns multi-tenancy configuration.

- Core package responsibility: protocol and domain logic
- Filament plugin responsibility: tenant ownership, tenant columns, and tenant-scoped UI queries

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

Security
--------

[](#security)

Please review [SECURITY](SECURITY.md) if you discover a vulnerability in this package.

Credits
-------

[](#credits)

- [Athwari](https://github.com/athwari)
- [All Contributors](https://github.com/athwari/laravel-zkteco-adms/graphs/contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [LICENSE.md](LICENSE.md) for more information.

###  Health Score

21

—

LowBetter than 18% of packages

Maintenance65

Regular maintenance activity

Popularity0

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity14

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1128182?v=4)[athwari](/maintainers/athwari)[@athwari](https://github.com/athwari)

### Embed Badge

![Health badge](/badges/athwari-laravel-zkteco-adms/health.svg)

```
[![Health](https://phpackages.com/badges/athwari-laravel-zkteco-adms/health.svg)](https://phpackages.com/packages/athwari-laravel-zkteco-adms)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
