diff --git a/README.md b/README.md
index 4af1370403..c3585dbb68 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-> [Get started with Appwrite](https://apwr.dev/appcloud)
+> [Get started with Appwrite](https://apwr.dev/appcloud)
diff --git a/app/terminal.php b/app/terminal.php
deleted file mode 100644
index 1d2f2f0b24..0000000000
--- a/app/terminal.php
+++ /dev/null
@@ -1,194 +0,0 @@
-column('userId', Table::TYPE_STRING, 64);
-$runtimes->column('runtimeHost', Table::TYPE_STRING, 255);
-$runtimes->column('runtimePort', Table::TYPE_INT);
-$runtimes->create();
-
-// Store WebSocket client connections
-$clients = [];
-
-const MAX_PACKAGE_LENGTH = 64000;
-const MAX_RUNTIME_CONNECTIONS = 4096;
-
-$adapter = new Adapter\Swoole(port: System::getEnv('PORT', 80));
-$adapter
- ->setPackageMaxLength(MAX_PACKAGE_LENGTH)
- ->setWorkerNumber($workerNumber);
-
-$server = new Server($adapter);
-
-$server->onStart(function () use ($workerNumber) {
- Console::success('Terminal WebSocket Proxy started successfully');
- Console::info('Listening on port: ' . System::getEnv('PORT', 80));
- Console::info('Worker processes: ' . $workerNumber);
- Console::info('Max package length: ' . (MAX_PACKAGE_LENGTH / 1000) . 'KB');
- Console::info('Max runtime connections: ' . MAX_RUNTIME_CONNECTIONS);
-});
-
-$server->onOpen(function (int $connection, $request) use ($server, $runtimes, &$clients) {
- try {
- Console::info("New connection: {$connection}");
-
- // Extract JWT from request
- $token = $request->header['authorization'] ?? '';
- if (empty($token)) {
- throw new Exception('Missing authentication token', 401);
- }
-
- // Verify JWT and extract user information
- $jwt = str_replace('Bearer ', '', $token);
- $key = System::getEnv('_APP_OPENSSL_KEY_V1', '');
- $jwt = new JWT($key, 'HS256', 900, 0);
-
- try {
- $payload = $jwt->decode($token);
- $userId = $payload['userId'] ?? '';
- $sessionId = $payload['sessionId'] ?? '';
-
- if (empty($userId) || empty($sessionId)) {
- throw new Exception('Invalid JWT payload', 401);
- }
- } catch (\Exception $e) {
- throw new Exception('Invalid JWT token', 401);
- }
-
- // Get runtime details for user (this could come from your database/cache)
- $runtimeHost = "runtime-{$userId}.internal"; // Example hostname
- $runtimePort = 9000;
-
- // Create WebSocket connection to runtime
- go(function () use ($server, $connection, &$clients, $runtimeHost, $runtimePort, $userId) {
- try {
- // $wsClient = new Client("ws://{$runtimeHost}:{$runtimePort}/", [
- // 'timeout' => 0, // Disable timeout for long-running connections
- // 'filter' => ['text', 'binary', 'close'] // Only process these frame types
- // ]);
-
-
- $wsClient = new Client(
- "ws://appwrite-traefik/v1/realtime",
- [
- "headers" => [],
- "timeout" => 30,
- ]
- );
-
- // Store client connection
- $clients[$connection] = [
- 'client' => $wsClient,
- 'userId' => $userId
- ];
-
- // Forward messages from runtime back to client
- while (true) {
- try {
- $message = $wsClient->receive();
- if ($message === null) {
- // Connection closed normally
- break;
- }
- $server->send([$connection], $message);
-
- // Yield to allow other coroutines to run
- Swoole\Coroutine::yield();
-
- } catch (\WebSocket\ConnectionException $e) {
- Console::error("Runtime connection error for user {$userId}: " . $e->getMessage());
- break;
- }
- }
-
- // Cleanup on disconnect
- $wsClient->close();
- unset($clients[$connection]);
- $server->close($connection, CLOSE_NORMAL);
- } catch (\WebSocket\ConnectionException $e) {
- Console::error("Failed to connect to runtime for user {$userId}: " . $e->getMessage());
- $server->close($connection, CLOSE_SERVER_ERROR);
- return;
- }
- });
-
- // Send successful connection message
- $server->send([$connection], json_encode([
- 'type' => 'connected',
- 'data' => [
- 'userId' => $userId,
- 'timestamp' => time()
- ]
- ]));
-
- } catch (Throwable $th) {
- Console::error('Connection error: ' . $th->getMessage());
-
- $server->send([$connection], json_encode([
- 'type' => 'error',
- 'data' => [
- 'code' => $th->getCode(),
- 'message' => $th->getMessage()
- ]
- ]));
-
- $server->close($connection, CLOSE_POLICY_VIOLATION);
- }
-});
-
-$server->onMessage(function (int $connection, string $message) use ($server, &$clients) {
- try {
- if (!isset($clients[$connection])) {
- throw new Exception('Client not connected to runtime', 1008);
- }
-
- $wsClient = $clients[$connection]['client'];
- try {
- // Forward message to runtime
- $wsClient->send($message);
- } catch (\WebSocket\ConnectionException $e) {
- throw new Exception('Runtime connection lost: ' . $e->getMessage(), 1008);
- }
-
- } catch (Throwable $th) {
- $server->send([$connection], json_encode([
- 'type' => 'error',
- 'data' => [
- 'code' => $th->getCode(),
- 'message' => $th->getMessage()
- ]
- ]));
-
- if ($th->getCode() === 1008) {
- $server->close($connection, CLOSE_POLICY_VIOLATION);
- }
- }
-});
-
-$server->onClose(function (int $connection) use (&$clients) {
- if (isset($clients[$connection])) {
- $userId = $clients[$connection]['userId'];
- $clients[$connection]['client']->close();
- unset($clients[$connection]);
- Console::info("Closed connection for user {$userId}");
- }
-});
-
-$server->start();
\ No newline at end of file
diff --git a/src/Appwrite/Auth/Hash/Argon2.php b/src/Appwrite/Auth/Hash/Argon2.php
deleted file mode 100644
index c723b077b1..0000000000
--- a/src/Appwrite/Auth/Hash/Argon2.php
+++ /dev/null
@@ -1,47 +0,0 @@
-getOptions());
- }
-
- /**
- * @param string $password Input password to validate
- * @param string $hash Hash to verify password against
- *
- * @return boolean true if password matches hash
- */
- public function verify(string $password, string $hash): bool
- {
- return \password_verify($password, $hash);
- }
-
- /**
- * Get default options for specific hashing algo
- *
- * @return array options named array
- */
- public function getDefaultOptions(): array
- {
- return ['memory_cost' => 65536, 'time_cost' => 4, 'threads' => 3];
- }
-}
diff --git a/src/Appwrite/Auth/Hash/Bcrypt.php b/src/Appwrite/Auth/Hash/Bcrypt.php
deleted file mode 100644
index 8b6177f33a..0000000000
--- a/src/Appwrite/Auth/Hash/Bcrypt.php
+++ /dev/null
@@ -1,46 +0,0 @@
-getOptions());
- }
-
- /**
- * @param string $password Input password to validate
- * @param string $hash Hash to verify password against
- *
- * @return boolean true if password matches hash
- */
- public function verify(string $password, string $hash): bool
- {
- return \password_verify($password, $hash);
- }
-
- /**
- * Get default options for specific hashing algo
- *
- * @return array options named array
- */
- public function getDefaultOptions(): array
- {
- return [ 'cost' => 8 ];
- }
-}
diff --git a/src/Appwrite/Auth/Hash/Md5.php b/src/Appwrite/Auth/Hash/Md5.php
deleted file mode 100644
index 8ade3dd5e2..0000000000
--- a/src/Appwrite/Auth/Hash/Md5.php
+++ /dev/null
@@ -1,44 +0,0 @@
-hash($password) === $hash;
- }
-
- /**
- * Get default options for specific hashing algo
- *
- * @return array options named array
- */
- public function getDefaultOptions(): array
- {
- return [];
- }
-}
diff --git a/src/Appwrite/Auth/Hash/Phpass.php b/src/Appwrite/Auth/Hash/Phpass.php
deleted file mode 100644
index 988c38cc8d..0000000000
--- a/src/Appwrite/Auth/Hash/Phpass.php
+++ /dev/null
@@ -1,290 +0,0 @@
- in 2004-2017 and placed in
- * the public domain. Revised in subsequent years, still public domain.
- * There's absolutely no warranty.
- * The homepage URL for the source framework is: http://www.openwall.com/phpass/
- * Please be sure to update the Version line if you edit this file in any way.
- * It is suggested that you leave the main version number intact, but indicate
- * your project name (after the slash) and add your own revision information.
- * Please do not change the "private" password hashing method implemented in
- * here, thereby making your hashes incompatible. However, if you must, please
- * change the hash type identifier (the "$P$") to something different.
- * Obviously, since this code is in the public domain, the above are not
- * requirements (there can be none), but merely suggestions.
- *
- * @author Solar Designer