Fixes for package bugs waiting on upstream merges.
Note
Once a PR lands and you bump the dep, drop the patch.
| Package | Version | Format | Fix | PR |
|---|---|---|---|---|
@expo/ui |
56.0.0-canary-20260212-4f61309 |
Bun | Missing capsule + ellipse shapes in clipShape/mask, broken foregroundStyle hierarchical handling |
expo/expo#43158 |
@expo/ui |
56.0.0-canary-20260212-4f61309 |
Bun | Add inverted prop to List for bottom-anchored chat-style scrolling |
expo/expo#43228 |
@convex-dev/better-auth |
0.10.10 |
patch-package, Bun | Cookie expiry string comparison, null session cache, wrong isAuthenticated check |
get-convex/better-auth#218 |
@convex-dev/better-auth |
0.10.10 |
Bun, patch-package | Pinned better-auth peer dep 1.4.9 blocks newer 1.4.x versions |
get-convex/better-auth#245 |
@tobilu/qmd |
1.0.6 |
patch-package, Bun | typescript in peerDependencies instead of devDependencies, missing tsc in prepare script |
tobi/qmd#197 |
bun |
1.3.9 |
Bun | includePrerelease semantics for peer dep semver validation |
oven-sh/bun#27085 |
bun |
1.3.9 |
Bun | Invalid YAML sequence in update-root-certs workflow labels field |
oven-sh/bun#27086 |
Kept for reference. Bump the dep instead.
| Package | Was | Format | Fix | Fixed in |
|---|---|---|---|---|
convex |
1.31.3 |
patch-package | WebSocketManager crashes where window exists but addEventListener doesn't |
1.31.4 |
Copy the patch into your project's patches/ dir.
Applied on bun install.
No native patching. Uses patch-package via postinstall.
// package.json
{
"scripts": {
"postinstall": "patch-package"
},
"devDependencies": {
"patch-package": "^8.0.1"
}
}pnpm patch. Config goes in pnpm-workspace.yaml.
# pnpm-workspace.yaml
patchedDependencies:
"@convex-dev/better-auth@0.10.10": "patches/@convex-dev__better-auth@0.10.10.patch"yarn patch. Uses the patch: protocol in resolutions.
// package.json
{
"resolutions": {
"@expo/ui@56.0.0-canary-20260212-4f61309": "patch:@expo/ui@npm%3A56.0.0-canary-20260212-4f61309#~/.yarn/patches/@expo-ui-npm-56.0.0-canary-20260212-4f61309-abc123.patch"
}
}Note
Yarn auto-generates filenames with hashes. Use yarn patch / yarn patch-commit -s. Don't copy .patch files from this repo into .yarn/patches/ directly.
Important
Patches are NOT drop-in across package managers. Two things differ:
Filename. Each tool uses a different separator for scoped packages:
| Tool | Format |
|---|---|
| Bun | @scope%2Fpkg@version.patch |
| npm (patch-package) | @scope+pkg+version.patch |
| pnpm | @scope__pkg@version.patch |
| Yarn | @scope-pkg-npm-version-hash.patch (auto-generated) |
Diff paths. Bun, pnpm, and Yarn use paths relative to the package root. patch-package prefixes with node_modules/@scope/pkg/. To convert:
# patch-package -> Bun/pnpm/Yarn (strip the node_modules prefix)
sed 's|node_modules/@scope/pkg/||g' old.patch > new.patch
# Bun/pnpm/Yarn -> patch-package (add the node_modules prefix)
sed -e '/^diff --git /s|a/|a/node_modules/@scope/pkg/|' \
-e '/^diff --git /s|b/|b/node_modules/@scope/pkg/|' \
-e 's|^--- a/|--- a/node_modules/@scope/pkg/|' \
-e 's|^+++ b/|+++ b/node_modules/@scope/pkg/|' \
old.patch > new.patchThis repo stores one patch file per PR so each fix is easy to track. But most package managers only support one patch per package@version. You can't point two .patch files at the same dep.
| Tool | Multiple? | Details |
|---|---|---|
| Bun | No | One entry per package@version in patchedDependencies. Combine into one .patch. |
| pnpm | No | One entry per exact version in patchedDependencies. Combine into one .patch. |
| Yarn | No | One patch: resolution per package. Combine into one .patch. |
| npm (patch-package) | Yes | Use --append 'name' for sequenced patches: pkg+ver+001+initial.patch, pkg+ver+002+name.patch. |
If you need multiple fixes for the same package@version (e.g. both @expo/ui patches), apply all changes to node_modules and let the tool generate one combined diff:
# 1. prep the package
bun patch @expo/ui
# 2. apply each patch from this repo
git apply --directory=node_modules/@expo/ui patches/fix-a.patch
git apply --directory=node_modules/@expo/ui patches/fix-b.patch
# 3. generate one combined patch
bun patch --commit @expo/uiTip
If the patches touch completely different files (no overlap), you can just cat them together:
cat patches/fix-a.patch patches/fix-b.patch > patches/@expo%2Fui@56.0.0-canary-20260212-4f61309.patchIf any file shows up in both patches, use the bun patch / pnpm patch-commit / yarn patch-commit -s workflow above.
packages/
@<scope>/
<package>/
bun/
<patch-file>.patch
npm/
<patch-file>.patch
pnpm/
<patch-file>.patch
yarn/
<patch-file>.patch
One dir per package manager format. Not every package has patches for every manager.
Filenames in this repo have a -prXXX suffix (e.g. @expo%2Fui@56.0.0-canary-20260212-4f61309-pr43228.patch) so you know which upstream PR it's from. Strip the suffix when you copy it into your project so the filename matches what the package manager expects.
Include the patch, what it fixes, and the package version.