PHPackages                             bttr/laravel-async-aws-s3 - 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. [File &amp; Storage](/categories/file-storage)
4. /
5. bttr/laravel-async-aws-s3

ActiveLibrary[File &amp; Storage](/categories/file-storage)

bttr/laravel-async-aws-s3
=========================

Laravel filesystem driver backed by the AsyncAws S3 client instead of the AWS SDK.

1.0.0(today)01↑2900%MITPHPPHP ^8.5CI passing

Since Jul 27Pushed todayCompare

[ Source](https://github.com/bttr-nl/laravel-async-aws-s3)[ Packagist](https://packagist.org/packages/bttr/laravel-async-aws-s3)[ RSS](/packages/bttr-laravel-async-aws-s3/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (10)Versions (2)Used By (0)

Laravel AsyncAws S3
===================

[](#laravel-asyncaws-s3)

Laravel filesystem disks backed by [AsyncAws](https://async-aws.com/clients/s3.html)instead of the AWS SDK, using the League's [`flysystem-async-aws-s3`](https://github.com/thephpleague/flysystem-async-aws-s3) adapter.

Requires PHP 8.5+ and Laravel 13+.

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

[](#installation)

```
composer require bttr-nl/laravel-async-aws-s3
```

That is all. The package replaces Laravel's built-in `s3` driver, so existing `s3` disks in `config/filesystems.php` keep working unchanged — including `url()`, `temporaryUrl()`, `temporaryUploadUrl()` and `checksum()`.

Once no disk uses the SDK any more you can drop it:

```
composer remove aws/aws-sdk-php league/flysystem-aws-s3-v3
```

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

[](#configuration)

Disk configuration is unchanged:

```
's3' => [
    'driver' => 's3',
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'token' => env('AWS_SESSION_TOKEN'),
    'region' => env('AWS_DEFAULT_REGION'),
    'bucket' => env('AWS_BUCKET'),
    'url' => env('AWS_URL'),
    'endpoint' => env('AWS_ENDPOINT'),
    'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
    'throw' => false,
],
```

Supported on top of the usual keys:

KeyEffect`profile`Read credentials from that `~/.aws/credentials` profile.`send_chunked_body`Send `aws-chunked` request bodies. Off by default; needed by some S3-compatible services.Leave `key`/`secret` empty to use the AsyncAws credential chain: environment variables, `~/.aws`, ECS/EKS container credentials, IMDS, and web identity — so IAM roles work without configuration.

### Keeping Laravel's `s3` driver

[](#keeping-laravels-s3-driver)

The package also registers an `async-s3` driver name, always. To stop it from claiming `s3`, point it at that name instead:

```
ASYNC_AWS_S3_DRIVER=async-s3
```

Disks with `'driver' => 'async-s3'` then use AsyncAws while `'driver' => 's3'`stays on the AWS SDK. Publish the config to set this in a file:

```
php artisan vendor:publish --tag=async-aws-s3-config
```

Differences from the AWS SDK driver
-----------------------------------

[](#differences-from-the-aws-sdk-driver)

- **`getClient()` returns an `AsyncAws\SimpleS3\SimpleS3Client`**, not an `Aws\S3\S3Client`. Code touching the raw client — Laravel Vapor, custom presigners, SDK middleware — needs adjusting or should stay on the SDK driver.
- **Unsupported disk options throw** rather than being silently dropped: `credentials`, `signature_version`, `use_accelerate_endpoint`, `use_dual_stack_endpoint`, `bucket_endpoint`, `endpoint_provider` and `http`. Options AsyncAws satisfies anyway — `stream_reads`, `ua_append` — are accepted and ignored.
- **No SSO credential support.** AsyncAws reads static credentials, profiles, roles assumed via web identity, and instance/container metadata — not `aws sso login` sessions.
- **Uploads are multipart** via `SimpleS3Client::upload()` (64 MB parts, overridable per write with `PartSize`), so objects larger than 5 GB work.
- **A disk's `options` apply to writes only** (`write`, `writeStream`, `createDirectory`), not to reads, copies or checksums.
- **`temporaryUploadUrl()` returns no headers.** SigV4 query signing puts everything in the URL, so a plain `PUT` to it is enough.

Testing
-------

[](#testing)

```
composer install
vendor/bin/pest              # unit tests; integration tests skip
```

The integration tests run against any S3-compatible server:

```
docker run -d --rm --name minio -p 9000:9000 \
  -e MINIO_ROOT_USER=minioadmin -e MINIO_ROOT_PASSWORD=minioadmin \
  quay.io/minio/minio:latest server /data

docker run --rm --network host --entrypoint sh quay.io/minio/mc:latest -c \
  'mc alias set minio http://127.0.0.1:9000 minioadmin minioadmin; mc mb --ignore-existing minio/test-bucket'

MINIO_ENDPOINT=http://127.0.0.1:9000 vendor/bin/pest
```

License
-------

[](#license)

MIT. See [LICENSE](LICENSE).

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance100

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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

Unknown

Total

1

Last Release

0d ago

### Community

Maintainers

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

---

Top Contributors

[![NielsJanssen](https://avatars.githubusercontent.com/u/751979?v=4)](https://github.com/NielsJanssen "NielsJanssen (2 commits)")

---

Tags

filesystemFlysystemlaravels3async-awsstorage

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/bttr-laravel-async-aws-s3/health.svg)

```
[![Health](https://phpackages.com/badges/bttr-laravel-async-aws-s3/health.svg)](https://phpackages.com/packages/bttr-laravel-async-aws-s3)
```

###  Alternatives

[laravel/ai

The official AI SDK for Laravel.

1.0k3.2M250](/packages/laravel-ai)[moonshine/moonshine

Laravel administration panel

1.3k253.1k86](/packages/moonshine-moonshine)[league/flysystem-async-aws-s3

AsyncAws S3 filesystem adapter for Flysystem.

3012.1M45](/packages/league-flysystem-async-aws-s3)[erag/laravel-lang-sync-inertia

A powerful Laravel package for syncing and managing language translations across backend and Inertia.js (Vue/React/Svelte) frontends, offering effortless localization, auto-sync features, and smooth multi-language support for modern Laravel applications.

4925.3k](/packages/erag-laravel-lang-sync-inertia)[zing/laravel-flysystem-obs

Flysystem Adapter for OBS

1212.5k](/packages/zing-laravel-flysystem-obs)[innoge/laravel-rclone

A sleek PHP wrapper around rclone with Laravel-style fluent API syntax

177.3k](/packages/innoge-laravel-rclone)

PHPackages © 2026

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