AetherUpload / PHP + Rust

Large file uploadssliced into chunks

Slicing, resume, instant upload, dedup, and checks share one path; the file never enters memory.

Aether Beast, the aetherupload project pet

Chunks on disk, files named by md5

The browser slices the file and the server appends each chunk; naming the finished file by md5 unites upload, resume, instant upload, dedup, and integrity checks.

The core reaches host capabilities through Runtime; config, routes, commands, language files, and frontend scripts ship per host, and one codebase runs on nine hosts.

  • Chunked upload and resume
  • md5 instant upload and dedup
  • Optional S3-compatible storage
9Host adapters
0Database dependencies
12Language docs
Aether Beast Smile expression

Aether Beast

A cloudlike Aether Beast: an upward upload arrow above its head, a belly progress bar for chunked upload progress, and a dashed trail of chunks flying in from the right.

Slice the big file, send it up chunk by chunk.

Send a large file, chunk by chunk

From browser slicing to the final file on disk, every step has a mechanism.

Chunked upload

The browser slices the file and the server appends chunks, never reading the whole file into memory.

Reconnect resume

Retries on weak networks skip chunks already written and fill in only the missing ones.

Instant upload and dedup

A matching md5 hits an existing finished file, and not a single chunk is transferred.

Integrity checks

The final chunk rechecks size and MIME, recomputes the whole md5, and only then commits the file.

S3-compatible storage

A built-in zero-dependency S3 client switches between local disk and object storage.

Nine-host core

One core runs under webman, native PHP, and seven frameworks.

Same capability, Rust version

Beyond the PHP version, a Rust implementation is also available.

Rust v3.0.0 Rust 1.89 / crate

aetherupload-rust

Same upload semantics in Rust

Brings slicing, resume, instant upload, dedup, and integrity checks to Rust across eight frameworks, with zero third-party dependencies by default.

  • Zero third-party deps
  • Eight framework adapters
  • Resume, instant upload
View Rust repository

From a webman plugin to a universal core

Four releases that fully decoupled the upload core from the host framework.

v1.1.4

Uninstall fallback fix

Fixes the adapter fallback binding missed by Install::uninstall() when the webman package is removed.

v1.1.2

Native PHP host

Adds a native PHP adapter, verified end to end with php -S and curl, with no framework required.

v1.1.0

Framework-agnostic core

The core is decoupled from hosts, with seven host adapters and 12 language docs landing together.

v1.0.4

Correctness and security hardening

Fixes instant upload, console commands, and input boundaries, and adds 42 regression tests.

Changelog

Recent releases; the full list is on GitHub Releases.

Latest v1.1.4 All versions
v1.1.42026-09-26

Fixes the missing adapter fallback binding when the webman package is removed.

v1.1.32026-09-25

Fixes redis forwarding in the native PHP end-to-end harness.

v1.1.22026-09-25

Adds a native PHP adapter, bringing host support to nine.

v1.1.12026-09-25

Fixes an invalid runner context in the CI workflow.

v1.1.02026-09-25

A framework-agnostic core, seven host adapters, and 12 language docs.

v1.0.42026-09-25

Instant upload, command, and input boundary fixes, plus 42 regression tests.

Install and use

Install first, then run a minimal example.

PHP 8.0+ / native PHPFull README
Install
composer require erikwang2013/aetherupload-webman
Minimal example
require __DIR__ . '/../vendor/autoload.php';

exit(\AetherUpload\Adapter\Native\Bootstrap::handle([
    'base_path' => dirname(__DIR__),
    'config'    => require __DIR__ . '/../config/aetherupload.php',
]));

Twelve Aether Beast expressions

Hover for a moment and its mood changes.

Search this site

Try “upload”, “migration” or “JWT”.