diff --git a/relay/client/dialer/ws/client_conn.go b/relay/client/dialer/ws/client_conn.go
deleted file mode 100644
index ee3283ecd..000000000
--- a/relay/client/dialer/ws/client_conn.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package ws
-
-import (
-	"fmt"
-	"net"
-	"sync"
-	"time"
-
-	"github.com/gorilla/websocket"
-)
-
-type Conn struct {
-	*websocket.Conn
-	mu sync.Mutex
-}
-
-func NewConn(wsConn *websocket.Conn) net.Conn {
-	return &Conn{
-		Conn: wsConn,
-	}
-}
-
-func (c *Conn) Read(b []byte) (n int, err error) {
-	t, r, err := c.NextReader()
-	if err != nil {
-		return 0, err
-	}
-
-	if t != websocket.BinaryMessage {
-		return 0, fmt.Errorf("unexpected message type")
-	}
-
-	return r.Read(b)
-}
-
-func (c *Conn) Write(b []byte) (int, error) {
-	c.mu.Lock()
-	err := c.WriteMessage(websocket.BinaryMessage, b)
-	c.mu.Unlock()
-	return len(b), err
-}
-
-func (c *Conn) SetDeadline(t time.Time) error {
-	errR := c.SetReadDeadline(t)
-	errW := c.SetWriteDeadline(t)
-
-	if errR != nil {
-		return errR
-	}
-
-	if errW != nil {
-		return errW
-	}
-	return nil
-}
-
-func (c *Conn) Close() error {
-	return c.Conn.Close()
-}
diff --git a/relay/client/dialer/ws/ws.go b/relay/client/dialer/ws/ws.go
deleted file mode 100644
index b526bd315..000000000
--- a/relay/client/dialer/ws/ws.go
+++ /dev/null
@@ -1,22 +0,0 @@
-package ws
-
-import (
-	"fmt"
-	"net"
-	"time"
-
-	"github.com/gorilla/websocket"
-)
-
-func Dial(address string) (net.Conn, error) {
-	addr := fmt.Sprintf("ws://" + address)
-	wsDialer := websocket.Dialer{
-		HandshakeTimeout: 3 * time.Second,
-	}
-	wsConn, _, err := wsDialer.Dial(addr, nil)
-	if err != nil {
-		return nil, err
-	}
-	conn := NewConn(wsConn)
-	return conn, nil
-}
diff --git a/relay/server/listener/ws/conn.go b/relay/server/listener/ws/conn.go
deleted file mode 100644
index 8734293ac..000000000
--- a/relay/server/listener/ws/conn.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package ws
-
-import (
-	"errors"
-	"fmt"
-	"io"
-	"sync"
-	"time"
-
-	"github.com/gorilla/websocket"
-	log "github.com/sirupsen/logrus"
-)
-
-type Conn struct {
-	*websocket.Conn
-
-	mu sync.Mutex
-}
-
-func NewConn(wsConn *websocket.Conn) *Conn {
-	return &Conn{
-		Conn: wsConn,
-	}
-}
-
-func (c *Conn) Read(b []byte) (n int, err error) {
-	t, r, err := c.NextReader()
-	if err != nil {
-		return 0, ioErrHandling(err)
-	}
-
-	if t != websocket.BinaryMessage {
-		log.Errorf("unexpected message type: %d", t)
-		return 0, fmt.Errorf("unexpected message type")
-	}
-
-	n, err = r.Read(b)
-	if err != nil {
-		return 0, ioErrHandling(err)
-	}
-	return n, err
-}
-
-func (c *Conn) Write(b []byte) (int, error) {
-	c.mu.Lock()
-	err := c.WriteMessage(websocket.BinaryMessage, b)
-	c.mu.Unlock()
-	return len(b), err
-}
-
-func (c *Conn) SetDeadline(t time.Time) error {
-	errR := c.SetReadDeadline(t)
-	errW := c.SetWriteDeadline(t)
-
-	if errR != nil {
-		return errR
-	}
-
-	if errW != nil {
-		return errW
-	}
-	return nil
-}
-
-func ioErrHandling(err error) error {
-	var wErr *websocket.CloseError
-	if !errors.As(err, &wErr) {
-		return err
-	}
-	if wErr.Code == websocket.CloseNormalClosure {
-		return io.EOF
-	}
-	return err
-}
diff --git a/relay/server/listener/ws/listener.go b/relay/server/listener/ws/listener.go
deleted file mode 100644
index 632de153f..000000000
--- a/relay/server/listener/ws/listener.go
+++ /dev/null
@@ -1,92 +0,0 @@
-package ws
-
-import (
-	"context"
-	"errors"
-	"fmt"
-	"net"
-	"net/http"
-	"sync"
-	"time"
-
-	"github.com/gorilla/websocket"
-	log "github.com/sirupsen/logrus"
-
-	"github.com/netbirdio/netbird/relay/server/listener"
-)
-
-var (
-	upgrader = websocket.Upgrader{} // use default options
-)
-
-type Listener struct {
-	address string
-
-	wg       sync.WaitGroup
-	server   *http.Server
-	acceptFn func(conn net.Conn)
-}
-
-func NewListener(address string) listener.Listener {
-	return &Listener{
-		address: address,
-	}
-}
-
-func (l *Listener) Listen(acceptFn func(conn net.Conn)) error {
-	if l.server != nil {
-		return errors.New("server is already running")
-	}
-
-	l.acceptFn = acceptFn
-	mux := http.NewServeMux()
-	mux.HandleFunc("/", l.onAccept)
-
-	l.server = &http.Server{
-		Addr:    l.address,
-		Handler: mux,
-	}
-
-	log.Infof("WS server is listening on address: %s", l.address)
-	err := l.server.ListenAndServe()
-	if errors.Is(err, http.ErrServerClosed) {
-		return nil
-	}
-	return err
-}
-
-func (l *Listener) Close() error {
-	if l.server == nil {
-		return nil
-	}
-
-	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
-	defer cancel()
-
-	log.Debugf("closing WS server")
-	if err := l.server.Shutdown(ctx); err != nil {
-		return fmt.Errorf("server shutdown failed: %v", err)
-	}
-
-	l.wg.Wait()
-	return nil
-}
-
-func (l *Listener) WaitForExitAcceptedConns() {
-	l.wg.Wait()
-}
-
-func (l *Listener) onAccept(writer http.ResponseWriter, request *http.Request) {
-	l.wg.Add(1)
-	defer l.wg.Done()
-
-	wsConn, err := upgrader.Upgrade(writer, request, nil)
-	if err != nil {
-		log.Errorf("failed to upgrade connection: %s", err)
-		return
-	}
-	conn := NewConn(wsConn)
-	log.Infof("new connection from: %s", conn.RemoteAddr())
-	l.acceptFn(conn)
-	return
-}