diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 400aee8..72ad6f9 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -25,7 +25,7 @@ jobs:
       - name: Setup Zig
         uses: mlugg/setup-zig@v2
         with:
-          version: 0.15.2
+          version: 0.16.0-dev.2261+d6b3dd25a
       - name: AST Verify
         run: zig fmt --check --ast-check src/
         working-directory: zigimg
diff --git a/build.zig.zon b/build.zig.zon
index 3ff4816..536d37b 100644
--- a/build.zig.zon
+++ b/build.zig.zon
@@ -1,7 +1,7 @@
 .{
     .name = .zigimg,
     .fingerprint = 0x6d2b443cdaa8f7f3,
-    .minimum_zig_version = "0.15.2",
+    .minimum_zig_version = "0.16.0-dev.2261+d6b3dd25a",
     .version = "0.1.0",
     .paths = .{
         "build.zig",
diff --git a/src/Image.zig b/src/Image.zig
index d67cd61..6472129 100644
--- a/src/Image.zig
+++ b/src/Image.zig
@@ -71,7 +71,7 @@ pub const WriteError = Error ||
     std.mem.Allocator.Error ||
     io.ReadStream.Error ||
     io.WriteStream.Error ||
-    std.fs.File.OpenError ||
+    std.Io.File.OpenError ||
     error{ EndOfStream, InvalidData, UnfinishedBits };
 
 pub const ConvertError = Error ||
@@ -101,7 +101,7 @@
 };
 
 pub const Animation = struct {
-    frames: FrameList = .{},
+    frames: FrameList = .empty,
     loop_count: i32 = AnimationLoopInfinite,
 
     pub const FrameList = std.ArrayList(AnimationFrame);
@@ -150,16 +150,16 @@ pub fn deinit(self: *Image, allocator: std.mem.Allocator) void {
 }
 
 /// Detect which image format is used by the file path
-pub fn detectFormatFromFilePath(file_path: []const u8, read_buffer: []u8) !Format {
-    var file = try std.fs.cwd().openFile(file_path, .{});
-    defer file.close();
+pub fn detectFormatFromFilePath(std_io: std.Io, file_path: []const u8, read_buffer: []u8) !Format {
+    var file = try std.Io.Dir.openFile(std.Io.Dir.cwd(), std_io, file_path, .{});
+    defer file.close(std_io);
 
-    return detectFormatFromFile(file, read_buffer);
+    return detectFormatFromFile(std_io, file, read_buffer);
 }
 
 /// Detect which image format is used by the file
-pub fn detectFormatFromFile(file: std.fs.File, read_buffer: []u8) !Format {
-    var read_stream = io.ReadStream.initFile(file, read_buffer);
+pub fn detectFormatFromFile(std_io: std.Io, file: std.Io.File, read_buffer: []u8) !Format {
+    var read_stream = io.ReadStream.initFile(std_io, file, read_buffer);
     return internalDetectFormat(&read_stream);
 }
 
@@ -170,16 +170,16 @@ pub fn detectFormatFromMemory(buffer: []const u8) !Format {
 }
 
 /// Load an image from a file path
-pub fn fromFilePath(allocator: std.mem.Allocator, file_path: []const u8, read_buffer: []u8) !Image {
-    var file = try std.fs.cwd().openFile(file_path, .{});
-    defer file.close();
+pub fn fromFilePath(allocator: std.mem.Allocator, std_io: std.Io, file_path: []const u8, read_buffer: []u8) !Image {
+    var file = try std.Io.Dir.openFile(std.Io.Dir.cwd(), std_io, file_path, .{});
+    defer file.close(std_io);
 
-    return fromFile(allocator, file, read_buffer);
+    return fromFile(allocator, std_io, file, read_buffer);
 }
 
-/// Load an image from a standard library std.fs.File
-pub fn fromFile(allocator: std.mem.Allocator, file: std.fs.File, read_buffer: []u8) !Image {
-    var read_stream = io.ReadStream.initFile(file, read_buffer);
+/// Load an image from a standard library std.Io.File
+pub fn fromFile(allocator: std.mem.Allocator, std_io: std.Io, file: std.Io.File, read_buffer: []u8) !Image {
+    var read_stream = io.ReadStream.initFile(std_io, file, read_buffer);
     return internalRead(allocator, &read_stream);
 }
 
@@ -260,16 +260,16 @@ pub fn toManaged(self: Image, allocator: std.mem.Allocator) Managed {
 }
 
 /// Write the image to an image format to the specified path
-pub fn writeToFilePath(self: Image, allocator: std.mem.Allocator, file_path: []const u8, write_buffer: []u8, encoder_options: EncoderOptions) WriteError!void {
-    var file = try std.fs.cwd().createFile(file_path, .{});
-    defer file.close();
+pub fn writeToFilePath(self: Image, allocator: std.mem.Allocator, std_io: std.Io, file_path: []const u8, write_buffer: []u8, encoder_options: EncoderOptions) WriteError!void {
+    var file = try std.Io.Dir.createFile(std.Io.Dir.cwd(), std_io, file_path, .{});
+    defer file.close(std_io);
 
-    try self.writeToFile(allocator, file, write_buffer, encoder_options);
+    try self.writeToFile(allocator, std_io, file, write_buffer, encoder_options);
 }
 
-/// Write the image to an image format to the specified std.fs.File
-pub fn writeToFile(self: Image, allocator: std.mem.Allocator, file: std.fs.File, write_buffer: []u8, encoder_options: EncoderOptions) WriteError!void {
-    var write_stream = io.WriteStream.initFile(file, write_buffer);
+/// Write the image to an image format to the specified std.Io.File
+pub fn writeToFile(self: Image, allocator: std.mem.Allocator, std_io: std.Io, file: std.Io.File, write_buffer: []u8, encoder_options: EncoderOptions) WriteError!void {
+    var write_stream = io.WriteStream.initFile(std_io, file, write_buffer);
 
     try self.internalWrite(allocator, &write_stream, encoder_options);
 }
diff --git a/src/Image/Managed.zig b/src/Image/Managed.zig
index 608b1d6..1517e7c 100644
--- a/src/Image/Managed.zig
+++ b/src/Image/Managed.zig
@@ -20,14 +20,16 @@ width: usize = 0,
 height: usize = 0,
 pixels: color.PixelStorage = .{ .invalid = void{} },
 animation: Animation = .{},
+io: std.Io = undefined,
 allocator: std.mem.Allocator = undefined, // Allocator needs to be last in order to be able to ptrCast to Image
 
 const Managed = @This();
 
 /// Init an empty image with no pixel data
-pub fn init(allocator: std.mem.Allocator) Managed {
+pub fn init(allocator: std.mem.Allocator, io: std.Io) Managed {
     return Managed{
         .allocator = allocator,
+        .io = io,
     };
 }
 
@@ -37,13 +39,13 @@ pub fn deinit(self: *Managed) void {
 }
 
 /// Detect which image format is used by the file path
-pub fn detectFormatFromFilePath(file_path: []const u8, read_buffer: []u8) !Format {
-    return Image.detectFormatFromFilePath(file_path, read_buffer);
+pub fn detectFormatFromFilePath(io: std.Io, file_path: []const u8, read_buffer: []u8) !Format {
+    return Image.detectFormatFromFilePath(io, file_path, read_buffer);
 }
 
 /// Detect which image format is used by the file
-pub fn detectFormatFromFile(file: std.fs.File, read_buffer: []u8) !Format {
-    return Image.detectFormatFromFile(file, read_buffer);
+pub fn detectFormatFromFile(io: std.Io, file: std.Io.File, read_buffer: []u8) !Format {
+    return Image.detectFormatFromFile(io, file, read_buffer);
 }
 
 /// Detect which image format is used by the memory buffer
@@ -52,13 +54,13 @@ pub fn detectFormatFromMemory(buffer: []const u8) !Format {
 }
 
 /// Load an image from a file path
-pub fn fromFilePath(allocator: std.mem.Allocator, file_path: []const u8, read_buffer: []u8) !Managed {
-    return (try Image.fromFilePath(allocator, file_path, read_buffer)).toManaged(allocator);
+pub fn fromFilePath(allocator: std.mem.Allocator, io: std.Io, file_path: []const u8, read_buffer: []u8) !Managed {
+    return (try Image.fromFilePath(allocator, io, file_path, read_buffer)).toManaged(allocator);
 }
 
-/// Load an image from a standard library std.fs.File
-pub fn fromFile(allocator: std.mem.Allocator, file: std.fs.File, read_buffer: []u8) !Managed {
-    return (try Image.fromFile(allocator, file, read_buffer)).toManaged(allocator);
+/// Load an image from a standard library std.Io.File
+pub fn fromFile(allocator: std.mem.Allocator, io: std.Io, file: std.Io.File, read_buffer: []u8) !Managed {
+    return (try Image.fromFile(allocator, io, file, read_buffer)).toManaged(allocator);
 }
 
 /// Load an image from a memory buffer
@@ -116,12 +118,12 @@ pub fn isAnimation(self: Managed) bool {
 
 /// Write the image to an image format to the specified path
 pub fn writeToFilePath(self: Managed, file_path: []const u8, write_buffer: []u8, encoder_options: EncoderOptions) WriteError!void {
-    return Image.writeToFilePath(self.toUnmanaged(), self.allocator, file_path, write_buffer, encoder_options);
+    return Image.writeToFilePath(self.toUnmanaged(), self.allocator, self.io, file_path, write_buffer, encoder_options);
 }
 
-/// Write the image to an image format to the specified std.fs.File
-pub fn writeToFile(self: Managed, file: std.fs.File, write_buffer: []u8, encoder_options: EncoderOptions) WriteError!void {
-    return Image.writeToFile(self.toUnmanaged(), self.allocator, file, write_buffer, encoder_options);
+/// Write the image to an image format to the specified std.Io.File
+pub fn writeToFile(self: Managed, file: std.Io.File, write_buffer: []u8, encoder_options: EncoderOptions) WriteError!void {
+    return Image.writeToFile(self.toUnmanaged(), self.allocator, file, self.io, write_buffer, encoder_options);
 }
 
 /// Write the image to an image format in a memory buffer. The memory buffer is not grown
diff --git a/src/color.zig b/src/color.zig
index 4591bce..8a1a6ac 100644
--- a/src/color.zig
+++ b/src/color.zig
@@ -55,10 +55,7 @@ pub fn ScaleValue(comptime T: type) fn (anytype) T {
                                 // In order to fit `value * out_max` we need an
                                 // int of size `in_bits + out_bits` in the worst
                                 // case scenario.
-                                const FitInt = @Type(.{ .int = .{
-                                    .bits = in_bits + out_bits,
-                                    .signedness = .unsigned,
-                                } });
+                                const FitInt = @Int(.unsigned, in_bits + out_bits);
 
                                 return @truncate((@as(FitInt, value) * out_max + in_max / 2) / in_max);
                             } else return value;
@@ -395,7 +392,7 @@ fn ToMethods(
     return packed struct(u0) {
         const To = @This();
 
-        fn getSelf(to: *const To) *align(1) const T {
+        fn getSelf(to: anytype) *align(1) const T {
             // @fieldParentPtr is broken for packed structs.
             // See: https://github.com/ziglang/zig/issues/20458
             if (@typeInfo(T).@"struct".layout == .@"packed") {
@@ -408,47 +405,47 @@ fn ToMethods(
         }
 
         /// Assumes the target color type has `FromMethods` for it.
-        pub fn color(to: *const To, ColorT: type) ColorT {
-            return ColorT.from.color(to.getSelf().*);
+        pub fn color(to: anytype, ColorT: type) ColorT {
+            return ColorT.from.color(getSelf(to).*);
         }
 
-        pub fn u32Rgba(to: *const To) u32 {
-            const self = to.getSelf();
+        pub fn u32Rgba(to: anytype) u32 {
+            const self = getSelf(to);
             return @as(u32, toU8(self.r)) << 24 |
                 @as(u32, toU8(self.g)) << 16 |
                 @as(u32, toU8(self.b)) << 8 |
                 if (has_alpha) toU8(self.a) else 0xff;
         }
 
-        pub fn u32Rgb(to: *const To) u32 {
-            const self = to.getSelf();
+        pub fn u32Rgb(to: anytype) u32 {
+            const self = getSelf(to);
             return @as(u32, toU8(self.r)) << 16 |
                 @as(u32, toU8(self.g)) << 8 |
                 toU8(self.b);
         }
 
-        pub fn u64Rgba(to: *const To) u64 {
-            const self = to.getSelf();
+        pub fn u64Rgba(to: anytype) u64 {
+            const self = getSelf(to);
             return @as(u64, toU16(self.r)) << 48 |
                 @as(u64, toU16(self.g)) << 32 |
                 @as(u64, toU16(self.b)) << 16 |
                 if (has_alpha) toU16(self.a) else 0xffff;
         }
 
-        pub fn u64Rgb(to: *const To) u64 {
-            const self = to.getSelf();
+        pub fn u64Rgb(to: anytype) u64 {
+            const self = getSelf(to);
             return @as(u64, toU16(self.r)) << 32 |
                 @as(u64, toU16(self.g)) << 16 |
                 toU16(self.b);
         }
 
         /// Only valid for color types where all channels are the same type.
-        pub fn array(to: *const To) [4]RedT {
+        pub fn array(to: anytype) [4]RedT {
             if (comptime multiple_channel_types) {
                 @compileError("Color.to.array may only be used when all channels in the color are the same type.");
             }
 
-            const self = to.getSelf();
+            const self = getSelf(to);
 
             return .{
                 self.r,
@@ -461,8 +458,8 @@ fn ToMethods(
             };
         }
 
-        pub fn float4(to: *const To) math.float4 {
-            const self = to.getSelf();
+        pub fn float4(to: anytype) math.float4 {
+            const self = getSelf(to);
 
             return .{
                 toF32(self.r),
@@ -477,8 +474,8 @@ fn ToMethods(
 
         /// For int channels, premultiplication
         /// is done with a round-trip to f32.
-        pub fn premultipliedAlpha(to: *const To) T {
-            const self = to.getSelf();
+        pub fn premultipliedAlpha(to: anytype) T {
+            const self = getSelf(to);
             var res = self.*;
             if (!has_alpha) return res;
 
diff --git a/src/formats/pam.zig b/src/formats/pam.zig
index f366d95..7ef9833 100644
--- a/src/formats/pam.zig
+++ b/src/formats/pam.zig
@@ -70,7 +70,7 @@
         var maybe_maxval: ?u16 = null;
         var maybe_tuple_type: ?TupleType = null;
-        var comments = std.ArrayListUnmanaged([]const u8){};
+        var comments: std.ArrayListUnmanaged([]const u8) = .empty;
         defer {
             for (comments.items) |comment| allocator.free(comment);
             comments.deinit(allocator);
@@ -77,7 +77,7 @@ const Header = struct {
         }
 
         {
-            var line_buffer_stream = try std.io.Writer.Allocating.initCapacity(allocator, 32);
+            var line_buffer_stream = try std.Io.Writer.Allocating.initCapacity(allocator, 32);
             defer line_buffer_stream.deinit();
 
             while (true) {
diff --git a/src/formats/pcx.zig b/src/formats/pcx.zig
index b694762..52c2bb0 100644
--- a/src/formats/pcx.zig
+++ b/src/formats/pcx.zig
@@ -218,7 +218,7 @@ test "PCX RLE Fast encoder" {
     const uncompressed_data = [_]u8{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 64, 2, 2, 2, 2, 2, 215, 215, 215, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 200, 200, 200, 200, 210, 210 };
     const compressed_data = [_]u8{ 0xC9, 0x01, 0xC2, 0x40, 0xC5, 0x02, 0xC3, 0xD7, 0xCA, 0x03, 0xC4, 0xC8, 0xC2, 0xD2 };
 
-    var writer_alloc = std.io.Writer.Allocating.init(std.testing.allocator);
+    var writer_alloc = std.Io.Writer.Allocating.init(std.testing.allocator);
     defer writer_alloc.deinit();
 
     try RLEFastEncoder.encode(uncompressed_data[0..], &writer_alloc.writer);
@@ -233,7 +233,7 @@ test "PCX RLE Fast encoder should encore more than 63 bytes similar" {
 
     const compressed_data = [_]u8{ 0xFF, 0x45, 0x45, 0x45, 0xC4, 0x1 };
 
-    var writer_alloc = std.io.Writer.Allocating.init(std.testing.allocator);
+    var writer_alloc = std.Io.Writer.Allocating.init(std.testing.allocator);
     defer writer_alloc.deinit();
 
     try RLEFastEncoder.encode(uncompressed_data[0..], &writer_alloc.writer);
diff --git a/src/formats/tiff/types.zig b/src/formats/tiff/types.zig
index 8bcce86..067480a 100644
--- a/src/formats/tiff/types.zig
+++ b/src/formats/tiff/types.zig
@@ -335,7 +335,7 @@ pub const IFD = struct {
             // Skip unknown tags instead of panicking on invalid enum values.
             // Many TIFF files contain vendor/proprietary tags (Make, Model, ICC profile, etc.)
             // that we don't need to handle for image decoding.
-            const maybe_tag_id = std.meta.intToEnum(TagId, tag_id_raw) catch continue;
+            const maybe_tag_id = std.enums.fromInt(TagId, tag_id_raw) orelse continue;
 
             try self.tags_map.put(maybe_tag_id, TagField{
                 .data_type = std.mem.toNative(u16, tag.data_type, endianess),
diff --git a/src/formats/xbm.zig b/src/formats/xbm.zig
index d72e4ec..19ac9c0 100644
--- a/src/formats/xbm.zig
+++ b/src/formats/xbm.zig
@@ -100,7 +100,7 @@ pub const XBM = struct {
 
         var line_full = try reader.takeDelimiterInclusive('\n');
         while (line_full.len > 0) {
-            const line = std.mem.trimRight(u8, line_full, " \r\n");
+            const line = std.mem.trimEnd(u8, line_full, " \r\n");
             if (isDefineLine(line)) {
                 if (parseDefineValue(line)) |value| {
                     if (width == null) {
diff --git a/src/io.zig b/src/io.zig
index 2c1363d..8d463a1 100644
--- a/src/io.zig
+++ b/src/io.zig
@@ -5,11 +5,11 @@ pub const DEFAULT_BUFFER_SIZE = 4096;
 
 pub const ReadStream = union(enum) {
     memory: std.Io.Reader,
-    file: std.fs.File.Reader,
+    file: std.Io.File.Reader,
 
     pub const Error = SeekError || EndPosError || std.Io.Reader.Error || std.Io.Reader.StreamError;
-    pub const SeekError = std.fs.File.Reader.SeekError;
-    pub const EndPosError = std.fs.File.Reader.SizeError;
+    pub const SeekError = std.Io.File.Reader.SeekError;
+    pub const EndPosError = std.Io.File.Reader.SizeError;
 
     pub fn initMemory(buffer: []const u8) ReadStream {
         return .{
@@ -17,9 +17,9 @@ pub const ReadStream = union(enum) {
         };
     }
 
-    pub fn initFile(file: std.fs.File, buffer: []u8) ReadStream {
+    pub fn initFile(io: std.Io, file: std.Io.File, buffer: []u8) ReadStream {
         return .{
-            .file = file.reader(buffer),
+            .file = file.reader(io, buffer),
         };
     }
 
@@ -58,7 +58,7 @@ pub const ReadStream = union(enum) {
             .memory => |*memory| {
                 const new_pos: i64 = @as(i64, @intCast(memory.seek)) + offset;
                 if (new_pos < 0 or new_pos >= memory.end) {
-                    return std.fs.File.SeekError.Unseekable;
+                    return std.Io.File.SeekError.Unseekable;
                 }
 
                 memory.seek = @intCast(new_pos);
@@ -96,10 +96,10 @@ pub const ReadStream = union(enum) {
 
 pub const WriteStream = union(enum) {
     memory: std.Io.Writer,
-    file: std.fs.File.Writer,
+    file: std.Io.File.Writer,
 
     pub const Error = SeekError || std.Io.Writer.Error;
-    pub const SeekError = std.fs.File.SeekError;
+    pub const SeekError = std.Io.File.SeekError || std.Io.Writer.Error;
 
     pub fn initMemory(buffer: []u8) WriteStream {
         return .{
@@ -107,9 +107,9 @@ pub const WriteStream = union(enum) {
         };
     }
 
-    pub fn initFile(file: std.fs.File, buffer: []u8) WriteStream {
+    pub fn initFile(io: std.Io, file: std.Io.File, buffer: []u8) WriteStream {
         return .{
-            .file = file.writer(buffer),
+            .file = file.writer(io, buffer),
         };
     }
 
diff --git a/src/math.zig b/src/math.zig
index c4e5910..bad9687 100644
--- a/src/math.zig
+++ b/src/math.zig
@@ -24,11 +24,11 @@ pub fn Matrix(comptime T: type) type {
                 var temp = self;
 
                 // To find the determinant, use a Gaussian elimination to transform the temp matrix into the row echelon form
-                for (0..(ComponentSize - 1)) |row| {
-                    for ((row + 1)..ComponentSize) |next_row| {
+                inline for (0..(ComponentSize - 1)) |row| {
+                    inline for ((row + 1)..ComponentSize) |next_row| {
                         const factor = temp.matrix[next_row][row] / temp.matrix[row][row];
 
-                        for (0..ComponentSize) |column| {
+                        inline for (0..ComponentSize) |column| {
                             temp.matrix[next_row][column] = temp.matrix[next_row][column] - factor * temp.matrix[row][column];
                         }
                     }
@@ -37,7 +37,7 @@ pub fn Matrix(comptime T: type) type {
                 // Once the temp matrix is in row echelon form, multiply the diagonal to find the determinant
                 var result: f32 = temp.matrix[0][0];
 
-                for (1..ComponentSize) |diagonal| {
+                inline for (1..ComponentSize) |diagonal| {
                     result *= temp.matrix[diagonal][diagonal];
                 }
 
@@ -48,9 +48,9 @@ pub fn Matrix(comptime T: type) type {
         pub fn fromArray(array: [ComponentSize * ComponentSize]f32) Self {
             var result: Self = undefined;
 
-            for (0..ComponentSize) |row| {
+            inline for (0..ComponentSize) |row| {
                 const stride = row * ComponentSize;
-                for (0..ComponentSize) |column| {
+                inline for (0..ComponentSize) |column| {
                     result.matrix[row][column] = array[stride + column];
                 }
             }
@@ -72,20 +72,20 @@ pub fn Matrix(comptime T: type) type {
             var temp = self;
             var result: Self = identity();
 
-            for (0..ComponentSize) |row| {
+            inline for (0..ComponentSize) |row| {
                 // Transform the pivot to 1 by multiplying the row by its inverse
                 const inverse_pivot = 1.0 / temp.matrix[row][row];
 
-                for (0..ComponentSize) |column| {
+                inline for (0..ComponentSize) |column| {
                     temp.matrix[row][column] *= inverse_pivot;
                     result.matrix[row][column] *= inverse_pivot;
                 }
 
                 // Then do Gaussian elimination from current row to bottom
-                for ((row + 1)..ComponentSize) |next_row| {
+                inline for ((row + 1)..ComponentSize) |next_row| {
                     const factor = temp.matrix[next_row][row] / temp.matrix[row][row];
 
-                    for (0..ComponentSize) |column| {
+                    inline for (0..ComponentSize) |column| {
                         temp.matrix[next_row][column] = temp.matrix[next_row][column] - factor * temp.matrix[row][column];
                         result.matrix[next_row][column] = result.matrix[next_row][column] - factor * result.matrix[row][column];
                     }
@@ -94,14 +94,12 @@ pub fn Matrix(comptime T: type) type {
 
             // Then do a Gaussian elimination bottom-up to transform the temp matrix into an identity matrix.
             // The result will be the inverse of the matrix
-            var row: usize = ComponentSize -% 1;
-            while (row >= 1 and row < ComponentSize) : (row -%= 1) {
-                var previous_row = row -% 1;
-
-                while (previous_row >= 0 and previous_row < ComponentSize) : (previous_row -%= 1) {
+            inline for (1..ComponentSize) |i| {
+                const row = ComponentSize - i;
+                inline for (0..row) |previous_row| {
                     const factor = temp.matrix[previous_row][row] / temp.matrix[row][row];
 
-                    for (0..ComponentSize) |column| {
+                    inline for (0..ComponentSize) |column| {
                         temp.matrix[previous_row][column] = temp.matrix[previous_row][column] - factor * temp.matrix[row][column];
                         result.matrix[previous_row][column] = result.matrix[previous_row][column] - factor * result.matrix[row][column];
                     }
@@ -126,8 +124,8 @@ pub fn Matrix(comptime T: type) type {
 
             const transposed_right = right.transpose();
 
-            for (0..ComponentSize) |row| {
-                for (0..ComponentSize) |column| {
+            inline for (0..ComponentSize) |row| {
+                inline for (0..ComponentSize) |column| {
                     result.matrix[row][column] = @reduce(.Add, self.matrix[row] * transposed_right.matrix[column]);
                 }
             }
@@ -138,8 +136,8 @@ pub fn Matrix(comptime T: type) type {
         pub fn transpose(self: Self) Self {
             var result = std.mem.zeroes(Self);
 
-            for (0..ComponentSize) |row| {
-                for (0..ComponentSize) |column| {
+            inline for (0..ComponentSize) |row| {
+                inline for (0..ComponentSize) |column| {
                     result.matrix[row][column] = self.matrix[column][row];
                 }
             }
diff --git a/src/simd.zig b/src/simd.zig
index 20c5dcb..cb115c9 100644
--- a/src/simd.zig
+++ b/src/simd.zig
@@ -78,8 +78,10 @@ pub fn vpermd(v: @Vector(8, i32), mask: @Vector(8, i32)) @Vector(8, i32) {
               [v] "x" (v),
         );
     } else {
-        var res: @Vector(8, i32) = undefined;
-        inline for (0..8) |i| res[i] = v[@as(u32, @bitCast(mask[i]))];
+        const v_arr: [8]i32 = v;
+        const mask_arr: [8]i32 = mask;
+        var res: [8]i32 = undefined;
+        for (0..8) |i| res[i] = v_arr[@intCast(mask_arr[i] & 7)];
         return res;
     }
 }
diff --git a/src/utils.zig b/src/utils.zig
index f55c12c..a12733e 100644
--- a/src/utils.zig
+++ b/src/utils.zig
@@ -4,7 +4,7 @@ const std = @import("std");
 const native_endian = builtin.target.cpu.arch.endian();
 
 pub const StructReadError = error{InvalidData} || std.Io.Reader.Error;
-pub const StructWriteError = std.io.StreamSource.WriteError;
+pub const StructWriteError = std.Io.Writer.Error;
 
 pub fn FixedStorage(comptime T: type, comptime storage_size: usize) type {
     return struct {
diff --git a/tests/formats/bmp_test.zig b/tests/formats/bmp_test.zig
index cc80b74..635dc04 100644
--- a/tests/formats/bmp_test.zig
+++ b/tests/formats/bmp_test.zig
@@ -87,12 +87,12 @@ fn verifyBitmapRGBAV5(the_bitmap: bmp.BMP, pixels: zigimg.color.PixelStorage) !v
 
 test "Read simple version 4 24-bit RGB bitmap" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "bmp/simple_v4.bmp");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_bitmap = bmp.BMP{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_bitmap.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -145,10 +145,10 @@ test "Read simple version 4 24-bit RGB bitmap" {
 
 test "Read a valid version 5 RGBA bitmap from file" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "bmp/windows_rgba_v5.bmp");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var the_bitmap = bmp.BMP{};
 
@@ -174,10 +174,10 @@ test "Read a valid version 5 RGBA bitmap from memory" {
 
 test "Should error when reading an invalid file" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "bmp/notbmp.png");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var the_bitmap = bmp.BMP{};
 
@@ -215,17 +215,17 @@ test "Write a v4 bitmap when writing an image with bgr24 pixel format" {
     pixels.bgr24[7] = zigimg.color.Bgr24.from.rgb(255, 255, 0);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .bmp = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .bmp = .{} });
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var read_bmp = bmp.BMP{};
 
@@ -277,17 +277,17 @@ test "Write a v5 bitmap when writing an image with bgra32 pixel format" {
     pixels.bgra32[8] = zigimg.color.Bgra32.from.rgba(0, 0, 0, 0);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .bmp = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .bmp = .{} });
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var read_bmp = bmp.BMP{};
 
diff --git a/tests/formats/farbfeld_test.zig b/tests/formats/farbfeld_test.zig
index a48a7fb..00a73a0 100644
--- a/tests/formats/farbfeld_test.zig
+++ b/tests/formats/farbfeld_test.zig
@@ -5,10 +5,10 @@ const farbfeld = zigimg.formats.farbfeld;
 
 test "Farbfeld: Read yellow file" {
     const yellow_file = try helpers.testOpenFile(helpers.fixtures_path ++ "farbfeld/yellow-1x1-semitransparent.png.ff");
-    defer yellow_file.close();
+    defer yellow_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var yellow_read_stream = zigimg.io.ReadStream.initFile(yellow_file, read_buffer[0..]);
+    var yellow_read_stream = zigimg.io.ReadStream.initFile(std.testing.io, yellow_file, read_buffer[0..]);
 
     var yellow_image = farbfeld.Farbfeld{};
     const yellow_pixels = try yellow_image.read(helpers.zigimg_test_allocator, &yellow_read_stream);
@@ -21,10 +21,10 @@ test "Farbfeld: Read yellow file" {
 
 test "Farbfeld: read dragon file" {
     const dragon_file = try helpers.testOpenFile(helpers.fixtures_path ++ "farbfeld/dragon.ff");
-    defer dragon_file.close();
+    defer dragon_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var dragon_read_stream = zigimg.io.ReadStream.initFile(dragon_file, read_buffer[0..]);
+    var dragon_read_stream = zigimg.io.ReadStream.initFile(std.testing.io, dragon_file, read_buffer[0..]);
 
     var dragon_image = farbfeld.Farbfeld{};
     const dragon_pixels = try dragon_image.read(helpers.zigimg_test_allocator, &dragon_read_stream);
@@ -37,10 +37,10 @@ test "Farbfeld: read dragon file" {
 
 test "Farbfeld: invalid file format" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "farbfeld/dragon.png");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var farbfeld_image = farbfeld.Farbfeld{};
     const image_error = farbfeld_image.read(helpers.zigimg_test_allocator, &read_stream);
@@ -50,10 +50,10 @@ test "Farbfeld: invalid file format" {
 
 test "Farbfeld: read writeImage output" {
     const source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "farbfeld/yellow-1x1-semitransparent.png.ff");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var source_read_stream = zigimg.io.ReadStream.initFile(source_file, read_buffer[0..]);
+    var source_read_stream = zigimg.io.ReadStream.initFile(std.testing.io, source_file, read_buffer[0..]);
 
     var source_image: farbfeld.Farbfeld = .{};
     const source_pixels = try source_image.read(helpers.zigimg_test_allocator, &source_read_stream);
diff --git a/tests/formats/gif_test.zig b/tests/formats/gif_test.zig
index 496e14f..bdd84f6 100644
--- a/tests/formats/gif_test.zig
+++ b/tests/formats/gif_test.zig
@@ -325,10 +325,10 @@ test "GIF writer roundtrip read existing GIF, write, read again" {
 
     // Read an existing GIF file using low-level reader
     const gif_input_file = try helpers.testOpenFile(helpers.fixtures_path ++ "gif/rotating_earth.gif");
-    defer gif_input_file.close();
+    defer gif_input_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(gif_input_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, gif_input_file, read_buffer[0..]);
 
     var original_gif = gif.GIF.init(allocator);
     defer original_gif.deinit();
@@ -489,10 +489,10 @@ test "GIF writer rejects non-indexed data without auto convert" {
 
 test "Should error on non GIF images" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "bmp/simple_v4.bmp");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var gif_file = gif.GIF.init(helpers.zigimg_test_allocator);
     defer gif_file.deinit();
@@ -563,7 +563,7 @@ const SINGLE_GIF_FILE_TEST = false;
 fn loadRotatingEarthImage(allocator: std.mem.Allocator) !zigimg.Image {
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_path = helpers.fixtures_path ++ "gif/rotating_earth.gif";
-    return zigimg.Image.fromFilePath(allocator, image_path, read_buffer[0..]);
+    return zigimg.Image.fromFilePath(allocator, std.testing.io, image_path, read_buffer[0..]);
 }
 
 test "GIF test suite" {
@@ -575,10 +575,10 @@ test "GIF test suite" {
     defer test_list.deinit(helpers.zigimg_test_allocator);
 
     const test_list_file = try helpers.testOpenFile(helpers.fixtures_path ++ "gif/TESTS");
-    defer test_list_file.close();
+    defer test_list_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(test_list_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, test_list_file, read_buffer[0..]);
 
     var reader = read_stream.reader();
 
@@ -598,11 +598,11 @@ test "GIF test suite" {
     for (test_list.items) |entry| {
         doGifTest(entry) catch |err| {
             has_failed_file = true;
-            std.debug.print("Error: {}\n", .{err});
+            std.log.info("Error: {}\n", .{err});
             continue;
         };
 
-        std.debug.print("OK\n", .{});
+        std.log.info("OK\n", .{});
     }
 
     if (has_failed_file) {
@@ -612,10 +612,10 @@ test "GIF test suite" {
 
 test "Rotating Earth GIF" {
     const gif_input_file = try helpers.testOpenFile(helpers.fixtures_path ++ "gif/rotating_earth.gif");
-    defer gif_input_file.close();
+    defer gif_input_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(gif_input_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, gif_input_file, read_buffer[0..]);
 
     var gif_file = gif.GIF.init(helpers.zigimg_test_allocator);
     defer gif_file.deinit();
@@ -710,8 +710,8 @@ const IniFile = struct {
                         const equals_sign_position_opt = std.mem.indexOf(u8, read_line[0..], "=");
 
                         if (equals_sign_position_opt) |equals_sign_position| {
-                            const key_name = std.mem.trimRight(u8, read_line[0..(equals_sign_position - 1)], " ");
-                            const string_value = std.mem.trimLeft(u8, read_line[(equals_sign_position + 1)..], " ");
+                            const key_name = std.mem.trimEnd(u8, read_line[0..(equals_sign_position - 1)], " ");
+                            const string_value = std.mem.trimStart(u8, read_line[(equals_sign_position + 1)..], " ");
 
                             if (self.sections.getPtr(current_section)) |section_entry| {
                                 const value = blk: {
@@ -760,7 +760,7 @@ const IniFile = struct {
 };
 
 fn doGifTest(entry_name: []const u8) !void {
-    std.debug.print("GIF test {s}... ", .{entry_name});
+    std.log.info("GIF test {s}... ", .{entry_name});
 
     var area_alloc = std.heap.ArenaAllocator.init(helpers.zigimg_test_allocator);
     const area_allocator = area_alloc.allocator();
@@ -770,13 +770,13 @@ fn doGifTest(entry_name: []const u8) !void {
     const config_filepath = try std.fs.path.resolve(area_allocator, &[_][]const u8{ helpers.fixtures_path, "gif", config_filename });
 
     const config_file = try helpers.testOpenFile(config_filepath);
-    defer config_file.close();
+    defer config_file.close(std.testing.io);
 
     var config_ini = IniFile.init(helpers.zigimg_test_allocator);
     defer config_ini.deinit();
 
     var ini_read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var ini_read_stream = zigimg.io.ReadStream.initFile(config_file, ini_read_buffer[0..]);
+    var ini_read_stream = zigimg.io.ReadStream.initFile(std.testing.io, config_file, ini_read_buffer[0..]);
 
     try config_ini.parse(ini_read_stream.reader());
 
@@ -804,10 +804,10 @@ fn doGifTest(entry_name: []const u8) !void {
 
         const gif_input_filepath = try std.fs.path.resolve(area_allocator, &[_][]const u8{ helpers.fixtures_path, "gif", input_filename.string });
         const gif_input_file = try helpers.testOpenFile(gif_input_filepath);
-        defer gif_input_file.close();
+        defer gif_input_file.close(std.testing.io);
 
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        var read_stream = zigimg.io.ReadStream.initFile(gif_input_file, read_buffer[0..]);
+        var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, gif_input_file, read_buffer[0..]);
 
         var gif_file = gif.GIF.init(helpers.zigimg_test_allocator);
         defer gif_file.deinit();
@@ -856,10 +856,10 @@ fn doGifTest(entry_name: []const u8) !void {
                     const pixels_filename = frame_section.getValue("pixels") orelse return error.InvalidGifConfigFile;
                     const pixels_filepath = try std.fs.path.resolve(area_allocator, &[_][]const u8{ helpers.fixtures_path, "gif", pixels_filename.string });
                     const pixels_file = try helpers.testOpenFile(pixels_filepath);
-                    defer pixels_file.close();
+                    defer pixels_file.close(std.testing.io);
 
                     var pixels_read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-                    var pixels_read_stream = zigimg.io.ReadStream.initFile(pixels_file, pixels_read_buffer[0..]);
+                    var pixels_read_stream = zigimg.io.ReadStream.initFile(std.testing.io, pixels_file, pixels_read_buffer[0..]);
 
                     var pixels_reader = pixels_read_stream.reader();
 
@@ -894,7 +894,7 @@ fn doGifTest(entry_name: []const u8) !void {
                                 try helpers.expectEq(actual_color.to.color(zigimg.color.Rgba32), gif_background_color);
                             } else {
                                 helpers.expectEq(actual_color.to.color(zigimg.color.Rgba32), expected_color) catch |err| {
-                                    std.debug.print("Pixel #{} does not match: expected={}, actual={}\n", .{ index, expected_color, actual_color.to.color(zigimg.color.Rgba32) });
+                                    std.log.info("Pixel #{} does not match: expected={}, actual={}\n", .{ index, expected_color, actual_color.to.color(zigimg.color.Rgba32) });
                                     return err;
                                 };
                             }
@@ -929,27 +929,27 @@ fn doGifRoundtripTest(entry_name: []const u8) !RoundtripResult {
 
     // Build path to GIF file
     const gif_filename = std.fmt.allocPrint(area_allocator, "{s}.gif", .{entry_name}) catch {
-        std.debug.print("FAIL (allocPrint failed)\n", .{});
+        std.log.info("FAIL (allocPrint failed)\n", .{});
         return .failed;
     };
     const gif_filepath = std.fs.path.resolve(area_allocator, &[_][]const u8{ helpers.fixtures_path, "gif", gif_filename }) catch {
-        std.debug.print("FAIL (path resolve failed)\n", .{});
+        std.log.info("FAIL (path resolve failed)\n", .{});
         return .failed;
     };
 
     // Read original GIF
-    const gif_input_file = try std.fs.cwd().openFile(gif_filepath, .{});
-    defer gif_input_file.close();
+    const gif_input_file = try std.Io.Dir.openFile(std.Io.Dir.cwd(), std.testing.io, gif_filepath, .{});
+    defer gif_input_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(gif_input_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, gif_input_file, read_buffer[0..]);
 
     var original_gif = gif.GIF.init(helpers.zigimg_test_allocator);
     defer original_gif.deinit();
 
     var original_frames = original_gif.read(&read_stream) catch {
         // Reader correctly rejected bad data
-        std.debug.print("OK (reader correctly rejected bad data)\n", .{});
+        std.log.info("OK (reader correctly rejected bad data)\n", .{});
         return .passed;
     };
     defer {
@@ -961,7 +961,7 @@ fn doGifRoundtripTest(entry_name: []const u8) !RoundtripResult {
 
     if (original_frames.items.len == 0) {
         // No frames means nothing to write
-        std.debug.print("OK (no frames to write)\n", .{});
+        std.log.info("OK (no frames to write)\n", .{});
         return .passed;
     }
 
@@ -974,13 +974,13 @@ fn doGifRoundtripTest(entry_name: []const u8) !RoundtripResult {
 
     // Non-indexed formats can't be written without auto_convert
     if (!image.pixelFormat().isIndexed()) {
-        std.debug.print("OK (non-indexed format correctly not written: {s})\n", .{@tagName(image.pixels)});
+        std.log.info("OK (non-indexed format correctly not written: {s})\n", .{@tagName(image.pixels)});
         return .passed;
     }
 
     // Zero dimensions can't be written
     if (image.width == 0 or image.height == 0) {
-        std.debug.print("OK (zero dimensions correctly not written)\n", .{});
+        std.log.info("OK (zero dimensions correctly not written)\n", .{});
         return .passed;
     }
 
@@ -991,16 +991,16 @@ fn doGifRoundtripTest(entry_name: []const u8) !RoundtripResult {
     gif.GIF.writeImage(helpers.zigimg_test_allocator, &write_stream, image, .{ .gif = .{} }) catch |err| {
         // For very large images, running out of buffer space is expected
         if (err == error.WriteFailed and (image.width > 1000 or image.height > 1000)) {
-            std.debug.print("OK (large image exceeded buffer)\n", .{});
+            std.log.info("OK (large image exceeded buffer)\n", .{});
             return .passed;
         }
-        std.debug.print("FAIL (write error: {})\n", .{err});
+        std.log.info("FAIL (write error: {})\n", .{err});
         return .failed;
     };
 
     const written_len = write_stream.writer().end;
     if (written_len == 0) {
-        std.debug.print("FAIL (wrote 0 bytes)\n", .{});
+        std.log.info("FAIL (wrote 0 bytes)\n", .{});
         return .failed;
     }
 
@@ -1011,7 +1011,7 @@ fn doGifRoundtripTest(entry_name: []const u8) !RoundtripResult {
     defer decoded_gif.deinit();
 
     var decoded_frames = decoded_gif.read(&read_back_stream) catch |err| {
-        std.debug.print("FAIL (read-back error: {})\n", .{err});
+        std.log.info("FAIL (read-back error: {})\n", .{err});
         return .failed;
     };
     defer {
@@ -1025,7 +1025,7 @@ fn doGifRoundtripTest(entry_name: []const u8) !RoundtripResult {
     if (original_gif.header.width != decoded_gif.header.width or
         original_gif.header.height != decoded_gif.header.height)
     {
-        std.debug.print("FAIL (dimension mismatch: {}x{} vs {}x{})\n", .{
+        std.log.info("FAIL (dimension mismatch: {}x{} vs {}x{})\n", .{
             original_gif.header.width,
             original_gif.header.height,
             decoded_gif.header.width,
@@ -1036,7 +1036,7 @@ fn doGifRoundtripTest(entry_name: []const u8) !RoundtripResult {
 
     // Verify we got at least one frame
     if (decoded_frames.items.len == 0) {
-        std.debug.print("FAIL (no frames in output)\n", .{});
+        std.log.info("FAIL (no frames in output)\n", .{});
         return .failed;
     }
 
@@ -1048,14 +1048,14 @@ fn doGifRoundtripTest(entry_name: []const u8) !RoundtripResult {
     while (original_iter.next()) |original_color| {
         const decoded_color_opt = decoded_iter.next();
         if (decoded_color_opt == null) {
-            std.debug.print("FAIL (missing pixel at index {})\n", .{pixel_index});
+            std.log.info("FAIL (missing pixel at index {})\n", .{pixel_index});
             return .failed;
         }
         const original = original_color.to.color(zigimg.color.Rgba32);
         const decoded = decoded_color_opt.?.to.color(zigimg.color.Rgba32);
 
         if (original.r != decoded.r or original.g != decoded.g or original.b != decoded.b) {
-            std.debug.print("FAIL (pixel {} mismatch: ({},{},{}) vs ({},{},{}))\n", .{
+            std.log.info("FAIL (pixel {} mismatch: ({},{},{}) vs ({},{},{}))\n", .{
                 pixel_index, original.r, original.g, original.b, decoded.r, decoded.g, decoded.b,
             });
             return .failed;
@@ -1071,10 +1071,10 @@ test "GIF writer roundtrip test suite" {
     defer test_list.deinit(helpers.zigimg_test_allocator);
 
     const test_list_file = try helpers.testOpenFile(helpers.fixtures_path ++ "gif/TESTS");
-    defer test_list_file.close();
+    defer test_list_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(test_list_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, test_list_file, read_buffer[0..]);
 
     var reader = read_stream.reader();
 
diff --git a/tests/formats/iff_test.zig b/tests/formats/iff_test.zig
index ab2dd6b..6a3594d 100644
--- a/tests/formats/iff_test.zig
+++ b/tests/formats/iff_test.zig
@@ -5,12 +5,12 @@ const zigimg = @import("zigimg");
 
 test "IFF-PBM indexed8 (chunky Deluxe Paint DOS file)" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ilbm/sample-pbm.iff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_iff = iff.IFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_iff.read(&read_stream, helpers.zigimg_test_allocator);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -37,12 +37,12 @@ test "IFF-PBM indexed8 (chunky Deluxe Paint DOS file)" {
 
 test "IFF-ILBM indexed8 8 bitplanes" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ilbm/sample-ilbm-8bit-compressed.iff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_iff = iff.IFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_iff.read(&read_stream, helpers.zigimg_test_allocator);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -63,12 +63,12 @@ test "IFF-ILBM indexed8 8 bitplanes" {
 
 test "IFF-ILBM indexed8 8 bitplanes uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ilbm/sample-ilbm-8bit-uncompressed.iff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_iff = iff.IFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_iff.read(&read_stream, helpers.zigimg_test_allocator);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -89,12 +89,12 @@ test "IFF-ILBM indexed8 8 bitplanes uncompressed" {
 
 test "IFF-ILBM indexed8 6 bitplanes EHB" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ilbm/sample-ehb.iff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_iff = iff.IFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_iff.read(&read_stream, helpers.zigimg_test_allocator);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -121,12 +121,12 @@ test "IFF-ILBM indexed8 6 bitplanes EHB" {
 
 test "IFF-ILBM indexed8 4 bitplanes HAM" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ilbm/sample-ham.iff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_iff = iff.IFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_iff.read(&read_stream, helpers.zigimg_test_allocator);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -150,12 +150,12 @@ test "IFF-ILBM indexed8 4 bitplanes HAM" {
 
 test "IFF-ILBM indexed8 6 bitplanes HAM8" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ilbm/sample-ham8.iff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_iff = iff.IFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_iff.read(&read_stream, helpers.zigimg_test_allocator);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -179,12 +179,12 @@ test "IFF-ILBM indexed8 6 bitplanes HAM8" {
 
 test "IFF-ILBM 24bit" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ilbm/sample-24bit.iff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_iff = iff.IFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_iff.read(&read_stream, helpers.zigimg_test_allocator);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -208,12 +208,12 @@ test "IFF-ILBM 24bit" {
 
 test "IFF-ILBM indexed8 4 bitplanes Atari ST" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ilbm/sample-ilbm-4bit-compressed-atari.iff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_iff = iff.IFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_iff.read(&read_stream, helpers.zigimg_test_allocator);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -240,12 +240,12 @@ test "IFF-ILBM indexed8 4 bitplanes Atari ST" {
 
 test "IFF-ACBM indexed8 3 bitplanes uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ilbm/sample-8bit.acbm");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_iff = iff.IFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_iff.read(&read_stream, helpers.zigimg_test_allocator);
     defer pixels.deinit(helpers.zigimg_test_allocator);
diff --git a/tests/formats/jpeg_test.zig b/tests/formats/jpeg_test.zig
index 8288b62..0f1254f 100644
--- a/tests/formats/jpeg_test.zig
+++ b/tests/formats/jpeg_test.zig
@@ -7,10 +7,10 @@ const color = zigimg.color;
 
 test "Should error on non JPEG images" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "bmp/simple_v4.bmp");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var jpeg_file = jpeg.JPEG.init(helpers.zigimg_test_allocator);
     defer jpeg_file.deinit();
@@ -28,10 +28,10 @@ test "Should error on non JPEG images" {
 
 test "Read JFIF header properly and decode simple Huffman stream" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "jpeg/huff_simple0.jpg");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var jpeg_file = jpeg.JPEG.init(helpers.zigimg_test_allocator);
     defer jpeg_file.deinit();
@@ -59,10 +59,10 @@ test "Read JFIF header properly and decode simple Huffman stream" {
 
 test "Read the tuba properly" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "jpeg/tuba.jpg");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var jpeg_file = jpeg.JPEG.init(helpers.zigimg_test_allocator);
     defer jpeg_file.deinit();
@@ -95,10 +95,10 @@ test "Read the tuba properly" {
 
 test "Read grayscale images" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "jpeg/grayscale_sample0.jpg");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var jpeg_file = jpeg.JPEG.init(helpers.zigimg_test_allocator);
     defer jpeg_file.deinit();
@@ -130,19 +130,19 @@ test "Read grayscale images" {
 }
 
 test "Read subsampling images" {
-    var testdir = std.fs.cwd().openDir(helpers.fixtures_path ++ "jpeg/", .{ .access_sub_paths = false, .no_follow = true, .iterate = true }) catch null;
+    var testdir = std.Io.Dir.openDir(std.Io.Dir.cwd(), std.testing.io, helpers.fixtures_path ++ "jpeg/", .{ .access_sub_paths = false, .iterate = true }) catch null;
     if (testdir) |*idir| {
-        defer idir.close();
+        defer idir.close(std.testing.io);
 
         var it = idir.iterate();
-        while (try it.next()) |entry| {
+        while (try it.next(std.testing.io)) |entry| {
             if (entry.kind != .file or !std.mem.endsWith(u8, entry.name, ".jpg") or !std.mem.startsWith(u8, entry.name, "subsampling_")) continue;
 
-            var test_file = try idir.openFile(entry.name, .{ .mode = .read_only });
-            defer test_file.close();
+            var test_file = try idir.openFile(std.testing.io, entry.name, .{ .mode = .read_only });
+            defer test_file.close(std.testing.io);
 
             var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-            var read_stream = zigimg.io.ReadStream.initFile(test_file, read_buffer[0..]);
+            var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, test_file, read_buffer[0..]);
 
             var jpeg_file = jpeg.JPEG.init(helpers.zigimg_test_allocator);
             defer jpeg_file.deinit();
@@ -182,10 +182,10 @@ test "Read subsampling images" {
 
 test "Read progressive jpeg with restart intervals" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "jpeg/tuba_restart_prog.jpg");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var jpeg_file = jpeg.JPEG.init(helpers.zigimg_test_allocator);
     defer jpeg_file.deinit();
@@ -403,10 +403,10 @@ test "JPEG writer round-trip with all test fixtures" {
     for (test_fixtures) |fixture_path| {
         // Skip if file doesn't exist
         const file = helpers.testOpenFile(fixture_path) catch continue;
-        defer file.close();
+        defer file.close(std.testing.io);
 
         var read_buffer: [4096]u8 = undefined;
-        var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+        var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
         var jpeg_file = jpeg.JPEG.init(helpers.zigimg_test_allocator);
         defer jpeg_file.deinit();
 
diff --git a/tests/formats/netpbm_test.zig b/tests/formats/netpbm_test.zig
index ee06575..e0ffe05 100644
--- a/tests/formats/netpbm_test.zig
+++ b/tests/formats/netpbm_test.zig
@@ -5,10 +5,10 @@ const zigimg = @import("zigimg");
 
 test "Load ASCII PBM image" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "netpbm/pbm_ascii.pbm");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var pbm_file = netpbm.PBM{};
 
@@ -27,10 +27,10 @@ test "Load ASCII PBM image" {
 
 test "Load binary PBM image" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "netpbm/pbm_binary.pbm");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var pbm_file = netpbm.PBM{};
 
@@ -49,10 +49,10 @@ test "Load binary PBM image" {
 
 test "Load ASCII PGM 8-bit grayscale image" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "netpbm/pgm_ascii_grayscale8.pgm");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var pgm_file = netpbm.PGM{};
 
@@ -71,10 +71,10 @@ test "Load ASCII PGM 8-bit grayscale image" {
 
 test "Load Binary PGM 8-bit grayscale image" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "netpbm/pgm_binary_grayscale8.pgm");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var pgm_file = netpbm.PGM{};
 
@@ -93,10 +93,10 @@ test "Load Binary PGM 8-bit grayscale image" {
 
 test "Load ASCII PGM 16-bit grayscale image" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "netpbm/pgm_ascii_grayscale16.pgm");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var pgm_file = netpbm.PGM{};
 
@@ -115,10 +115,10 @@ test "Load ASCII PGM 16-bit grayscale image" {
 
 test "Load Binary PGM 16-bit grayscale image" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "netpbm/pgm_binary_grayscale16.pgm");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var pgm_file = netpbm.PGM{};
 
@@ -137,10 +137,10 @@ test "Load Binary PGM 16-bit grayscale image" {
 
 test "Load ASCII PPM image" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "netpbm/ppm_ascii_rgb24.ppm");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var ppm_file = netpbm.PPM{};
 
@@ -176,10 +176,10 @@ test "Load ASCII PPM image" {
 
 test "Load binary PPM image" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "netpbm/ppm_binary_rgb24.ppm");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var ppm_file = netpbm.PPM{};
 
@@ -234,16 +234,16 @@ test "Write bitmap(grayscale1) ASCII PBM file" {
     }
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{
         .pbm = .{ .binary = false },
     });
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch unreachable;
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch unreachable;
     }
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_image = try zigimg.Image.fromFilePath(helpers.zigimg_test_allocator, image_file_name, read_buffer[0..]);
+    var read_image = try zigimg.Image.fromFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, read_buffer[0..]);
     defer read_image.deinit(helpers.zigimg_test_allocator);
 
     try helpers.expectEq(read_image.width, width);
@@ -281,16 +281,16 @@ test "Write bitmap(Grayscale1) binary PBM file" {
     }
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{
         .pbm = .{ .binary = true },
     });
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch unreachable;
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch unreachable;
     }
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_image = try zigimg.Image.fromFilePath(helpers.zigimg_test_allocator, image_file_name, read_buffer[0..]);
+    var read_image = try zigimg.Image.fromFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, read_buffer[0..]);
     defer read_image.deinit(helpers.zigimg_test_allocator);
 
     try helpers.expectEq(read_image.width, width);
@@ -324,16 +324,16 @@ test "Write grayscale8 ASCII PGM file" {
     }
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{
         .pgm = .{ .binary = false },
     });
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch unreachable;
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch unreachable;
     }
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_image = try zigimg.Image.fromFilePath(helpers.zigimg_test_allocator, image_file_name, read_buffer[0..]);
+    var read_image = try zigimg.Image.fromFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, read_buffer[0..]);
     defer read_image.deinit(helpers.zigimg_test_allocator);
 
     try helpers.expectEq(read_image.width, width);
@@ -367,16 +367,16 @@ test "Write grayscale8 binary PGM file" {
     }
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{
         .pgm = .{ .binary = true },
     });
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch unreachable;
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch unreachable;
     }
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_image = try zigimg.Image.fromFilePath(helpers.zigimg_test_allocator, image_file_name, read_buffer[0..]);
+    var read_image = try zigimg.Image.fromFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, read_buffer[0..]);
     defer read_image.deinit(helpers.zigimg_test_allocator);
 
     try helpers.expectEq(read_image.width, width);
@@ -420,16 +420,16 @@ test "Writing Rgb24 ASCII PPM format" {
     pixels.rgb24[7] = zigimg.color.Rgb24.from.rgb(255, 255, 0);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{
         .ppm = .{ .binary = false },
     });
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch unreachable;
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch unreachable;
     }
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_image = try zigimg.Image.fromFilePath(helpers.zigimg_test_allocator, image_file_name, read_buffer[0..]);
+    var read_image = try zigimg.Image.fromFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, read_buffer[0..]);
     defer read_image.deinit(helpers.zigimg_test_allocator);
 
     try helpers.expectEq(read_image.width, width);
@@ -474,16 +474,16 @@ test "Writing Rgb24 binary PPM format" {
     pixels.rgb24[7] = zigimg.color.Rgb24.from.rgb(255, 255, 0);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{
         .ppm = .{ .binary = true },
     });
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch unreachable;
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch unreachable;
     }
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_image = try zigimg.Image.fromFilePath(helpers.zigimg_test_allocator, image_file_name, read_buffer[0..]);
+    var read_image = try zigimg.Image.fromFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, read_buffer[0..]);
     defer read_image.deinit(helpers.zigimg_test_allocator);
 
     try helpers.expectEq(read_image.width, width);
@@ -505,7 +505,7 @@ test "Trying to write a bitmap or grayscale Netpbm with an true color pixel form
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch unreachable;
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch unreachable;
     }
 
     const pixels = source_image.pixels;
@@ -527,12 +527,12 @@ test "Trying to write a bitmap or grayscale Netpbm with an true color pixel form
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
     {
-        const write_error = source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .pbm = .{} });
+        const write_error = source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .pbm = .{} });
         try std.testing.expectError(zigimg.Image.WriteError.Unsupported, write_error);
     }
 
     {
-        const write_error = source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .pgm = .{} });
+        const write_error = source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .pgm = .{} });
         try std.testing.expectError(zigimg.Image.WriteError.Unsupported, write_error);
     }
 }
@@ -551,7 +551,7 @@ test "Trying to write a bitmap or true color Netpbm with a 8-bit grayscale pixel
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch unreachable;
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch unreachable;
     }
 
     const source = source_image.pixels;
@@ -562,12 +562,12 @@ test "Trying to write a bitmap or true color Netpbm with a 8-bit grayscale pixel
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
     {
-        const write_error = source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .pbm = .{} });
+        const write_error = source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .pbm = .{} });
         try std.testing.expectError(zigimg.Image.WriteError.Unsupported, write_error);
     }
 
     {
-        const write_error = source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .ppm = .{} });
+        const write_error = source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .ppm = .{} });
         try std.testing.expectError(zigimg.Image.WriteError.Unsupported, write_error);
     }
 }
@@ -589,7 +589,7 @@ test "Trying to write a grayscale or true color Netbpm with a 1-bit grayscale pi
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch unreachable;
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch unreachable;
     }
 
     const source = source_image.pixels;
@@ -601,12 +601,12 @@ test "Trying to write a grayscale or true color Netbpm with a 1-bit grayscale pi
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
     {
-        const write_error = source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .pgm = .{} });
+        const write_error = source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .pgm = .{} });
         try std.testing.expectError(zigimg.Image.WriteError.Unsupported, write_error);
     }
 
     {
-        const write_error = source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .ppm = .{} });
+        const write_error = source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .ppm = .{} });
         try std.testing.expectError(zigimg.Image.WriteError.Unsupported, write_error);
     }
 }
diff --git a/tests/formats/pam_test.zig b/tests/formats/pam_test.zig
index 2d58d45..5742f77 100644
--- a/tests/formats/pam_test.zig
+++ b/tests/formats/pam_test.zig
@@ -5,10 +5,10 @@ const zigimg = @import("zigimg");
 
 test "rejects non-PAM images" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "bmp/simple_v4.bmp");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const invalid = pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
 
@@ -17,10 +17,10 @@ test "rejects non-PAM images" {
 
 test "rejects PAM images with unsupported depth" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/unsupported_depth.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const invalid = pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
 
@@ -29,10 +29,10 @@ test "rejects PAM images with unsupported depth" {
 
 test "rejects PAM images with invalid maxval" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/invalid_maxval.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const invalid = pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
 
@@ -41,10 +41,10 @@ test "rejects PAM images with invalid maxval" {
 
 test "rejects PAM images with component values greater than maxval" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/value_greater_than_maxval.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const invalid = pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
     try helpers.expectError(invalid, zigimg.Image.ReadError.InvalidData);
@@ -52,10 +52,10 @@ test "rejects PAM images with component values greater than maxval" {
 
 test "rejects PAM images with unknown tuple type" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/unknown_tupletype.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const invalid = pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
 
@@ -64,10 +64,10 @@ test "rejects PAM images with unknown tuple type" {
 
 test "rejects PAM images with invalid first token" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/invalid_first_token.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const invalid = pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
 
@@ -76,10 +76,10 @@ test "rejects PAM images with invalid first token" {
 
 test "rejects PAM images with tuple type not matching other parameters" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/non_matching_tuple_type.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const invalid = pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
 
@@ -88,10 +88,10 @@ test "rejects PAM images with tuple type not matching other parameters" {
 
 test "accepts comments" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/simple_blackandwhite_comments.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var image = try pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
     defer image.deinit(helpers.zigimg_test_allocator);
@@ -110,10 +110,10 @@ test "accepts comments" {
 
 test "reads blackandwhite pam" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/simple_blackandwhite.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var image = try pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
     defer image.deinit(helpers.zigimg_test_allocator);
@@ -132,10 +132,10 @@ test "reads blackandwhite pam" {
 
 test "reads blackandwhite_alpha pam" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/simple_blackandwhite_alpha.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var image = try pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
     defer image.deinit(helpers.zigimg_test_allocator);
@@ -154,10 +154,10 @@ test "reads blackandwhite_alpha pam" {
 
 test "reads grayscale pam with maxval 255" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/simple_grayscale_maxval_255.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var image = try pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
     defer image.deinit(helpers.zigimg_test_allocator);
@@ -176,10 +176,10 @@ test "reads grayscale pam with maxval 255" {
 
 test "reads grayscale alpha pam with maxval 255" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/simple_grayscale_alpha_maxval_255.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var image = try pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
     defer image.deinit(helpers.zigimg_test_allocator);
@@ -198,10 +198,10 @@ test "reads grayscale alpha pam with maxval 255" {
 
 test "read of rgb pam with maxval 255" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/horse.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var image = try pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
     defer image.deinit(helpers.zigimg_test_allocator);
@@ -211,10 +211,10 @@ test "read of rgb pam with maxval 255" {
 
 test "basic read-write-read produces same result" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/simple_grayscale_alpha_maxval_255.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var image = try pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
     defer image.deinit(helpers.zigimg_test_allocator);
@@ -239,7 +239,7 @@ test "basic read-write-read produces same result" {
 
     var decoded_image = try pam.PAM.readImage(helpers.zigimg_test_allocator, &read_back_stream);
     defer decoded_image.deinit(helpers.zigimg_test_allocator);
-    
+
     try std.testing.expectEqual(@as(usize, 4), decoded_image.height);
     try std.testing.expectEqual(@as(usize, 4), decoded_image.width);
     try helpers.expectEqSlice(zigimg.color.Grayscale8Alpha, decoded_image.pixels.grayscale8Alpha, &[16]zigimg.color.Grayscale8Alpha{
@@ -254,10 +254,10 @@ test "basic read-write-read produces same result" {
 
 test "reads rgba pam with maxval 255" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/simple_rgba_maxval_255.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
       var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var image = try pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
     defer image.deinit(helpers.zigimg_test_allocator);
@@ -273,10 +273,10 @@ test "reads rgba pam with maxval 255" {
 
 test "reads rgba pam with maxval 65535" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pam/simple_rgba_maxval_65535.pam");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var image = try pam.PAM.readImage(helpers.zigimg_test_allocator, &read_stream);
     defer image.deinit(helpers.zigimg_test_allocator);
diff --git a/tests/formats/pcx_test.zig b/tests/formats/pcx_test.zig
index db5d556..ee51851 100644
--- a/tests/formats/pcx_test.zig
+++ b/tests/formats/pcx_test.zig
@@ -7,10 +7,10 @@ const toU8 = zigimg.color.ScaleValue(u8);
 
 test "PCX indexed1 (linear)" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pcx/test-bpp1.pcx");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var pcx_file = pcx.PCX{};
 
@@ -45,10 +45,10 @@ test "PCX indexed1 (linear)" {
 
 test "PCX indexed4 (linear)" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pcx/test-bpp4.pcx");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var pcx_file = pcx.PCX{};
 
@@ -84,10 +84,10 @@ test "PCX indexed4 (linear)" {
 
 test "PCX indexed8 (linear)" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pcx/test-bpp8.pcx");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var pcx_file = pcx.PCX{};
 
@@ -125,10 +125,10 @@ test "PCX indexed8 (linear)" {
 
 test "PCX indexed24 (planar)" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "pcx/test-bpp24.pcx");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var pcx_file = pcx.PCX{};
 
@@ -169,25 +169,25 @@ test "Write PCX indexed1 (odd width)" {
     const image_file_name = "zigimg_pcx_indexed1_odd.pcx";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "pcx/test-bpp1.pcx");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{
         .pcx = .{},
     });
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var pcx_file = pcx.PCX{};
 
@@ -242,18 +242,18 @@ test "Write PCX indexed 1 (even width)" {
     const image_file_name = "zigimg_pcx_indexed1_even.pcx";
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try image_pattern.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{
+    try image_pattern.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{
         .pcx = .{},
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var pcx_file = pcx.PCX{};
 
@@ -285,25 +285,25 @@ test "Write PCX indexed4 (odd width)" {
     const image_file_name = "zigimg_pcx_indexed4_odd.pcx";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "pcx/test-bpp4.pcx");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{
         .pcx = .{},
     });
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var pcx_file = pcx.PCX{};
 
@@ -359,18 +359,18 @@ test "Write PCX indexed 4 (even width)" {
     const image_file_name = "zigimg_pcx_indexed4_even.pcx";
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try rainbow_test.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{
+    try rainbow_test.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{
         .pcx = .{},
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var pcx_file = pcx.PCX{};
 
@@ -400,25 +400,25 @@ test "Write PCX indexed8 (odd width)" {
     const image_file_name = "zigimg_pcx_indexed8_odd.pcx";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "pcx/test-bpp8.pcx");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{
         .pcx = .{},
     });
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var pcx_file = pcx.PCX{};
 
@@ -472,18 +472,18 @@ test "Write PCX indexed 8 (even width)" {
     const image_file_name = "zigimg_pcx_indexed8_even.pcx";
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try rainbow_test.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{
+    try rainbow_test.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{
         .pcx = .{},
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var pcx_file = pcx.PCX{};
 
@@ -513,25 +513,25 @@ test "Write PCX rgb24 (odd width)" {
     const image_file_name = "zigimg_pcx_bpp24_odd.pcx";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "pcx/test-bpp24.pcx");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{
         .pcx = .{},
     });
 
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var pcx_file = pcx.PCX{};
 
@@ -594,18 +594,18 @@ test "Write PCX rgb24 (even width)" {
     const image_file_name = "zigimg_pcx_rgb24_even.pcx";
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try rainbow_test.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{
+    try rainbow_test.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{
         .pcx = .{},
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var pcx_file = pcx.PCX{};
 
diff --git a/tests/formats/png_test.zig b/tests/formats/png_test.zig
index ec39855..def25c7 100644
--- a/tests/formats/png_test.zig
+++ b/tests/formats/png_test.zig
@@ -8,10 +8,10 @@ const valid_header_data = png.magic_header ++ "\x00\x00\x00\x0d" ++ png.Chunks.I
 
 test "png: Should error on non PNG images" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "bmp/simple_v4.bmp");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const invalidFile = png.PNG.readImage(helpers.zigimg_test_allocator, &read_stream);
 
@@ -111,10 +111,10 @@ test "png: Indexed PNG with transparency (Aseprite output)" {
     // mlarouche: While the full test suite already test this image, I like having a smaller test that I can verify
     // some specific info myself
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "png/aseprite_indexed_transparent.png");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var png_image = try png.PNG.readImage(helpers.zigimg_test_allocator, &read_stream);
     defer png_image.deinit(helpers.zigimg_test_allocator);
@@ -180,18 +180,18 @@ test "png: Don't write tRNS chunk in indexed format when there is no alpha" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_indexed_no_trns.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .png = .{},
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var check_trns_processor: CheckTrnsPresentProcessor = .{};
 
@@ -220,18 +220,18 @@ test "png: Write tRNS chunk in indexed format only when alpha is present" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_indexed_trns.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .png = .{},
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var check_trns_processor: CheckTrnsPresentProcessor = .{};
 
@@ -268,16 +268,16 @@ test "png: Write indexed1 format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_indexed1.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -322,16 +322,16 @@ test "png: Write indexed2 format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_indexed2.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -376,16 +376,16 @@ test "png: Write indexed4 format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_indexed4.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -430,16 +430,16 @@ test "png: Write indexed8 format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_indexed8.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -475,16 +475,16 @@ test "png: Write grayscale1 format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_grayscale1.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -513,16 +513,16 @@ test "png: Write grayscale2 format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_grayscale2.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -551,16 +551,16 @@ test "png: Write grayscale4 format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_grayscale4.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -589,16 +589,16 @@ test "png: Write grayscale8 format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_grayscale8.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -628,16 +628,16 @@ test "png: Write grayscale8Alpha format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_grayscale8Alpha.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -667,16 +667,16 @@ test "png: Write grayscale16 format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_grayscale16.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -706,16 +706,16 @@ test "png: Write grayscale16Alpha format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_grayscale16Alpha.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -747,16 +747,16 @@ test "png: Write rgb24 format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_rgb24.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -790,16 +790,16 @@ test "png: Write rgba32 format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_rgba32.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -833,16 +833,16 @@ test "png: Write rgb48 format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_rgb48.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -876,16 +876,16 @@ test "png: Write rgba64 format" {
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
     const image_file_name = "zigimg_png_rgba64.png";
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], .{ .png = .{} });
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], .{ .png = .{} });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var options = png.DefaultOptions.init(.{});
 
@@ -910,32 +910,32 @@ test "png: Official Test Suite" {
 
 // Useful to quickly test everything on full dir of images
 pub fn testWithDir(directory: []const u8, test_md5_signature: bool) !void {
-    var test_dir_opt = std.fs.cwd().openDir(directory, .{ .access_sub_paths = false, .no_follow = true, .iterate = true }) catch null;
+    var test_dir_opt = std.Io.Dir.openDir(std.Io.Dir.cwd(), std.testing.io, directory, .{ .access_sub_paths = false, .follow_symlinks = false, .iterate = true }) catch null;
     if (test_dir_opt) |*test_dir| {
-        defer test_dir.close();
+        defer test_dir.close(std.testing.io);
         var it = test_dir.iterate();
         if (test_md5_signature) {
-            std.debug.print("\n", .{});
+            std.log.info("\n", .{});
         }
-        while (try it.next()) |entry| {
+        while (try it.next(std.testing.io)) |entry| {
             if (entry.kind != .file or !std.mem.eql(u8, std.fs.path.extension(entry.name), ".png")) {
                 continue;
             }
 
             if (test_md5_signature) {
-                std.debug.print("Testing file {s} ... ", .{entry.name});
+                std.log.info("Testing file {s} ... ", .{entry.name});
             }
 
-            var test_file = try test_dir.openFile(entry.name, .{ .mode = .read_only });
-            defer test_file.close();
+            var test_file = try test_dir.openFile(std.testing.io, entry.name, .{ .mode = .read_only });
+            defer test_file.close(std.testing.io);
 
             var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-            var read_stream = zigimg.io.ReadStream.initFile(test_file, read_buffer[0..]);
+            var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, test_file, read_buffer[0..]);
 
             if (entry.name[0] == 'x' and entry.name[2] != 't' and entry.name[2] != 's') {
                 try std.testing.expectError(zigimg.Image.ReadError.InvalidData, png.loadHeader(&read_stream));
                 if (test_md5_signature) {
-                    std.debug.print("OK\n", .{});
+                    std.log.info("OK\n", .{});
                 }
                 continue;
             }
@@ -946,7 +946,7 @@ pub fn testWithDir(directory: []const u8, test_md5_signature: bool) !void {
                 const error_result = png.loadWithHeader(&read_stream, &header, std.testing.allocator, default_options.get());
                 try std.testing.expectError(zigimg.Image.ReadError.InvalidData, error_result);
                 if (test_md5_signature) {
-                    std.debug.print("OK\n", .{});
+                    std.log.info("OK\n", .{});
                 }
                 continue;
             }
@@ -968,11 +968,11 @@ pub fn testWithDir(directory: []const u8, test_md5_signature: bool) !void {
             @memcpy(test_data_name[len - 3 .. len], "tsd");
 
             // Read test data and check with it
-            if (test_dir.openFile(test_data_name[0..len], .{ .mode = .read_only })) |test_data_file| {
-                defer test_data_file.close();
+            if (test_dir.openFile(std.testing.io, test_data_name[0..len], .{ .mode = .read_only })) |test_data_file| {
+                defer test_data_file.close(std.testing.io);
 
                 var test_read_buffer: [512]u8 = undefined;
-                var test_file_reader = test_data_file.reader(test_read_buffer[0..]);
+                var test_file_reader = test_data_file.reader(std.testing.io, test_read_buffer[0..]);
                 var test_reader = &test_file_reader.interface;
 
                 var expected_md5: [16]u8 = undefined;
@@ -983,31 +983,31 @@ pub fn testWithDir(directory: []const u8, test_md5_signature: bool) !void {
                 const str_md5 = try test_reader.takeDelimiterExclusive('\n');
                 _ = try std.fmt.hexToBytes(expected_md5[0..], str_md5);
                 try std.testing.expectEqual(expected_pixel_format, std.meta.activeTag(result));
-                try std.testing.expectEqualSlices(u8, expected_md5[0..], md5_val[0..]); // catch std.debug.print("MD5 Expected: {s} Got {s}\n", .{std.fmt.fmtSliceHexUpper(expected_md5[0..]), std.fmt.fmtSliceHexUpper(md5_val[0..])});
+                try std.testing.expectEqualSlices(u8, expected_md5[0..], md5_val[0..]); // catch std.log.info("MD5 Expected: {s} Got {s}\n", .{std.fmt.fmtSliceHexUpper(expected_md5[0..]), std.fmt.fmtSliceHexUpper(md5_val[0..])});
             } else |_| {
                 // If there is no test data assume test is correct and write it out
                 try writeTestData(test_dir, test_data_name[0..len], &result, md5_val[0..]);
             }
 
             if (test_md5_signature) {
-                std.debug.print("OK\n", .{});
+                std.log.info("OK\n", .{});
             }
 
             // Write Raw bytes
             // std.mem.copyForwards(u8, tst_data_name[len - 3 .. len + 1], "data");
             // var rawoutput = try idir.createFile(tst_data_name[0 .. len + 1], .{});
-            // defer rawoutput.close();
+            // defer rawoutput.close(std.testing.io);
             // try rawoutput.writeAll(result_bytes);
         }
     }
 }
 
-fn writeTestData(dir: *std.fs.Dir, test_data_name: []const u8, result: *zigimg.color.PixelStorage, md5_value: []const u8) !void {
-    var test_output = try dir.createFile(test_data_name, .{});
-    defer test_output.close();
+fn writeTestData(dir: *std.Io.Dir, test_data_name: []const u8, result: *zigimg.color.PixelStorage, md5_value: []const u8) !void {
+    var test_output = try dir.createFile(std.testing.io, test_data_name, .{});
+    defer test_output.close(std.testing.io);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var file_writer = test_output.writer(write_buffer[0..]);
+    var file_writer = test_output.writer(std.testing.io, write_buffer[0..]);
     var writer = &file_writer.interface;
 
     try writer.print("{s}\n{X}", .{ @tagName(result.*), md5_value });
@@ -1018,14 +1018,14 @@ fn writeTestData(dir: *std.fs.Dir, test_data_name: []const u8, result: *zigimg.c
 test "png: InfoProcessor on Png Test suite" {
     const directory = helpers.fixtures_path ++ "png/";
 
-    var test_dir_opt = std.fs.cwd().openDir(directory, .{ .access_sub_paths = false, .no_follow = true, .iterate = true }) catch null;
+    var test_dir_opt = std.Io.Dir.openDir(std.Io.Dir.cwd(), std.testing.io, directory, .{ .access_sub_paths = false, .iterate = true }) catch null;
     if (test_dir_opt) |*test_dir| {
-        defer test_dir.close();
+        defer test_dir.close(std.testing.io);
         var it = test_dir.iterate();
 
         var info_buffer: [16384]u8 = undefined;
 
-        while (try it.next()) |entry| {
+        while (try it.next(std.testing.io)) |entry| {
             if (entry.kind != .file or !std.mem.eql(u8, std.fs.path.extension(entry.name), ".png")) {
                 continue;
             }
@@ -1033,11 +1033,11 @@ test "png: InfoProcessor on Png Test suite" {
             var info_stream = zigimg.io.WriteStream.initMemory(info_buffer[0..]);
             var options = png.InfoProcessor.PngInfoOptions.init(png.InfoProcessor.init(info_stream.writer()));
 
-            var test_file = try test_dir.openFile(entry.name, .{ .mode = .read_only });
-            defer test_file.close();
+            var test_file = try test_dir.openFile(std.testing.io, entry.name, .{ .mode = .read_only });
+            defer test_file.close(std.testing.io);
 
             var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-            var read_stream = zigimg.io.ReadStream.initFile(test_file, read_buffer[0..]);
+            var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, test_file, read_buffer[0..]);
             if (entry.name[0] == 'x') {
                 continue;
             }
@@ -1051,13 +1051,13 @@ test "png: InfoProcessor on Png Test suite" {
             @memcpy(test_data_name[len - 4 .. len], "info");
 
             // Read test data and check with it
-            if (test_dir.openFile(test_data_name[0..len], .{ .mode = .read_only })) |test_data_file| {
-                defer test_data_file.close();
+            if (test_dir.openFile(std.testing.io, test_data_name[0..len], .{ .mode = .read_only })) |test_data_file| {
+                defer test_data_file.close(std.testing.io);
 
                 var expected_data_buffer: [16384]u8 = undefined;
 
                 var test_read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-                var file_reader = test_data_file.reader(test_read_buffer[0..]);
+                var file_reader = test_data_file.reader(std.testing.io, test_read_buffer[0..]);
                 var reader = &file_reader.interface;
 
                 const loaded = try reader.readSliceShort(expected_data_buffer[0..]);
@@ -1065,11 +1065,11 @@ test "png: InfoProcessor on Png Test suite" {
                 try std.testing.expectEqualSlices(u8, expected_data_buffer[0..loaded], info_buffer[0..loaded]);
             } else |_| {
                 // If there is no test data assume test is correct and write it out
-                var test_output_file = try test_dir.createFile(test_data_name[0..len], .{});
-                defer test_output_file.close();
+                var test_output_file = try test_dir.createFile(std.testing.io, test_data_name[0..len], .{});
+                defer test_output_file.close(std.testing.io);
 
                 var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-                var file_writer = test_output_file.writer(write_buffer[0..]);
+                var file_writer = test_output_file.writer(std.testing.io, write_buffer[0..]);
                 var writer = &file_writer.interface;
 
                 try writer.writeAll(info_buffer[0..@intCast(info_stream.getPos())]);
diff --git a/tests/formats/qoi_test.zig b/tests/formats/qoi_test.zig
index 96256e3..5a9f985 100644
--- a/tests/formats/qoi_test.zig
+++ b/tests/formats/qoi_test.zig
@@ -8,10 +8,10 @@ const zero_qoi_file = helpers.fixtures_path ++ "qoi/zero.qoi";
 
 test "Should error on non QOI images" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "bmp/simple_v4.bmp");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var qoi_file = qoi.QOI{};
 
@@ -22,10 +22,10 @@ test "Should error on non QOI images" {
 
 test "Read zero.qoi file" {
     const file = try helpers.testOpenFile(zero_qoi_file);
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var qoi_file = qoi.QOI{};
 
diff --git a/tests/formats/ras_test.zig b/tests/formats/ras_test.zig
index d7240a1..5452098 100644
--- a/tests/formats/ras_test.zig
+++ b/tests/formats/ras_test.zig
@@ -5,10 +5,10 @@ const helpers = @import("../helpers.zig");
 
 test "Should error on non RAS images" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "bmp/simple_v4.bmp");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var ras_file = ras.RAS{};
 
@@ -18,12 +18,12 @@ test "Should error on non RAS images" {
 
 test "Sun-Raster 24-bit RGB24 uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ras/sample-rgb24.ras");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var ras_file = ras.RAS{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try ras_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -46,12 +46,12 @@ test "Sun-Raster 24-bit RGB24 uncompressed" {
 
 test "Sun-Raster 24-bit BGR24 uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ras/sample-bgr24.ras");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var ras_file = ras.RAS{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try ras_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -74,12 +74,12 @@ test "Sun-Raster 24-bit BGR24 uncompressed" {
 
 test "Sun-Raster 32-bit xRGB uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ras/sample-xrgb32.ras");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var ras_file = ras.RAS{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try ras_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -98,12 +98,12 @@ test "Sun-Raster 32-bit xRGB uncompressed" {
 
 test "Sun-Raster 8-bit with palette uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ras/sample-8bit.ras");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var ras_file = ras.RAS{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try ras_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -124,12 +124,12 @@ test "Sun-Raster 8-bit with palette uncompressed" {
 
 test "Sun-Raster 8-bit grayscale uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ras/sample-8bit-grayscale.ras");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var ras_file = ras.RAS{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try ras_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -144,12 +144,12 @@ test "Sun-Raster 8-bit grayscale uncompressed" {
 
 test "Sun-Raster 1-bit black & white uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ras/sample-blackwhite.ras");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var ras_file = ras.RAS{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try ras_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -164,12 +164,12 @@ test "Sun-Raster 1-bit black & white uncompressed" {
 
 test "Sun-Raster bgr24 rle compressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "ras/sample-24bit-bgr-rle.ras");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var ras_file = ras.RAS{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try ras_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
diff --git a/tests/formats/sgi_test.zig b/tests/formats/sgi_test.zig
index d098ef7..ed23769 100644
--- a/tests/formats/sgi_test.zig
+++ b/tests/formats/sgi_test.zig
@@ -5,10 +5,10 @@ const zigimg = @import("zigimg");
 
 test "Should error on non SGI images" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "bmp/simple_v4.bmp");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var sgi_file = sgi.SGI{};
 
@@ -18,12 +18,12 @@ test "Should error on non SGI images" {
 
 test "SGI 24-bit uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "sgi/sample-rgb24.sgi");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var sgi_file = sgi.SGI{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try sgi_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -46,12 +46,12 @@ test "SGI 24-bit uncompressed" {
 
 test "SGI grayscale uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "sgi/sample-blackwhite.sgi");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var sgi_file = sgi.SGI{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try sgi_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -66,12 +66,12 @@ test "SGI grayscale uncompressed" {
 
 test "SGI 32-bit RGBA uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "sgi/sample-rgba.sgi");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var sgi_file = sgi.SGI{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try sgi_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -94,12 +94,12 @@ test "SGI 32-bit RGBA uncompressed" {
 
 test "SGI RGB48be uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "sgi/sample-rgb48be.sgi");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var sgi_file = sgi.SGI{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try sgi_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -122,12 +122,12 @@ test "SGI RGB48be uncompressed" {
 
 test "SGI grayscale rle compressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "sgi/sample-gray-rle.sgi");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var sgi_file = sgi.SGI{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try sgi_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -142,12 +142,12 @@ test "SGI grayscale rle compressed" {
 
 test "SGI 24-bit rle compressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "sgi/sample-24bit-rle.sgi");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var sgi_file = sgi.SGI{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try sgi_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -170,12 +170,12 @@ test "SGI 24-bit rle compressed" {
 
 test "SGI RGB48be rle uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "sgi/sample-rgb48be-rle.sgi");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var sgi_file = sgi.SGI{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try sgi_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -198,12 +198,12 @@ test "SGI RGB48be rle uncompressed" {
 
 test "SGI 32-bit RGBA rle compressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "sgi/sample-rgba-rle.sgi");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var sgi_file = sgi.SGI{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try sgi_file.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
diff --git a/tests/formats/tga_test.zig b/tests/formats/tga_test.zig
index 83f2d76..c3182d4 100644
--- a/tests/formats/tga_test.zig
+++ b/tests/formats/tga_test.zig
@@ -5,10 +5,10 @@ const zigimg = @import("zigimg");
 
 test "Should error on non TGA images" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "bmp/simple_v4.bmp");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -19,10 +19,10 @@ test "Should error on non TGA images" {
 
 test "Read ubw8 TGA file" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/ubw8.tga");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -56,10 +56,10 @@ test "Read ubw8 TGA file" {
 
 test "Read ucm8 TGA file" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/ucm8.tga");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -101,10 +101,10 @@ test "Read ucm8 TGA file" {
 
 test "Read utc16 TGA file" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/utc16.tga");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -140,10 +140,10 @@ test "Read utc16 TGA file" {
 
 test "Read utc24 TGA file" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/utc24.tga");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -179,10 +179,10 @@ test "Read utc24 TGA file" {
 
 test "Read utc32 TGA file" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/utc32.tga");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -218,10 +218,10 @@ test "Read utc32 TGA file" {
 
 test "Read cbw8 TGA file" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/cbw8.tga");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -255,10 +255,10 @@ test "Read cbw8 TGA file" {
 
 test "Read ccm8 TGA file" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/ccm8.tga");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -300,10 +300,10 @@ test "Read ccm8 TGA file" {
 
 test "Read ctc24 TGA file" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/ctc24.tga");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -339,10 +339,10 @@ test "Read ctc24 TGA file" {
 
 test "Read matte-01 TGA file" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/matte-01.tga");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -384,10 +384,10 @@ test "Read matte-01 TGA file" {
 
 test "Read font TGA file" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/font.tga");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -411,10 +411,10 @@ test "Read font TGA file" {
 
 test "Read stopsignsmall TGA v1 file" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/stopsignsmall.tga");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -436,10 +436,10 @@ test "Read stopsignsmall TGA v1 file" {
 
 test "Read stopsignsmallcompressed TGA v1 file" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/stopsignsmallcompressed.tga");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -463,11 +463,11 @@ test "Write TGA uncompressed grayscale8" {
     const image_file_name = "zigimg_tga_uncompressed_grayscale8.tga";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/ubw8.tga");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     const encoder_options = zigimg.Image.EncoderOptions{
@@ -500,15 +500,15 @@ test "Write TGA uncompressed grayscale8" {
     };
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], encoder_options);
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], encoder_options);
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -558,15 +558,15 @@ test "Write TGA compressed grayscale8" {
     const image_file_name = "zigimg_tga_compressed_grayscale8.tga";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/cbw8.tga");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = true,
             .color_map_depth = 16,
@@ -575,13 +575,13 @@ test "Write TGA compressed grayscale8" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -617,15 +617,15 @@ test "Write uncompressed indexed8 (color map 16-bit)" {
     const image_file_name = "zigimg_tga_uncompressed_indexed8.tga";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/ucm8.tga");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = false,
             .color_map_depth = 16,
@@ -634,13 +634,13 @@ test "Write uncompressed indexed8 (color map 16-bit)" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -684,15 +684,15 @@ test "Write uncompressed indexed8 (color map 24-bit)" {
     const image_file_name = "zigimg_tga_uncompressed_indexed8.tga";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/ucm8.tga");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = false,
             .color_map_depth = 24,
@@ -701,13 +701,13 @@ test "Write uncompressed indexed8 (color map 24-bit)" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -751,15 +751,15 @@ test "Write compressed indexed8 (color map 16-bit)" {
     const image_file_name = "zigimg_tga_compressed_indexed8.tga";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/ccm8.tga");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = true,
             .color_map_depth = 16,
@@ -768,13 +768,13 @@ test "Write compressed indexed8 (color map 16-bit)" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -818,15 +818,15 @@ test "Write compressed indexed8 (color map 24-bit)" {
     const image_file_name = "zigimg_tga_compressed_indexed8.tga";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/ccm8.tga");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = true,
             .color_map_depth = 24,
@@ -835,13 +835,13 @@ test "Write compressed indexed8 (color map 24-bit)" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -885,15 +885,15 @@ test "Write uncompressed 16-bit true color TGA" {
     const image_file_name = "zigimg_tga_uncompressed_true_color_16.tga";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/utc16.tga");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = false,
             .color_map_depth = 16,
@@ -902,13 +902,13 @@ test "Write uncompressed 16-bit true color TGA" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -946,15 +946,15 @@ test "Write compressed 16-bit true color TGA" {
     const image_file_name = "zigimg_tga_compressed_true_color_16.tga";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/utc16.tga");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = true,
             .color_map_depth = 16,
@@ -963,13 +963,13 @@ test "Write compressed 16-bit true color TGA" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -1007,15 +1007,15 @@ test "Write uncompressed 24-bit true color TGA" {
     const image_file_name = "zigimg_tga_uncompressed_true_color_24.tga";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/utc24.tga");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = false,
             .color_map_depth = 24,
@@ -1024,13 +1024,13 @@ test "Write uncompressed 24-bit true color TGA" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -1068,15 +1068,15 @@ test "Write compressed 24-bit true color TGA" {
     const image_file_name = "zigimg_tga_compressed_true_color_24.tga";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/ctc24.tga");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = true,
             .color_map_depth = 24,
@@ -1085,13 +1085,13 @@ test "Write compressed 24-bit true color TGA" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -1129,15 +1129,15 @@ test "Write uncompressed 32-bit true color TGA" {
     const image_file_name = "zigimg_tga_uncompressed_true_color_32.tga";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/utc32.tga");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = false,
             .color_map_depth = 24,
@@ -1146,13 +1146,13 @@ test "Write uncompressed 32-bit true color TGA" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -1190,15 +1190,15 @@ test "Write compressed 32-bit true color TGA" {
     const image_file_name = "zigimg_tga_compressed_true_color_32.tga";
 
     var source_file = try helpers.testOpenFile(helpers.fixtures_path ++ "tga/ctc32.tga");
-    defer source_file.close();
+    defer source_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
 
-    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, source_file, read_buffer[0..]);
+    var source_image = try zigimg.Image.fromFile(helpers.zigimg_test_allocator, std.testing.io, source_file, read_buffer[0..]);
     defer source_image.deinit(helpers.zigimg_test_allocator);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = true,
             .color_map_depth = 24,
@@ -1207,13 +1207,13 @@ test "Write compressed 32-bit true color TGA" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -1270,7 +1270,7 @@ test "Write uncompressed Rgb24 to TGA" {
     @memcpy(source_image.pixels.rgb24[0..], uncompressed_source[0..]);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = false,
             .color_map_depth = 24,
@@ -1279,14 +1279,14 @@ test "Write uncompressed Rgb24 to TGA" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -1329,7 +1329,7 @@ test "Write compressed Rgb24 to TGA" {
     @memcpy(source_image.pixels.rgb24[0..], uncompressed_source[0..]);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = true,
             .color_map_depth = 24,
@@ -1338,14 +1338,14 @@ test "Write compressed Rgb24 to TGA" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -1403,7 +1403,7 @@ test "Write uncompressed Rgba32 to TGA" {
     @memcpy(source_image.pixels.rgba32[0..], uncompressed_source[0..]);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = false,
             .color_map_depth = 24,
@@ -1412,14 +1412,14 @@ test "Write uncompressed Rgba32 to TGA" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
@@ -1478,7 +1478,7 @@ test "Write compressed Rgba32 to TGA" {
     @memcpy(source_image.pixels.rgba32[0..], uncompressed_source[0..]);
 
     var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    try source_image.writeToFilePath(helpers.zigimg_test_allocator, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
+    try source_image.writeToFilePath(helpers.zigimg_test_allocator, std.testing.io, image_file_name, write_buffer[0..], zigimg.Image.EncoderOptions{
         .tga = .{
             .rle_compressed = true,
             .color_map_depth = 24,
@@ -1487,14 +1487,14 @@ test "Write compressed Rgba32 to TGA" {
         },
     });
     defer {
-        std.fs.cwd().deleteFile(image_file_name) catch {};
+        std.Io.Dir.deleteFile(std.Io.Dir.cwd(), std.testing.io, image_file_name) catch {};
     }
 
     const read_file = try helpers.testOpenFile(image_file_name);
-    defer read_file.close();
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var tga_file = tga.TGA{};
 
diff --git a/tests/formats/tiff_test.zig b/tests/formats/tiff_test.zig
index cce4cfa..2a8a042 100644
--- a/tests/formats/tiff_test.zig
+++ b/tests/formats/tiff_test.zig
@@ -5,10 +5,10 @@ const zigimg = @import("zigimg");
 
 test "Should error on non TIFF images" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "bmp/simple_v4.bmp");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     var sgi_file = tiff.TIFF{};
 
@@ -18,12 +18,12 @@ test "Should error on non TIFF images" {
 
 test "TIFF/LE monochrome black uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-monob-raw.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -39,12 +39,12 @@ test "TIFF/LE monochrome black uncompressed" {
 
 test "TIFF/LE grayscale8 uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-grayscale8-raw.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -61,12 +61,12 @@ test "TIFF/LE grayscale8 uncompressed" {
 
 test "TIFF/LE 8-bit with colormap uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-pal8-raw.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -87,12 +87,12 @@ test "TIFF/LE 8-bit with colormap uncompressed" {
 
 test "TIFF/LE 24-bit uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-rgb24-raw.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -115,12 +115,12 @@ test "TIFF/LE 24-bit uncompressed" {
 
 test "TIFF/BE rgb24 gray single strip uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/big-endian/sample-rgb24-single-strip.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -143,12 +143,12 @@ test "TIFF/BE rgb24 gray single strip uncompressed" {
 
 test "TIFF/BE rgb24 color single strip uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/big-endian/sample-pal8-raw.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -171,12 +171,12 @@ test "TIFF/BE rgb24 color single strip uncompressed" {
 
 test "TIFF/BE 24-bit uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/big-endian/sample-rgb24-raw.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -199,12 +199,12 @@ test "TIFF/BE 24-bit uncompressed" {
 
 test "TIFF/LE RGBA uncompressed" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-rgba-raw.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -223,12 +223,12 @@ test "TIFF/LE RGBA uncompressed" {
 
 test "TIFF/LE monochrome black packbits" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-monob-packbits.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -244,12 +244,12 @@ test "TIFF/LE monochrome black packbits" {
 
 test "TIFF/LE grayscale8 packbits" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-grayscale8-packbits.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -266,12 +266,12 @@ test "TIFF/LE grayscale8 packbits" {
 
 test "TIFF/LE 8-bit with colormap packbits" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-pal8-packbits.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -292,12 +292,12 @@ test "TIFF/LE 8-bit with colormap packbits" {
 
 test "TIFF/LE 24-bit packbits" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-rgb24-packbits.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -320,12 +320,12 @@ test "TIFF/LE 24-bit packbits" {
 
 test "TIFF/LE RGBA packbits" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-rgba-packbits.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -344,12 +344,12 @@ test "TIFF/LE RGBA packbits" {
 
 test "TIFF/LE monochrome black CCITT" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/ccitt_rle.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -364,12 +364,12 @@ test "TIFF/LE monochrome black CCITT" {
 
 test "TIFF/LE monochrome black LZW" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-monob-lzw.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -385,12 +385,12 @@ test "TIFF/LE monochrome black LZW" {
 
 test "TIFF/LE grayscale8 LZW" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-grayscale8-lzw.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -407,12 +407,12 @@ test "TIFF/LE grayscale8 LZW" {
 
 test "TIFF/LE 8-bit with colormap LZW" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-pal8-lzw.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -433,12 +433,12 @@ test "TIFF/LE 8-bit with colormap LZW" {
 
 test "TIFF/LE 24-bit LZW" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-rgb24-lzw.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -461,12 +461,12 @@ test "TIFF/LE 24-bit LZW" {
 
 test "TIFF/LE RGBA LZW" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-rgba-lzw.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -485,12 +485,12 @@ test "TIFF/LE RGBA LZW" {
 
 test "TIFF/LE monochrome black Deflate" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-monob-deflate.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_bitmap = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_bitmap.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -506,12 +506,12 @@ test "TIFF/LE monochrome black Deflate" {
 
 test "TIFF/LE grayscale8 Deflate" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-grayscale8-deflate.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -528,12 +528,12 @@ test "TIFF/LE grayscale8 Deflate" {
 
 test "TIFF/LE 8-bit with colormap Deflate" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-pal8-deflate.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -554,12 +554,12 @@ test "TIFF/LE 8-bit with colormap Deflate" {
 
 test "TIFF/LE 24-bit Deflate" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-rgb24-deflate.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
@@ -582,12 +582,12 @@ test "TIFF/LE 24-bit Deflate" {
 
 test "TIFF/LE RGBA Deflate" {
     const file = try helpers.testOpenFile(helpers.fixtures_path ++ "tiff/sample-rgba-deflate.tiff");
-    defer file.close();
+    defer file.close(std.testing.io);
 
     var the_tiff = tiff.TIFF{};
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
     const pixels = try the_tiff.read(helpers.zigimg_test_allocator, &read_stream);
     defer pixels.deinit(helpers.zigimg_test_allocator);
diff --git a/tests/formats/xbm_test.zig b/tests/formats/xbm_test.zig
index 52eb29c..053e41e 100644
--- a/tests/formats/xbm_test.zig
+++ b/tests/formats/xbm_test.zig
@@ -30,12 +30,12 @@ const simple_4x4_xbm =
 test "XBM: invalid file format" {
     {
         const file = try helpers.testOpenFile(helpers.fixtures_path ++ "xbm/bad_missing_dim.xbm");
-        defer file.close();
+        defer file.close(std.testing.io);
 
         var the_xbm = xbm.XBM{};
 
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+        var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
         const actual_error = the_xbm.read(helpers.zigimg_test_allocator, &read_stream);
         try helpers.expectError(actual_error, zigimg.Image.ReadError.InvalidData);
@@ -43,12 +43,12 @@ test "XBM: invalid file format" {
 
     {
         const file = try helpers.testOpenFile(helpers.fixtures_path ++ "xbm/bad_missing_pixels.xbm");
-        defer file.close();
+        defer file.close(std.testing.io);
 
         var the_xbm = xbm.XBM{};
 
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        var read_stream = zigimg.io.ReadStream.initFile(file, read_buffer[0..]);
+        var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, file, read_buffer[0..]);
 
         const actual_error = the_xbm.read(helpers.zigimg_test_allocator, &read_stream);
         try helpers.expectError(actual_error, zigimg.Image.ReadError.InvalidData);
diff --git a/tests/helpers.zig b/tests/helpers.zig
index 9a4ef29..b9f06b1 100644
--- a/tests/helpers.zig
+++ b/tests/helpers.zig
@@ -30,17 +30,17 @@ pub inline fn expectApproxEqRel(actual: anytype, expected: anytype, tolerance: a
     return try std.testing.expectApproxEqRel(expected, actual, tolerance);
 }
 
-pub fn testOpenFile(file_path: []const u8) !std.fs.File {
-    return std.fs.cwd().openFile(file_path, .{}) catch |err|
+pub fn testOpenFile(file_path: []const u8) !std.Io.File {
+    return std.Io.Dir.openFile(std.Io.Dir.cwd(), std.testing.io, file_path, .{}) catch |err|
         if (err == error.FileNotFound) return error.SkipZigTest else return err;
 }
 
 pub fn testImageFromFile(image_path: []const u8, buffer: []u8) !zigimg.Image {
-    return zigimg.Image.fromFilePath(zigimg_test_allocator, image_path, buffer) catch |err|
+    return zigimg.Image.fromFilePath(zigimg_test_allocator, std.testing.io, image_path, buffer) catch |err|
         if (err == error.FileNotFound) return error.SkipZigTest else return err;
 }
 
 pub fn testReadFile(file_path: []const u8, buffer: []u8) ![]u8 {
-    return std.fs.cwd().readFile(file_path, buffer) catch |err|
+    return std.Io.Dir.readFile(std.Io.Dir.cwd(), std.testing.io, file_path, buffer) catch |err|
         if (err == error.FileNotFound) return error.SkipZigTest else return err;
 }
diff --git a/tests/image_test.zig b/tests/image_test.zig
index ccd2d11..529be41 100644
--- a/tests/image_test.zig
+++ b/tests/image_test.zig
@@ -187,7 +187,7 @@ test "Should detect BMP properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .bmp);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -213,7 +213,7 @@ test "Should detect GIF properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .gif);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -231,7 +231,7 @@ test "Should detect PCX properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .pcx);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -247,7 +247,7 @@ test "Should detect PBM properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .pbm);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -265,7 +265,7 @@ test "Should detect PGM properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .pgm);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -281,7 +281,7 @@ test "Should detect PPM properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .ppm);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -297,7 +297,7 @@ test "Should detect PNG properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .png);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -321,7 +321,7 @@ test "Should detect TGA properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .tga);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -334,7 +334,7 @@ test "Should detect QOI properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .qoi);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -350,7 +350,7 @@ test "Should detect JPEG properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .jpeg);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -366,7 +366,7 @@ test "Should detect Farbfeld properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .farbfeld);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -381,7 +381,7 @@ test "Should detect IFF/PBM properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .iff);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -396,7 +396,7 @@ test "Should detect RAS properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .ras);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -411,7 +411,7 @@ test "Should detect SGI properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .sgi);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -426,7 +426,7 @@ test "Should detect TIFF properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .tiff);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
@@ -449,7 +449,7 @@ test "Should detect XBM properly" {
 
     for (image_tests) |image_path| {
         var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        const format = try Image.detectFormatFromFilePath(image_path, read_buffer[0..]);
+        const format = try Image.detectFormatFromFilePath(std.testing.io, image_path, read_buffer[0..]);
         try std.testing.expect(format == .xbm);
 
         var test_image = try helpers.testImageFromFile(image_path, read_buffer[0..]);
diff --git a/tests/io_test.zig b/tests/io_test.zig
index 2dc6f7a..1ec5d60 100644
--- a/tests/io_test.zig
+++ b/tests/io_test.zig
@@ -55,12 +55,12 @@ test "io.ReadStream: should read and seek properly within a unbuffered file" {
     var temp_folder = std.testing.tmpDir(.{});
     defer temp_folder.cleanup();
 
-    try temp_folder.dir.writeFile(.{ .sub_path = TEST_FILENAME, .data = TEST_FILE_CONTENTS });
+    try temp_folder.dir.writeFile(std.testing.io, .{ .sub_path = TEST_FILENAME, .data = TEST_FILE_CONTENTS });
 
-    const read_file = try temp_folder.dir.openFile(TEST_FILENAME, .{});
-    defer read_file.close();
+    const read_file = try temp_folder.dir.openFile(std.testing.io, TEST_FILENAME, .{});
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, &.{});
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, &.{});
 
     var reader = read_stream.reader();
 
@@ -99,12 +99,12 @@ test "io.ReadStream: should error on invalid seek within unbuffered file" {
     var temp_folder = std.testing.tmpDir(.{});
     defer temp_folder.cleanup();
 
-    try temp_folder.dir.writeFile(.{ .sub_path = TEST_FILENAME, .data = TEST_FILE_CONTENTS });
+    try temp_folder.dir.writeFile(std.testing.io, .{ .sub_path = TEST_FILENAME, .data = TEST_FILE_CONTENTS });
 
-    const read_file = try temp_folder.dir.openFile(TEST_FILENAME, .{});
-    defer read_file.close();
+    const read_file = try temp_folder.dir.openFile(std.testing.io, TEST_FILENAME, .{});
+    defer read_file.close(std.testing.io);
 
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, &.{});
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, &.{});
 
     const seek_to_error = read_stream.seekTo(123456);
     try helpers.expectError(seek_to_error, zigimg.io.ReadStream.SeekError.Unseekable);
@@ -122,13 +122,13 @@ test "io.ReadStream: should read and seek properly within a file with a small bu
     var temp_folder = std.testing.tmpDir(.{});
     defer temp_folder.cleanup();
 
-    try temp_folder.dir.writeFile(.{ .sub_path = TEST_FILENAME, .data = TEST_FILE_CONTENTS });
+    try temp_folder.dir.writeFile(std.testing.io, .{ .sub_path = TEST_FILENAME, .data = TEST_FILE_CONTENTS });
 
-    const read_file = try temp_folder.dir.openFile(TEST_FILENAME, .{});
-    defer read_file.close();
+    const read_file = try temp_folder.dir.openFile(std.testing.io, TEST_FILENAME, .{});
+    defer read_file.close(std.testing.io);
 
     var small_buffer: [30]u8 = @splat(0);
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, small_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, small_buffer[0..]);
 
     var reader = read_stream.reader();
 
@@ -164,13 +164,13 @@ test "io.ReadStream: should read and seek properly within a file with a large bu
     var temp_folder = std.testing.tmpDir(.{});
     defer temp_folder.cleanup();
 
-    try temp_folder.dir.writeFile(.{ .sub_path = TEST_FILENAME, .data = TEST_FILE_CONTENTS });
+    try temp_folder.dir.writeFile(std.testing.io, .{ .sub_path = TEST_FILENAME, .data = TEST_FILE_CONTENTS });
 
-    const read_file = try temp_folder.dir.openFile(TEST_FILENAME, .{});
-    defer read_file.close();
+    const read_file = try temp_folder.dir.openFile(std.testing.io, TEST_FILENAME, .{});
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     var reader = read_stream.reader();
 
@@ -206,13 +206,13 @@ test "io.ReadStream: should error on invalid seek within a file with a large buf
     var temp_folder = std.testing.tmpDir(.{});
     defer temp_folder.cleanup();
 
-    try temp_folder.dir.writeFile(.{ .sub_path = TEST_FILENAME, .data = TEST_FILE_CONTENTS });
+    try temp_folder.dir.writeFile(std.testing.io, .{ .sub_path = TEST_FILENAME, .data = TEST_FILE_CONTENTS });
 
-    const read_file = try temp_folder.dir.openFile(TEST_FILENAME, .{});
-    defer read_file.close();
+    const read_file = try temp_folder.dir.openFile(std.testing.io, TEST_FILENAME, .{});
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-    var read_stream = zigimg.io.ReadStream.initFile(read_file, read_buffer[0..]);
+    var read_stream = zigimg.io.ReadStream.initFile(std.testing.io, read_file, read_buffer[0..]);
 
     const seek_to_error = read_stream.seekTo(123456);
     try helpers.expectError(seek_to_error, zigimg.io.ReadStream.SeekError.Unseekable);
@@ -261,10 +261,10 @@ test "io.WriteStream: should write property within a file with a small buffer" {
     defer temp_folder.cleanup();
 
     {
-        const write_file = try temp_folder.dir.createFile(TEST_FILENAME, .{});
-        defer write_file.close();
+        const write_file = try temp_folder.dir.createFile(std.testing.io, TEST_FILENAME, .{});
+        defer write_file.close(std.testing.io);
 
-        var write_stream = zigimg.io.WriteStream.initFile(write_file, buffer[0..]);
+        var write_stream = zigimg.io.WriteStream.initFile(std.testing.io, write_file, buffer[0..]);
 
         var writer = write_stream.writer();
         try writer.writeAll(TEST_FILE_CONTENTS[0..3]);
@@ -283,11 +283,11 @@ test "io.WriteStream: should write property within a file with a small buffer" {
         try writer.flush();
     }
 
-    var read_file = try temp_folder.dir.openFile(TEST_FILENAME, .{});
-    defer read_file.close();
+    var read_file = try temp_folder.dir.openFile(std.testing.io, TEST_FILENAME, .{});
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [1024]u8 = @splat(0);
-    var file_reader = read_file.reader(read_buffer[0..]);
+    var file_reader = read_file.reader(std.testing.io, read_buffer[0..]);
 
     var reader = &file_reader.interface;
 
@@ -305,11 +305,11 @@ test "io.WriteStream: should write property within a file with a large buffer" {
     defer temp_folder.cleanup();
 
     {
-        const write_file = try temp_folder.dir.createFile(TEST_FILENAME, .{});
-        defer write_file.close();
+        const write_file = try temp_folder.dir.createFile(std.testing.io, TEST_FILENAME, .{});
+        defer write_file.close(std.testing.io);
 
         var write_buffer: [zigimg.io.DEFAULT_BUFFER_SIZE]u8 = undefined;
-        var write_stream = zigimg.io.WriteStream.initFile(write_file, write_buffer[0..]);
+        var write_stream = zigimg.io.WriteStream.initFile(std.testing.io, write_file, write_buffer[0..]);
 
         var writer = write_stream.writer();
         try writer.writeAll(TEST_FILE_CONTENTS[0..3]);
@@ -328,11 +328,11 @@ test "io.WriteStream: should write property within a file with a large buffer" {
         try writer.flush();
     }
 
-    var read_file = try temp_folder.dir.openFile(TEST_FILENAME, .{});
-    defer read_file.close();
+    var read_file = try temp_folder.dir.openFile(std.testing.io, TEST_FILENAME, .{});
+    defer read_file.close(std.testing.io);
 
     var read_buffer: [1024]u8 = @splat(0);
-    var file_reader = read_file.reader(read_buffer[0..]);
+    var file_reader = read_file.reader(std.testing.io, read_buffer[0..]);
 
     var reader = &file_reader.interface;
 
diff --git a/zigimg.zig b/zigimg.zig
index 9f6b1a8..a53b23c 100644
--- a/zigimg.zig
+++ b/zigimg.zig
@@ -38,5 +38,5 @@ test {
         @import("tests/octree_quantizer_test.zig"),
         @import("tests/pixel_format_converter_test.zig"),
         @import("tests/pixel_format_test.zig"),
-    }) |source_file| std.testing.refAllDeclsRecursive(source_file);
+    }) |source_file| std.testing.refAllDecls(source_file);
 }
diff --git a/src/formats/gif.zig b/src/formats/gif.zig
--- a/src/formats/gif.zig
+++ b/src/formats/gif.zig
@@ -8,7 +8,7 @@
 const std = @import("std");
 const utils = @import("../utils.zig");
 
-pub const HeaderFlags = packed struct {
+pub const HeaderFlags = packed struct(u8) {
     global_color_table_size: u3 = 0,
     sorted: bool = false,
     color_resolution: u3 = 0,
@@ -129,9 +129,9 @@
 pub const GIF = struct {
     header: Header = .{},
     global_color_table: utils.FixedStorage(color.Rgb24, 256) = .{},
-    frames: std.ArrayList(FrameData) = .{},
-    comments: std.ArrayList(CommentExtension) = .{},
-    application_infos: std.ArrayList(ApplicationExtension) = .{},
+    frames: std.ArrayList(FrameData) = .empty,
+    comments: std.ArrayList(CommentExtension) = .empty,
+    application_infos: std.ArrayList(ApplicationExtension) = .empty,
     arena_allocator: std.heap.ArenaAllocator = undefined,
 
     pub const SubImage = struct {
@@ -147,6 +147,6 @@
     pub const FrameData = struct {
         graphics_control: ?GraphicControlExtension = null,
-        sub_images: std.ArrayList(*SubImage) = .{},
+        sub_images: std.ArrayList(*SubImage) = .empty,
 
         pub fn deinit(self: *FrameData, allocator: std.mem.Allocator) void {
             for (self.sub_images.items) |sub_image| {
@@ -683,7 +683,7 @@
         const final_pixel_format = self.findBestPixelFormat();
 
         const frame_list_allocator = self.arena_allocator.child_allocator;
 
-        var frame_list = Image.Animation.FrameList{};
+        var frame_list: Image.Animation.FrameList = .empty;
 
         if (self.frames.items.len == 0) {
diff --git a/src/compressions/lzw.zig b/src/compressions/lzw.zig
--- a/src/compressions/lzw.zig
+++ b/src/compressions/lzw.zig
@@ -11,9 +11,10 @@
         next_code: u13 = 0,
         previous_code: ?u13 = null,
-        dictionary: std.AutoArrayHashMap(u13, []const u8),
+        dictionary: std.AutoArrayHashMapUnmanaged(u13, []const u8) = .empty,
+        dict_allocator: std.mem.Allocator,
 
         remaining_data: ?u13 = null,
         remaining_bits: u4 = 0,
@@ -27,7 +28,7 @@
             var result = Self{
                 .area_allocator = std.heap.ArenaAllocator.init(allocator),
                 .code_size = initial_code_size,
-                .dictionary = std.AutoArrayHashMap(u13, []const u8).init(allocator),
+                .dict_allocator = allocator,
                 .initial_code_size = initial_code_size,
                 .clear_code = @as(u13, 1) << @intCast(initial_code_size),
                 .end_information_code = (@as(u13, 1) << @intCast(initial_code_size)) + 1,
@@ -43,7 +44,7 @@
 
         pub fn deinit(self: *Self) void {
             self.area_allocator.deinit();
-            self.dictionary.deinit();
+            self.dictionary.deinit(self.dict_allocator);
         }
 
         pub fn decode(self: *Self, reader: *std.Io.Reader, writer: *std.Io.Writer) !void {
@@ -85,7 +86,7 @@
                             var new_value = try allocator.alloc(u8, previous_value.len + 1);
                             std.mem.copyForwards(u8, new_value, previous_value);
                             new_value[previous_value.len] = value[0];
-                            try self.dictionary.put(self.next_code, new_value);
+                            try self.dictionary.put(self.dict_allocator, self.next_code, new_value);
 
                             self.next_code += 1;
 
@@ -109,7 +110,7 @@
                                 var new_value = try allocator.alloc(u8, previous_value.len + 1);
                                 std.mem.copyForwards(u8, new_value, previous_value);
                                 new_value[previous_value.len] = previous_value[0];
-                                try self.dictionary.put(self.next_code, new_value);
+                                try self.dictionary.put(self.dict_allocator, self.next_code, new_value);
 
                                 _ = try writer.write(new_value);
 
@@ -154,7 +155,7 @@
                 var data = try allocator.alloc(u8, 1);
                 data[0] = @as(u8, @truncate(index));
 
-                try self.dictionary.put(index, data);
+                try self.dictionary.put(self.dict_allocator, index, data);
             }
         }
     };
diff --git a/src/formats/jpeg/huffman.zig b/src/formats/jpeg/huffman.zig
--- a/src/formats/jpeg/huffman.zig
+++ b/src/formats/jpeg/huffman.zig
@@ -9,7 +9,7 @@
 
 const HuffmanCode = struct { length_minus_one: u4, code: u16 };
-const HuffmanCodeMap = std.AutoArrayHashMap(HuffmanCode, u8);
+const HuffmanCodeMap = std.AutoArrayHashMapUnmanaged(HuffmanCode, u8);
 
 const JPEG_DEBUG = false;
 const JPEG_VERY_DEBUG = false;
@@ -40,8 +40,8 @@
         for (code_counts) |count| total_huffman_codes += count;
 
-        var huffman_code_map = HuffmanCodeMap.init(allocator);
-        errdefer huffman_code_map.deinit();
+        var huffman_code_map: HuffmanCodeMap = .empty;
+        errdefer huffman_code_map.deinit(allocator);
 
         var fast_table: [1 << fast_bits]u8 = @splat(255);
         var fast_size: [1 << fast_bits]u5 = @splat(0);
@@ -65,7 +65,7 @@
 
                 const byte = try reader.takeByte();
-                try huffman_code_map.put(.{ .length_minus_one = @as(u4, @intCast(i)), .code = code }, byte);
+                try huffman_code_map.put(allocator, .{ .length_minus_one = @as(u4, @intCast(i)), .code = code }, byte);
 
                 // construct accelaration structure see stb_image
                 if (i + 1 <= fast_bits) {
@@ -96,5 +96,5 @@
 
     pub fn deinit(self: *Table) void {
-        self.code_map.deinit();
+        self.code_map.deinit(self.allocator);
     }
 };

