PHPackages                             ayimdomnic/graph-ql-l5.3 - 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. [API Development](/categories/api)
4. /
5. ayimdomnic/graph-ql-l5.3

ActiveLibrary[API Development](/categories/api)

ayimdomnic/graph-ql-l5.3
========================

A modern, feature-rich GraphQL package for Laravel — types, queries, mutations, subscriptions, pagination, and more.

v3.1.1(2w ago)321MITPHPPHP ^8.2CI failing

Since Aug 27Pushed 2w ago1 watchersCompare

[ Source](https://github.com/ayimdomnic/laragraph)[ Packagist](https://packagist.org/packages/ayimdomnic/graph-ql-l5.3)[ RSS](/packages/ayimdomnic-graph-ql-l53/feed)WikiDiscussions master Synced 2w ago

READMEChangelog (10)Dependencies (15)Versions (14)Used By (0)

Laragraph
=========

[](#laragraph)

**A modern, feature-rich GraphQL package for Laravel.**

[![Latest Version](https://camo.githubusercontent.com/8b181d53d5e362ae3973ea3dd4995eb33596c55d0ad49041094df7470aa301da/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6179696d646f6d6e69632f67726170682d716c2d6c352e332e737667)](https://packagist.org/packages/ayimdomnic/graph-ql-l5.3)[![PHP Version](https://camo.githubusercontent.com/c9f64f714c636ba27a3bba6dfd52f98426832db1262747efa54b212d16943651/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253545382e322d626c7565)](https://www.php.net)[![Laravel Version](https://camo.githubusercontent.com/1b0f8704f65d6ecfefc2684b0794ca1d83c16374b90e4105df68ca094e7662e8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c61726176656c2d31302532302537432532303131253230253743253230313225374326323031332d6f72616e6765)](https://laravel.com)[![License](https://camo.githubusercontent.com/f8df3091bbe1149f398a5369b2c39e896766f9f6efba3477c63e9b4aa940ef14/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e)](LICENSE)

Laragraph gives Laravel developers a clean, expressive, **code-first** API for building GraphQL services — powered by [webonyx/graphql-php](https://github.com/webonyx/graphql-php).

---

Features
--------

[](#features)

CapabilityStatusQueries &amp; Mutations✅Subscriptions✅Object / Input / Enum / Interface / Union types✅Custom scalars (DateTime, Date, JSON, Upload)✅Built-in argument validation (Laravel rules)✅Per-field authorization✅Relay cursor pagination + simple paginator✅Batched queries✅File uploads (multipart spec)✅Multiple named schemas✅Query complexity &amp; depth limiting✅Introspection toggle✅GraphiQL browser IDE✅Artisan generators✅Auto-discovery (no manual registration)✅---

Requirements
------------

[](#requirements)

- PHP **8.2+**
- Laravel **10 / 11 / 12**

---

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

[](#installation)

```
composer require ayimdomnic/laragraph
```

Laravel auto-discovers the package. Publish the config:

```
php artisan vendor:publish --tag=laragraph-config
```

---

Quick Start
-----------

[](#quick-start)

### 1. Create a Type

[](#1-create-a-type)

```
php artisan laragraph:make:type UserType
```

```
// app/GraphQL/Types/UserType.php
use Ayimdomnic\Laragraph\Support\Type;
use GraphQL\Type\Definition\Type as GType;

class UserType extends Type
{
    protected array $attributes = [
        'name'        => 'User',
        'description' => 'A registered user.',
    ];

    public function fields(): array
    {
        return [
            'id'    => ['type' => GType::nonNull(GType::id())],
            'name'  => ['type' => GType::string()],
            'email' => ['type' => GType::string()],
        ];
    }
}
```

### 2. Create a Query

[](#2-create-a-query)

```
php artisan laragraph:make:query UsersQuery
```

```
// app/GraphQL/Queries/UsersQuery.php
use Ayimdomnic\Laragraph\Support\Query;
use GraphQL\Type\Definition\ResolveInfo;
use GraphQL\Type\Definition\Type;

class UsersQuery extends Query
{
    public function type(): Type
    {
        return Type::listOf(app('laragraph')->type('User'));
    }

    public function args(): array
    {
        return [
            'limit' => ['type' => Type::int(), 'defaultValue' => 10],
        ];
    }

    public function resolve(mixed $root, array $args, mixed $context, ResolveInfo $info): mixed
    {
        return \App\Models\User::limit($args['limit'])->get();
    }
}
```

### 3. Create a Mutation

[](#3-create-a-mutation)

```
php artisan laragraph:make:mutation CreateUserMutation
```

```
// app/GraphQL/Mutations/CreateUserMutation.php
use Ayimdomnic\Laragraph\Support\Mutation;
use GraphQL\Type\Definition\ResolveInfo;
use GraphQL\Type\Definition\Type;

class CreateUserMutation extends Mutation
{
    public function type(): Type
    {
        return app('laragraph')->type('User');
    }

    public function args(): array
    {
        return [
            'name'  => ['type' => Type::nonNull(Type::string())],
            'email' => ['type' => Type::nonNull(Type::string())],
        ];
    }

    public function rules(array $args = []): array
    {
        return [
            'name'  => ['required', 'string', 'max:255'],
            'email' => ['required', 'email', 'unique:users,email'],
        ];
    }

    public function resolve(mixed $root, array $args, mixed $context, ResolveInfo $info): mixed
    {
        return \App\Models\User::create($args);
    }
}
```

### 4. Register in config/laragraph.php

[](#4-register-in-configlaragraphphp)

```
'types' => [
    'User' => \App\GraphQL\Types\UserType::class,
],

'schemas' => [
    'default' => [
        'query'    => ['users' => \App\GraphQL\Queries\UsersQuery::class],
        'mutation' => ['createUser' => \App\GraphQL\Mutations\CreateUserMutation::class],
    ],
],
```

### 5. Make requests

[](#5-make-requests)

```
POST /graphql
Content-Type: application/json

{ "query": "{ users(limit: 5) { id name email } }" }

```

---

GraphiQL
--------

[](#graphiql)

Built-in browser IDE at `/graphql/graphiql` (enabled by default).

```
'graphiql' => ['enabled' => false], // disable
```

---

Artisan Generators
------------------

[](#artisan-generators)

CommandCreates`laragraph:make:type UserType``app/GraphQL/Types/UserType.php``laragraph:make:query UsersQuery``app/GraphQL/Queries/UsersQuery.php``laragraph:make:mutation CreateUserMutation``app/GraphQL/Mutations/CreateUserMutation.php``laragraph:make:subscription UserCreatedSubscription``app/GraphQL/Subscriptions/UserCreatedSubscription.php``laragraph:make:input CreateUserInput``app/GraphQL/Inputs/CreateUserInput.php`---

Pagination
----------

[](#pagination)

### Relay Cursor Pagination

[](#relay-cursor-pagination)

```
use Ayimdomnic\Laragraph\Pagination\ConnectionType;

class UsersQuery extends Query
{
    public function type(): Type
    {
        return new ConnectionType('UserConnection', app('laragraph')->type('User'));
    }

    public function args(): array
    {
        return ConnectionType::args(); // first, after, last, before
    }

    public function resolve(mixed $root, array $args, mixed $context, ResolveInfo $info): mixed
    {
        return ConnectionType::paginate(\App\Models\User::query(), $args);
    }
}
```

```
{
  users(first: 10) {
    edges { cursor node { id name } }
    pageInfo { hasNextPage endCursor total }
  }
}
```

### Simple Offset Pagination

[](#simple-offset-pagination)

```
return ConnectionType::simplePaginate(\App\Models\User::query(), $args);
// → { data, total, per_page, current_page, last_page }
```

---

Authorization
-------------

[](#authorization)

```
public function authorize(mixed $root, array $args, mixed $context, ResolveInfo $info): bool
{
    return $context->user()?->isAdmin() ?? false;
}
```

`false` → `AuthorizationException` → `extensions.category = 'authorization'`.

---

Validation
----------

[](#validation)

```
public function rules(array $args = []): array
{
    return ['email' => ['required', 'email']];
}
```

Errors appear in `extensions.validation`:

```
{
  "errors": [{
    "message": "Validation failed.",
    "extensions": {
      "category": "validation",
      "validation": { "email": ["The email field is required."] }
    }
  }]
}
```

---

Built-in Scalars
----------------

[](#built-in-scalars)

```
'types' => [
    'DateTime' => \Ayimdomnic\Laragraph\Scalars\DateTimeType::class,
    'Date'     => \Ayimdomnic\Laragraph\Scalars\DateType::class,
    'JSON'     => \Ayimdomnic\Laragraph\Scalars\JsonType::class,
    'Upload'   => \Ayimdomnic\Laragraph\Scalars\UploadType::class,
],
```

---

Multiple Schemas
----------------

[](#multiple-schemas)

```
'schemas' => [
    'default' => ['query' => [...], 'mutation' => [...]],
    'admin'   => ['query' => [...], 'mutation' => [...], 'middleware' => ['auth:api', 'admin']],
],
```

Endpoints: `POST /graphql` and `POST /graphql/admin`.

---

Security
--------

[](#security)

```
'security' => [
    'query_max_complexity'  => 200,
    'query_max_depth'       => 10,
    'disable_introspection' => true, // recommended in production
],
```

---

Batched Queries
---------------

[](#batched-queries)

```
[
  { "query": "{ users { id } }" },
  { "query": "mutation { createUser(name: \"Alice\", email: \"a@b.com\") { id } }" }
]
```

---

File Uploads
------------

[](#file-uploads)

Follows the [GraphQL multipart request spec](https://github.com/jaydenseric/graphql-multipart-request-spec).

```
'types' => ['Upload' => \Ayimdomnic\Laragraph\Scalars\UploadType::class],

// In mutation args:
'avatar' => ['type' => app('laragraph')->type('Upload')]

// In resolver — $args['avatar'] is \Illuminate\Http\UploadedFile
$path = $args['avatar']->store('avatars', 'public');
```

---

Facade
------

[](#facade)

```
use Ayimdomnic\Laragraph\Facades\Laragraph;

$result = Laragraph::execute('{ users { id name } }');
$schema = Laragraph::schema('admin');
$type   = Laragraph::type('User');
```

---

Testing
-------

[](#testing)

```
composer test
```

---

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

[](#contributing)

Contributions, issues, and feature requests are welcome!

---

License
-------

[](#license)

MIT © [Odhiambo Dormnic](https://github.com/ayimdomnic)

###  Health Score

54

—

FairBetter than 97% of packages

Maintenance97

Actively maintained with recent releases

Popularity12

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity83

Battle-tested with a long release history

 Bus Factor1

Top contributor holds 88.5% of commits — single point of failure

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.

###  Release Activity

Cadence

Every ~604 days

Recently: every ~905 days

Total

7

Last Release

16d ago

Major Versions

1.0.0 → v2.0.1-Stable2016-08-28

v2.0.0 → v3.0.02026-07-30

PHP version history (2 changes)1.0.0PHP ^7.0

v2.0.0PHP ^8.2

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/6215925?v=4)[Soon To Zen](/maintainers/ayimdomnic)[@ayimdomnic](https://github.com/ayimdomnic)

---

Top Contributors

[![ayimdomnic](https://avatars.githubusercontent.com/u/6215925?v=4)](https://github.com/ayimdomnic "ayimdomnic (54 commits)")[![semantic-release-bot](https://avatars.githubusercontent.com/u/32174276?v=4)](https://github.com/semantic-release-bot "semantic-release-bot (4 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (3 commits)")

---

Tags

facebookfacebook-apigraphqlmutationsphpapilaravelschemagraphql

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/ayimdomnic-graph-ql-l53/health.svg)

```
[![Health](https://phpackages.com/badges/ayimdomnic-graph-ql-l53/health.svg)](https://phpackages.com/packages/ayimdomnic-graph-ql-l53)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3345.4M354](/packages/psalm-plugin-laravel)[nuwave/lighthouse

A framework for serving GraphQL from Laravel

3.5k12.2M126](/packages/nuwave-lighthouse)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

79227.1M218](/packages/laravel-mcp)[api-platform/laravel

API Platform support for Laravel

58190.1k21](/packages/api-platform-laravel)[laravel/cashier

Laravel Cashier provides an expressive, fluent interface to Stripe's subscription billing services.

2.6k31.8M158](/packages/laravel-cashier)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9922.4M146](/packages/roots-acorn)

PHPackages © 2026

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