commit 7fc703b7a01c038cfff69c88fea5d681b3011ea1
Author: juancarmore <juancar_more2@hotmail.com>
Date: Wed Nov 5 17:45:06 2025 +0100
backend: add E2EE configuration schema to MeetRoom
commit 3ad51133aaa696c36b9fc5dd1c271b5e09077e0b
Author: juancarmore <juancar_more2@hotmail.com>
Date: Wed Nov 5 16:15:13 2025 +0100
backend: enhance MongoDB configuration logging and validation
commit b5b52e97dd4a0e16dbb5cda53dc406aa5c739380
Author: cruizba <carlos.ruizbal@gmail.com>
Date: Wed Nov 5 15:50:05 2025 +0100
feat: add MongoDB configuration options for optional mongodb and configurable uri
commit c6f0c35435a18365c99f44c692d5d2f2a9bd53ab
Author: juancarmore <juancar_more2@hotmail.com>
Date: Wed Nov 5 13:59:10 2025 +0100
ci: update backend integration test scripts and workflow
commit 19a1348f2f695a27694f1c5e80de696d039b6f4e
Author: juancarmore <juancar_more2@hotmail.com>
Date: Fri Oct 31 12:05:38 2025 +0100
frontend: replace AuthService with ApiKeyService for API key management
commit 9465e40bc1babfae1203dc317907dc86dc57cd0c
Author: juancarmore <juancar_more2@hotmail.com>
Date: Fri Oct 31 12:05:07 2025 +0100
test: refactor auth and api key tests structure to improve consistency
commit b154aa8186eaaa51e027fc1459b9175f87affbd8
Author: juancarmore <juancar_more2@hotmail.com>
Date: Fri Oct 31 12:02:42 2025 +0100
openapi: move API key management endpoints to a dedicated file and update references
commit 6987d2b587d1cd6ba85f2ea38c408957e5f0de04
Author: juancarmore <juancar_more2@hotmail.com>
Date: Fri Oct 31 12:01:00 2025 +0100
backend: move API key management endpoints to its own controller
commit 8c9452bb74887265920942e3253921a43504790b
Author: juancarmore <juancar_more2@hotmail.com>
Date: Fri Oct 31 12:00:00 2025 +0100
backend: comment out MigrationService import and related export to prevent initialization error
commit daa923fa9f6ee68cb4f4ebfa61ce16026fbdc374
Author: juancarmore <juancar_more2@hotmail.com>
Date: Thu Oct 30 23:09:18 2025 +0100
backend: implement migration service
commit 058593fb9488ae00077e28a591c7ea2a8b8d96cc
Author: juancarmore <juancar_more2@hotmail.com>
Date: Thu Oct 30 23:08:05 2025 +0100
backend: add migration repository and model to handle database migrations
commit 4cbc9a9f48ede801333bfe37f0dba2993a79c29c
Author: juancarmore <juancar_more2@hotmail.com>
Date: Thu Oct 30 19:41:01 2025 +0100
backend: refactor update repository methods to throw errors instead of returning null for not found cases
commit 03496a733b9fa39776eb4bf70057459c7e567954
Author: juancarmore <juancar_more2@hotmail.com>
Date: Thu Oct 30 17:55:42 2025 +0100
openapi: update roomName parameter description and reference in recordings path
commit 74293e04967fb1416b69324294ae864df9173f91
Author: juancarmore <juancar_more2@hotmail.com>
Date: Thu Oct 30 17:55:04 2025 +0100
openapi: add analytics endpoint and schema for usage metrics
commit 8de171b0b340ffa787ef136a3e516f03f96b1938
Author: juancarmore <juancar_more2@hotmail.com>
Date: Thu Oct 30 17:40:24 2025 +0100
test: add analytics API and corresponding security tests
commit aaa15acdda5f09c6c0e45d24385cc9ec5daca55b
Author: juancarmore <juancar_more2@hotmail.com>
Date: Thu Oct 30 14:04:58 2025 +0100
frontend: implement analytics service and update overview component to use new metrics
commit 13bad60bcc02e9d7aa46fc9bb96f7cc85ec818cc
Author: juancarmore <juancar_more2@hotmail.com>
Date: Thu Oct 30 14:04:23 2025 +0100
backend: add analytics endpoint for usage metrics
commit ee820bba27f421bb2f9d34130bc00b41aefad217
Author: juancarmore <juancar_more2@hotmail.com>
Date: Thu Oct 30 13:18:29 2025 +0100
backend: replace z.enum with z.nativeEnum for improved type safety in validation schemas
commit 1d394d059e6beef47faddd2205482974ecc1860c
Author: juancarmore <juancar_more2@hotmail.com>
Date: Thu Oct 30 11:50:03 2025 +0100
backend: update MongoDB configuration to use new environment variables and improve connection string handling
commit 56c0c3a1bd19bbd2a5e0fdbe582fdf288c6f33d1
Author: juancarmore <juancar_more2@hotmail.com>
Date: Wed Oct 29 18:23:06 2025 +0100
frontend: update room ID reference in recording lists component
commit 189d1b26ad18d29cf9f7c6f85c2524ed5ad33f72
Author: juancarmore <juancar_more2@hotmail.com>
Date: Wed Oct 29 18:12:07 2025 +0100
tests: remove unused MeetStorageService references and related tests
commit fe3fcdba35afcf186b0ff05e9ec3b2ae05da1005
Author: juancarmore <juancar_more2@hotmail.com>
Date: Wed Oct 29 17:31:18 2025 +0100
backend: rename MeetStorageService to LegacyStorageService and remove all unused methods
commit fa782f234d561b5f7f6d4a50e54e3278b9beaec4
Author: juancarmore <juancar_more2@hotmail.com>
Date: Wed Oct 29 15:56:31 2025 +0100
backend: replace MeetStorageService with RecordingRepository and BlobStorageService for recording management
commit 51dea37c07e477bc7e447b2e57acd21b44deb5e4
Author: juancarmore <juancar_more2@hotmail.com>
Date: Wed Oct 29 15:53:48 2025 +0100
frontend: add roomName filter to recording service and recordings component
commit fa283e7c51b3382300cb25fa5f8a9e144637c757
Author: juancarmore <juancar_more2@hotmail.com>
Date: Wed Oct 29 15:53:04 2025 +0100
backend: add roomName filter in get recordings endpoint
commit d1dfb24cfda2e22d739f506bf0213275cd4b2bdd
Author: juancarmore <juancar_more2@hotmail.com>
Date: Wed Oct 29 15:51:00 2025 +0100
backend: implement BlobStorageService for managing recording media files in object storage
commit ce293cf37545fa3aaad638eb25dfd9ae5fc8dd72
Author: juancarmore <juancar_more2@hotmail.com>
Date: Wed Oct 29 15:48:04 2025 +0100
backend: add unique index for efficient querying on MeetApiKey and MeetGlobalConfig schemas
commit 3d999b4249e15f63ef086d2ab38485e0fbadb27e
Author: juancarmore <juancar_more2@hotmail.com>
Date: Wed Oct 29 15:47:44 2025 +0100
backend: add RecordingRepository and schema for managing recording entities
commit 757636c55254e76643b99a66bc583ab834c5eadd
Author: juancarmore <juancar_more2@hotmail.com>
Date: Tue Oct 28 13:05:12 2025 +0100
tests: refactor list rooms with pagination test to create rooms sequentially and ensure correct ordering
commit cda25543e30883431962bef8617cb245eade8a1d
Author: juancarmore <juancar_more2@hotmail.com>
Date: Tue Oct 28 13:04:32 2025 +0100
tests: centralize method restoreDefaultGlobalConfig and refactor code
commit 726d128d7471ad4abbaabda086304f22705ddf82
Author: juancarmore <juancar_more2@hotmail.com>
Date: Tue Oct 28 13:01:17 2025 +0100
backend: enhance GlobalConfig schema with authentication, security, webhook, and room configuration sub-schemas
commit fd49fbb03cd8d70f29cc5781a0e0b9b5244f4747
Author: juancarmore <juancar_more2@hotmail.com>
Date: Tue Oct 28 11:02:34 2025 +0100
backend: add StorageInitService for managing storage initialization and refactor dependency injection
commit 783f480337e61bfc19ad6d19f3b84c523577c309
Author: juancarmore <juancar_more2@hotmail.com>
Date: Tue Oct 28 11:01:58 2025 +0100
backend: refactor middleware and services to use GlobalConfigService for configuration management
commit d28247647c2e0712c0575faa8a85a8c67a75f343
Author: juancarmore <juancar_more2@hotmail.com>
Date: Mon Oct 27 22:23:40 2025 +0100
backend: move authenticateUser method to UserService and rename AuthService to ApiKeyService
commit c8f98391a178da4f9525069203fe4e3d2aecfaaa
Author: juancarmore <juancar_more2@hotmail.com>
Date: Mon Oct 27 22:21:37 2025 +0100
backend: implement GlobalConfigService for managing global configuration and update related controllers
commit 08421feffc8cd4cadb8f2df3b4c41169d4776572
Author: juancarmore <juancar_more2@hotmail.com>
Date: Mon Oct 27 22:20:23 2025 +0100
backend: add GlobalConfigRepository and schema for managing global configuration
commit e1e1b0dda511fb5fbdd8fc88f8a691bc974866c9
Author: juancarmore <juancar_more2@hotmail.com>
Date: Mon Oct 27 13:53:52 2025 +0100
backend: refactor AuthService and MeetStorageService to use ApiKeyRepository for API key management
commit c46fd1669d0923a63195ef95ddf3105584fc18fc
Author: juancarmore <juancar_more2@hotmail.com>
Date: Mon Oct 27 13:52:56 2025 +0100
backend: add ApiKeyRepository and schema for managing API keys
commit c1220eb89b98e842009fd16d95ddd87fd87ae02c
Author: juancarmore <juancar_more2@hotmail.com>
Date: Mon Oct 27 13:52:27 2025 +0100
backend: rename UserDocument and UserModel to MeetUserDocument and MeetUserModel for consistency
commit 331e4ca264086e4fd0e947f2c8adc04dbfe7f831
Author: juancarmore <juancar_more2@hotmail.com>
Date: Mon Oct 27 12:27:43 2025 +0100
backend: replace MeetStorageService usage with UserRepository in UserService
commit ec074307c3cd8c30f4babef5194fc4ebbe7ea7c0
Author: juancarmore <juancar_more2@hotmail.com>
Date: Mon Oct 27 12:05:15 2025 +0100
test: update startTestServer calls to await for asynchronous initialization
commit 3bba2e2822824a1855e6691c0c3b456c9ac5dd3a
Author: juancarmore <juancar_more2@hotmail.com>
Date: Mon Oct 27 12:04:39 2025 +0100
test: initialize eager services in startTestServer and update calls to await for asynchronous initialization
commit e52f7353515f95835c9d15dba41ff33a2e26d367
Author: juancarmore <juancar_more2@hotmail.com>
Date: Fri Oct 24 19:40:04 2025 +0200
backend: add User schema and repository for user management
commit 10c548afa9e45dd72d0fb86c9dab0a601c08e652
Author: juancarmore <juancar_more2@hotmail.com>
Date: Fri Oct 24 19:39:38 2025 +0200
backend: add findAll method to BaseRepository and findExpiredRooms method to RoomRepository
commit cbe467e0e5475311f8aea4b4ff99a481007537c0
Author: juancarmore <juancar_more2@hotmail.com>
Date: Fri Oct 24 19:39:09 2025 +0200
backend: optimize MeetRoom schema by adding indexes for efficient querying
commit fb95ef3248e64721e107c3c019e6a61a210ad6ce
Author: juancarmore <juancar_more2@hotmail.com>
Date: Fri Oct 24 18:07:38 2025 +0200
backend: enhance cursor-based pagination to handle null/undefined values in MongoDB queries
commit bf709bb8e4a301a5738e44c7d7fb2f219846c3ce
Author: juancarmore <juancar_more2@hotmail.com>
Date: Fri Oct 24 18:07:25 2025 +0200
ci: update integration test paths to reflect new directory structure
commit 67ce9da156dccded23eb2b9b9a8a34c835d7f27b
Author: juancarmore <juancar_more2@hotmail.com>
Date: Fri Oct 24 15:09:21 2025 +0200
backend: replace storage service with RoomRepository for room management
commit 25dcd057d6597910fa4992dc45934e85edbd6a3e
Author: juancarmore <juancar_more2@hotmail.com>
Date: Fri Oct 24 15:07:55 2025 +0200
backend: implement RoomRepository to manage MeetRoom objects in MongoDB
commit 42e6036741871b964d9d7a644210eedeaf1ad543
Author: juancarmore <juancar_more2@hotmail.com>
Date: Fri Oct 24 15:05:31 2025 +0200
backend: add mongoose dependecy and create MongoDBService
OpenVidu Meet
OpenVidu Meet is a fully featured video conferencing application built with Angular, Node.js, and LiveKit. This repository provides both a Community Edition (CE) and a Professional Edition (PRO) with advanced features.
Table of Contents
- Architecture Overview
- Prerequisites
- Getting Started
- Development
- Building
- Testing
- Documentation
- Production Deployment
- Project Structure
- Using the meet.sh Script
Architecture Overview
The OpenVidu Meet application is a monorepo managed with pnpm workspaces and consists of multiple interconnected packages:
Core Components
-
Frontend (
frontend/): Angular 20 application providing the user interface- shared-meet-components: Reusable Angular library with shared components for administration and preferences
- Integrates openvidu-components-angular for core video conferencing functionality
-
Backend (
backend/): Node.js/TypeScript REST API server- Manages rooms, participants, recordings, and authentication
- Serves the compiled frontend in production
-
Typings (
typings/): Shared TypeScript type definitions used across frontend and backend -
Webcomponent (
frontend/webcomponent/): Standalone web component version of OpenVidu Meet -
TestApp (
testapp/): Testing application for development and validation
Prerequisites
Before starting, ensure you have the following installed:
- Node.js: Version 22 or higher
- pnpm: Package manager (will be installed automatically by meet.sh if missing)
- LiveKit: For local testing (optional)
curl -sSL https://get.livekit.io/cli | bash
Getting Started
Set up your local development environment by cloning the necessary repositories into a shared folder. This ensures the openvidu-components-angular library is available for development and linking.
your-dev-folder/
├── openvidu/
│ └── openvidu-components-angular/ # Core Angular components library
└── openvidu-meet/ # This repository
Note: Clone the
openvidurepository alongsideopenvidu-meetto enable proper linking. If you haven't done so yet:git clone https://github.com/OpenVidu/openvidu.git
Clone and Setup
# Clone the repository
git clone https://github.com/OpenVidu/openvidu-meet.git
cd openvidu-meet
# Start development mode with hot-reload
./meet.sh dev
Then, the application will be available at http://localhost:6080.
Note: Livereload is also available at http://localhost:5080.
Development
Development Mode
The recommended way to develop is using the integrated development mode that watches all components:
./meet.sh dev
This command starts concurrent watchers for:
- openvidu-components-angular: Core Angular components library
- Typings: Shared type definitions with automatic sync
- Backend: Node.js server with nodemon auto-restart
- Frontend: Angular application with live reload
- REST API Docs: OpenAPI documentation generation
Note
The backend uses
backend/.env.developmentfor environment variables during development. Configure your LiveKit credentials there:LIVEKIT_URL=ws://localhost:7880 LIVEKIT_API_KEY=your-api-key LIVEKIT_API_SECRET=your-api-secret
Manual Development Setup
If you prefer more granular control:
# Install dependencies
./meet.sh install
# Build shared typings (required first)
./meet.sh build-typings
# In separate terminals:
# Terminal 1 - Backend
cd backend
pnpm run start:dev
# Terminal 2 - Frontend
cd frontend
pnpm run dev
# Terminal 3 - Typings watcher (optional)
cd typings
pnpm run dev
Important
Shared Typings: The
typings/package contains types shared between frontend and backend. When you modify these types in development mode, they are automatically synced to both projects. Always build typings before building other components.
Building
Build all components in the correct order:
# Build everything (typings → frontend → backend → webcomponent)
./meet.sh build
# Or build individual components:
./meet.sh build-typings # Build shared types
./meet.sh build-webcomponent # Build web component only
./meet.sh build-testapp # Build test application
CI/CD Optimized Builds
The meet.sh script supports flags to optimize CI/CD pipelines:
# Install dependencies once
./meet.sh install
# Build typings once
./meet.sh build-typings
# Build webcomponent (skip already completed steps)
./meet.sh build-webcomponent --skip-install --skip-typings
# Run tests without reinstalling
./meet.sh test-unit-webcomponent --skip-install
Available flags:
--skip-install: Skip dependency installation--skip-build: Skip build steps--skip-typings: Skip typings build (use when already built)
Testing
OpenVidu Meet includes comprehensive testing capabilities:
Unit Tests
# Backend unit tests
./meet.sh test-unit-backend
# Webcomponent unit tests
./meet.sh test-unit-webcomponent
End-to-End Tests
# Run E2E tests for webcomponent (installs Playwright automatically)
./meet.sh test-e2e-webcomponent
# Force reinstall Playwright browsers
./meet.sh test-e2e-webcomponent --force-install
TestApp
The repository includes a dedicated testing application for manual testing:
# Build and start the test application
./meet.sh start-testapp
The test app will be available at http://localhost:5080
Note
The TestApp requires LiveKit CLI to be installed and configured for full functionality.
Documentation
Generate Documentation
# Generate webcomponent documentation
./meet.sh build-webcomponent-doc [output_dir]
# Generate REST API documentation
./meet.sh build-rest-api-doc [output_dir]
Documentation files will be generated in:
- Webcomponent:
docs/webcomponent-*.md(events, commands, attributes) - REST API:
backend/public/openapi/public.html
If you specify an output directory, the documentation will be copied there.
Production Deployment
Using Docker
Build and run the production container:
# Build the Docker image (using meet.sh)
./meet.sh build-docker openvidu-meet-ce
# Build Docker image for demos (different BASE_HREF)
./meet.sh build-docker openvidu-meet-ce --demos
# Run the container
docker run \
-e LIVEKIT_URL=<your-livekit-url> \
-e LIVEKIT_API_KEY=<your-livekit-api-key> \
-e LIVEKIT_API_SECRET=<your-livekit-api-secret> \
-p 6080:6080 \
openvidu-meet-ce
Manual Production Start
# Build all components
./meet.sh build
# Start in production mode
./meet.sh start --prod
# Or start in CI mode
./meet.sh start --ci
Environment Variables
Configure your production environment using these key variables:
LIVEKIT_URL: WebSocket URL for LiveKit serverLIVEKIT_API_KEY: LiveKit API keyLIVEKIT_API_SECRET: LiveKit API secretSERVER_PORT: Backend server port (default: 6080)NODE_ENV: Environment mode (development,production,ci)
For a complete list of environment variables, see backend/src/environment.ts.
Project Structure
openvidu-meet/
├── meet.sh # Main build and development script
├── pnpm-workspace.yaml # pnpm workspace configuration
├── package.json # Root package with scripts
│
├── typings/ # Shared TypeScript definitions
│ ├── src/
│ │ ├── api-key.ts
│ │ ├── auth-config.ts
│ │ ├── participant.ts
│ │ ├── event.model.ts
│ │ └── ...
│ └── package.json
│
├── frontend/ # Angular frontend application
│ ├── src/ # Main application source
│ ├── projects/
│ │ └── shared-meet-components/ # Reusable Angular library
│ └── webcomponent/ # Web component build
│
├── backend/ # Node.js/Express backend
│ ├── src/
│ │ ├── controllers/ # REST API controllers
│ │ ├── services/ # Business logic
│ │ ├── middleware/ # Express middleware
│ │ └── environment.ts # Environment configuration
│ ├── openapi/ # OpenAPI specifications
│ └── public/ # Static files (includes built frontend)
│
├── testapp/ # Testing application
│ ├── src/
│ └── public/
│
├── docker/ # Docker build files
│ └── create_image.sh
│
├── docs/ # Generated documentation
├── scripts/ # Build and utility scripts
└── openvidu-meet-pro/ # Professional Edition (separate license)
Using the meet.sh Script
The meet.sh script is the main entry point for all development and build tasks:
Command Reference
# Help
./meet.sh help
# Installation
./meet.sh install # Install all dependencies
# Building
./meet.sh build # Build all components
./meet.sh build-typings # Build shared types only
./meet.sh build-webcomponent # Build webcomponent only
./meet.sh build-testapp # Build test application
# Development
./meet.sh dev # Start development mode with watchers
# Testing
./meet.sh test-unit-backend # Run backend unit tests
./meet.sh test-unit-webcomponent # Run webcomponent unit tests
./meet.sh test-e2e-webcomponent # Run webcomponent E2E tests
# Running
./meet.sh start --prod # Start in production mode
./meet.sh start --ci # Start in CI mode
./meet.sh start-testapp # Start test application
# Documentation
./meet.sh build-webcomponent-doc [dir] # Generate webcomponent docs
./meet.sh build-rest-api-doc [dir] # Generate REST API docs
# Docker
./meet.sh build-docker <image-name> [--demos] # Build Docker image
Examples
# Full development workflow
./meet.sh install
./meet.sh dev
# CI/CD optimized workflow
./meet.sh install
./meet.sh build-typings
./meet.sh build-webcomponent --skip-install --skip-typings
./meet.sh test-unit-webcomponent --skip-install
# Production build and deploy
./meet.sh build
./meet.sh start --prod
# Build Docker image
./meet.sh build-docker openvidu-meet-ce
# Build Docker image for demos
./meet.sh build-docker openvidu-meet-ce --demos
Technologies
- Frontend: Angular 20, Material Design, TypeScript
- Backend: Node.js, Express, TypeScript
- WebRTC Infrastructure: LiveKit
- Package Manager: pnpm (workspaces)
- Build Tools: Angular CLI, TypeScript Compiler, Rollup (webcomponent)
- Testing: Jest (unit), Playwright (E2E), Mocha
- Documentation: OpenAPI/Swagger, Custom generators
Contributing
Contributions are welcome! Please ensure that:
- All tests pass:
./meet.sh test-unit-backend && ./meet.sh test-unit-webcomponent - Code is properly formatted
- TypeScript types are correctly defined in
typings/ - Documentation is updated as needed
License
Licensed under the Apache License, Version 2.0. See LICENSE for details.
Links
For questions and support, visit our community forum.
