| Crates.io | videocall-ui |
| lib.rs | videocall-ui |
| version | 1.1.29 |
| created_at | 2025-03-26 13:59:59.473494+00 |
| updated_at | 2025-09-24 02:29:43.805965+00 |
| description | A Yew UI for the videocall project |
| homepage | https://github.com/security-union/videocall-rs |
| repository | https://github.com/security-union/videocall-rs |
| max_upload_size | |
| id | 1606589 |
| size | 5,528,587 |
An open-source, high-performance video conferencing platform built with Rust, providing real-time communication with low latency.
videocall.rs is a modern, open-source video conferencing system written entirely in Rust, designed for developers who need reliable, scalable, and secure real-time communication capabilities. It provides a foundation for building custom video communication solutions, with support for both browser-based and native clients.
Project Status: Beta - Actively developed and suitable for non-critical production use
| Browser | Support |
|---|---|
| Chrome | ✅ |
| Brave | ✅ |
| Edge | ✅ |
| Safari (macOS, iOS) | ✅ |
| Firefox | ❌ |
WebTransport is a core technology that differentiates videocall.rs from traditional video conferencing solutions. As a developer, here's why our WebTransport approach is technically superior:
No SFUs, No NAT Traversal: WebTransport eliminates the need for complex Selective Forwarding Units and NAT traversal mechanisms that plague WebRTC implementations and cause countless developer headaches.
Simplified Architecture: No more complex STUN/TURN servers, ICE candidates negotiation, or complicated signaling dances required by WebRTC. Just direct, straightforward connections.
Protocol Efficiency: Built on HTTP/3 and QUIC, WebTransport provides multiplexed, bidirectional streams with better congestion control and packet loss recovery than WebRTC's dated SCTP data channels.
Lower Latency: QUIC's 0-RTT connection establishment reduces initial connection times compared to WebRTC's multiple roundtrips.
Clean Development Experience: WebTransport offers a more intuitive developer API with a promise-based design and cleaner stream management.
Future-Proof: As part of the modern web platform developed by the IETF and W3C, WebTransport has strong browser vendor support and an actively evolving specification.
For developers integrating videocall.rs, this means:
Read our Architecture Document for a deep dive into how we implement WebTransport and the technical benefits it provides.
videocall.rs follows a microservices architecture with these primary components:
graph TD
Clients[Clients<br>Browsers, Mobile, CLI] -->|WebSocket| ActixAPI[Actix API<br>WebSocket]
Clients -->|WebTransport| WebTransportServer[WebTransport<br>Server]
ActixAPI --> NATS[NATS<br>Messaging]
WebTransportServer --> NATS
actix-api: Rust-based backend server using Actix Web framework
yew-ui: Web frontend built with the Yew framework and compiled to WebAssembly
videocall-types: Shared data types and protocol definitions
videocall-client: Client library for native integration
videocall-cli: Command-line interface for headless video streaming
For a more detailed explanation of the system architecture, please see our Architecture Document.
⭐ RECOMMENDED: Docker is the only fully supported development method ⭐
We strongly recommend using the Docker-based setup for development, as it's well-maintained and provides consistent behavior across platforms. The manual setup described below is not as well maintained and may require additional troubleshooting.
The quickest way to get started is with our Docker-based setup:
Clone the repository:
git clone https://github.com/security-union/videocall-rs.git
cd videocall-rs
Start the server (replace <server-ip> with your machine's IP address):
make up
Open Chrome using the provided script for local WebTransport:
./launch_chrome.sh
Access the application at:
http://<server-ip>/meeting/<username>/<meeting-id>
⚠️ Warning: This setup method is experimental and not as well maintained as the Docker approach. You may encounter issues that require manual debugging.
For advanced users who prefer to run services directly on their machine:
Create a PostgreSQL database:
createdb actix-api-db
Install required tools:
# Install NATS server
curl -L https://github.com/nats-io/nats-server/releases/download/v2.9.8/nats-server-v2.9.8-linux-amd64.tar.gz | tar xz
sudo mv nats-server-v2.9.8-linux-amd64/nats-server /usr/local/bin
# Install trurl
cargo install trurl
Start the development environment:
./start_dev.sh
Connect to:
http://localhost:8081/meeting/<meeting-id>
For detailed configuration options, see our setup documentation.
The Yew UI is configured at runtime via a window.__APP_CONFIG object provided by a config.js file. The file is copied by Trunk and loaded at /config.js by yew-ui/index.html.
./start_dev.sh.yew-ui/scripts/config.js that assigns window.__APP_CONFIG = Object.freeze({...}).mkdir -p yew-ui/scripts to ensure the directory exists.Authoritative keys and defaults: see docker/start-yew.sh and the Helm template referenced below.
docker/start-yew.sh generates /app/yew-ui/scripts/config.js from environment variables at container startup. For the current list of supported variables and defaults, refer directly to docker/start-yew.sh. Restart the container to apply changes.
helm/rustlemania-ui/templates/configmap-configjs.yaml renders config.js from .Values.runtimeConfig. Define runtimeConfig in your values file and deploy/upgrade. For the exact structure and latest behavior, refer to the template itself.
Navigate to your deployed instance or localhost setup:
http://<server-address>/meeting/<username>/<meeting-id>
Grant camera and microphone permissions when prompted
Click "Connect" to join the meeting
For headless devices like Raspberry Pi:
# Install the CLI tool
cargo install videocall-cli
# Stream from a camera
videocall-cli stream \
--user-id <your-user-id> \
--video-device-index 0 \
--meeting-id <meeting-id> \
--resolution 1280x720 \
--fps 30 \
--frame-format NV12 \
--bitrate-kbps 500
For detailed information about the CLI tool and all available options, see the videocall-cli README.
videocall.rs has been benchmarked and optimized for the following scenarios:
Our server-side architecture is designed for efficiency at scale:
Performance metrics and tuning guidelines will be available in our performance documentation. (WIP)
Security is a core focus of videocall.rs:
For details on our security model and best practices, see our security documentation.
| Version | Target Date | Key Features |
|---|---|---|
| 0.5.0 | Q2 2023 | ✅ End-to-End Encryption |
| 0.6.0 | Q3 2023 | ✅ Safari Browser Support |
| 0.7.0 | Q4 2023 | ✅ Native Mobile SDKs |
| 0.8.0 | Q1 2024 | 🔄 Screen Sharing Improvements |
| 1.0.0 | Q2 2024 | 🔄 Production Release with Full API Stability |
We welcome contributions from the community! Here's how to get involved:
Issues: Report bugs or suggest features via GitHub Issues
Pull Requests: Submit PRs for bug fixes or enhancements
RFC Process: For significant changes, participate in our RFC process
Community: Join our Discord server to discuss development
See our Contributing Guidelines for more detailed information.
For a more comprehensive technical overview, see the Architecture Document.
This repository includes Git hooks to ensure code quality:
cargo fmt before each commit to ensure consistent code formatting.cargo clippy after each commit to check for potential code improvements.To install these hooks, run the following commands from the project root:
# Create the hooks directory if it doesn't exist
mkdir -p .git/hooks
# Create the pre-commit hook
cat > .git/hooks/pre-commit << 'EOF'
#!/bin/sh
# Run cargo fmt and check if there are changes
echo "Running cargo fmt..."
cargo fmt --all -- --check
# Check the exit code of cargo fmt
if [ $? -ne 0 ]; then
echo "cargo fmt found formatting issues. Please fix them before committing."
exit 1
fi
exit 0
EOF
# Create the post-commit hook
cat > .git/hooks/post-commit << 'EOF'
#!/bin/sh
# Run cargo clippy after the commit
echo "Running cargo clippy..."
ACTIX_UI_BACKEND_URL="" WEBTRANSPORT_HOST="" LOGIN_URL="" WEBTRANSPORT_URL="" ACTIX_API_URL="" cargo clippy -- -D warnings
# Check the exit code of cargo clippy
if [ $? -ne 0 ]; then
echo "Cargo clippy found issues in your code. Please fix them."
# We can't abort the commit since it's already done, but we can inform the user
echo "The commit was successful, but please consider fixing the clippy issues before pushing."
fi
exit 0
EOF
# Make the hooks executable
chmod +x .git/hooks/pre-commit .git/hooks/post-commit
These hooks help maintain code quality by ensuring proper formatting and checking for common issues.
Dario Lencina |
Seth Reid |
Griffin Obeid |
Ronen Barzel |
Leone |
Victor Martínez |
This project is dual licensed under the MIT License and the Apache License 2.0. See the LICENSE-APACHE and LICENSE-MIT files for details.