v0.24.0
First release after a long modernization pass. All @uplo/* packages are now ESM-first, dual-published (ESM + CJS), and shipped from npm with provenance via GitHub Actions Trusted Publishing.
Breaking changes
You'll need to touch a few imports. The renames are mechanical.
Uplo → createUplo
- import Uplo from '@uplo/node'
+ import { createUplo } from '@uplo/node'
- const uplo = Uplo({ ... })
+ const uplo = createUplo({ ... })@uplo/service-s3: default export → named factory
- import S3Service from '@uplo/service-s3'
+ import { createS3Service } from '@uplo/service-s3'
- s3: S3Service({ bucket, region, accessKeyId, secretAccessKey })
+ s3: createS3Service({ bucket, region, accessKeyId, secretAccessKey })@uplo/service-gcs: class → named factory
- import GCSService from '@uplo/service-gcs'
+ import { createGCSService } from '@uplo/service-gcs'
- google: new GCSService({ bucket, credentialsPath })
+ google: createGCSService({ bucket, credentialsPath })Packages are now pure ESM
Every package sets "type": "module". CJS is still published (.cjs build), so require('@uplo/...') continues to work — but if you're authoring ESM, drop file extensions from your own imports accordingly.
New
- Hono support — mount Uplo into any
fetch-based runtime (Hono, Cloudflare Workers, Bun, Deno) via the new subpath export:import { createUploRouteHandler } from '@uplo/server/route-handler' app.all('/uplo/*', (c) => createUploRouteHandler({ uplo })(c.req.raw))
- GCS auth flexibility —
createGCSServicenow accepts inlinecredentials+projectId, or no auth at all (uses Application Default Credentials on Cloud Run / GKE / GCE).
Full docs at uplo.js.org.