Commit Graph

2198 Commits

Author SHA1 Message Date
Miroslav Šedivý 52e6c88d0e feat: update GPU browser examples section for clarity and organization 2026-09-27 17:08:45 +02:00
Miroslav Šedivý 21e7c8d8a4 feat: add Raspberry Pi GPU browser example and update documentation links 2026-09-27 17:08:07 +02:00
Miroslav Šedivý 5bade7c005 feat: update GPU browser examples and add OAuth configuration example 2026-09-27 17:04:51 +02:00
Miroslav Šedivý 6ff8959a7f feat: rename GPU-accelerated browser examples for Intel and Nvidia. 2026-09-27 17:00:24 +02:00
Miroslav Šedivý 159255015e Add example Docker Compose configurations for Neko
- Introduced a simple browser example using Firefox in Docker with optional persistent profile configuration.
- Added a TURN server example using Coturn alongside Neko for WebRTC support.
- Updated installation documentation to include new examples and improved organization.
- Enhanced Docusaurus configuration to support dynamic code imports for example files.
- Updated package dependencies to include remark-code-import for better documentation handling.
2026-09-27 16:56:58 +02:00
a f4d632df2c feat: create capture subscription api to support more transports (#699)
* feat: introduce encoded media subscriptions

* chore: preserve sample field comments

* perf: reduce encoded sample dispatch copies

* docs: define encoded sample buffer ownership

* fix: avoid pipeline recreation errors

Reuse pipelines started by a new subscription during resize.

* fix: synchronize stream bitrate state

Protect bitrate updates, reads, and resets with one mutex.

* simplify

* group stream sink fields

* fix: remove unnecessary blank line in removeSubscription method

* remove defensive check

* remove noop

---------

Co-authored-by: Miroslav Šedivý <sedivy.miro@gmail.com>
2026-09-24 10:58:39 +02:00
Miroslav Šedivý 6bc8350213 feat: add email scope to OAuth configuration and update documentation 2026-09-24 00:18:02 +02:00
Miroslav Šedivý 3f3ae10fb9 feat: implement user email restrictions for OAuth login 2026-09-24 00:17:58 +02:00
Miroslav Šedivý d991fec3c7 refactor(oauth): improve readability of newOAuthHandler and OAuth methods. 2026-09-24 00:17:34 +02:00
Miroslav Šedivý 11b6c8d8f6 oauth: separate provider & service. 2026-09-24 00:16:23 +02:00
Miroslav Šedivý 7573d43c95 consistency across member provider configs.
in the furure we should refactor all configs to be part of the providers with init and set functions.
2026-09-24 00:16:14 +02:00
@刘羡鱼 dae23a90b5 feat(auth): add OIDC-only member authentication (#686)
* feat(auth): add OIDC member authentication

* docs(auth): document OIDC member login

* fix(auth): address OAuth review feedback

* refactor(auth): move OAuth flow into member provider
2026-09-24 00:15:46 +02:00
Miroslav Šedivý ddf2787c5e fix(docker): update TOR browser download URI to the latest source. 2026-09-10 16:21:16 +02:00
Miroslav Šedivý ba098db663 fix(markdown): sanitize attribute values and prevent Vue template compilation for rendered markdown. 2026-09-10 15:47:05 +02:00
Abdellatif Anaflous 73b9d71b0d fix(capture): accept a bare pipeline string in video pipelines entries (#701)
* fix(capture): accept a bare pipeline string in video pipelines entries

NEKO_CAPTURE_VIDEO_PIPELINES expects every entry to be a full pipeline config
object, but the singular capture.video.pipeline option trains people to write
the whole pipeline as a plain string, so a dict like {"high": "ximagesrc ...
! appsink"} failed to unmarshal, the error got reduced to a warn and neko fell
back to the default vp8 pipeline silently, also overriding a directly set
video codec

the json string hook decodes the env value into a generic map, so the shorthand
is restored in the mapstructure chain: a string value for an entry now becomes
VideoConfig{GstPipeline: ...}, the same shape the single pipeline option
produces, object entries are untouched

the new config test drives the production env flow (Init + Set) and fails on
master with the same two warnings the reporter saw

Fixes #689

* feat(capture): add shorthand support for pipeline entries as plain strings.

---------

Co-authored-by: Miroslav Šedivý <sedivy.miro@gmail.com>
2026-09-10 13:45:30 +02:00
KЯØNE 371f5c2c7b fix: prevent goroutine leak by adding exit signal for RTCP PLI ticker (#697)
Co-authored-by: alvarorichard <alvarorichard@tuta.io>
2026-09-10 13:33:49 +02:00
Abdellatif Anaflous 347418c3e7 fix(drop): free CString allocations and GFile refs in drag uri handling (#700)
Co-authored-by: hktitof <hktitof@users.noreply.github.com>
2026-09-10 13:31:35 +02:00
ycsi b0f01cedea feat(capture): toggle mouse pointer via capture.video.show_pointer (#691)
* feat(capture): toggle mouse pointer via capture.video.show_pointer

- config: register capture.video.show_pointer config option
- config: default pointer to visible (ShowPointer: true) on the
hardcoded fallback pipeline, override applies only when the flag is
explicitly set, so per-pipeline YAML overrides stay untouched
- compose: document NEKO_CAPTURE_VIDEO_SHOW_POINTER example

* fix(capture): apply show_pointer to all pipelines

- capture: thread capture.video.show_pointer into broadcast and
  screencast gstreamer pipelines, previously hardcoded show-pointer=true
  and silently ignored the flag
- config: resolve capture.video.show_pointer once into
  Capture.VideoShowPointer so all pipeline builders share one value
- docs: document capture.video.show_pointer in configuration/capture.md,
  including its reach into broadcast and screencast, and regenerate
  help.txt/help.json
- compose: drop stray commented-out example, default compose file is
  not meant to list every option
2026-08-29 13:47:04 +02:00
KЯØNE a7a217e607 fix: nil pointer panic when destroying webrtc peer in profileChanged (#695)
* This is a no-op with the default configuration: when only a single video pipeline is configured, there is nothing for the stream selector to switch to. The change only has an effect when the operator configures multiple pipelines and enables the bandwidth estimator.

* fix(session): guard against nil WebRTC peer in profileChanged"

---------

Co-authored-by: alvarorichard <alvarorichard@tuta.io>
2026-08-29 13:46:35 +02:00
Vaibhav Srivastava 393177f574 docs: fix typo acheived -> achieved (#696)
Signed-off-by: Vaibhav Srivastava <vaibhavsri1712@gmail.com>
2026-08-29 13:46:13 +02:00
KЯØNE 4832522228 This is a no-op with the default configuration: when only a single video pipeline is configured, there is nothing for the stream selector to switch to. The change only has an effect when the operator configures multiple pipelines and enables the bandwidth estimator. (#693)
Co-authored-by: alvarorichard <alvarorichard@tuta.io>
2026-08-28 11:24:47 +02:00
Abdellatif Anaflous 44ccf64257 feat(filetransfer): implement multi-file selection and bulk deletion (#687)
* feat(filetransfer): implement multi-file selection and bulk deletion

* feat(filetransfer): enhance file selection with Ctrl/Meta key support.

* feat(locale): add bulk delete and selection messages in multiple languages

---------

Co-authored-by: Miroslav Šedivý <sedivy.miro@gmail.com>
2026-08-25 15:30:24 +02:00
Miroslav Šedivý baf21c1d97 feat: remove default configuration to prevend accidental override.
we used to have file neko.yaml with default configuration, but if we would add neko.yml the default configuration would still be read. so instead, default configuartion was moved to the sever itself and no file is distributed with it by defautl.
2026-08-15 15:36:06 +02:00
@刘羡鱼 6f31613d3b feat: add arm64 Google Chrome image (#685) 2026-08-11 18:01:58 +02:00
Paul Troeger cc014571cc feat: add openinapp plugin to open chat links in shared neko instance (#682)
* feat: add openinapp plugin to open chat links in shared neko instance

* lint.

* feat(openinapp): implement open link handler and route for opening links.

* feat(openinapp): switched to http backend and removed example in docker-compose.yaml

* lint.

---------

Co-authored-by: Miroslav Šedivý <sedivy.miro@gmail.com>
2026-08-09 22:53:39 +02:00
Miroslav Šedivý 365944d1ea feat(browsers): update persistent data policies for Firefox-based browsers. 2026-08-07 21:24:49 +02:00
Abdellatif Anaflous d6a4200b36 feat(filetransfer): allow file deletion and add user delete config option (#683)
* feat(filetransfer): allow file deletion and add user delete config option

* fix(client): make user_delete required boolean in payload

* lint.

* feat(filetransfer): add confirmation dialog for file deletion.

* feat(filetransfer): add delete file confirmation messages in multiple languages

* lint.

---------

Co-authored-by: Miroslav Šedivý <sedivy.miro@gmail.com>
2026-08-07 18:12:02 +02:00
Sadok Barbouche 30d8e1c595 feat: add ?scroll query param to set scroll sensitivity on load (#681)
Follows the same pattern as the existing ?volume param. Lets users
bake a preferred scroll sensitivity into the URL (useful for cast/embed
setups where the settings panel isn't reachable), and it's persisted
to localStorage afterwards so it sticks on future visits.

Fixes #607
2026-08-05 23:09:53 +02:00
Abdellatif Anaflous 613647c72c fix(filetransfer): allow non-admin file uploads and downloads (#679)
* fix(filetransfer): remove auth.AdminsOnly middleware wrapper from routes

* fix(filetransfer): add config option to allow non-admin users to download and upload files.

* fix(filetransfer): implement user permissions for file download and upload in client.

---------

Co-authored-by: Miroslav Šedivý <sedivy.miro@gmail.com>
2026-08-05 22:33:17 +02:00
Miroslav Šedivý e843961c37 chore: update release notes for v3.1.5, adding new features and fixes.. 2026-08-05 17:26:14 +02:00
Miroslav Šedivý 395ca1a6f6 fix: correct LegacyIsHost boolean logic (#675)
* fix: broken LegacyIsHost method.

* fix: improve LegacyIsHost logic for better access control.
v3.1.5
2026-08-05 16:28:51 +02:00
Miroslav Šedivý bce6c57b6a fix: update CORS handling to log warnings for wildcard usage and disable cors by default. (#674) 2026-08-05 16:28:42 +02:00
Miroslav Šedivý 165bf575c4 feat: add GitHub Actions workflow for building branch test images. 2026-08-04 16:15:06 +02:00
Miroslav Šedivý f0f375934a fix: update Dockerfile to correctly fetch and extract ungoogled-chromium. (#676) 2026-08-04 16:01:53 +02:00
Ruben Vereecken dafda5bd5c XInput keyboard: dispatch via XTestFakeDeviceKeyEvent (#642)
GDK3 (used by Firefox/Camoufox) selects XI2 for the seat keyboard at
startup and ignores core-protocol KeyPress events. XTestFakeKeyEvent
produces core events, so typed characters from the Neko viewer silently
never reach Firefox.

Fix: discover the "Virtual core XTEST keyboard" XInput1 device at
startup, cache it, and dispatch key events via XTestFakeDeviceKeyEvent
which goes through the XI path. Falls back to the old core XTest path
if the device isn't found.

Requires -lXi (libxi-dev at build, libxi6 at runtime).
2026-08-04 15:44:18 +02:00
Budovi dfc41f73d6 Add support for H265 encoded streams (#648)
* Add H265 support

Adds H265 as a selectable video codec with software (x265enc), VAAPI
(vah265enc), and NVENC (nvh265enc) pipeline paths in both the legacy
pipeline builder and the RTPCodec definition.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Replace legacy vaapih264enc with vah264enc

The gstreamer-vaapi plugin suite (vaapih264enc) is superseded by the va
plugin (vah264enc) in gst-plugins-bad. Switch to it and update the
parameters accordingly: CBR instead of VBR for lower-latency streaming,
key-int-max instead of keyframe-period, and target-usage instead of
quality-level.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Unify keyframe interval to 60 frames for NVENC H264/H265 encoder paths

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-04 15:16:33 +02:00
Miroslav Šedivý 827944349b fix: reduce audio jitter buffer latency (#673)
* fix: reduce audio jitter buffer latency

- Release listenersMu before dispatching samples to listeners
- Buffer Track.sample channel (size 2) with non-blocking WriteSample
- Buffer pipeline.sample channel (size 4) to unblock GStreamer thread
- Add leaky=downstream max-size-buffers=5 to audio queue to prevent burst accumulation
- Set sync=false on appsink to deliver buffers immediately without clock wait

These changes break the backpressure chain that caused the GStreamer
streaming thread to stall. When the Go scheduler has a hiccup, buffered
frames were delivered in a burst, causing the browser audio jitter buffer
to grow to ~10 seconds over time.

Fixes: #598

* fix: log message when dropping samples due to full track channel
2026-08-04 14:59:11 +02:00
Miroslav Šedivý db8452416b refactor: replace custom array search utility with slices.Contains for improved readability and performance. 2026-08-04 12:49:38 +02:00
cdxii d2ec13a236 Install Widevine for Arm64 (#660)
* chromium arm64 widevine

* brave arm64 widevine

* firefox arm64 widevine

* vivaldi arm64 widevine

* Update browser.md for arm64 drm

* add link to instruction

* add widevine-installer

* widevine base image, tools in utils, move files for chromiums

* include installer in runtime

* add runtime/widevine-installer in repo-structure
2026-08-03 13:55:42 +02:00
Miroslav Šedivý 4764dcbb05 docs: add warning about using localhost for NEKO_WEBRTC_NAT1TO1 and common WebRTC connection errors. (#672) 2026-07-31 15:01:03 +02:00
Miroslav Šedivý c804b1ac24 docs: add single-user setup section to UI customization (#671) 2026-07-31 14:28:41 +02:00
Miroslav Šedivý 81deea72fb docs: add warning about persistent profile volume and session management for Firefox (#670) 2026-07-31 14:28:30 +02:00
Miroslav Šedivý e6239d6a51 feat: update video encoding to use nvautogpuh264enc for NVIDIA driver 590+ support. (#667) 2026-07-31 14:28:19 +02:00
Miroslav Šedivý baf6eee8a9 fix: prevent overriding video pipelines with legacy settings. (#666) 2026-07-31 14:28:06 +02:00
Miroslav Šedivý 3bb1959a55 feat: sync clipboard on window focus. (#662) 2026-07-31 14:27:48 +02:00
Miroslav Šedivý 97b0513e89 docs: enhance build instructions with custom Docker image guidance (#665) 2026-07-31 11:34:48 +02:00
Miroslav Šedivý 2f9c20bb97 docs: add Brave singleton lock fix to troubleshooting (closes #609) (#663) 2026-07-31 11:34:20 +02:00
Miroslav Šedivý b1a4055228 docs: add Safari not-available section with Apple TOS note (closes #634) (#664) 2026-07-31 11:34:02 +02:00
Miroslav Šedivý a257b75304 fix: disable CommandLineFlagSecurityWarnings in policies for multiple browsers. (#668) 2026-07-31 11:14:53 +02:00
Miroslav Šedivý 98e5d0a685 docs: update developer guide with build instructions and add local development setup. (#661) 2026-07-30 17:08:21 +02:00