This is a version of the Matrix client intended to be embedded within iframes of variable sizes on a webpage.
Currently, the client supports:
- List of joined rooms that can be selected
- Live room timeline events
- Support for image based messages
- Support for markdown in messages
- Message composer and ability to send messages to a room
- Dark and light themes for the client
- Changeable highlight colors
- Toggleable message composer, room header, and room timeline components
postMessage
interface for sending commands from the parent window- Support for guest mode
- Support for read-only mode
More features to be added soon.
npm install
npm run dev
npm run build
npm start
npm run lint
Create config.js
in the root directory of the repository with the following format.
export let config = {
baseUrl: '<BASE URL>',
roomId: '<DEFAULT ROOM ID>',
userId: '<DEFAULT USER ID>',
accessToken: '<DEFAULT ACCESS TOKEN>'
};
Leave out userId
and accessToken
to attempt registration as guest.
To set custom highlight colors, change the Sass variables $color-highlight-custom
and $color-txt-custom
in styles/colors.scss
and set highlight
to 'custom'
in the configuration.
baseUrl
(string) - Base URL of homeserver - RequiredroomId
(string) - The internal ID of default room - RequireduserId
(string) - The ID of default user
Ignore to register as guestaccessToken
(string) - Access token of default user
Ignore to register as guestreadOnly
(boolean) - If the client is in read-only modetrue
false
(default)
DisablesmsgComposer
androomsList
(unless overriden)
theme
(string) - Theme of the client'dark'
- Dark theme (default)'light'
- Light theme'auto'
- Use device theme
highlight
(string) - Highlight color'pink'
- Pink highlights (default)'green'
- Green highlights'custom'
- Custom highlight color
roomHeader
(boolean) - If room header should be displayedtrue
(default)false
roomsList
(boolean) - If rooms list should be displayed (overridesreadOnly
)true
(default)false
msgComposer
(boolean) - If message composer should be displayed (overridesreadOnly
)true
(default)false
whitelist
(Array) - Whitelisted origins
Ignore to allow all originssignInPrompt
(string) - Show sign in prompts'none'
- Never show (default)'guests'
- Show if signed in as guest'all'
- Always show
All messages will follow this format
{
cmd: 'Some command',
args: 'Arguments'
}
iframe.contentWindow.postMessage({
cmd: 'setTheme',
args: {
theme: 'light',
highlight:, 'green'
}
}, origin);
Arguments:
args
(object):
theme
(string) -'dark'
,'light'
or'auto'
highlight
(string) - highlight color such as'pink'
,'green'
or'custom'
Response:
{
status: 'success',
message: 'Theme set.'
}
iframe.contentWindow.postMessage({
cmd: 'roomHeader',
args: false
}, origin);
Arguments:
args
(boolean) -
false
for hidden, true
for visible
Response:
{
status: 'success',
message: 'Toggled room header.'
}
iframe.contentWindow.postMessage({
cmd: 'roomsList',
args: false
}, origin);
Arguments:
args
(boolean) -
false
for hidden, true
for visible
Response:
{
status: 'success',
message: 'Toggled rooms list.'
}
iframe.contentWindow.postMessage({
cmd: 'msgComposer',
args: false
}, origin);
Arguments:
args
(boolean) -
false
for hidden, true
for visible
Response:
{
status: 'success',
message: 'Toggled message composer.'
}
iframe.contentWindow.postMessage({
cmd: 'switchRoom',
args: '!abcdef123456'
}, origin);
Arguments:
args
(string) -
Internal room ID
Response:
{
status: 'success',
message: 'Attempting to switch room...'
}
iframe.contentWindow.postMessage({
cmd: 'login',
args: {
user: 'username',
passwd: 'password'
}
}, origin);
Arguments:
args
(object):
username
(string) - Usernamepasswd
(string) - Password
Response:
{
status: 'success',
message: 'Attempting sign in...'
}