A network video management system for home and power users
  • C# 84.9%
  • Vue 8.6%
  • TypeScript 4.2%
  • Shell 1.2%
  • CSS 0.8%
  • Other 0.2%
Find a file
SytheZN 07ad4736a0 refactor: extract Shared.Api, split Shared.Models, and restructure streams
- add Shared.Api project and move DTOs into it as per-type files,
  renaming *ListItem types to *Dto
- reorganize Shared.Models: one type per file, entities under Entities/
- restructure stream model: StreamSpec hierarchy (Source/Derived),
  StreamProfile as persistent entity, MediaTimestamp on NAL units,
  StreamHierarchy in Server.Core
- update plugins, server services, and plugin host to match the new
  stream model
- web setup wizard auto-activates plugins with no schema and stamps
  active=true on save
- web CameraEditView renders metadata-kind streams with inherited
  recording status
- web PluginSettingsView gains a toggle switch for bool fields, with
  disabled state for boolean-enable-only
- apply sVMS / SimpleVMS branding across client titles, placeholders,
  certificate subjects, tunnel description, README, and CHANGELOG
- update tests, docs, and build script accordingly
2026-04-27 23:22:22 +02:00
.config feat: add client core library with API, tunnel, streaming, and UI layers 2026-04-05 22:11:34 +02:00
.github chore: include run number and hash metadata in build versions 2026-04-27 01:40:12 +02:00
docs refactor: extract Shared.Api, split Shared.Models, and restructure streams 2026-04-27 23:22:22 +02:00
native/ffmpeg fix: make FFmpeg build hermetic and drop unused VDPAU 2026-04-18 14:02:36 +02:00
scripts chore: include run number and hash metadata in build versions 2026-04-27 01:40:12 +02:00
src refactor: extract Shared.Api, split Shared.Models, and restructure streams 2026-04-27 23:22:22 +02:00
tests refactor: extract Shared.Api, split Shared.Models, and restructure streams 2026-04-27 23:22:22 +02:00
.editorconfig feat: add repo scaffolding, shared models, and plugin structure 2026-03-15 17:04:28 +02:00
.gitignore chore: add project scaffolding and refactor plugin paths 2026-04-03 16:24:20 +02:00
build-ct.sh feat: ship platform-native desktop installers 2026-04-18 23:14:42 +02:00
build.sh refactor: extract Shared.Api, split Shared.Models, and restructure streams 2026-04-27 23:22:22 +02:00
CHANGELOG.md refactor: extract Shared.Api, split Shared.Models, and restructure streams 2026-04-27 23:22:22 +02:00
CODE_OF_CONDUCT.md docs: revise architecture for derived streams and plugin-scoped config 2026-04-27 00:57:14 +02:00
CONTRIBUTING.md docs: revise architecture for derived streams and plugin-scoped config 2026-04-27 00:57:14 +02:00
coverage.runsettings feat: refactor decode pipeline into backend/renderer abstractions 2026-04-18 13:19:11 +02:00
Directory.Build.props chore: add CI/CD pipeline, Docker packaging, and release tooling 2026-04-06 16:29:25 +02:00
Directory.Packages.props feat: derived streams, plugin-scoped camera config, and IMuxStream rename 2026-04-27 01:40:12 +02:00
docker-compose.yml feat: add remote access configuration and configuration-required gate 2026-04-19 20:57:47 +02:00
LICENSE chore: add project scaffolding and refactor plugin paths 2026-04-03 16:24:20 +02:00
nuget.config feat: add FFmpeg video decoding pipeline and upgrade to Avalonia 12 2026-04-17 19:54:59 +02:00
README.md refactor: extract Shared.Api, split Shared.Models, and restructure streams 2026-04-27 23:22:22 +02:00
Solution.NoMobile.slnx refactor: extract Shared.Api, split Shared.Models, and restructure streams 2026-04-27 23:22:22 +02:00
Solution.slnx refactor: extract Shared.Api, split Shared.Models, and restructure streams 2026-04-27 23:22:22 +02:00

SimpleVMS

CI Release Pre-release Container License

A network video management system for home and power users. Supports up to 32 cameras on a single node with no transcoding, minimal resource usage, and first-class ONVIF support.

Note: This project is under active development. Not all documented features are implemented yet, and APIs may change without notice.

Web UI screenshot

Highlights

  • Zero transcoding -- video passes through as raw data units; the server never decodes or re-encodes
  • Single port access -- all native client communication (API, live video, playback, events) multiplexed over one TCP/TLS port
  • Plugin-first architecture -- capture, storage, formats, analytics, auth, and notifications are all behind extension point interfaces with no privileged internal code paths
  • Cross-platform clients -- native desktop (Windows, Linux, macOS), mobile (Android, iOS), and web UI
  • Mutual TLS -- clients authenticate with certificates signed by a server-generated root CA; revocation is immediate
  • Network-storage-safe -- sequential writes, no mmap, no flock; runs directly against NFS or SMB mounts
  • CPU-only by default -- runs efficiently on hardware without a GPU

Documentation

See the docs/ directory for architecture, deployment, API reference, protocol specification, and more.

Getting Started

Prerequisites

Build

./build.sh build     # build
./build.sh test      # run tests
./build.sh publish   # publish to out/

Run

./out/server/server
./out/server/server --data-path /mnt/nas/data

On first run, the web UI at http://localhost:8080 serves a setup wizard to configure the data provider and generate certificates. After setup, discover cameras or add them manually.

See Deployment for Docker Compose, systemd, and other installation methods.

Technology Stack

Component Technology
Server .NET 10, ASP.NET Core (Kestrel)
Transport TCP + TLS 1.3 (SslStream), mutual TLS
Serialization MessagePack (tunnel framing), JSON (API bodies)
Database Pluggable via IDataProvider (SQLite included)
Web UI Vue.js 3 + Vite
Native clients Avalonia UI + LibVLCSharp

Contributing

See CONTRIBUTING.md for guidelines on submitting changes, issues, etc.

License

This project is licensed under the MIT License.