• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / supabase-flutter / 37318330230
92%

Build:
DEFAULT BRANCH: main
Ran 05 Oct 2026 01:40PM UTC
Jobs 11
Files 173
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

05 Oct 2026 01:38PM UTC coverage: 91.44% (+0.05%) from 91.39%
37318330230

push

github

web-flow
feat(storage)!: upload the raw file body and stream files from disk (#1911)

Every storage upload used `AbortableMultipartRequest`, with
`cacheControl` and `metadata` as form fields, and `upload(path, file)`
called `file.readAsBytesSync()`, which loaded the whole file into memory
and blocked the isolate while reading. There was also no way to upload
from a `Stream<List<int>>`.

## Changes

- The file is now the raw request body. `Content-Type`, `Cache-Control:
max-age=<seconds>`, `x-upsert` and `x-metadata` (base64-encoded JSON)
carry what the form fields used to. This matches what supabase-js sends
for an `ArrayBuffer` and what supabase-swift sends since
supabase/supabase-swift#1400. storage-api's `uploadFromRequest` reads
both shapes into the same body, mime type, cache control and user
metadata, so the server treats them identically, and a known-size upload
over the bucket limit is now rejected before any bytes are transferred.
- `upload`, `update` and `uploadToSignedUrl` stream the `File` from disk
with its length as `Content-Length`. A private `BaseRequest` subclass
creates the body stream in `finalize()`, so every retry attempt reads a
fresh stream instead of one an earlier attempt consumed.
- New `uploadStream`, `updateStream` and `uploadStreamToSignedUrl` take
a `Stream<List<int>>` and an optional `contentLength`. Without a length
the body is sent with chunked transfer encoding, which the server
accepts. A stream can only be listened to once, so these are never
retried and take no `retryOptions`.

**Breaking:** the wire format is no longer `multipart/form-data`. The
Dart API is unchanged; middleware, proxies or test fixtures that matched
on the multipart body need to read the raw body and the `x-metadata`
header instead. `MIGRATION.md` has a new section.

The new symbols are registered in `sdk-compliance.yaml` under `upload`,
`upload_with_signed_url`, `update_file` and `request_cancellation`.

## Testing

- `supabase_storage` unit tests: the u... (continued)

63 of 63 new or added lines in 2 files covered. (100.0%)

32 existing lines in 2 files now uncovered.

9262 of 10129 relevant lines covered (91.44%)

5.14 hits per line

Coverage Regressions

Lines Coverage ∆ File
29
87.91
0.75% packages/postgrest/lib/src/postgrest_builder.dart
3
96.77
-0.07% packages/postgrest/lib/src/postgrest_transform_builder.dart
Jobs
ID Job ID Ran Files Coverage
3 supabase_typegen - 37318330230.3 05 Oct 2026 01:42PM UTC 24
96.2
GitHub Action Run
4 iceberg - 37318330230.4 05 Oct 2026 01:40PM UTC 6
68.52
GitHub Action Run
5 supabase_auth - 37318330230.5 05 Oct 2026 01:44PM UTC 32
92.07
GitHub Action Run
6 supabase - 37318330230.6 05 Oct 2026 01:43PM UTC 18
94.26
GitHub Action Run
7 supabase_storage - 37318330230.7 05 Oct 2026 01:42PM UTC 9
98.09
GitHub Action Run
8 supabase_functions - 37318330230.8 05 Oct 2026 01:39PM UTC 4
96.0
GitHub Action Run
9 supabase_realtime - 37318330230.9 05 Oct 2026 01:43PM UTC 13
90.67
GitHub Action Run
10 postgrest - 37318330230.10 05 Oct 2026 01:43PM UTC 29
93.4
GitHub Action Run
11 supabase_flutter - 37318330230.11 05 Oct 2026 01:40PM UTC 15
81.0
GitHub Action Run
6 yet_another_json_isolate - 36864123641.6 01 Oct 2026 12:48PM UTC 1
98.44
GitHub Action Run
1 supabase_common - 36864123641.1 01 Oct 2026 12:48PM UTC 22
87.5
GitHub Action Run
Source Files on build 37318330230
  • Tree
  • List 173
  • Changed 5
  • Source Changed 5
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #37318330230
  • e1d18f8c on github
  • Prev Build on main (#37318078784)
  • Next Build on main (#37325589602)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc