We'd be happy to accept pull requests. If you plan on working on something big, please first drop us a line!
To get started, first fork the project on GitHub and clone the project using Git.
This project uses Yarn 4 for dependency management. To install dependencies, run the following command from the project root:
yarn installTo check for updates, run:
yarn upgrade-interactiveIf you bump internal @transloadit/* versions (for example in packages/node/package.json),
run corepack yarn install and commit the updated yarn.lock. CI uses immutable installs and
release workflows will fail if the lockfile is out of date.
Local tooling (the TypeScript scripts in scripts/ and package tests) requires Node 22.18+ so node file.ts works without flags. The published packages still support Node 20+ at runtime.
This project is linted using Biome. You can lint the project by running:
yarn lint:jsThis project is formatted using Biome. You can format the project:
yarn fix:jsThis project is tested using Vitest. There are two kinds of tests.
Unit tests are in the test/unit folder of the project. You can run them using the following command:
yarn test:unitThis will also generate a coverage report in the coverage directory.
e2e tests are in the test/e2e folder. They require some extra setup.
Firstly, these tests require the Cloudflare executable. You can download this with:
curl -fsSLo cloudflared-linux-amd64 https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
chmod +x cloudflared-linux-amd64They also require a Transloadit key and secret, which you can get from https://transloadit.com/c/credentials.
You can run the e2e tests with:
TRANSLOADIT_KEY='YOUR_TRANSLOADIT_KEY' TRANSLOADIT_SECRET='YOUR_TRANSLOADIT_SECRET' CLOUDFLARED_PATH='./cloudflared-linux-amd64' yarn test:e2eCoverage reports are:
- Generated locally in the
coveragedirectory - Uploaded to Codecov for tracking
- Enforced in CI (builds will fail if coverage drops below thresholds)
View the coverage report locally by opening coverage/index.html in your browser.
The packages/transloadit folder is a generated legacy wrapper. The src directory and top-level README.md, CHANGELOG.md, and LICENSE are produced during packing by scripts/prepare-transloadit.ts and are not tracked in git. If you need to validate the legacy package contents, run:
yarn packOnly maintainers can make releases. Releases to npm are automated using GitHub Actions and Changesets (including the legacy transloadit package).
Release flow:
- Add a changeset in your PR:
yarn changeset
- Merge the PR to
main. - The
releaseworkflow opens a “Version Packages” PR with changelog + version bumps. - Review and merge the version PR. CI publishes automatically via npm trusted publishing (OIDC).
- Add release notes once the publish succeeds.
Changelog guidance:
- Treat changesets as the changelog source. Write them as release notes (short, user-facing, and accurate).
- Per-package
packages/*/CHANGELOG.mdfiles are generated/updated by Changesets during the “Version Packages” PR. Avoid editing them by hand. - The top-level
CHANGELOG.mdis historical (the oldv4.x.ytag series). Prefer GitHub releases and the package changelogs.
Manual fallback (maintainers only):
corepack yarn changeset publish
Notes:
- CI publishing requires npm trusted publishing (OIDC) configured for this repo.
- Scoped packages publish with the
experimentaldist-tag by default. If you need to promote a scoped package tolatest, update the tag manually. - If this was a pre-release, remember to reset the npm
latesttag to the previous version (replacex.y.zwith previous version):npm dist-tag add transloadit@X.Y.Z latest
- Independent versions: Changesets are not fixed to a single version. Only packages listed in a changeset bump; internal dependency changes auto-bump dependents (patch) via
updateInternalDependencies. - Legacy parity:
transloaditis generated from@transloadit/nodeartifacts viascripts/prepare-transloadit.ts, then verified withyarn parity:transloadit. Onlypackage.jsonmetadata drift is allowed; any other drift fails. - Accepting intentional drift: run
node scripts/prepare-transloadit.tsbefore updating the parity baseline, then follow the parity tool instructions to regeneratedocs/fingerprint/*so the baseline reflects the latest build. - Experimental packages: Scoped packages (
@transloadit/node,@transloadit/types,@transloadit/zod) publish with theexperimentaldist-tag. The unscopedtransloaditpackage remains stable. - Changelog visibility: the “Version Packages” PR is the single source of truth for what gets published. If something was published to npm without a corresponding GitHub release/tag, add the missing release/tag so users can discover the change history from GitHub.