WebRTC 需要额外放通 UDP 端口段,只映射 8080 会连不上画面;不同浏览器需选对应镜像标签,不是单一镜像通用;多房间管理要另装 neko-rooms。

neko
m1k1oApache-2.0活跃维护在 Docker 里跑的自托管虚拟浏览器,通过 WebRTC 把画面实时推给多人,用来远程共享浏览和协作操作。
A self hosted virtual browser that runs in docker and uses WebRTC.
docker run -d --name neko -p 8080:8080 -p 52000-52100:52000-52100/udp ghcr.io/m1k1o/neko/firefox:latestREADME 未说明具体显存或 GPU 要求;镜像基于 Docker 运行,浏览器与桌面环境在容器内执行。
在 Docker 里跑的自托管虚拟浏览器,用 WebRTC 把桌面推给多人同时操作
在 Docker 里跑的自托管虚拟浏览器,通过 WebRTC 把画面实时推给多人,用来远程共享浏览和协作操作。
核心能力
- 用 WebRTC 串流容器内桌面,视频流畅并支持音频
- 支持多人同时接入并实时同步操作同一环境
- 提供 Firefox、Chromium、Tor、Edge 等多种浏览器镜像
- 可运行 VLC、XFCE/KDE 桌面等任意 Linux 程序
- 支持 RTMP 推流做直播或录制会话
容易踩的坑
- v3.2.0n.eko v3.2.0最新正式版2026-10-15 · 2026-10-15 22:08 UTC
New Features
- Replaced the Vue 2 web client with a React 19 and TypeScript client built with Vite. It keeps the familiar layout and workflows: login and invite links, OAuth, video controls, fullscreen and Picture-in-Picture, clipboard, control handoff, microphone, emotes, chat, file transfer, settings, broadcast, member actions, and all 15 translations and URL parameters (#713).
- Added a framework-free TypeScript client core,
client/core(@m1k1o/neko), with authentication, room state and events, a pluggable stream transport, WebRTC, typed input channels, and the keyboard/mouse/touch overlay. It can be used independently of the React GUI or embedded in another framework (#713). - The client detects silent websocket connections, reconnects with backoff, and requests a replacement media peer when WebRTC fails. The stream can continue through a signalling outage, and playback resumes after reconnection (#713).
- Added binary WebRTC data-channel input with websocket control-event fallback for transports without their own input channel. The client also handles IME and on-screen keyboard text as key events; Ctrl+V uses whichever clipboard was changed most recently (#713).
- Chat now renders CommonMark and GitHub Flavored Markdown, including tables, lists, and nested quotes. Links are limited to HTTP, HTTPS, and mailto; HTML and images are not rendered. The new renderer replaces the hand-written parser and keeps hostile or oversized messages from stalling the chat (#713).
Fixes
- Bound each OAuth authorization state to a short-lived, HttpOnly browser cookie, preventing a callback URL from creating a session in a browser that did not start the login. Concurrent login flows and explicit reverse-proxy redirects are supported (#708).
- Fixed session and member IDs containing URL path characters. The
multiuserandnoauthproviders now use sanitized IDs while preserving the display name; unsafe usernames submitted throughPOST /api/membersare rejected (#712). - Fixed a server panic when video pipelines were configured without explicit video IDs, and when no video stream was available (#711).
- Fixed slow WebRTC video timestamps under load, which could make browser buffers grow and audio/video drift. Generated pipelines also keep only the newest raw frame when an encoder falls behind, reducing input latency instead of accumulating stale frames (#712).
- Fixed the client leaving a user at the disconnected screen when the server rejects a banned session, and hiding the microphone control when the browser does not support media capture (#713).
- Internal websocket connections without an
Originheader are now accepted, allowing trusted server-side websocket dials (#710).
Changes
- The React client uses the v3 API only and works with
NEKO_LEGACY=false. It no longer supports legacy v2-only behavior, including IP bans; kick removes the session, and the user may log in again (#713). - Added
chat.max_length(default 512 characters;0disables the limit). Longer messages receive HTTP 400 through REST and are dropped over the websocket. Incoming websocket frames are limited to 1 MiB (#712). - Added the
neko_capture_streamsink_framesmetric to show when a video pipeline produces fewer frames than its configured frame rate (#712). - The default video pipeline no longer draws the mouse pointer into the stream; the clien
- v3.1.6n.eko v3.1.62026-09-30 · 2026-09-30 12:39 UTC
查看更新说明
New Features
- Added a capture subscription API to support more transports (#699).
- Added support for restricting OAuth login by user email, along with a new
emailOAuth scope. - Added OIDC-only member authentication (#686).
- Enabled automatic video quality (bandwidth estimation) for legacy (v2) clients (#693).
- Added a mouse pointer visibility toggle via
capture.video.show_pointer(#691). - Added multi-file selection and bulk deletion to file transfer (#687).
- Added file deletion support and a user delete config option to file transfer (#683).
- Added a
?scrollquery param to set scroll sensitivity on load (#681). - Added an arm64 Google Chrome image (#685).
- Added example Docker Compose configurations for simple browser, TURN server, GPU-accelerated browser, and OAuth setups (#684).
- Added an "open in app" plugin to open chat links in a shared neko instance (#682).
Fixes
- Fixed missing clipboard fallback button in Safari (#709).
- Fixed a XSS vulnerability by sanitizing attribute values and preventing Vue template compilation in rendered markdown.
- Fixed video pipeline configuration to accept a bare pipeline string (#701).
- Fixed a goroutine leak in the RTCP PLI ticker (#697).
- Fixed a memory leak by freeing
CStringallocations andGFilereferences in drag URI handling (#700). - Fixed a nil pointer panic when destroying the WebRTC peer during a profile change (#695).
- Fixed file transfer to allow non-admin uploads and downloads (#679).
- Fixed the TOR browser image to fetch it from the latest download source.
Misc
- Removed the default configuration file bundled with the image; defaults are now built into the server, preventing accidental overrides when providing a custom config.
- Updated persistent data policies for Firefox-based browsers.
- v3.1.5n.eko v3.1.52026-08-05 · 2026-08-05 15:27 UTC
查看更新说明
New Features
- Added H.265 (HEVC) video encoding support (#648).
- Added keyboard input via
XTestFakeDeviceKeyEventfor improved XInput device compatibility (#642). - Updated NVIDIA video encoding to use
nvautogpuh264encfor NVIDIA driver 590+ (#667). - Clipboard is now synced automatically when the browser window gains focus (#662).
- Display name input is now auto-focused when entering a room (#654).
Fixes
- Fixed incorrect
LegacyIsHostboolean logic (#675). - Fixed CORS handling: wildcard usage now emits a warning and CORS is disabled by default (#674).
- Fixed ungoogled-chromium Dockerfile to correctly fetch and extract the binary (#676).
- Reduced audio jitter buffer latency (#673).
- Fixed video pipelines being incorrectly overridden when using legacy settings (#666).
- Disabled
CommandLineFlagSecurityWarningsin browser policies for Chromium-based browsers (#668).
Misc
- v3.1.0n.eko v3.1.02026-04-02 · 2026-04-02 13:19 UTC
查看更新说明
What's Changed
Notable change: changed bookworm to trixie, chromium uses
no-sandboxflag and therefore no--cap-add=NET_ADMINis needed anymore.- Scroll to chat on mobile in https://github.com/m1k1o/neko/pull/496
- Show keyboard icon on touch screen devices in https://github.com/m1k1o/neko/pull/497
- Fix https legacy mode in https://github.com/m1k1o/neko/pull/507
- Adds an https condition to the healthcheck by @Garrulousbrevity in https://github.com/m1k1o/neko/pull/503
- Fix link to Examples in docs/v3 by @james-clark-au in https://github.com/m1k1o/neko/pull/514
- Fix docker volume mount error in build script. by @cxmcc in https://github.com/m1k1o/neko/pull/519
- Fix build script for Apple Silicon MacOS. by @cxmcc in https://github.com/m1k1o/neko/pull/520
- Fix mobile keyboard behavior in https://github.com/m1k1o/neko/pull/522
- Fix typo in quick-start guide for local network setup by @camerony in https://github.com/m1k1o/neko/pull/533
- Update VirtualGL to a more recent version in https://github.com/m1k1o/neko/pull/538
- Add clipboard command replacement. in https://github.com/m1k1o/neko/pull/539
- Request control prior interacting with the screen in https://github.com/m1k1o/neko/pull/540
- [id-id] Add Indonesian by @dedyf5 in https://github.com/m1k1o/neko/pull/552
- Update docker hub url by @complexsplit in https://github.com/m1k1o/neko/pull/557
- Upgrade go to 1.24 and all dependencies in https://github.com/m1k1o/neko/pull/564
- Add hostname to broadcast variables in https://github.com/m1k1o/neko/pull/576
- Support for entering text indirectly by @conwnet in https://github.com/m1k1o/neko/pull/577
- Fix WidevineCdm download in https://github.com/m1k1o/neko/pull/578
- Update bookworm images in https://github.com/m1k1o/neko/pull/580
- Add Polish (pl) translation by @Iskierek100 in https://github.com/m1k1o/neko/pull/582
- Include path prefix in legacy API calls (#615) by @ycsi in https://github.com/m1k1o/neko/pull/618
- Clarify authentication module implementation status by @4g0tt3nSou1 in https://github.com/m1k1o/neko/pull/617
- Add vlc-plugin-skins2 to VLC by @yesBad in https://github.com/m1k1o/neko/pull/623
- Add microphone passthrough button to controls toolbar by @h1n054ur in https://github.com/m1k1o/neko/pull/620
- Complete and standardize all locale translations by @darkmice in https://github.com/m1k1o/neko/pull/549
- Upgrade to debian trixie in https://github.com/m1k1o/neko/pull/581
Full Changelog: https://github.com/m1k1o/neko/compare/v3.0.0...v3.1.0
- v3.0.0n.eko v3.0.02025-04-01 · 2025-04-01 22:15 UTC
查看更新说明
Repository Changes
- The default registry is now
ghcr.io/m1k1o/nekoinstead ofdocker.io/m1k1o/neko. - Multiarch builds for
linux/amd64,linux/arm64, andlinux/arm/v7are now available instead ofarm-based images. - App folders from
.docker/have been moved toapps/. - Dev scripts from
.docker/are now available inclient/dev/andserver/dev/. - The
docs/folder is now available atwebpage/docs/with a completely new structure. - The base
Dockerfilehas been split intoclient/Dockerfile,server/Dockerfile, andruntime/Dockerfile. - The build process has been moved from
.docker/buildtobuild/, supporting more options. See--helpfor more information. - Brave, Vivaldi, Remmina, and KDE are now also available as ARM-based images.
- Waterfox is now available as a new browser.
Server Changes
- A REST API with OpenAPI 3.0 documentation is now available.
- Prometheus metrics are now available.
- The server name is now
github.com/m1k1o/neko/serverand can be used as a library. - Reusable components and types are available in the
server/pkg/folder, such asgst,xevent, andxorg. - A new authentication system with support for multiple authentication methods has been added.
- A new user management system with support for granular feature access control has been implemented.
- The structure for configuration options has been updated, with options now separated into modules.
- Compatibility with V2 configuration options is still available but deprecated.
- Capture: Added a screencast feature as a fallback for WebRTC.
- Capture: Added experimental webcam and microphone passthrough support.
- Capture: Added video simulcast support and a stream selector.
- Capture: When joining a pipeline, a keyframe is requested on demand and sent to the client.
- Desktop: Clipboard now uses
xclipinstead oflibclipboard, allowing multiple targets. - Desktop: Added drag-and-drop file upload support.
- Desktop: Added a file chooser dialog to prompt users for file uploads (experimental).
- Desktop: Added an unminimize feature to ensure that the window is not minimized when the user is trying to control it.
- Desktop: Created a custom input X11 driver to support touchscreen devices.
- Desktop: Added support for
xrandrto set the virtual monitor resolution to any resolution, not just predefined ones. - Desktop: Added a function to send events when the cursor changes, along with the cursor image.
- HTTP: Added batch mode to allow multiple requests in a single connection.
- HTTP: Added
pprofsupport to enable server profiling. - HTTP: Created a legacy driver to support the current neko client.
- HTTP: Refactored HTTP logging.
- Plugins: Added support for Go plugins to enable custom features to be added to the server.
- Plugins: Chat has been implemented as a plugin that can be disabled globally or per user (mute feature).
- Plugins: File upload has been implemented as a plugin that can be disabled globally or per user.
- Session: Added support to save session tokens as cookies to allow persistent login.
- Session: Added the ability to serialize and deserialize sessions to a file to survive restarts.
- Session: Added support for dynamic permissions with granular feature access control.
- WebRTC: Forwarded desktop cursor changes to the client.
- WebRTC: Forwarded cursor position to other clients that have enabled the inactive cursors option.
- WebRTC: Switched from LittleEndian to BigEndian for the video stream to improve browser compatibility.
- WebRTC: Created a legacy driver to support the current neko client.
- WebRTC: Added WebRTC ping to check if the connection is still alive and to determine latency.
- WebRTC: Added the ability to switch video pipelines on the fly.
- WebRTC: Implemented bandwidth estimation and adaptive quality (experi
- The default registry is now
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
n.eko
Welcome to Neko, a self-hosted virtual browser that runs in Docker and uses WebRTC technology. Neko is a powerful tool that allows you to run a fully-functional browser in a virtual environment, giving you the ability to access the internet securely and privately from anywhere. With Neko, you can browse the web, run applications, and perform other tasks just as you would on a regular browser, all within a secure and isolated environment. Whether you are a developer looking to test web applications, a privacy-conscious user seeking a secure browsing experience, or simply someone who wants to take advantage of the convenience and flexibility of a virtual browser, Neko is the perfect solution.
In addition to its security and privacy features, Neko offers the ability for multiple users to access it simultaneously. This makes it an ideal solution for teams or organizations that need to share access to a browser, as well as for individuals who want to use multiple devices to access the same virtual environment. With Neko, you can easily and securely share access to a browser with others, without having to worry about maintaining separate configurations or settings. Whether you need to collaborate on a project, access shared resources, or simply want to share access to a browser with friends or family, Neko makes it easy to do so.
Neko is also a great tool for hosting watch parties and interactive presentations. With its virtual browser capabilities, Neko allows you to host watch parties and presentations that are accessible from anywhere, without the need for in-person gatherings. This makes it easy to stay connected with friends and colleagues, even when you are unable to meet in person. With Neko, you can easily host a watch party or give an interactive presentation, whether it's for leisure or work. Simply invite your guests to join the virtual environment, and you can share the screen and interact with them in real-time.
About
This app uses WebRTC to stream a desktop inside of a docker container, original author made this because rabb.it went under and his internet could not handle streaming and discord kept crashing when his friend attempted to. He just wanted to watch anime with his friends ლ(ಠ益ಠლ) so he started digging throughout the internet and found a few kinda clones, but none of them had the virtual browser, then he found Turtus and he was able to figure out the rest.
Then I found this project and started to dig into it. I really liked the idea of having collaborative browser browsing together with multiple people, so I created a fork. Initially, I wanted to merge my changes to the upstream repository, but the original author did not have time for this project anymore and it got eventually archived.
Use-cases and comparison
Neko started as a virtual browser that is streamed using WebRTC to multiple users.
- It is not only limited to a browser; it can run anything that runs on linux (e.g. VLC). Browser only happens to be the most popular and widely used use-case.
- In fact, it is not limited to a single program either; you can install a full desktop environment (e.g. XFCE, KDE).
- Speaking of limits, it does not need to run in a container; you could install neko on your host, connect to your X server and control your whole VM.
- Theoretically it is not limited to only X server, anything that can be controlled and scraped periodically for images could be used instead.
- Like implementing RDP or VNC protocol, where neko would only act as WebRTC relay server. This is currently only future.
Primary use case is connecting with multiple people, leveraging real time synchronization and interactivity:
- Watch party - watching video content together with multiple people and reacting to it (chat, emotes) - open source alternative to giggl.app or hyperbeam.
- Interactive presentation - not only screen sharing, but others can control the screen.
- Collaborative tool - brainstorming ideas, cobrowsing, code debugging together.
- Support/Teaching - interactively guiding people in controlled environment.
- Embed anything - embed virtual browser in your web app - open source alternative to hyperbeam API.
- open any third-party website or application, synchronize audio and video flawlessly among multiple participants.
- request rooms using API with neko-rooms.
- Neko inside VR Chat - watch remote browser together with friends in VR.
Other use cases that benefit from single-user:
- Personal workspace - streaming containerized apps and desktops to end-users - similar to kasm.
- Persistent browser - own browser with persistent cookies available anywhere - similar to mightyapp.
- no state is left on the host browser after terminating the connection.
- sensitive data like cookies are not transferred - only video is shared.
- Throwaway browser - a better solution for planning secret parties and buying birthday gifts off the internet.
- use Tor Browser and VPN for additional anonymity.
- mitigates risk of OS fingerprinting and browser vulnerabilities by running in container.
- Session broadcasting - broadcast room content using RTMP (to e.g. twitch or youtube...).
- Session recording - broadcast RTMP can be saved to a file using e.g. nginx-rtmp
- have clean environment when recording tutorials.
- no need to hide bookmarks or use incognito mode.
- Jump host - access your internal applications securely without the need for VPN.
- Automated browser - you can install playwright or puppeteer and automate tasks while being able to actively intercept them.
Compared to clientless remote desktop gateway (e.g. Apache Guacamole or websockify with noVNC), installed with remote desktop server along with desired program (e.g. linuxserver/firefox) provides neko additionally:
- Smooth video because it uses WebRTC and not images sent over WebSockets.
- Built in audio support, what is not part of Apache Guacamole or noVNC.
- Multi-participant control, what is not natively supported by Apache Guacamole or noVNC.
Supported browsers
... see all available images
Other applications
... others in m1k1o/neko-apps
Why neko?
I like cats 🐱 (Neko is the Japanese word for cat), I'm a weeb/nerd.
But why the cat butt? Because cats are assholes, but you love them anyways.
Multiple rooms
For neko room management software, visit neko-rooms.
It also offers Zero-knowledge installation (with HTTPS).
Documentation
Full documentation is available at neko.m1k1o.net. Key sections include:
- Migration from V2
- Getting Started
- Installation
- Examples
- Configuration
- Frequently Asked Questions
- Troubleshooting
How to Contribute
Contributions are welcome! Check the Contributing Guide for details.
Support
If you find Neko useful, consider supporting the project via GitHub Sponsors.