Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mattermost Voice Notes Plugin

Record and share voice messages directly in Mattermost channels — no third-party services, no mobile app required.

Voice Notes Plugin

Features

  • 🎙️ One-click recording – Microphone button directly in the message composer
  • 👂 Pre-send preview – Listen to your recording before sending it (Web Audio API, no browser CSP issues)
  • 🔄 Re-record – Discard and start over before sending
  • ▶️ In-line playback – Custom audio player inside the post with seekable timeline and download button
  • ⏱️ Configurable limits – Admins can set max duration and max file size
  • 🔒 Secure – Channel permission checks on every audio request; files served via Mattermost's own file storage
  • 🗑️ Privacy – Audio lives only in browser RAM until Send is clicked; nothing is uploaded until then

Supported Clients

Client Status Notes
Web browser (Chrome, Firefox, Edge) ✅ Full support Recommended
Desktop App (Windows / macOS / Linux) ❌ Recording not supported Playback works; see below
Mobile apps (iOS / Android) ❌ Not supported Platform limitation

Desktop App – recording not supported

Voice recording does not work in the Mattermost Desktop App. The Desktop App (Electron) blocks all microphone access for third-party plugins — this is a hard limitation of the Desktop App itself, not something this plugin can fix.

What works in the Desktop App:

  • ▶️ Playback of existing voice notes
  • ⬇️ Download of voice notes

What does not work:

  • 🎙️ Recording — microphone access is blocked entirely

To record voice notes: open your Mattermost server directly in a browser (Chrome, Firefox, or Edge). The microphone icon in the Desktop App shows a tooltip with the server URL so you can copy it quickly.

Technical background: The Desktop App's permissionRequestHandler returns denied for all media requests originating from plugin webviews, regardless of OS microphone permissions. We tested every available approach:

  • Direct getUserMedia in the plugin webview
  • Standalone popup windows (separate Electron BrowserWindow)
  • Pre-requesting permissions before opening the recording dialog

All fail with NotAllowedError. A fix requires a change in the Mattermost Desktop repository.

Audio Format & Storage

Voice notes are recorded in WebM/Opus using the browser's native MediaRecorder API. No WebAssembly or external encoder required.

Before sending: the audio blob exists only in the browser's memory (JavaScript heap). It is never written to disk or sent to the server until the user clicks Send. Closing the tab or reloading the page discards the recording permanently.

After sending: the file is stored in Mattermost's configured file storage (local disk or S3 — whatever your server uses). It is served exclusively through the plugin's authenticated /api/v1/audio route and is subject to the same channel permission checks as the original post.

File retention & cleanup

When a voice note post is deleted by a user, the audio file remains in Mattermost file storage. This is standard Mattermost behaviour for all file attachments — the server does not automatically purge files on post deletion.

Mattermost Enterprise: use Data Retention Policies to automatically delete files after a configurable period.

Mattermost Community Edition (self-hosted): files must be cleaned up manually. If you need to reclaim storage after many posts have been deleted, run the following SQL query to identify orphaned voice note files:

-- Files whose posts have been soft-deleted
SELECT fi.id, fi.path, fi.name, fi.create_at
FROM fileinfo fi
INNER JOIN posts p ON p.id = fi.post_id
WHERE fi.name LIKE 'voice-note-%.webm'
  AND p.deleteat > 0
ORDER BY fi.create_at;

Then remove the corresponding files from your data directory (default: <mattermost_data>/<YYYYMMDD>/teams/noteam/channels/<channelId>/users/nouser/<fileId>/). Always take a backup before bulk-deleting files.

Installation

  1. Download the latest .tar.gz (dev.kanka.voice-notes-<version>.tar.gz) from the Releases page.
  2. In Mattermost: System Console → Plugins → Plugin Management → Upload Plugin.
  3. Enable the plugin.

Configuration

Go to System Console → Plugins → Voice Notes:

Setting Default Description
Max Recording Duration 300s (5 min) Maximum length of a single voice note
Max File Size (MB) 50 MB Maximum upload size

Development

Prerequisites

  • Go 1.23+
  • Node.js 22+ (via nvm)
  • make

Setup

git clone https://github.com/kanka-dev/mattermost-plugin-voice-notes.git
cd mattermost-plugin-voice-notes

Build

make dist

The compiled plugin bundle is placed in dist/dev.kanka.voice-notes-<version>.tar.gz.

Deploy to a running Mattermost server

export MM_SERVICESETTINGS_SITEURL=https://your-mattermost.example.com
export MM_ADMIN_USERNAME=admin
export MM_ADMIN_PASSWORD=yourpassword
make deploy

Live webapp development

# Terminal 1 – watch & rebuild webapp on changes
make watch

# Terminal 2 – deploy server once, or again after Go changes
make deploy

Contributing

Bug reports and pull requests are welcome on GitHub.

When reporting a bug, please include:

  • Mattermost server version
  • Browser name and version
  • Steps to reproduce
  • Any relevant browser console errors

License

MIT © 2026 kanka.dev

This plugin is not affiliated with, endorsed by, or supported by Mattermost, Inc.

About

Record and share voice notes directly in Mattermost channels

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages