juancarmore e6d04aca16 Migrate storage from S3 to MongoDB:
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
2025-11-05 17:48:38 +01:00
2025-10-15 19:15:00 +02:00
2025-10-15 17:42:04 +02:00
2025-03-10 17:19:23 +01:00

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

  1. Architecture Overview
  2. Prerequisites
  3. Getting Started
  4. Development
  5. Building
  6. Testing
  7. Documentation
  8. Production Deployment
  9. Project Structure
  10. Using the meet.sh Script

Architecture Overview

The OpenVidu Meet application is a monorepo managed with pnpm workspaces and consists of multiple interconnected packages:

OpenVidu Meet CE Architecture Overview

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 openvidu repository alongside openvidu-meet to 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.development for 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 server
  • LIVEKIT_API_KEY: LiveKit API key
  • LIVEKIT_API_SECRET: LiveKit API secret
  • SERVER_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:

  1. All tests pass: ./meet.sh test-unit-backend && ./meet.sh test-unit-webcomponent
  2. Code is properly formatted
  3. TypeScript types are correctly defined in typings/
  4. Documentation is updated as needed

License

Licensed under the Apache License, Version 2.0. See LICENSE for details.


For questions and support, visit our community forum.

Description
Host and customize your own high-quality video calling service in minutes
Readme Apache-2.0 27 MiB
Languages
TypeScript 77.7%
SCSS 8.9%
HTML 6.1%
Shell 2.8%
JavaScript 2.4%
Other 1.7%