Element (formerly known as Vector and Riot) is a Matrix web client built using the Matrix React SDK.
Element has several tiers of support for different environments:
The period of support for these tiers should last until the releases specified above, plus 1 app release cycle(2 weeks). In the case of Firefox ESR this is extended further to allow it land in Debian Stable.
For accessing Element on an Android or iOS device, we currently recommend the native apps element-android and element-ios.
The easiest way to test Element is to just use the hosted copy at https://app.element.io.
The develop
branch is continuously deployed to https://develop.element.io
for those who like living dangerously.
To host your own instance of Element see Installing Element Web.
To install Element as a desktop application, see Running as a desktop app below.
We do not recommend running Element from the same domain name as your Matrix homeserver. The reason is the risk of XSS (cross-site-scripting) vulnerabilities that could occur if someone caused Element to load and render malicious user generated content from a Matrix API which then had trusted access to Element (or other apps) due to sharing the same domain.
We have put some coarse mitigations into place to try to protect against this situation, but it's still not good practice to do it in the first place. See https://github.com/element-hq/element-web/issues/1977 for more details.
Unless you have special requirements, you will want to add the following to your web server configuration when hosting Element Web:
X-Frame-Options: SAMEORIGIN
header, to prevent Element Web from being
framed and protect from clickjacking.frame-ancestors 'self'
directive to your Content-Security-Policy
header, as the modern replacement for X-Frame-Options
(though both should be
included since not all browsers support it yet, see
this).X-Content-Type-Options: nosniff
header, to disable MIME
sniffing.X-XSS-Protection: 1; mode=block;
header, for basic XSS protection in
legacy browsers.If you are using nginx, this would look something like the following:
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "frame-ancestors 'self'";
For Apache, the configuration looks like:
Header set X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options nosniff
Header set X-XSS-Protection "1; mode=block"
Header set Content-Security-Policy "frame-ancestors 'self'"
Note: In case you are already setting a Content-Security-Policy
header
elsewhere, you should modify it to include the frame-ancestors
directive
instead of adding that last line.
Element is a modular webapp built with modern ES6 and uses a Node.js build system. Ensure you have the latest LTS version of Node.js installed.
Using yarn
instead of npm
is recommended. Please see the Yarn install
guide if you do not have it already.
node.js
so that your node
is at least the current recommended LTS.yarn
if not present already.git clone https://github.com/element-hq/element-web.git
.cd element-web
.yarn install
.
develop
branch, then it is recommended to set up a
proper development environment (see Setting up a dev
environment below). Alternatively, you
can use https://develop.element.io - the continuous integration release of
the develop branch.config.sample.json
to config.json
and
modifying it. See the configuration docs for details.yarn dist
to build a tarball to deploy. Untaring this file will give
a version-specific directory containing all the files that need to go on your
web server.Note that yarn dist
is not supported on Windows, so Windows users can run yarn build
,
which will build all the necessary files into the webapp
directory. The version of Element
will not appear in Settings without using the dist script. You can then mount the
webapp
directory on your web server to actually serve up the app, which is
entirely static content.
Element can also be run as a desktop app, wrapped in Electron. You can download a pre-built version from https://element.io/get-started or, if you prefer, build it yourself.
To build it yourself, follow the instructions at https://github.com/element-hq/element-desktop.
Many thanks to @aviraldg for the initial work on the Electron integration.
The configuration docs show how to override the desktop app's default settings if desired.
Element supports a variety of settings to configure default servers, behaviour, themes, etc. See the configuration docs for more details.
Some features of Element may be enabled by flags in the Labs
section of the settings.
Some of these features are described in labs.md.
Element requires the following URLs not to be cached, when/if you are serving Element from your own webserver:
/config.*.json
/i18n
/home
/sites
/index.html
We also recommend that you force browsers to re-validate any cached copy of Element on page load by configuring your
webserver to return Cache-Control: no-cache
for /
. This ensures the browser will fetch a new version of Element on
the next page load after it's been deployed. Note that this is already configured for you in the nginx config of our
Dockerfile.
Before attempting to develop on Element you must read the developer guide
for matrix-react-sdk
, which
also defines the design, architecture and style for Element too.
Read the Choosing an issue page for some guidance about where to start. Before starting work on a feature, it's best to ensure your plan aligns well with our vision for Element. Please chat with the team in #element-dev:matrix.org before you start so we can ensure it's something we'd be willing to merge.
You should also familiarise yourself with the "Here be Dragons" guide to the tame & not-so-tame dragons (gotchas) which exist in the codebase.
The idea of Element is to be a relatively lightweight "skin" of customisations on
top of the underlying matrix-react-sdk
. matrix-react-sdk
provides both the
higher and lower level React components useful for building Matrix communication
apps using React.
Please note that Element is intended to run correctly without access to the public internet. So please don't depend on resources (JS libs, CSS, images, fonts) hosted by external CDNs or servers but instead please package all dependencies into Element itself.
CSS hot-reload is available as an opt-in development feature. You can enable it
by defining a CSS_HOT_RELOAD
environment variable, in a .env
file in the root
of the repository. See .env.example
for documentation and an example.
Much of the functionality in Element is actually in the matrix-react-sdk
and
matrix-js-sdk
modules. It is possible to set these up in a way that makes it
easy to track the develop
branches in git and to make local changes without
having to manually rebuild each time.
First clone and build matrix-js-sdk
:
git clone https://github.com/matrix-org/matrix-js-sdk.git pushd matrix-js-sdk yarn link yarn install popd
Then similarly with matrix-react-sdk
:
git clone https://github.com/matrix-org/matrix-react-sdk.git pushd matrix-react-sdk yarn link yarn link matrix-js-sdk yarn install popd
Clone the repo and switch to the element-web
directory:
git clone https://github.com/element-hq/element-web.git cd element-web
Configure the app by copying config.sample.json
to config.json
and
modifying it. See the configuration docs for details.
Finally, build and start Element itself:
yarn link matrix-js-sdk yarn link matrix-react-sdk yarn install yarn start
Wait a few seconds for the initial build to finish; you should see something like:
[element-js] <s> [webpack.Progress] 100%
[element-js]
[element-js] ℹ 「wdm」: 1840 modules
[element-js] ℹ 「wdm」: Compiled successfully.
Remember, the command will not terminate since it runs the web server and rebuilds source files when they change. This development server also disables caching, so do NOT use it in production.
Open http://127.0.0.1:8080/ in your browser to see your newly built Element.
Note: The build script uses inotify by default on Linux to monitor directories
for changes. If the inotify limits are too low your build will fail silently or with
Error: EMFILE: too many open files
. To avoid these issues, we recommend a watch limit
of at least 128M
and instance limit around 512
.
You may be interested in issues #15750 and #15774 for further details.
To set a new inotify watch and instance limit, execute:
sudo sysctl fs.inotify.max_user_watches=131072
sudo sysctl fs.inotify.max_user_instances=512
sudo sysctl -p
If you wish, you can make the new limits permanent, by executing:
echo fs.inotify.max_user_watches=131072 | sudo tee -a /etc/sysctl.conf
echo fs.inotify.max_user_instances=512 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
When you make changes to matrix-react-sdk
or matrix-js-sdk
they should be
automatically picked up by webpack and built.
If any of these steps error with, file table overflow
, you are probably on a mac
which has a very low limit on max open files. Run ulimit -Sn 1024
and try again.
You'll need to do this in each new terminal you open before building Element.
There are a number of application-level tests in the tests
directory; these
are designed to run with Jest and JSDOM. To run them
yarn test
See matrix-react-sdk for how to run the end-to-end tests.
To add a new translation, head to the translating doc.
For a developer guide, see the translating dev doc.
Issues are triaged by community members and the Web App Team, following the triage process.
We use issue labels to sort all incoming
AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。
一站式AI创作平台
提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作
AI办公助手,复杂任务高效处理
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!
AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文 件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号