Neko: Your Virtual Team Browser – Installation with Docker

Install Neko, a virtual browser for collaborative surfing, on your own server. This guide shows you the setup with Docker and Docker Compose.

Neko: Your Virtual Team Browser – Installation with Docker hero image

CAUTION

This blog post was originally written in German and translated for your convenience. While I’ve made every effort to ensure accuracy, translation errors may occur. I appreciate any corrections via comments or email.

Imagine being able to share a browser tab with friends or colleagues as if you were all sitting in front of the same screen – without laggy screen-sharing or privacy concerns with tools like TeamViewer & Co. This is exactly what Neko, a self-hosted virtual browser based on Docker and WebRTC, makes possible.

In this guide, I’ll show you how to install the current version of Neko on your own server. By the end, you’ll have your own private space for shared online activities, whether it’s for a watch party, a programming session, collaborative research, or opening suspicious links.

Key Takeaways

AspectDescription
What is Neko?A self-hosted, virtual browser running in a Docker container and streamed via WebRTC.
Main AdvantagesLow latency, collaborative browsing for multiple users, full data control, and no dependency on third-party tools.
TechnologyBased on Docker for easy installation and WebRTC for fast peer-to-peer video and audio transmission.
InstallationStraightforward via Docker Compose.
ConfigurationImportant settings like passwords and screen resolution are controlled via environment variables in the compose.yaml file.
Networking (Important!)For a reliable connection over the internet (especially behind NAT), configuring STUN/TURN servers is crucial.

Prerequisites

  • A Server: A VPS or a home server with a Linux OS installed (e.g., Ubuntu 24.04). The hardware requirements are not trivial: plan for at least 2-4 CPU cores and 3-4 GB of RAM for a smooth 720p session.
  • Docker and Docker Compose: Must be installed on the server.
  • A Domain: Recommended for secure access via HTTPS with a reverse proxy.
  • Basic Terminal Skills: You should be able to connect to your server via SSH and execute commands.

Step 1: Prepare the Server and Create a Directory

Connect to your server via SSH. First, let’s ensure Docker and Docker Compose are up to date.

# Update the system
sudo apt update && sudo apt upgrade -y

# Install Docker and Docker Compose (if not already done)
# Follow the official documentation on docs.docker.com

Now, let’s create a folder structure for our Neko project.

# Create and change into the directory
mkdir ~/neko
cd ~/neko

Step 2: Create the compose.yaml for Neko

Create a compose.yaml file. Here, we define the Neko service.

nano compose.yaml

Paste the following content. We’ll start with a configuration for Firefox.

services:
  neko:
    image: ghcr.io/m1k1o/neko/firefox:latest # You can also choose other browsers like 'chromium' or 'google-chrome' here
    container_name: neko
    restart: unless-stopped
    shm_size: "2gb" # Important for browser performance, especially for Chromium-based browsers
    cap_add:
      - SYS_ADMIN
    ports:
      - "8080:8080" # Host-Port:Container-Port for the Web UI
      - "52000-52100:52000-52100/udp" # Ports for WebRTC streaming
    environment:
      - NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD=your_secure_admin_password # Password for admins
      - NEKO_MEMBER_MULTIUSER_USER_PASSWORD=your_secure_user_password # Password for normal users
      - NEKO_DESKTOP_SCREEN=1920x1080@30 # Resolution and frame rate of the virtual desktop
      - NEKO_WEBRTC_EPR=52000-52100 # Port range for WebRTC (must match 'ports')
#     - NEKO_WEBRTC_ICESERVERS=[{"urls":["stun:stun.l.google.com:19302"]}] # Example for a public STUN server

Important Adjustments:

  • image: The images are now provided via the GitHub Container Registry (ghcr.io). Choose your preferred image. You can find a list in the documentation.
  • shm_size: 2gb is a good starting value. Browsers require a lot of shared memory, especially Chromium-based ones.
  • ports: Port 8080 is for the web interface. The UDP port range 52000-52100 is essential for the WebRTC connection. Make sure these ports are open in your firewall if you have one.
  • environment: Here we are using the new v3 configuration variables.
    • NEKO_MEMBER_MULTIUSER_..._PASSWORD: Replace the passwords with your own secure values.
    • NEKO_WEBRTC_ICESERVERS: This is crucial for Neko to work behind most routers (NAT). The example uses a public STUN server from Google in JSON format. This is not necessary for an external VPS.

Save the file and start the container:

sudo docker compose up -d

Step 3: First Access and Usage

Open your browser and enter your server’s IP address followed by port 8080: http://YOUR_SERVER_IP:8080.

You will be prompted for a password. Enter the NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD. You should now see the streamed Firefox browser in your browser!

  • Left Sidebar: Here you’ll find the chat and the user list.
  • Top Bar: As an admin, you can hand over control to other users here.
  • Bottom Bar: Here you can also take control yourself.

Invite a friend by giving them the link and the user password. You can now browse together, watch videos, or edit documents.

Conclusion

Neko is a fantastic tool for collaborative browsing and an excellent, privacy-friendly alternative to traditional screen sharing. The installation with Docker is straightforward, and with a few configurations, you have a stable and secure platform for yourself and your friends.

FAQs

What's the difference between the admin and user password?

Anyone can connect with the user password (`NEKO_MEMBER_MULTIUSER_USER_PASSWORD`) and view the session. The administrator, who logs in with the admin password (`NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD`), has more control.

Why is my audio or video not working? (Connection error)

This is usually a network issue. Make sure the UDP port range (e.g., 52000-52100) is defined in your `compose.yaml` and open in your firewall. A correctly configured STUN server (`NEKO_WEBRTC_ICESERVERS`) is also crucial. Check the logs (`sudo docker compose logs neko`) for any WebRTC-related error messages.

I only see a black screen with Chromium-based browsers.

Chromium, Google Chrome, etc., require more 'Shared Memory'. Ensure you have set `shm_size: '2gb'` in your `compose.yaml`. Some setups may also require the `cap_add: [SYS_ADMIN]` option.

Can I install browser extensions?

Not easily. Since the browser runs in a container, you would need to create a custom Docker image that already includes the desired extensions. This is an advanced use case.

Share this post:

This website uses cookies. These are necessary for the functionality of the website. You can find more information in the privacy policy