diff --git a/CHANGES/10154.bugfix.rst b/CHANGES/10154.bugfix.rst
new file mode 100644
index 00000000000..382d9e56e6c
--- /dev/null
+++ b/CHANGES/10154.bugfix.rst
@@ -0,0 +1 @@
+Updated :meth:`aiohttp.web.StreamResponse.write` annotation to also allow :class:`bytearray` and :class:`memoryview` as inputs -- by :user:`cdce8p`.
diff --git a/aiohttp/abc.py b/aiohttp/abc.py
index d6f9f782b0f..989f0a561ff 100644
--- a/aiohttp/abc.py
+++ b/aiohttp/abc.py
@@ -17,6 +17,7 @@
     Optional,
     Tuple,
     TypedDict,
+    Union,
 )
 
 from multidict import CIMultiDict
@@ -200,7 +201,7 @@ class AbstractStreamWriter(ABC):
     length: Optional[int] = 0
 
     @abstractmethod
-    async def write(self, chunk: bytes) -> None:
+    async def write(self, chunk: Union[bytes, bytearray, memoryview]) -> None:
         """Write chunk into stream."""
 
     @abstractmethod
diff --git a/aiohttp/http_writer.py b/aiohttp/http_writer.py
index edd19ed65da..28b14f7a791 100644
--- a/aiohttp/http_writer.py
+++ b/aiohttp/http_writer.py
@@ -72,7 +72,7 @@ def enable_compression(
     ) -> None:
         self._compress = ZLibCompressor(encoding=encoding, strategy=strategy)
 
-    def _write(self, chunk: bytes) -> None:
+    def _write(self, chunk: Union[bytes, bytearray, memoryview]) -> None:
         size = len(chunk)
         self.buffer_size += size
         self.output_size += size
@@ -93,7 +93,11 @@ def _writelines(self, chunks: Iterable[bytes]) -> None:
         transport.write(b"".join(chunks))
 
     async def write(
-        self, chunk: bytes, *, drain: bool = True, LIMIT: int = 0x10000
+        self,
+        chunk: Union[bytes, bytearray, memoryview],
+        *,
+        drain: bool = True,
+        LIMIT: int = 0x10000,
     ) -> None:
         """Writes chunk of data to a stream.
 
diff --git a/aiohttp/web_response.py b/aiohttp/web_response.py
index cd2be24f1a3..e498a905caf 100644
--- a/aiohttp/web_response.py
+++ b/aiohttp/web_response.py
@@ -537,7 +537,7 @@ async def _write_headers(self) -> None:
         status_line = f"HTTP/{version[0]}.{version[1]} {self._status} {self._reason}"
         await writer.write_headers(status_line, self._headers)
 
-    async def write(self, data: bytes) -> None:
+    async def write(self, data: Union[bytes, bytearray, memoryview]) -> None:
         assert isinstance(
             data, (bytes, bytearray, memoryview)
         ), "data argument must be byte-ish (%r)" % type(data)