element-hq / element-hq/element-call
Seamless Direct and Group Calling Without Pre-existing Rooms
- Dominant language
- TypeScript
- Stars
- 996
- Forks
- 213
- Avg merge
- 1d 6h
- Merged PRs (30d)
- 54
Description
#### What would you like to do?
I would like to initiate voice/video calls to any Matrix user or group of users without requiring a pre-existing room. Currently, Element Call requires manual room creation and invitation acceptance before any call can begin, creating a significant barrier to spontaneous communication.
**Current unpleasant workflow:**
1. Search for contact(s)
2. Create DM/room
3. Hope they notice the room
4. Wait for invitation acceptance
6. Finally start call
**Desired workflow:**
1. Click call button on any contact
2. They receive incoming call notification
3. Call connects
#### Why would you like to do it?
This limitation makes Element Call unsuitable as a primary VoIP solution for organizations and individuals who need:
1. **Emergency Communications**: Security teams need instant contact with any employee
2. **Customer Service**: Support staff must call users without pre-chat setup
3. **Sales Operations**: Outbound calls to new contacts are impossible
4. **Healthcare**: Medical staff need immediate colleague consultation
5. **Cross-team Collaboration**: Spontaneous calls between users
**Real-world impact examples:**
- **IT Incident Response**: "Server down, need to call on-call engineer" - Cannot reach them without existing room
- **Medical Emergency**: "Code call, assemble trauma team" - Must individually invite each doctor first
- **Business Development**: "Quick call with prospective client" - Requires awkward "accept my chat first" conversation
- **Private Scenarios**: "Call specific group of friends for an event" - Must create room probably days in advance for every one to be able to join.
This represents a severe adoption blocker when organizations evaluate Element against Teams, Zoom, or traditional phone systems. As well as private users searching a replacement for systems like WhatsApp.
#### How would you like to achieve it?
Implement **Seamless Auto-Join** functionality that creates rooms transparently during call initiation.
**Configuration options:**
- **Server-level**: Enable/disable seamless calling per homeserver
- **Federation policy**: Control cross-server call permissions
- **User preferences**: Opt-out of receiving seamless calls
- **Admin controls**: Allowlist for seamless calling domains
**Technical approach:**
1. Extend `m.call.invite` to include auto-join tokens
2. Create (ephemeral) rooms (with special retention policies)
3. Implement "ring-first, join-later" notification flow
### Have you considered any alternatives?
** Alternative 1: Pre-create Rooms for Everyone**
Automatically create DM rooms with all possible contacts. **Rejected**: Scales terribly, clutters room list, privacy concerns. Not possible for group calls.
** Alternative 2: External Call Routing**
Use SIP/PSTN for contact. **Rejected**: Breaks E2EE, requires additional infrastructure, defeats Matrix-native approach.
** Alternative 3: Accept Current Limitations**
Train users on current workflow. **Rejected**: Users expect click-to-call functionality. Does not satisfy requirements.
### Additional context
**Implementation Benefits**
**For Organizations:**
- Instant employee reachability
- Emergency response readiness
- Reduced onboarding friction
- Familiar calling patterns
**For Matrix Ecosystem:**
- Increased adoption in enterprise
- Competitive parity with centralized platforms
- Gateway to Matrix for voice-first users
- Showcase of protocol flexibility
** Consent mechanisms: **
- Global "accept calls from" settings (everyone/contacts/nobody)
- Per-domain allowlists for federated calls
- Block lists inherited from existing Matrix ignore functionality
** Federation Considerations**
- Respect remote server policies
- Clear capability negotiation
Contributor guide
Research direction
No files or tests are named. Start by tracing the existing m.call.invite flow and Matrix room/call entry points, then map the room creation, notification, federation, and consent requirements before proposing a design. Done means direct one-to-one and group calls work without pre-existing rooms while respecting the stated server, user, admin, and federation controls.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- audio-video-rtc, distributed-systems
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100