Element
Installation
Desktop Application
# macOS using Homebrew
brew install element
# Ubuntu/Debian
sudo apt install element-desktop
# Or download from website
# https://element.io/download
# Windows
# Download .exe installer from element.io/download
Docker Installation
# Run Element with Docker
docker run -d -p 8080:8080 \
--name element \
vectorim/element-web:latest
# With custom config
docker run -d -p 8080:8080 \
-v /path/to/config.json:/app/config.json:ro \
vectorim/element-web:latest
Web Version
# Element is available at https://app.element.io/
# No installation required
# Open in any web browser
First-Time Setup
Account Creation
1. Open Element or https://app.element.io
2. Click "Create Account"
3. Choose homeserver (default: matrix.org)
4. Enter username and password
5. Complete email verification
6. Optionally set up recovery key
Signing In
1. Click "Sign In"
2. Choose homeserver
3. Enter username/email and password
4. Verify device (optional)
5. Complete security setup
Basic Features
Starting Conversations
1. Click "+" next to "Direct messages"
2. Search for user by:
- Matrix ID: @username:homeserver.com
- Email address (if published)
- Username
3. Click user to start direct message
Creating Rooms
1. Click "+" next to "Rooms"
2. Set room name and topic
3. Add initial members
4. Configure encryption (default: enabled)
5. Create room
Alternative: Right-click username > Start new room
Joining Rooms
1. Click "+" > Browse rooms
2. OR click "+" > Join room by address
3. Enter room address: #roomname:homeserver.com
4. Click "Join"
5. Accept room history access
Configuration
Client Settings
Settings > General
├── Language: English (or other)
├── Theme: Light/Dark/Auto
├── Notifications: All/Mentions/Never
├── Auto-play media
├── Compact mode
└── Show hidden events
Security Settings
Settings > Security & Privacy
├── Encryption:
│ └── Enable for all messages (default)
├── Access token:
│ └── View and copy for integrations
├── Deactivate account:
│ └── Permanent deletion option
└── Cross-signing: Setup/verify devices
Notification Configuration
Settings > Notifications
├── Desktop notifications: On/Off
├── Show notifications for:
│ ├── All messages
│ ├── Mentions only
│ └── Never
├── Sound: Enable/Disable
├── Badge count: Show/Hide
└── Email notifications: Configure
Homeserver Selection
Settings > Homeserver
├── Default: matrix.org
├── Alternative homeservers:
│ ├── Gitter: gitter.im
│ ├── Libera.Chat: libera.chat
│ └── Custom: self-hosted instance
└── Switch homeserver: Requires logout/login
Self-Hosting
Synapse Server Installation
# Using Docker Compose (recommended)
git clone https://github.com/matrix-org/synapse.git
cd synapse
# Configure docker-compose
docker-compose -f docker-compose.yml up -d
# Generate configuration
docker exec -it synapse \
/start.py \
--server-name example.com \
--report-stats=yes
# Start server
docker-compose up -d
Synapse Configuration
# homeserver.yaml
server_name: "example.com"
listeners:
- port: 8008
tls: false
resources:
- names: [client, federation]
database:
name: psycopg2
args:
user: synapse
password: password
database: synapse
host: postgres
port: 5432
registration_shared_secret: "your_secret_key_here"
enable_registration: true
registration_allow_3pid_lookup: true
media_store_path: "/data/media_store"
uploads_path: "/data/uploads"
# Turn on encryption
support_msisdn_lookup: false
SSL/TLS Configuration
# Install certbot
sudo apt install certbot python3-certbot-nginx
# Get certificate
sudo certbot certonly --standalone -d example.com
# Configure in homeserver.yaml
tls_certificate_path: "/etc/letsencrypt/live/example.com/fullchain.pem"
tls_private_key_path: "/etc/letsencrypt/live/example.com/privkey.pem"
Bridges & Integration
Matrix Bridges
Common bridges:
├── IRC bridge: Connect to IRC networks
├── Telegram bridge: Link Telegram chats
├── Discord bridge: Sync Discord servers
├── Slack bridge: Connect Slack workspaces
├── WhatsApp bridge: WhatsApp integration
└── Signal bridge: Signal protocol integration
Setting Up Bridges
# IRC Bridge Example
# 1. Install mautrix-irc
docker pull dock.mau.dev/mautrix/irc
# 2. Configure registration.yaml
# 3. Create AppService bridge
# 4. Users can join IRC rooms via: #irc_network_#channel:homeserver.com
# 5. To use:
# /invite @irc.appservice:homeserver.com
# !matrix irc network join #channel
Slack Bridge Configuration
# Install slack bridge
docker pull dock.mau.dev/mautrix/slack
# Configuration file setup
# Set Slack App credentials:
# - Client ID
# - Client Secret
# - Bot token
# Install to homeserver
# Configure appservice in synapse config
End-to-End Encryption
Enabling Encryption
Room Settings > Security
├── Encryption: On/Off toggle
├── Encrypted events: All messages from now on
├── View encryption keys: Device verification
└── Device management: Trust/Block devices
Device Verification
1. Settings > Security & Privacy > Sessions
2. Current device shows at top
3. Other devices listed below:
- Click device to verify
- Scan QR code OR compare emoji
- Confirm match
4. Verified devices: Green checkmark
Backup & Recovery
Settings > Security
├── Create Backup:
└── Generate recovery key
└── Download and save securely
├── Restore Backup:
└── Enter recovery key
└── Restore encrypted messages
└── Recovery phrase:
└── Alternative backup method
User Management (Self-Hosted)
Creating Users
# Using admin CLI
docker exec synapse \
register_new_matrix_user \
-c /homeserver.yaml \
-u username \
-p password \
http://localhost:8008
# Or via Synapse API
curl -X POST \
-H "Content-Type: application/json" \
-d '{"auth":{},"user_id":"username","password":"password"}' \
http://localhost:8008/_synapse/admin/v2/users/@username:example.com/register
Admin Commands
# List users
docker exec synapse \
sqlite3 /data/homeserver.db \
"SELECT name FROM users LIMIT 10;"
# Deactivate user
curl -X POST \
-H "Authorization: Bearer admin_token" \
http://localhost:8008/_synapse/admin/v1/deactivate/@username:example.com
Chat Features
Room Moderation
Room Settings > Members
├── Permissions:
│ ├── Set moderator
│ ├── Set administrator
│ └── Change permissions
├── Kick member:
└── Remove user from room
├── Ban user:
└── Prevent re-joining
└── Invite:
└── Add new members
Message Features
Supported in Element:
├── Text formatting:
│ ├── **Bold**
│ ├── _Italic_
│ ├── `Code`
│ └── Markdown support
├── Reactions: Click message > Add emoji
├── Reply: Right-click > Reply
├── Edit: Long press or right-click > Edit
├── Delete: Long press or right-click > Delete
├── Pin: Set important messages
└── Quote: Reply with quoted text
Voice & Video
Direct Messages:
├── Click call icon (phone)
├── Audio call: Voice only
├── Video call: With webcam
├── Screen share: Share screen
└── Recording: Some versions support
Limitations:
├── Peer-to-peer, not through server
├── WebRTC requirements
├── Browser/app requirements
Advanced Features
Custom Client Configuration
// config.json for self-hosted Element
{
"default_server_name": "example.com",
"default_server_config": {
"m.homeserver": {
"base_url": "https://example.com"
},
"m.identity_server": {
"base_url": "https://vector.im"
}
},
"brand": "Example",
"features": {
"feature_pinning": true,
"feature_encrypted_search": true
},
"jitsi": {
"preferred_domain": "meet.example.com"
}
}
Spaces
Organize rooms:
1. Create space (similar to creating room)
2. Add rooms to space
3. Use as folder/community
4. Share space invites
5. Set space permissions
Troubleshooting
Connection Issues
1. Check internet connection
2. Verify homeserver is accessible
3. Try different homeserver
4. Clear browser cache (web version)
5. Restart application (desktop)
Encryption Problems
1. Verify devices are logged in
2. Check device keys in settings
3. Verify cross-signing setup
4. Clear and re-backup keys
5. Clear local data and re-login
Federation Issues (Self-Hosted)
# Check federation connectivity
curl -s https://example.com/.well-known/matrix/server | jq
# Verify DNS SRV records
dig _matrix._tcp.example.com SRV
# Check federation port (8448)
nmap -p 8448 example.com
Security Best Practices
- Use strong, unique passwords
- Enable cross-signing verification
- Regularly backup recovery keys
- Keep recovery key in secure location
- Verify device encryption keys
- Don’t share Matrix ID publicly
- Use private rooms for sensitive discussions
- Regularly review active sessions/devices
- Self-host for maximum privacy/control
- Keep Synapse updated for security patches
References
Last updated: 2026-03-30