Goal
Enable users to record audio messages directly in chat and send them as
voice messages.
Scope
- Add microphone recording control in message input (start/pause/stop/cancel).
- Request and handle microphone permissions with clear user feedback.
- Show recording state and duration while capturing audio.
- Generate a preview before sending (playback + delete option).
- Upload recorded audio using existing media upload flow.
- Send uploaded recording as a chat audio message with metadata.
- Render voice messages in timeline with playback controls.
- Handle error states (permission denied, recording failed, upload failed).
- Add/extend unit, integration, and E2E tests.
Branch
feature/voice-message-recording
Acceptance Criteria
Test Checklist
Unit
Integration
E2E
Notes
- This issue is only for recording in-app via microphone.
- Audio file picker from device storage is out of scope (separate feature).
Protocol/Compatibility Notes (Matrix)
-
Send as m.room.message audio event for broad compatibility.
-
Include sufficient audio metadata (mimetype, size, duration if known).
-
For voice recordings, include voice-message specific markers where supported.
-
Always provide fallback rendering as regular audio (m.audio) for clients
without voice-message UI support.
-
Verify behavior against at least one modern Matrix client and one older/basic
client rendering path.
-
If voice-specific fields are unsupported by the receiving client, message must
still be playable as a normal audio attachment.
Goal
Enable users to record audio messages directly in chat and send them as
voice messages.
Scope
Branch
feature/voice-message-recordingAcceptance Criteria
Test Checklist
Unit
Integration
E2E
Notes
Protocol/Compatibility Notes (Matrix)
Send as
m.room.messageaudio event for broad compatibility.Include sufficient audio metadata (
mimetype,size,durationif known).For voice recordings, include voice-message specific markers where supported.
Always provide fallback rendering as regular audio (
m.audio) for clientswithout voice-message UI support.
Verify behavior against at least one modern Matrix client and one older/basic
client rendering path.
If voice-specific fields are unsupported by the receiving client, message must
still be playable as a normal audio attachment.