diff --git a/doc/changelog.md b/doc/changelog.md
index 5f54bdf..0f07ac9 100644
--- a/doc/changelog.md
+++ b/doc/changelog.md
@@ -3,6 +3,7 @@
 
 ## Work In Progress
 
+- Renamed `decode_io_writer?` methods to `transform_io?`.
 - Added interfaces.
 - Renamed warnings to notes.
 - Made `wuffs_base__pixel_format` a struct.
diff --git a/doc/std/README.md b/doc/std/README.md
index 17c5a2f..d6e52e2 100644
--- a/doc/std/README.md
+++ b/doc/std/README.md
@@ -11,20 +11,20 @@
 The general pattern is that a package `foo` (e.g. `jpeg`, `png`) contains a
 struct `bar` (e.g. `hasher`, `decoder`, etc) that implements a
 package-independent interface. For example, every compression decoder struct
-would have a `decode_io_writer` method. In C, this would be invoked as
+would have a `transform_io` method. In C, this would be invoked as
 
 ```
 // Allocate and initialize the struct.
 wuffs_foo__decoder* dec = etc;
 
 // Do the work. Error checking is not shown, for brevity.
-const char* status = wuffs_foo__decoder__decode_io_writer(dec, etc);
+const char* status = wuffs_foo__decoder__transform_io(dec, etc);
 ```
 
 When that C library is used as C++, that last line can be shortened:
 
 ```
-const char* status = dec->decode_io_writer(etc);
+const char* status = dec->transform_io(etc);
 ```
 
 See also the [glossary](/doc/glossary.md), as well as the notes on:
diff --git a/doc/std/compression-decoders.md b/doc/std/compression-decoders.md
index 9fe447a..8dac8e4 100644
--- a/doc/std/compression-decoders.md
+++ b/doc/std/compression-decoders.md
@@ -2,10 +2,8 @@
 
 Compression decoders read from one input stream (an `io_reader` called `src`)
 and write to an output stream (an `io_writer` called `dst`). Wuffs'
-implementations have one key method: `decode_io_writer`, named after the
-operation (decoding) and the type of the destination (an
-[`io_writer`](/doc/note/io-input-output.md)). It incrementally decompresses the
-source data.
+implementations have one key method: `transform_io`. It incrementally
+decompresses the source data.
 
 This method is a [coroutine](/doc/note/coroutines.md), and does not require
 either all of the input or all of the output to fit in a single contiguous
diff --git a/example/library/library.c b/example/library/library.c
index 0fa24d9..4cc426c 100644
--- a/example/library/library.c
+++ b/example/library/library.c
@@ -105,7 +105,7 @@
     free(dec);
     return wuffs_base__status__message(&status);
   }
-  status = wuffs_gzip__decoder__decode_io_writer(
+  status = wuffs_gzip__decoder__transform_io(
       dec, &dst, &src,
       wuffs_base__make_slice_u8(work_buffer, WORK_BUFFER_SIZE));
   if (!wuffs_base__status__is_ok(&status)) {
diff --git a/example/zcat/zcat.c b/example/zcat/zcat.c
index c7a1dfa..6cc9031 100644
--- a/example/zcat/zcat.c
+++ b/example/zcat/zcat.c
@@ -123,7 +123,7 @@
     }
 
     while (true) {
-      status = wuffs_gzip__decoder__decode_io_writer(
+      status = wuffs_gzip__decoder__transform_io(
           &dec, &dst, &src,
           wuffs_base__make_slice_u8(work_buffer, WORK_BUFFER_SIZE));
 
diff --git a/fuzz/c/std/zlib_fuzzer.c b/fuzz/c/std/zlib_fuzzer.c
index 80a75a2..785aa14 100644
--- a/fuzz/c/std/zlib_fuzzer.c
+++ b/fuzz/c/std/zlib_fuzzer.c
@@ -84,17 +84,16 @@
 
   while (true) {
     dst.meta.wi = 0;
-    status = wuffs_zlib__decoder__decode_io_writer(&dec, &dst, src,
-                                                   ((wuffs_base__slice_u8){
-                                                       .ptr = work_buffer,
-                                                       .len = WORK_BUFFER_SIZE,
-                                                   }));
+    status = wuffs_zlib__decoder__transform_io(&dec, &dst, src,
+                                               ((wuffs_base__slice_u8){
+                                                   .ptr = work_buffer,
+                                                   .len = WORK_BUFFER_SIZE,
+                                               }));
     if (status.repr != wuffs_base__suspension__short_write) {
       break;
     }
     if (dst.meta.wi == 0) {
-      fprintf(stderr,
-              "wuffs_zlib__decoder__decode_io_writer made no progress\n");
+      fprintf(stderr, "wuffs_zlib__decoder__transform_io made no progress\n");
       intentional_segfault();
     }
   }
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 93cbc3c..4ba7ac8 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -2901,10 +2901,10 @@
 wuffs_deflate__decoder__workbuf_len(const wuffs_deflate__decoder* self);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status  //
-wuffs_deflate__decoder__decode_io_writer(wuffs_deflate__decoder* self,
-                                         wuffs_base__io_buffer* a_dst,
-                                         wuffs_base__io_buffer* a_src,
-                                         wuffs_base__slice_u8 a_workbuf);
+wuffs_deflate__decoder__transform_io(wuffs_deflate__decoder* self,
+                                     wuffs_base__io_buffer* a_dst,
+                                     wuffs_base__io_buffer* a_src,
+                                     wuffs_base__slice_u8 a_workbuf);
 
 // ---------------- Struct Definitions
 
@@ -2934,7 +2934,7 @@
     uint32_t f_n_huffs_bits[2];
     bool f_end_of_block;
 
-    uint32_t p_decode_io_writer[1];
+    uint32_t p_transform_io[1];
     uint32_t p_decode_blocks[1];
     uint32_t p_decode_uncompressed[1];
     uint32_t p_init_dynamic_huffman[1];
@@ -3021,11 +3021,10 @@
   }
 
   inline wuffs_base__status  //
-  decode_io_writer(wuffs_base__io_buffer* a_dst,
-                   wuffs_base__io_buffer* a_src,
-                   wuffs_base__slice_u8 a_workbuf) {
-    return wuffs_deflate__decoder__decode_io_writer(this, a_dst, a_src,
-                                                    a_workbuf);
+  transform_io(wuffs_base__io_buffer* a_dst,
+               wuffs_base__io_buffer* a_src,
+               wuffs_base__slice_u8 a_workbuf) {
+    return wuffs_deflate__decoder__transform_io(this, a_dst, a_src, a_workbuf);
   }
 
 #endif  // __cplusplus
@@ -3082,10 +3081,10 @@
 wuffs_lzw__decoder__workbuf_len(const wuffs_lzw__decoder* self);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status  //
-wuffs_lzw__decoder__decode_io_writer(wuffs_lzw__decoder* self,
-                                     wuffs_base__io_buffer* a_dst,
-                                     wuffs_base__io_buffer* a_src,
-                                     wuffs_base__slice_u8 a_workbuf);
+wuffs_lzw__decoder__transform_io(wuffs_lzw__decoder* self,
+                                 wuffs_base__io_buffer* a_dst,
+                                 wuffs_base__io_buffer* a_src,
+                                 wuffs_base__slice_u8 a_workbuf);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__slice_u8  //
 wuffs_lzw__decoder__flush(wuffs_lzw__decoder* self);
@@ -3126,7 +3125,7 @@
     uint32_t f_read_from_return_value;
     uint16_t f_prefixes[4096];
 
-    uint32_t p_decode_io_writer[1];
+    uint32_t p_transform_io[1];
     uint32_t p_write_to[1];
   } private_impl;
 
@@ -3175,10 +3174,10 @@
   }
 
   inline wuffs_base__status  //
-  decode_io_writer(wuffs_base__io_buffer* a_dst,
-                   wuffs_base__io_buffer* a_src,
-                   wuffs_base__slice_u8 a_workbuf) {
-    return wuffs_lzw__decoder__decode_io_writer(this, a_dst, a_src, a_workbuf);
+  transform_io(wuffs_base__io_buffer* a_dst,
+               wuffs_base__io_buffer* a_src,
+               wuffs_base__slice_u8 a_workbuf) {
+    return wuffs_lzw__decoder__transform_io(this, a_dst, a_src, a_workbuf);
   }
 
   inline wuffs_base__slice_u8  //
@@ -3609,10 +3608,10 @@
 wuffs_gzip__decoder__workbuf_len(const wuffs_gzip__decoder* self);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status  //
-wuffs_gzip__decoder__decode_io_writer(wuffs_gzip__decoder* self,
-                                      wuffs_base__io_buffer* a_dst,
-                                      wuffs_base__io_buffer* a_src,
-                                      wuffs_base__slice_u8 a_workbuf);
+wuffs_gzip__decoder__transform_io(wuffs_gzip__decoder* self,
+                                  wuffs_base__io_buffer* a_dst,
+                                  wuffs_base__io_buffer* a_src,
+                                  wuffs_base__slice_u8 a_workbuf);
 
 // ---------------- Struct Definitions
 
@@ -3638,7 +3637,7 @@
 
     bool f_ignore_checksum;
 
-    uint32_t p_decode_io_writer[1];
+    uint32_t p_transform_io[1];
   } private_impl;
 
   struct {
@@ -3651,7 +3650,7 @@
       uint32_t v_decoded_length_got;
       uint32_t v_checksum_want;
       uint64_t scratch;
-    } s_decode_io_writer[1];
+    } s_transform_io[1];
   } private_data;
 
 #ifdef __cplusplus
@@ -3692,10 +3691,10 @@
   }
 
   inline wuffs_base__status  //
-  decode_io_writer(wuffs_base__io_buffer* a_dst,
-                   wuffs_base__io_buffer* a_src,
-                   wuffs_base__slice_u8 a_workbuf) {
-    return wuffs_gzip__decoder__decode_io_writer(this, a_dst, a_src, a_workbuf);
+  transform_io(wuffs_base__io_buffer* a_dst,
+               wuffs_base__io_buffer* a_src,
+               wuffs_base__slice_u8 a_workbuf) {
+    return wuffs_gzip__decoder__transform_io(this, a_dst, a_src, a_workbuf);
   }
 
 #endif  // __cplusplus
@@ -3764,10 +3763,10 @@
 wuffs_zlib__decoder__workbuf_len(const wuffs_zlib__decoder* self);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status  //
-wuffs_zlib__decoder__decode_io_writer(wuffs_zlib__decoder* self,
-                                      wuffs_base__io_buffer* a_dst,
-                                      wuffs_base__io_buffer* a_src,
-                                      wuffs_base__slice_u8 a_workbuf);
+wuffs_zlib__decoder__transform_io(wuffs_zlib__decoder* self,
+                                  wuffs_base__io_buffer* a_dst,
+                                  wuffs_base__io_buffer* a_src,
+                                  wuffs_base__slice_u8 a_workbuf);
 
 // ---------------- Struct Definitions
 
@@ -3799,7 +3798,7 @@
     uint32_t f_dict_id_got;
     uint32_t f_dict_id_want;
 
-    uint32_t p_decode_io_writer[1];
+    uint32_t p_transform_io[1];
   } private_impl;
 
   struct {
@@ -3810,7 +3809,7 @@
     struct {
       uint32_t v_checksum_got;
       uint64_t scratch;
-    } s_decode_io_writer[1];
+    } s_transform_io[1];
   } private_data;
 
 #ifdef __cplusplus
@@ -3861,10 +3860,10 @@
   }
 
   inline wuffs_base__status  //
-  decode_io_writer(wuffs_base__io_buffer* a_dst,
-                   wuffs_base__io_buffer* a_src,
-                   wuffs_base__slice_u8 a_workbuf) {
-    return wuffs_zlib__decoder__decode_io_writer(this, a_dst, a_src, a_workbuf);
+  transform_io(wuffs_base__io_buffer* a_dst,
+               wuffs_base__io_buffer* a_src,
+               wuffs_base__slice_u8 a_workbuf) {
+    return wuffs_zlib__decoder__transform_io(this, a_dst, a_src, a_workbuf);
   }
 
 #endif  // __cplusplus
@@ -6353,13 +6352,13 @@
   return wuffs_base__utility__make_range_ii_u64(1, 1);
 }
 
-// -------- func deflate.decoder.decode_io_writer
+// -------- func deflate.decoder.transform_io
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status  //
-wuffs_deflate__decoder__decode_io_writer(wuffs_deflate__decoder* self,
-                                         wuffs_base__io_buffer* a_dst,
-                                         wuffs_base__io_buffer* a_src,
-                                         wuffs_base__slice_u8 a_workbuf) {
+wuffs_deflate__decoder__transform_io(wuffs_deflate__decoder* self,
+                                     wuffs_base__io_buffer* a_dst,
+                                     wuffs_base__io_buffer* a_src,
+                                     wuffs_base__slice_u8 a_workbuf) {
   if (!self) {
     return wuffs_base__make_status(wuffs_base__error__bad_receiver);
   }
@@ -6399,7 +6398,7 @@
     }
   }
 
-  uint32_t coro_susp_point = self->private_impl.p_decode_io_writer[0];
+  uint32_t coro_susp_point = self->private_impl.p_transform_io[0];
   if (coro_susp_point) {
   }
   switch (coro_susp_point) {
@@ -6438,13 +6437,13 @@
 
     goto ok;
   ok:
-    self->private_impl.p_decode_io_writer[0] = 0;
+    self->private_impl.p_transform_io[0] = 0;
     goto exit;
   }
 
   goto suspend;
 suspend:
-  self->private_impl.p_decode_io_writer[0] =
+  self->private_impl.p_transform_io[0] =
       wuffs_base__status__is_suspension(&status) ? coro_susp_point : 0;
   self->private_impl.active_coroutine =
       wuffs_base__status__is_suspension(&status) ? 1 : 0;
@@ -8144,13 +8143,13 @@
   return wuffs_base__utility__make_range_ii_u64(0, 0);
 }
 
-// -------- func lzw.decoder.decode_io_writer
+// -------- func lzw.decoder.transform_io
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status  //
-wuffs_lzw__decoder__decode_io_writer(wuffs_lzw__decoder* self,
-                                     wuffs_base__io_buffer* a_dst,
-                                     wuffs_base__io_buffer* a_src,
-                                     wuffs_base__slice_u8 a_workbuf) {
+wuffs_lzw__decoder__transform_io(wuffs_lzw__decoder* self,
+                                 wuffs_base__io_buffer* a_dst,
+                                 wuffs_base__io_buffer* a_src,
+                                 wuffs_base__slice_u8 a_workbuf) {
   if (!self) {
     return wuffs_base__make_status(wuffs_base__error__bad_receiver);
   }
@@ -8175,7 +8174,7 @@
 
   uint32_t v_i = 0;
 
-  uint32_t coro_susp_point = self->private_impl.p_decode_io_writer[0];
+  uint32_t coro_susp_point = self->private_impl.p_transform_io[0];
   if (coro_susp_point) {
   }
   switch (coro_susp_point) {
@@ -8232,13 +8231,13 @@
 
     goto ok;
   ok:
-    self->private_impl.p_decode_io_writer[0] = 0;
+    self->private_impl.p_transform_io[0] = 0;
     goto exit;
   }
 
   goto suspend;
 suspend:
-  self->private_impl.p_decode_io_writer[0] =
+  self->private_impl.p_transform_io[0] =
       wuffs_base__status__is_suspension(&status) ? coro_susp_point : 0;
   self->private_impl.active_coroutine =
       wuffs_base__status__is_suspension(&status) ? 1 : 0;
@@ -10967,7 +10966,7 @@
           v_mark = ((uint64_t)(iop_v_r - io0_v_r));
           {
             u_r.meta.ri = ((size_t)(iop_v_r - u_r.data.ptr));
-            wuffs_base__status t_1 = wuffs_lzw__decoder__decode_io_writer(
+            wuffs_base__status t_1 = wuffs_lzw__decoder__transform_io(
                 &self->private_data.f_lzw, &empty_io_buffer, v_r,
                 wuffs_base__utility__empty_slice_u8());
             iop_v_r = u_r.data.ptr + u_r.meta.ri;
@@ -11361,13 +11360,13 @@
   return wuffs_base__utility__make_range_ii_u64(1, 1);
 }
 
-// -------- func gzip.decoder.decode_io_writer
+// -------- func gzip.decoder.transform_io
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status  //
-wuffs_gzip__decoder__decode_io_writer(wuffs_gzip__decoder* self,
-                                      wuffs_base__io_buffer* a_dst,
-                                      wuffs_base__io_buffer* a_src,
-                                      wuffs_base__slice_u8 a_workbuf) {
+wuffs_gzip__decoder__transform_io(wuffs_gzip__decoder* self,
+                                  wuffs_base__io_buffer* a_dst,
+                                  wuffs_base__io_buffer* a_src,
+                                  wuffs_base__slice_u8 a_workbuf) {
   if (!self) {
     return wuffs_base__make_status(wuffs_base__error__bad_receiver);
   }
@@ -11424,13 +11423,13 @@
     io2_a_src = io0_a_src + a_src->meta.wi;
   }
 
-  uint32_t coro_susp_point = self->private_impl.p_decode_io_writer[0];
+  uint32_t coro_susp_point = self->private_impl.p_transform_io[0];
   if (coro_susp_point) {
-    v_flags = self->private_data.s_decode_io_writer[0].v_flags;
-    v_checksum_got = self->private_data.s_decode_io_writer[0].v_checksum_got;
+    v_flags = self->private_data.s_transform_io[0].v_flags;
+    v_checksum_got = self->private_data.s_transform_io[0].v_checksum_got;
     v_decoded_length_got =
-        self->private_data.s_decode_io_writer[0].v_decoded_length_got;
-    v_checksum_want = self->private_data.s_decode_io_writer[0].v_checksum_want;
+        self->private_data.s_transform_io[0].v_decoded_length_got;
+    v_checksum_want = self->private_data.s_transform_io[0].v_checksum_want;
   }
   switch (coro_susp_point) {
     WUFFS_BASE__COROUTINE_SUSPENSION_POINT_0;
@@ -11484,17 +11483,17 @@
       uint8_t t_3 = *iop_a_src++;
       v_flags = t_3;
     }
-    self->private_data.s_decode_io_writer[0].scratch = 6;
+    self->private_data.s_transform_io[0].scratch = 6;
     WUFFS_BASE__COROUTINE_SUSPENSION_POINT(5);
-    if (self->private_data.s_decode_io_writer[0].scratch >
+    if (self->private_data.s_transform_io[0].scratch >
         ((uint64_t)(io2_a_src - iop_a_src))) {
-      self->private_data.s_decode_io_writer[0].scratch -=
+      self->private_data.s_transform_io[0].scratch -=
           ((uint64_t)(io2_a_src - iop_a_src));
       iop_a_src = io2_a_src;
       status = wuffs_base__make_status(wuffs_base__suspension__short_read);
       goto suspend;
     }
-    iop_a_src += self->private_data.s_decode_io_writer[0].scratch;
+    iop_a_src += self->private_data.s_transform_io[0].scratch;
     if ((v_flags & 4) != 0) {
       {
         WUFFS_BASE__COROUTINE_SUSPENSION_POINT(6);
@@ -11503,7 +11502,7 @@
           t_4 = wuffs_base__load_u16le(iop_a_src);
           iop_a_src += 2;
         } else {
-          self->private_data.s_decode_io_writer[0].scratch = 0;
+          self->private_data.s_transform_io[0].scratch = 0;
           WUFFS_BASE__COROUTINE_SUSPENSION_POINT(7);
           while (true) {
             if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
@@ -11511,8 +11510,7 @@
                   wuffs_base__make_status(wuffs_base__suspension__short_read);
               goto suspend;
             }
-            uint64_t* scratch =
-                &self->private_data.s_decode_io_writer[0].scratch;
+            uint64_t* scratch = &self->private_data.s_transform_io[0].scratch;
             uint32_t num_bits_4 = ((uint32_t)(*scratch >> 56));
             *scratch <<= 8;
             *scratch >>= 8;
@@ -11527,17 +11525,17 @@
         }
         v_xlen = t_4;
       }
-      self->private_data.s_decode_io_writer[0].scratch = ((uint32_t)(v_xlen));
+      self->private_data.s_transform_io[0].scratch = ((uint32_t)(v_xlen));
       WUFFS_BASE__COROUTINE_SUSPENSION_POINT(8);
-      if (self->private_data.s_decode_io_writer[0].scratch >
+      if (self->private_data.s_transform_io[0].scratch >
           ((uint64_t)(io2_a_src - iop_a_src))) {
-        self->private_data.s_decode_io_writer[0].scratch -=
+        self->private_data.s_transform_io[0].scratch -=
             ((uint64_t)(io2_a_src - iop_a_src));
         iop_a_src = io2_a_src;
         status = wuffs_base__make_status(wuffs_base__suspension__short_read);
         goto suspend;
       }
-      iop_a_src += self->private_data.s_decode_io_writer[0].scratch;
+      iop_a_src += self->private_data.s_transform_io[0].scratch;
     }
     if ((v_flags & 8) != 0) {
       while (true) {
@@ -11576,17 +11574,17 @@
     label_1_break:;
     }
     if ((v_flags & 2) != 0) {
-      self->private_data.s_decode_io_writer[0].scratch = 2;
+      self->private_data.s_transform_io[0].scratch = 2;
       WUFFS_BASE__COROUTINE_SUSPENSION_POINT(11);
-      if (self->private_data.s_decode_io_writer[0].scratch >
+      if (self->private_data.s_transform_io[0].scratch >
           ((uint64_t)(io2_a_src - iop_a_src))) {
-        self->private_data.s_decode_io_writer[0].scratch -=
+        self->private_data.s_transform_io[0].scratch -=
             ((uint64_t)(io2_a_src - iop_a_src));
         iop_a_src = io2_a_src;
         status = wuffs_base__make_status(wuffs_base__suspension__short_read);
         goto suspend;
       }
-      iop_a_src += self->private_data.s_decode_io_writer[0].scratch;
+      iop_a_src += self->private_data.s_transform_io[0].scratch;
     }
     if ((v_flags & 224) != 0) {
       status = wuffs_base__make_status(wuffs_gzip__error__bad_encoding_flags);
@@ -11601,7 +11599,7 @@
         if (a_src) {
           a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
         }
-        wuffs_base__status t_7 = wuffs_deflate__decoder__decode_io_writer(
+        wuffs_base__status t_7 = wuffs_deflate__decoder__transform_io(
             &self->private_data.f_flate, a_dst, a_src, a_workbuf);
         if (a_dst) {
           iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
@@ -11635,7 +11633,7 @@
         t_8 = wuffs_base__load_u32le(iop_a_src);
         iop_a_src += 4;
       } else {
-        self->private_data.s_decode_io_writer[0].scratch = 0;
+        self->private_data.s_transform_io[0].scratch = 0;
         WUFFS_BASE__COROUTINE_SUSPENSION_POINT(14);
         while (true) {
           if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
@@ -11643,7 +11641,7 @@
                 wuffs_base__make_status(wuffs_base__suspension__short_read);
             goto suspend;
           }
-          uint64_t* scratch = &self->private_data.s_decode_io_writer[0].scratch;
+          uint64_t* scratch = &self->private_data.s_transform_io[0].scratch;
           uint32_t num_bits_8 = ((uint32_t)(*scratch >> 56));
           *scratch <<= 8;
           *scratch >>= 8;
@@ -11665,7 +11663,7 @@
         t_9 = wuffs_base__load_u32le(iop_a_src);
         iop_a_src += 4;
       } else {
-        self->private_data.s_decode_io_writer[0].scratch = 0;
+        self->private_data.s_transform_io[0].scratch = 0;
         WUFFS_BASE__COROUTINE_SUSPENSION_POINT(16);
         while (true) {
           if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
@@ -11673,7 +11671,7 @@
                 wuffs_base__make_status(wuffs_base__suspension__short_read);
             goto suspend;
           }
-          uint64_t* scratch = &self->private_data.s_decode_io_writer[0].scratch;
+          uint64_t* scratch = &self->private_data.s_transform_io[0].scratch;
           uint32_t num_bits_9 = ((uint32_t)(*scratch >> 56));
           *scratch <<= 8;
           *scratch >>= 8;
@@ -11697,21 +11695,21 @@
 
     goto ok;
   ok:
-    self->private_impl.p_decode_io_writer[0] = 0;
+    self->private_impl.p_transform_io[0] = 0;
     goto exit;
   }
 
   goto suspend;
 suspend:
-  self->private_impl.p_decode_io_writer[0] =
+  self->private_impl.p_transform_io[0] =
       wuffs_base__status__is_suspension(&status) ? coro_susp_point : 0;
   self->private_impl.active_coroutine =
       wuffs_base__status__is_suspension(&status) ? 1 : 0;
-  self->private_data.s_decode_io_writer[0].v_flags = v_flags;
-  self->private_data.s_decode_io_writer[0].v_checksum_got = v_checksum_got;
-  self->private_data.s_decode_io_writer[0].v_decoded_length_got =
+  self->private_data.s_transform_io[0].v_flags = v_flags;
+  self->private_data.s_transform_io[0].v_checksum_got = v_checksum_got;
+  self->private_data.s_transform_io[0].v_decoded_length_got =
       v_decoded_length_got;
-  self->private_data.s_decode_io_writer[0].v_checksum_want = v_checksum_want;
+  self->private_data.s_transform_io[0].v_checksum_want = v_checksum_want;
 
   goto exit;
 exit:
@@ -11900,13 +11898,13 @@
   return wuffs_base__utility__make_range_ii_u64(1, 1);
 }
 
-// -------- func zlib.decoder.decode_io_writer
+// -------- func zlib.decoder.transform_io
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status  //
-wuffs_zlib__decoder__decode_io_writer(wuffs_zlib__decoder* self,
-                                      wuffs_base__io_buffer* a_dst,
-                                      wuffs_base__io_buffer* a_src,
-                                      wuffs_base__slice_u8 a_workbuf) {
+wuffs_zlib__decoder__transform_io(wuffs_zlib__decoder* self,
+                                  wuffs_base__io_buffer* a_dst,
+                                  wuffs_base__io_buffer* a_src,
+                                  wuffs_base__slice_u8 a_workbuf) {
   if (!self) {
     return wuffs_base__make_status(wuffs_base__error__bad_receiver);
   }
@@ -11959,9 +11957,9 @@
     io2_a_src = io0_a_src + a_src->meta.wi;
   }
 
-  uint32_t coro_susp_point = self->private_impl.p_decode_io_writer[0];
+  uint32_t coro_susp_point = self->private_impl.p_transform_io[0];
   if (coro_susp_point) {
-    v_checksum_got = self->private_data.s_decode_io_writer[0].v_checksum_got;
+    v_checksum_got = self->private_data.s_transform_io[0].v_checksum_got;
   }
   switch (coro_susp_point) {
     WUFFS_BASE__COROUTINE_SUSPENSION_POINT_0;
@@ -11977,7 +11975,7 @@
           t_0 = wuffs_base__load_u16be(iop_a_src);
           iop_a_src += 2;
         } else {
-          self->private_data.s_decode_io_writer[0].scratch = 0;
+          self->private_data.s_transform_io[0].scratch = 0;
           WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
           while (true) {
             if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
@@ -11985,8 +11983,7 @@
                   wuffs_base__make_status(wuffs_base__suspension__short_read);
               goto suspend;
             }
-            uint64_t* scratch =
-                &self->private_data.s_decode_io_writer[0].scratch;
+            uint64_t* scratch = &self->private_data.s_transform_io[0].scratch;
             uint32_t num_bits_0 = ((uint32_t)(*scratch & 0xFF));
             *scratch >>= 8;
             *scratch <<= 8;
@@ -12025,7 +12022,7 @@
             t_1 = wuffs_base__load_u32be(iop_a_src);
             iop_a_src += 4;
           } else {
-            self->private_data.s_decode_io_writer[0].scratch = 0;
+            self->private_data.s_transform_io[0].scratch = 0;
             WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
             while (true) {
               if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
@@ -12033,8 +12030,7 @@
                     wuffs_base__make_status(wuffs_base__suspension__short_read);
                 goto suspend;
               }
-              uint64_t* scratch =
-                  &self->private_data.s_decode_io_writer[0].scratch;
+              uint64_t* scratch = &self->private_data.s_transform_io[0].scratch;
               uint32_t num_bits_1 = ((uint32_t)(*scratch & 0xFF));
               *scratch >>= 8;
               *scratch <<= 8;
@@ -12076,7 +12072,7 @@
         if (a_src) {
           a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
         }
-        wuffs_base__status t_2 = wuffs_deflate__decoder__decode_io_writer(
+        wuffs_base__status t_2 = wuffs_deflate__decoder__transform_io(
             &self->private_data.f_flate, a_dst, a_src, a_workbuf);
         if (a_dst) {
           iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
@@ -12106,7 +12102,7 @@
         t_3 = wuffs_base__load_u32be(iop_a_src);
         iop_a_src += 4;
       } else {
-        self->private_data.s_decode_io_writer[0].scratch = 0;
+        self->private_data.s_transform_io[0].scratch = 0;
         WUFFS_BASE__COROUTINE_SUSPENSION_POINT(7);
         while (true) {
           if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
@@ -12114,7 +12110,7 @@
                 wuffs_base__make_status(wuffs_base__suspension__short_read);
             goto suspend;
           }
-          uint64_t* scratch = &self->private_data.s_decode_io_writer[0].scratch;
+          uint64_t* scratch = &self->private_data.s_transform_io[0].scratch;
           uint32_t num_bits_3 = ((uint32_t)(*scratch & 0xFF));
           *scratch >>= 8;
           *scratch <<= 8;
@@ -12137,17 +12133,17 @@
 
     goto ok;
   ok:
-    self->private_impl.p_decode_io_writer[0] = 0;
+    self->private_impl.p_transform_io[0] = 0;
     goto exit;
   }
 
   goto suspend;
 suspend:
-  self->private_impl.p_decode_io_writer[0] =
+  self->private_impl.p_transform_io[0] =
       wuffs_base__status__is_suspension(&status) ? coro_susp_point : 0;
   self->private_impl.active_coroutine =
       wuffs_base__status__is_suspension(&status) ? 1 : 0;
-  self->private_data.s_decode_io_writer[0].v_checksum_got = v_checksum_got;
+  self->private_data.s_transform_io[0].v_checksum_got = v_checksum_got;
 
   goto exit;
 exit:
diff --git a/script/bench-c-deflate-fragmentation.c b/script/bench-c-deflate-fragmentation.c
index c49aa9a..429fa7c 100644
--- a/script/bench-c-deflate-fragmentation.c
+++ b/script/bench-c-deflate-fragmentation.c
@@ -227,10 +227,10 @@
 
 const char* decode_once(bool frag_dst, bool frag_idat) {
   wuffs_zlib__decoder dec;
-  const char* status =
+  wuffs_base__status status =
       wuffs_zlib__decoder__initialize(&dec, sizeof dec, WUFFS_VERSION, 0);
-  if (status) {
-    return status;
+  if (!wuffs_base__status__is_ok(&status)) {
+    return wuffs_base__status__message(&status);
   }
 
   wuffs_base__io_buffer dst = ((wuffs_base__io_buffer){
@@ -251,8 +251,6 @@
           .closed = true,
       }),
   });
-  wuffs_base__io_writer dst_writer = wuffs_base__io_buffer__writer(&dst);
-  wuffs_base__io_reader idat_reader = wuffs_base__io_buffer__reader(&idat);
 
   uint32_t i = 0;  // Number of dst fragments processed, if frag_dst.
   if (frag_dst) {
@@ -266,30 +264,29 @@
   }
 
   while (true) {
-    status =
-        wuffs_zlib__decoder__decode_io_writer(&dec, dst_writer, idat_reader,
-                                              ((wuffs_base__slice_u8){
-                                                  .ptr = work_buffer,
-                                                  .len = WORK_BUFFER_SIZE,
-                                              }));
+    status = wuffs_zlib__decoder__transform_io(&dec, &dst, &idat,
+                                               ((wuffs_base__slice_u8){
+                                                   .ptr = work_buffer,
+                                                   .len = WORK_BUFFER_SIZE,
+                                               }));
 
-    if (!status) {
+    if (wuffs_base__status__is_ok(&status)) {
       break;
     }
-    if ((status == wuffs_base__suspension__short_write) && frag_dst &&
+    if ((status.repr == wuffs_base__suspension__short_write) && frag_dst &&
         (i < height - 1)) {
       i++;
       dst.data.len = bytes_per_row * (i + 1);
       continue;
     }
-    if ((status == wuffs_base__suspension__short_read) && frag_idat &&
+    if ((status.repr == wuffs_base__suspension__short_read) && frag_idat &&
         (j < num_idat_chunks - 1)) {
       j++;
       idat.meta.wi = idat_splits[j + 1];
       idat.meta.closed = (num_idat_chunks == j + 1);
       continue;
     }
-    return status;
+    return wuffs_base__status__message(&status);
   }
 
   if (dst.meta.wi != bytes_per_frame) {
diff --git a/std/deflate/decode_deflate.wuffs b/std/deflate/decode_deflate.wuffs
index e77c615..4660ba5 100644
--- a/std/deflate/decode_deflate.wuffs
+++ b/std/deflate/decode_deflate.wuffs
@@ -186,7 +186,7 @@
 		max_incl: decoder_workbuf_len_max_incl_worst_case)
 }
 
-pub func decoder.decode_io_writer?(dst: base.io_writer, src: base.io_reader, workbuf: slice base.u8) {
+pub func decoder.transform_io?(dst: base.io_writer, src: base.io_reader, workbuf: slice base.u8) {
 	var mark   : base.u64
 	var status : base.status
 
diff --git a/std/gif/decode_gif.wuffs b/std/gif/decode_gif.wuffs
index 9ca9d35..2019331 100644
--- a/std/gif/decode_gif.wuffs
+++ b/std/gif/decode_gif.wuffs
@@ -976,7 +976,7 @@
 			}
 			io_bind (io: r, data: this.compressed[this.compressed_ri .. this.compressed_wi]) {
 				mark = r.mark()
-				lzw_status =? this.lzw.decode_io_writer?(
+				lzw_status =? this.lzw.transform_io?(
 					dst: this.util.empty_io_writer(), src: r, workbuf: this.util.empty_slice_u8())
 				this.compressed_ri ~sat+= r.count_since(mark: mark)
 			}
diff --git a/std/gzip/decode_gzip.wuffs b/std/gzip/decode_gzip.wuffs
index bd7f5ce..78467d5 100644
--- a/std/gzip/decode_gzip.wuffs
+++ b/std/gzip/decode_gzip.wuffs
@@ -42,7 +42,7 @@
 		max_incl: decoder_workbuf_len_max_incl_worst_case)
 }
 
-pub func decoder.decode_io_writer?(dst: base.io_writer, src: base.io_reader, workbuf: slice base.u8) {
+pub func decoder.transform_io?(dst: base.io_writer, src: base.io_reader, workbuf: slice base.u8) {
 	var c                   : base.u8
 	var flags               : base.u8
 	var xlen                : base.u16
@@ -113,7 +113,7 @@
 	// Decode and checksum the DEFLATE-encoded payload.
 	while true {
 		mark = args.dst.mark()
-		status =? this.flate.decode_io_writer?(dst: args.dst, src: args.src, workbuf: args.workbuf)
+		status =? this.flate.transform_io?(dst: args.dst, src: args.src, workbuf: args.workbuf)
 		if not this.ignore_checksum {
 			checksum_got = this.checksum.update_u32!(x: args.dst.since(mark: mark))
 			decoded_length_got ~mod+= ((args.dst.count_since(mark: mark) & 0xFFFFFFFF) as base.u32)
diff --git a/std/lzw/decode_lzw.wuffs b/std/lzw/decode_lzw.wuffs
index af4ae4d..40fce29 100644
--- a/std/lzw/decode_lzw.wuffs
+++ b/std/lzw/decode_lzw.wuffs
@@ -29,7 +29,7 @@
 pub struct decoder?(
 	// set_literal_width_arg is 1 plus the saved argument passed to
 	// set_literal_width. This is assigned to the literal_width field at the
-	// start of decode_io_writer. During that method, calling set_literal_width
+	// start of transform_io. During that method, calling set_literal_width
 	// will change set_literal_width_arg but not literal_width.
 	set_literal_width_arg : base.u32[..= 9],
 
@@ -77,7 +77,7 @@
 	return this.util.make_range_ii_u64(min_incl: 0, max_incl: 0)
 }
 
-pub func decoder.decode_io_writer?(dst: base.io_writer, src: base.io_reader, workbuf: slice base.u8) {
+pub func decoder.transform_io?(dst: base.io_writer, src: base.io_reader, workbuf: slice base.u8) {
 	var i : base.u32[..= 8191]
 
 	// Initialize read_from state.
diff --git a/std/zlib/decode_zlib.wuffs b/std/zlib/decode_zlib.wuffs
index 6d9a47c..235ea5a 100644
--- a/std/zlib/decode_zlib.wuffs
+++ b/std/zlib/decode_zlib.wuffs
@@ -69,7 +69,7 @@
 		max_incl: decoder_workbuf_len_max_incl_worst_case)
 }
 
-pub func decoder.decode_io_writer?(dst: base.io_writer, src: base.io_reader, workbuf: slice base.u8) {
+pub func decoder.transform_io?(dst: base.io_writer, src: base.io_reader, workbuf: slice base.u8) {
 	var x             : base.u16
 	var checksum_got  : base.u32
 	var status        : base.status
@@ -109,7 +109,7 @@
 	// Decode and checksum the DEFLATE-encoded payload.
 	while true {
 		mark = args.dst.mark()
-		status =? this.flate.decode_io_writer?(dst: args.dst, src: args.src, workbuf: args.workbuf)
+		status =? this.flate.transform_io?(dst: args.dst, src: args.src, workbuf: args.workbuf)
 		if not this.ignore_checksum {
 			checksum_got = this.checksum.update_u32!(x: args.dst.since(mark: mark))
 		}
diff --git a/test/c/std/deflate.c b/test/c/std/deflate.c
index 59a690a..e86eb41 100644
--- a/test/c/std/deflate.c
+++ b/test/c/std/deflate.c
@@ -169,7 +169,7 @@
     wuffs_base__io_buffer limited_dst = make_limited_writer(*dst, wlimit);
     wuffs_base__io_buffer limited_src = make_limited_reader(*src, rlimit);
 
-    wuffs_base__status status = wuffs_deflate__decoder__decode_io_writer(
+    wuffs_base__status status = wuffs_deflate__decoder__transform_io(
         &dec, &limited_dst, &limited_src, global_work_slice);
 
     dst->meta.wi += limited_dst.meta.wi;
@@ -248,8 +248,8 @@
   CHECK_STATUS("initialize", wuffs_deflate__decoder__initialize(
                                  &dec, sizeof dec, WUFFS_VERSION,
                                  WUFFS_INITIALIZE__DEFAULT_OPTIONS));
-  CHECK_STATUS("decode_io_writer", wuffs_deflate__decoder__decode_io_writer(
-                                       &dec, &got, &src, global_work_slice));
+  CHECK_STATUS("transform_io", wuffs_deflate__decoder__transform_io(
+                                   &dec, &got, &src, global_work_slice));
 
   int i;
   for (i = 0; i < 2; i++) {
@@ -345,13 +345,13 @@
     src.meta.closed = false;
     src.meta.ri = gt->src_offset0;
     src.meta.wi = split;
-    wuffs_base__status z0 = wuffs_deflate__decoder__decode_io_writer(
+    wuffs_base__status z0 = wuffs_deflate__decoder__transform_io(
         &dec, &got, &src, global_work_slice);
 
     src.meta.closed = true;
     src.meta.ri = split;
     src.meta.wi = gt->src_offset1;
-    wuffs_base__status z1 = wuffs_deflate__decoder__decode_io_writer(
+    wuffs_base__status z1 = wuffs_deflate__decoder__transform_io(
         &dec, &got, &src, global_work_slice);
 
     if (z0.repr != wuffs_base__suspension__short_read) {
@@ -387,7 +387,7 @@
 
   dec->private_impl.f_history_index = starting_history_index;
 
-  wuffs_base__status got_z = wuffs_deflate__decoder__decode_io_writer(
+  wuffs_base__status got_z = wuffs_deflate__decoder__transform_io(
       dec, &limited_got, src, global_work_slice);
   got->meta.wi += limited_got.meta.wi;
   if (got_z.repr != want_z) {
diff --git a/test/c/std/gzip.c b/test/c/std/gzip.c
index a76f668..88786b9 100644
--- a/test/c/std/gzip.c
+++ b/test/c/std/gzip.c
@@ -97,7 +97,7 @@
     wuffs_base__io_buffer limited_dst = make_limited_writer(*dst, wlimit);
     wuffs_base__io_buffer limited_src = make_limited_reader(*src, rlimit);
 
-    wuffs_base__status status = wuffs_gzip__decoder__decode_io_writer(
+    wuffs_base__status status = wuffs_gzip__decoder__transform_io(
         &dec, &limited_dst, &limited_src, global_work_slice);
 
     dst->meta.wi += limited_dst.meta.wi;
@@ -165,7 +165,7 @@
       }
 
       wuffs_base__io_buffer limited_src = make_limited_reader(src, rlimit);
-      wuffs_base__status got_z = wuffs_gzip__decoder__decode_io_writer(
+      wuffs_base__status got_z = wuffs_gzip__decoder__transform_io(
           &dec, &got, &limited_src, global_work_slice);
       src.meta.ri += limited_src.meta.ri;
       if (got_z.repr != want_z) {
diff --git a/test/c/std/lzw.c b/test/c/std/lzw.c
index 6685ad7..6bb8f8a 100644
--- a/test/c/std/lzw.c
+++ b/test/c/std/lzw.c
@@ -115,20 +115,19 @@
     size_t old_wi = got.meta.wi;
     size_t old_ri = src.meta.ri;
 
-    wuffs_base__status status = wuffs_lzw__decoder__decode_io_writer(
+    wuffs_base__status status = wuffs_lzw__decoder__transform_io(
         &dec, &limited_got, &limited_src, global_work_slice);
     got.meta.wi += limited_got.meta.wi;
     src.meta.ri += limited_src.meta.ri;
     if (wuffs_base__status__is_ok(&status)) {
       if (src.meta.ri != src.meta.wi) {
-        RETURN_FAIL(
-            "decode_io_writer returned \"ok\" but src was not exhausted");
+        RETURN_FAIL("transform_io returned \"ok\" but src was not exhausted");
       }
       break;
     }
     if ((status.repr != wuffs_base__suspension__short_read) &&
         (status.repr != wuffs_base__suspension__short_write)) {
-      RETURN_FAIL("decode_io_writer: got \"%s\", want \"%s\" or \"%s\"",
+      RETURN_FAIL("transform_io: got \"%s\", want \"%s\" or \"%s\"",
                   status.repr, wuffs_base__suspension__short_read,
                   wuffs_base__suspension__short_write);
     }
@@ -223,9 +222,9 @@
   wuffs_lzw__decoder__set_literal_width(&dec, 7);
 
   wuffs_base__status status =
-      wuffs_lzw__decoder__decode_io_writer(&dec, &got, &src, global_work_slice);
+      wuffs_lzw__decoder__transform_io(&dec, &got, &src, global_work_slice);
   if (status.repr != wuffs_lzw__error__bad_code) {
-    RETURN_FAIL("decode_io_writer: got \"%s\", want \"%s\"", status.repr,
+    RETURN_FAIL("transform_io: got \"%s\", want \"%s\"", status.repr,
                 wuffs_lzw__error__bad_code);
   }
 
@@ -265,8 +264,8 @@
                    WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
   wuffs_lzw__decoder__set_literal_width(&dec, 8);
 
-  CHECK_STATUS("decode_io_writer", wuffs_lzw__decoder__decode_io_writer(
-                                       &dec, &got, &src, global_work_slice));
+  CHECK_STATUS("transform_io", wuffs_lzw__decoder__transform_io(
+                                   &dec, &got, &src, global_work_slice));
 
   if (got.meta.wi != 0) {
     RETURN_FAIL("got.meta.wi: got %d, want 0", (int)(got.meta.wi));
@@ -290,8 +289,8 @@
   wuffs_base__io_buffer got = ((wuffs_base__io_buffer){
       .data = global_got_slice,
   });
-  CHECK_STATUS("decode_io_writer", wuffs_lzw__decoder__decode_io_writer(
-                                       &dec, &got, &src, global_work_slice));
+  CHECK_STATUS("transform_io", wuffs_lzw__decoder__transform_io(
+                                   &dec, &got, &src, global_work_slice));
 
   return check_io_buffers_equal("", &got, &want);
 }
@@ -392,8 +391,8 @@
                  wuffs_lzw__decoder__initialize(
                      &dec, sizeof dec, WUFFS_VERSION,
                      WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
-    CHECK_STATUS("decode_io_writer", wuffs_lzw__decoder__decode_io_writer(
-                                         &dec, &got, &src, global_work_slice));
+    CHECK_STATUS("transform_io", wuffs_lzw__decoder__transform_io(
+                                     &dec, &got, &src, global_work_slice));
     n_bytes += got.meta.wi;
   }
   bench_finish(iters, n_bytes);
diff --git a/test/c/std/zlib.c b/test/c/std/zlib.c
index 236bc9c..987b25e 100644
--- a/test/c/std/zlib.c
+++ b/test/c/std/zlib.c
@@ -108,7 +108,7 @@
     wuffs_base__io_buffer limited_dst = make_limited_writer(*dst, wlimit);
     wuffs_base__io_buffer limited_src = make_limited_reader(*src, rlimit);
 
-    wuffs_base__status status = wuffs_zlib__decoder__decode_io_writer(
+    wuffs_base__status status = wuffs_zlib__decoder__transform_io(
         &dec, &limited_dst, &limited_src, global_work_slice);
 
     dst->meta.wi += limited_dst.meta.wi;
@@ -176,7 +176,7 @@
 
       wuffs_base__io_buffer limited_src = make_limited_reader(src, rlimit);
 
-      wuffs_base__status got_z = wuffs_zlib__decoder__decode_io_writer(
+      wuffs_base__status got_z = wuffs_zlib__decoder__transform_io(
           &dec, &got, &limited_src, global_work_slice);
       src.meta.ri += limited_src.meta.ri;
       if (got_z.repr != want_z) {
@@ -235,11 +235,11 @@
 
   int i;
   for (i = 0; i < 3; i++) {
-    wuffs_base__status status = wuffs_zlib__decoder__decode_io_writer(
-        &dec, &got, &src, global_work_slice);
+    wuffs_base__status status =
+        wuffs_zlib__decoder__transform_io(&dec, &got, &src, global_work_slice);
 
     if (status.repr != wuffs_zlib__note__dictionary_required) {
-      RETURN_FAIL("decode_io_writer (before dict): got \"%s\", want \"%s\"",
+      RETURN_FAIL("transform_io (before dict): got \"%s\", want \"%s\"",
                   status.repr, wuffs_zlib__note__dictionary_required);
     }
 
@@ -257,9 +257,9 @@
                 .len = zlib_sheep_dict_len,
             }));
 
-  CHECK_STATUS("decode_io_writer (after dict)",
-               wuffs_zlib__decoder__decode_io_writer(&dec, &got, &src,
-                                                     global_work_slice));
+  CHECK_STATUS(
+      "transform_io (after dict)",
+      wuffs_zlib__decoder__transform_io(&dec, &got, &src, global_work_slice));
 
   wuffs_base__io_buffer want =
       make_io_buffer_from_string(zlib_sheep_want_ptr, zlib_sheep_want_len);
