├── .DS_Store ├── .github └── FUNDING.yml ├── .gitignore ├── .htaccess ├── 404.md ├── CNAME ├── Gemfile ├── README.md ├── _config.yml ├── _includes ├── _footer.html ├── _head.html └── _site_nav.html ├── _layouts └── page-two-col.html ├── _sass ├── custom │ └── custom.scss └── support │ └── variables.scss ├── assets ├── config.json ├── css │ └── stately.scss ├── favicons │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── mstile-150x150.png │ ├── safari-pinned-tab.svg │ └── site.webmanifest ├── fonts │ ├── Lato2OFLWeb │ │ ├── LatoLatin │ │ │ ├── fonts │ │ │ │ ├── LatoLatin-Bold.eot │ │ │ │ ├── LatoLatin-Bold.ttf │ │ │ │ ├── LatoLatin-Bold.woff │ │ │ │ ├── LatoLatin-Bold.woff2 │ │ │ │ ├── LatoLatin-BoldItalic.eot │ │ │ │ ├── LatoLatin-BoldItalic.ttf │ │ │ │ ├── LatoLatin-BoldItalic.woff │ │ │ │ ├── LatoLatin-BoldItalic.woff2 │ │ │ │ ├── LatoLatin-Italic.eot │ │ │ │ ├── LatoLatin-Italic.ttf │ │ │ │ ├── LatoLatin-Italic.woff │ │ │ │ ├── LatoLatin-Italic.woff2 │ │ │ │ ├── LatoLatin-Regular.eot │ │ │ │ ├── LatoLatin-Regular.ttf │ │ │ │ ├── LatoLatin-Regular.woff │ │ │ │ └── LatoLatin-Regular.woff2 │ │ │ └── latolatinfonts.css │ │ ├── OFL.txt │ │ └── README-WEB.txt │ └── Lora │ │ ├── OFL.txt │ │ ├── TRADEMARKS.txt │ │ ├── fonts │ │ ├── ttf │ │ │ ├── Lora-Bold.ttf │ │ │ ├── Lora-BoldItalic.ttf │ │ │ ├── Lora-Italic.ttf │ │ │ └── Lora-Regular.ttf │ │ └── webfonts │ │ │ ├── Lora-Bold.woff2 │ │ │ ├── Lora-BoldItalic.woff2 │ │ │ ├── Lora-Italic.woff2 │ │ │ └── Lora-Regular.woff2 │ │ └── lora.css ├── images │ ├── demo.png │ ├── embed.png │ ├── icons │ │ ├── icon-download-form.png │ │ ├── icon-download.png │ │ └── open-iconic │ │ │ └── sprite.min.svg │ └── logo.svg ├── js │ └── stately.js └── sitemap.txt ├── guide.md ├── guide ├── features.md ├── fix-decryption-error.md ├── matrix-vs-al.md ├── matrix-vs-discord.md ├── matrix-vs-guilded.md ├── matrix-vs-telegram.md ├── popular-rooms.md └── qna.md ├── index.html ├── node_modules ├── primer-alerts │ ├── LICENSE │ ├── index.scss │ ├── lib │ │ └── flash.scss │ └── package.json ├── primer-base │ ├── LICENSE │ ├── index.scss │ ├── lib │ │ ├── base.scss │ │ ├── normalize.scss │ │ └── typography-base.scss │ └── package.json ├── primer-layout │ ├── LICENSE │ ├── index.scss │ ├── lib │ │ ├── columns.scss │ │ ├── container.scss │ │ ├── grid-offset.scss │ │ └── grid.scss │ └── package.json ├── primer-support │ ├── LICENSE │ ├── index.scss │ ├── lib │ │ ├── mixins │ │ │ ├── buttons.scss │ │ │ ├── layout.scss │ │ │ ├── misc.scss │ │ │ └── typography.scss │ │ └── variables.scss │ └── package.json └── primer-utilities │ ├── LICENSE │ ├── index.scss │ ├── lib │ ├── animations.scss │ ├── borders.scss │ ├── box-shadow.scss │ ├── colors.scss │ ├── flexbox.scss │ ├── layout.scss │ ├── margin.scss │ ├── padding.scss │ ├── typography.scss │ └── visibility-display.scss │ └── package.json ├── robots.txt └── servers.md /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/.DS_Store -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: austinhuang0131 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: austinhuang 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: austinhuang 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: ["https://austinhuang.me/donate"] 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | _site 2 | .sass-cache 3 | Gemfile.lock 4 | \.DS_Store 5 | -------------------------------------------------------------------------------- /.htaccess: -------------------------------------------------------------------------------- 1 | Header set Strict-Transport-Security "max-age=15552000" -------------------------------------------------------------------------------- /404.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 404 Not Found 3 | layout: page 4 | permalink: /404.html 5 | --- 6 | 7 | ## 404 Not Found 8 | 9 | But don't worry, you have indeed found a good messaging platform - it's Matrix! Check out our [guide](http://joinmatrix.org/guide/)! 10 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | joinmatrix.org -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | # Hello! This is where you manage which Jekyll version is used to run. 4 | # When you want to use a different version, change it below, save the 5 | # file and run `bundle install`. Run Jekyll with `bundle exec`, like so: 6 | # 7 | # bundle exec jekyll serve 8 | # 9 | # This will help ensure the proper Jekyll version is running. 10 | # Happy Jekylling! 11 | gem "jekyll", "~> 3.8" 12 | 13 | gem "stately-jekyll" 14 | 15 | group :jekyll_plugins do 16 | gem "github-pages" 17 | gem "jekyll-include-cache" 18 | gem "jekyll-compose" 19 | gem 'jekyll-seo-tag' 20 | end 21 | 22 | gem "kramdown-parser-gfm" 23 | gem "webrick", "~> 1.7" 24 | 25 | gem 'wdm' if Gem.win_platform? 26 | gem "tzinfo-data" if Gem.win_platform? 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Join Matrix! 2 | 3 | https://joinmatrix.org 4 | 5 | See [here](https://joinmatrix.org/guide/qna/#about-this-guide) for information regarding this repository. 6 | 7 | We accept contributions as long as it's good and you're willing to license it in CC BY-SA 4.0. 8 | 9 | The new homeserver list no longer uses this repository. If you wish to contribute to the website, see [here](https://codeberg.org/austinhuang/matrix-serverlist). If you wish to add your homeserver onto the list, you must ask me manually, at `@austin:tchncs.de`. 10 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | remote_theme: pmarsceill/stately@master 2 | 3 | # Config 4 | # ======================================================================================== 5 | 6 | # IMPORTANT: Set the URL of your site. 7 | # Set to https://.github.io when hosting on GitHub Pages 8 | # (unless you are using a custom domain). 9 | url: https://joinmatrix.org 10 | 11 | # IMPORTANT: Set The "base URL" of your site. 12 | # When your site sits in a subdirectory, set to / 13 | # (with leading /, but without the < >). 14 | # Use the empty string '' otherwise. 15 | # For GitHub project sites, this is usually the name of the project, 16 | # e.g. `/hydejack`. 17 | baseurl: '' 18 | 19 | title: Join Matrix! 20 | 21 | # Build settings 22 | markdown: kramdown 23 | permalink: pretty 24 | sass: 25 | # Load dependancies 26 | load_paths: 27 | - node_modules/ 28 | exclude: 29 | - node_modules 30 | - Gemfile 31 | - Gemfile.lock 32 | - package.json 33 | - Gruntfile.js 34 | - circle.yml 35 | - vendor 36 | - README.md 37 | 38 | # https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/usage.md 39 | tagline: Chat Freely. Join Matrix. 40 | google_site_verification: 23WPTykMMe_jOZBOuCWqAcIhpw9LuHecXo8nKqDYYXk 41 | logo: /assets/favicons/android-chrome-512x512.png 42 | 43 | plugins: 44 | - jekyll-seo-tag 45 | 46 | # Stately settings 47 | nav_logo_file: assets/images/logo.svg # path to the logo file for the main nav (supports svg, png, jpg, gif). Delete this line for no logo. 48 | # footer_logo_file: assets/images/stately-logo.png # path to the logo file for the footer nav (supports svg, png, jpg, gif). Delete this line for no logo. 49 | # Text to appear in the footer, copyright information, contact links, etc... 50 | footer_text: > 51 | Website content © Copyright 2021-2024 Austin Huang. CC BY-SA 4.0.
52 | The Stately theme © Copyright 2016 Patrick Marsceill. MIT License.
53 | Not affiliated with The Matrix.org Foundation C.I.C. or New Vector Ltd. 54 | github_link: true # Display link to edit page content on GitHub. Delete this line or set to false for no link. 55 | github_pages_branch: main # Branch where gh-pages site is hosted (either master, master/docs, or gh-pages). Delete this line for no GitHub pages branch. 56 | 57 | ## Info bar settings 58 | info_bar: false # Bar at the top of all pages. Delete this line or set to false for no info bar display. 59 | info_bar_text: This is not an offical site of the U.S. Government # Only shows if info_bar == true 60 | -------------------------------------------------------------------------------- /_includes/_footer.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

5 | {{ site.footer_text }} 6 |

7 |
8 |
9 |
10 | 12 | -------------------------------------------------------------------------------- /_includes/_head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | {% seo %} 21 | 22 | -------------------------------------------------------------------------------- /_includes/_site_nav.html: -------------------------------------------------------------------------------- 1 | 27 | -------------------------------------------------------------------------------- /_layouts/page-two-col.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | --- 4 | 5 |
6 | 16 | 17 |
18 | {{ content }} 19 | 20 | {% include _gh_link.html %} 21 |
22 |
23 | -------------------------------------------------------------------------------- /_sass/custom/custom.scss: -------------------------------------------------------------------------------- 1 | // Add your custom styles here 2 | 3 | // Custom styles for the Stately marketing site 4 | 5 | .home-side-image-wrapper { 6 | position: relative; 7 | top: -30px; 8 | height: 642px; 9 | } 10 | 11 | .home-side-image { 12 | position: absolute; 13 | left: -580px; 14 | width: 843px; 15 | height: 527px; 16 | } 17 | 18 | //////// 19 | 20 | @media (max-width: 768px) { 21 | .home-side-image-wrapper { 22 | display:none; 23 | } 24 | } 25 | 26 | img:not(.home-side-image) { 27 | max-width: 100%; 28 | } 29 | 30 | .flash { 31 | margin: 10px; 32 | } 33 | 34 | td.red { 35 | background-color: pink; 36 | } 37 | 38 | td.green { 39 | background-color: lightgreen; 40 | } 41 | 42 | td.orange { 43 | background-color: lemonchiffon; 44 | } 45 | 46 | td.blue { 47 | background-color: lightskyblue; 48 | } 49 | 50 | th { 51 | position: sticky; 52 | top: 0; 53 | } 54 | -------------------------------------------------------------------------------- /_sass/support/variables.scss: -------------------------------------------------------------------------------- 1 | $body-ink: #575757; 2 | $heading-ink: #372f29; 3 | $royal-blue: #41427c; 4 | $goldenrod: #f6c005; 5 | $darkest-bg: #202529; 6 | 7 | $body-font-family: "LatoLatinWeb", sans-serif; 8 | $heading-font-family: "Lora", serif; 9 | $display-font-family: $body-font-family; 10 | 11 | $monospace-font-family: Consolas, Menlo, Andale, monospace; 12 | 13 | $body-font-size: 16px; 14 | $body-line-height: 1.5; 15 | $heading-line-height: 1.3; 16 | 17 | $body-font-color: $body-ink; 18 | $heading-font-color: $heading-ink; 19 | 20 | $link-color: saturate(lighten($royal-blue, 15%), 5%); -------------------------------------------------------------------------------- /assets/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "showLabsSettings": true, 3 | "features": { 4 | "feature_custom_themes": true 5 | }, 6 | "roomDirectory": { 7 | "servers": [ 8 | "aria-net.org", 9 | "envs.net", 10 | "fairydust.space", 11 | "matrix.org", 12 | "mtrx.nz", 13 | "tchncs.de", 14 | "tedomum.net", 15 | "the-apothecary.club" 16 | ] 17 | }, 18 | "settingDefaults": { 19 | "custom_themes": [ 20 | { 21 | "name": "Super Dark theme", 22 | "is_dark": true, 23 | "colors": { 24 | "accent-color": "#888888", 25 | "primary-color": "#b8b8b8", 26 | "warning-color": "#ff0000", 27 | "sidebar-color": "#000000", 28 | "roomlist-background-color": "#060606", 29 | "roomlist-text-color": "#cc7b19", 30 | "roomlist-text-secondary-color": "#e5e5e5", 31 | "roomlist-highlights-color": "#323232", 32 | "roomlist-separator-color": "#4c4c4c", 33 | "timeline-background-color": "#000000", 34 | "timeline-text-color": "#eeeeee", 35 | "timeline-text-secondary-color": "#999999", 36 | "timeline-highlights-color": "#212121", 37 | "reaction-row-button-selected-bg-color": "#333333", 38 | "eventbubble-self-bg": "#111111", 39 | "eventbubble-others-bg": "#222222", 40 | "eventbubble-selected-bg": "#444444" 41 | } 42 | }, 43 | { 44 | "name": "Discord Dark", 45 | "is_dark": true, 46 | "colors": { 47 | "accent-color": "#747ff4", 48 | "accent": "#747ff4", 49 | "primary-color": "#00aff4", 50 | "warning-color": "#faa81ad9", 51 | "alert": "#faa81ad9", 52 | "sidebar-color": "#202225", 53 | "roomlist-background-color": "#2f3136", 54 | "roomlist-text-color": "#dcddde", 55 | "roomlist-text-secondary-color": "#8e9297", 56 | "roomlist-highlights-color": "#4f545c52", 57 | "roomlist-separator-color": "#40444b", 58 | "timeline-background-color": "#36393f", 59 | "timeline-text-color": "#dcddde", 60 | "secondary-content": "#dcddde", 61 | "tertiary-content": "#dcddde", 62 | "timeline-text-secondary-color": "#b9bbbe", 63 | "timeline-highlights-color": "#04040512", 64 | "reaction-row-button-selected-bg-color": "#4752c4", 65 | "menu-selected-color": "#4752c4", 66 | "focus-bg-color": "#4752c4", 67 | "room-highlight-color": "#4752c4", 68 | "other-user-pill-bg-color": "#4752c4", 69 | "togglesw-off-color": "#72767d" 70 | } 71 | }, 72 | { 73 | "name": "ThomCat black theme", 74 | "is_dark": true, 75 | "colors": { 76 | "accent-color": "#cc7b19", 77 | "primary-color": "#9F8652", 78 | "warning-color": "#f9c003", 79 | "sidebar-color": "#000000", 80 | "roomlist-background-color": "#191919", 81 | "roomlist-text-color": "#cc7b19", 82 | "roomlist-text-secondary-color": "#e5e5e5", 83 | "roomlist-highlights-color": "#323232", 84 | "roomlist-separator-color": "#4c4c4c", 85 | "timeline-background-color": "#000000", 86 | "timeline-text-color": "#e5e5e5", 87 | "secondary-content": "#e5e5e5", 88 | "tertiary-content": "#e5e5e5", 89 | "timeline-text-secondary-color": "#b2b2b2", 90 | "timeline-highlights-color": "#212121", 91 | "reaction-row-button-selected-bg-color": "#cc7b19" 92 | } 93 | }, 94 | { 95 | "name": "Luxury Dark theme", 96 | "is_dark": true, 97 | "colors": { 98 | "accent-color": "#D9BC00", 99 | "primary-color": "#FFDD00", 100 | "warning-color": "#FBC403", 101 | 102 | "sidebar-color": "#020F1B", 103 | "roomlist-background-color": "#011223", 104 | "roomlist-highlights-color": "#1E354A", 105 | "roomlist-separator-color": "#05192D", 106 | "roomlist-text-color": "#FFEC70", 107 | "roomlist-text-secondary-color": "#FFF3A4", 108 | 109 | "timeline-background-color": "#05192D", 110 | "timeline-highlights-color": "#011223", 111 | "timeline-text-color": "#FFF3A4", 112 | "secondary-content": "#FFF3A4", 113 | "tertiary-content": "#FFF3A4", 114 | "timeline-text-secondary-color": "#A79000", 115 | "reaction-row-button-selected-bg-color": "#FFEC70" 116 | } 117 | }, 118 | { 119 | "name": "Nord dark theme", 120 | "is_dark": true, 121 | "colors": { 122 | "accent-color": "#a3be8c", 123 | "primary-color": "#88c0d0", 124 | "warning-color": "#bf616a", 125 | 126 | "sidebar-color": "#2e3440", 127 | "roomlist-background-color": "#3b4252", 128 | "roomlist-text-color": "#ebcb8b", 129 | "roomlist-text-secondary-color": "#e5e9f0", 130 | "roomlist-highlights-color": "#2e3440", 131 | "roomlist-separator-color": "#434c5e", 132 | 133 | "timeline-background-color": "#434c5e", 134 | "timeline-text-color": "#eceff4", 135 | "secondary-content": "#eceff4", 136 | "tertiary-content": "#eceff4", 137 | "timeline-text-secondary-color": "#81a1c1", 138 | "timeline-highlights-color": "#3b4252", 139 | "reaction-row-button-selected-bg-color": "#bf616a" 140 | } 141 | }, 142 | { 143 | "name": "Nord light theme", 144 | "is_dark": false, 145 | "colors": { 146 | "accent-color": "#a3be8c", 147 | "primary-color": "#5e81ac", 148 | "warning-color": "#bf616a", 149 | 150 | "sidebar-color": "#d8dee9", 151 | "roomlist-background-color": "#e5e9f0", 152 | "roomlist-text-color": "#d08770", 153 | "roomlist-text-secondary-color": "#3b4252", 154 | "roomlist-highlights-color": "#eceff4", 155 | "roomlist-separator-color": "#eceff4", 156 | 157 | "timeline-background-color": "#eceff4", 158 | "timeline-text-color": "#2e3440", 159 | "secondary-content": "#2e3440", 160 | "tertiary-content": "#2e3440", 161 | "timeline-text-secondary-color": "#3b4252", 162 | "timeline-highlights-color": "#e5e9f0", 163 | "reaction-row-button-selected-bg-color": "#bf616a" 164 | } 165 | }, 166 | { 167 | "name": "Selenized light theme", 168 | "is_dark": false, 169 | "colors": { 170 | "accent-color": "#ad8900", 171 | "primary-color": "#009c8f", 172 | "warning-color": "#d2212d", 173 | 174 | "sidebar-color": "#d5cdb6", 175 | "roomlist-background-color": "#ece3cc", 176 | "roomlist-text-color": "#c25d1e", 177 | "roomlist-text-secondary-color": "#000000", 178 | "roomlist-highlights-color": "#fbf3db", 179 | "roomlist-separator-color": "#fbf3db", 180 | 181 | "timeline-background-color": "#fbf3db", 182 | "timeline-text-color": "#000000", 183 | "secondary-content": "#000000", 184 | "tertiary-content": "#000000", 185 | "timeline-text-secondary-color": "#777777", 186 | "timeline-highlights-color": "#ece3cc", 187 | "reaction-row-button-selected-bg-color": "#4695f7" 188 | } 189 | }, 190 | { 191 | "name": "Selenized dark theme", 192 | "is_dark": true, 193 | "colors": { 194 | "accent-color": "#41c7b9", 195 | "primary-color": "#4695f7", 196 | "warning-color": "#fa5750", 197 | 198 | "sidebar-color": "#103c48", 199 | "roomlist-background-color": "#184956", 200 | "roomlist-text-color": "#dbb32d", 201 | "roomlist-text-secondary-color": "#FFFFFF", 202 | "roomlist-highlights-color": "#2d5b69", 203 | "roomlist-separator-color": "#2d5b69", 204 | 205 | "timeline-background-color": "#2d5b69", 206 | "timeline-text-color": "#FFFFFF", 207 | "secondary-content": "#FFFFFF", 208 | "tertiary-content": "#FFFFFF", 209 | "timeline-text-secondary-color": "#72898f", 210 | "timeline-highlights-color": "#184956", 211 | "reaction-row-button-selected-bg-color": "#4695f7" 212 | } 213 | }, 214 | { 215 | "name": "Selenized black theme", 216 | "is_dark": true, 217 | "colors": { 218 | "accent-color": "#70b433", 219 | "primary-color": "#4695f7", 220 | "warning-color": "#ed4a46", 221 | 222 | "sidebar-color": "#181818", 223 | "roomlist-background-color": "#252525", 224 | "roomlist-text-color": "#ffffff", 225 | "roomlist-text-secondary-color": "#b9b9b9", 226 | "roomlist-highlights-color": "#3b3b3b", 227 | "roomlist-separator-color": "#121212", 228 | 229 | "timeline-background-color": "#181818", 230 | "timeline-text-color": "#FFFFFF", 231 | "secondary-content": "#FFFFFF", 232 | "tertiary-content": "#FFFFFF", 233 | "timeline-text-secondary-color": "#777777", 234 | "timeline-highlights-color": "#252525", 235 | "reaction-row-button-selected-bg-color": "#4695f7" 236 | } 237 | }, 238 | { 239 | "name": "Solarized Dark", 240 | "is_dark": true, 241 | "colors": { 242 | "accent-color": "#b58900", 243 | "primary-color": "#268bd2", 244 | "warning-color": "#dc322f", 245 | "sidebar-color": "#002b36", 246 | "roomlist-background-color": "#073642", 247 | "roomlist-text-color": "#839496", 248 | "roomlist-text-secondary-color": "#93a1a1", 249 | "roomlist-highlights-color": "#586e75", 250 | "timeline-background-color": "#002b36", 251 | "timeline-text-color": "#839496", 252 | "secondary-content": "#839496", 253 | "tertiary-content": "#839496", 254 | "timeline-text-secondary-color": "#586e75", 255 | "timeline-highlights-color": "#073642", 256 | "reaction-row-button-selected-bg-color": "#268bd2" 257 | } 258 | }, 259 | { 260 | "name": "Geeko dark theme", 261 | "is_dark": true, 262 | "colors": { 263 | "accent-color": "#73ba25", 264 | "primary-color": "#35b9ab", 265 | "warning-color": "#bf616a", 266 | "sidebar-color": "#2a2a2a", 267 | "roomlist-background-color": "#4a4a4a", 268 | "roomlist-text-color": "#ffffff", 269 | "roomlist-text-secondary-color": "#dddddd", 270 | "roomlist-highlights-color": "#2a2a2a", 271 | "roomlist-separator-color": "#3a3a3a", 272 | "timeline-background-color": "#3a3a3a", 273 | "timeline-text-color": "#eeeeee", 274 | "secondary-content": "#eeeeee", 275 | "tertiary-content": "#eeeeee", 276 | "timeline-text-secondary-color": "#6da741", 277 | "timeline-highlights-color": "#bf616a", 278 | "reaction-row-button-selected-bg-color": "#bf616a" 279 | } 280 | }, 281 | { 282 | "name": "Dracula", 283 | "is_dark": true, 284 | "colors": { 285 | "accent-color": "#bd93f9", 286 | "primary-color": "#bd93f9", 287 | "warning-color": "#bd93f9", 288 | "sidebar-color": "#1e1f29", 289 | "roomlist-background-color": "#1e1f29", 290 | "roomlist-text-color": "#eeeeee", 291 | "roomlist-text-secondary-color": "#eeeeee", 292 | "roomlist-highlights-color": "#00000030", 293 | "roomlist-separator-color": "#4d4d4d90", 294 | "timeline-background-color": "#282A36", 295 | "timeline-text-color": "#eeeeee", 296 | "secondary-content": "#eeeeee", 297 | "tertiary-content": "#eeeeee", 298 | "timeline-text-secondary-color": "#dddddd", 299 | "timeline-highlights-color": "#00000030", 300 | "reaction-row-button-selected-bg-color": "#b9bbbe" 301 | } 302 | }, 303 | { 304 | "name": "Dracula Flat", 305 | "is_dark": true, 306 | "colors": { 307 | "accent-color": "#bd93f9", 308 | "primary-color": "#bd93f9", 309 | "warning-color": "#bd93f9", 310 | "sidebar-color": "#1e1f29", 311 | "roomlist-background-color": "#1e1f29", 312 | "roomlist-text-color": "#eeeeee", 313 | "roomlist-text-secondary-color": "#eeeeee", 314 | "roomlist-highlights-color": "#00000030", 315 | "roomlist-separator-color": "#00000000", 316 | "timeline-background-color": "#1e1f29", 317 | "timeline-text-color": "#eeeeee", 318 | "secondary-content": "#eeeeee", 319 | "tertiary-content": "#eeeeee", 320 | "timeline-text-secondary-color": "#dddddd", 321 | "timeline-highlights-color": "#00000030", 322 | "reaction-row-button-selected-bg-color": "#b9bbbe" 323 | } 324 | } 325 | ] 326 | } 327 | } 328 | -------------------------------------------------------------------------------- /assets/css/stately.scss: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | // Import dev dependancies (pulled in via npm) 5 | // Primer CSS 6 | @import "./primer-support/index.scss"; 7 | @import "./primer-base/index.scss"; 8 | @import "./primer-layout/index.scss"; 9 | @import "./primer-utilities/index.scss"; 10 | @import "./primer-alerts/index.scss"; 11 | 12 | @import "./support/variables.scss"; 13 | @import "./utilities/utilities.scss"; 14 | 15 | @import "./components/base.scss"; 16 | @import "./components/typography.scss"; 17 | @import "./components/media.scss"; 18 | @import "./components/buttons.scss"; 19 | @import "./components/card.scss"; 20 | @import "./components/navigation.scss"; 21 | @import "./components/jumbotron.scss"; 22 | @import "./components/page-section.scss"; 23 | @import "./components/markdown-body.scss"; 24 | @import "./components/forms.scss"; 25 | @import "./components/code.scss"; 26 | 27 | // Custom styles for your site 28 | @import "./custom/custom.scss" 29 | -------------------------------------------------------------------------------- /assets/favicons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/favicons/android-chrome-192x192.png -------------------------------------------------------------------------------- /assets/favicons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/favicons/android-chrome-512x512.png -------------------------------------------------------------------------------- /assets/favicons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/favicons/apple-touch-icon.png -------------------------------------------------------------------------------- /assets/favicons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #2d89ef 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /assets/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /assets/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /assets/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/favicons/favicon.ico -------------------------------------------------------------------------------- /assets/favicons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/favicons/mstile-150x150.png -------------------------------------------------------------------------------- /assets/favicons/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.14, written by Peter Selinger 2001-2017 9 | 10 | 12 | 25 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /assets/favicons/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "short_name": "", 4 | "icons": [ 5 | { 6 | "src": "/assets/favicons/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/assets/favicons/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#ffffff", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Bold.eot -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Bold.woff -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Bold.woff2 -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-BoldItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-BoldItalic.eot -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-BoldItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-BoldItalic.woff -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-BoldItalic.woff2 -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Italic.eot -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Italic.ttf -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Italic.woff -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Italic.woff2 -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Regular.eot -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Regular.woff -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lato2OFLWeb/LatoLatin/fonts/LatoLatin-Regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/LatoLatin/latolatinfonts.css: -------------------------------------------------------------------------------- 1 | /* Webfont: LatoLatin-Bold */@font-face { 2 | font-family: 'LatoLatinWeb'; 3 | src: url('fonts/LatoLatin-Bold.eot'); /* IE9 Compat Modes */ 4 | src: url('fonts/LatoLatin-Bold.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('fonts/LatoLatin-Bold.woff2') format('woff2'), /* Modern Browsers */ 6 | url('fonts/LatoLatin-Bold.woff') format('woff'), /* Modern Browsers */ 7 | url('fonts/LatoLatin-Bold.ttf') format('truetype'); 8 | font-style: normal; 9 | font-weight: bold; 10 | text-rendering: optimizeLegibility; 11 | } 12 | 13 | /* Webfont: LatoLatin-BoldItalic */@font-face { 14 | font-family: 'LatoLatinWeb'; 15 | src: url('fonts/LatoLatin-BoldItalic.eot'); /* IE9 Compat Modes */ 16 | src: url('fonts/LatoLatin-BoldItalic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 17 | url('fonts/LatoLatin-BoldItalic.woff2') format('woff2'), /* Modern Browsers */ 18 | url('fonts/LatoLatin-BoldItalic.woff') format('woff'), /* Modern Browsers */ 19 | url('fonts/LatoLatin-BoldItalic.ttf') format('truetype'); 20 | font-style: italic; 21 | font-weight: bold; 22 | text-rendering: optimizeLegibility; 23 | } 24 | 25 | /* Webfont: LatoLatin-Italic */@font-face { 26 | font-family: 'LatoLatinWeb'; 27 | src: url('fonts/LatoLatin-Italic.eot'); /* IE9 Compat Modes */ 28 | src: url('fonts/LatoLatin-Italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 29 | url('fonts/LatoLatin-Italic.woff2') format('woff2'), /* Modern Browsers */ 30 | url('fonts/LatoLatin-Italic.woff') format('woff'), /* Modern Browsers */ 31 | url('fonts/LatoLatin-Italic.ttf') format('truetype'); 32 | font-style: italic; 33 | font-weight: normal; 34 | text-rendering: optimizeLegibility; 35 | } 36 | 37 | /* Webfont: LatoLatin-Regular */@font-face { 38 | font-family: 'LatoLatinWeb'; 39 | src: url('fonts/LatoLatin-Regular.eot'); /* IE9 Compat Modes */ 40 | src: url('fonts/LatoLatin-Regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 41 | url('fonts/LatoLatin-Regular.woff2') format('woff2'), /* Modern Browsers */ 42 | url('fonts/LatoLatin-Regular.woff') format('woff'), /* Modern Browsers */ 43 | url('fonts/LatoLatin-Regular.ttf') format('truetype'); 44 | font-style: normal; 45 | font-weight: normal; 46 | text-rendering: optimizeLegibility; 47 | } 48 | -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010-2015, Łukasz Dziedzic (dziedzic@typoland.com), 2 | with Reserved Font Name Lato. 3 | 4 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 5 | This license is copied below, and is also available with a FAQ at: 6 | http://scripts.sil.org/OFL 7 | 8 | 9 | ----------------------------------------------------------- 10 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 11 | ----------------------------------------------------------- 12 | 13 | PREAMBLE 14 | The goals of the Open Font License (OFL) are to stimulate worldwide 15 | development of collaborative font projects, to support the font creation 16 | efforts of academic and linguistic communities, and to provide a free and 17 | open framework in which fonts may be shared and improved in partnership 18 | with others. 19 | 20 | The OFL allows the licensed fonts to be used, studied, modified and 21 | redistributed freely as long as they are not sold by themselves. The 22 | fonts, including any derivative works, can be bundled, embedded, 23 | redistributed and/or sold with any software provided that any reserved 24 | names are not used by derivative works. The fonts and derivatives, 25 | however, cannot be released under any other type of license. The 26 | requirement for fonts to remain under this license does not apply 27 | to any document created using the fonts or their derivatives. 28 | 29 | DEFINITIONS 30 | "Font Software" refers to the set of files released by the Copyright 31 | Holder(s) under this license and clearly marked as such. This may 32 | include source files, build scripts and documentation. 33 | 34 | "Reserved Font Name" refers to any names specified as such after the 35 | copyright statement(s). 36 | 37 | "Original Version" refers to the collection of Font Software components as 38 | distributed by the Copyright Holder(s). 39 | 40 | "Modified Version" refers to any derivative made by adding to, deleting, 41 | or substituting -- in part or in whole -- any of the components of the 42 | Original Version, by changing formats or by porting the Font Software to a 43 | new environment. 44 | 45 | "Author" refers to any designer, engineer, programmer, technical 46 | writer or other person who contributed to the Font Software. 47 | 48 | PERMISSION & CONDITIONS 49 | Permission is hereby granted, free of charge, to any person obtaining 50 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 51 | redistribute, and sell modified and unmodified copies of the Font 52 | Software, subject to the following conditions: 53 | 54 | 1) Neither the Font Software nor any of its individual components, 55 | in Original or Modified Versions, may be sold by itself. 56 | 57 | 2) Original or Modified Versions of the Font Software may be bundled, 58 | redistributed and/or sold with any software, provided that each copy 59 | contains the above copyright notice and this license. These can be 60 | included either as stand-alone text files, human-readable headers or 61 | in the appropriate machine-readable metadata fields within text or 62 | binary files as long as those fields can be easily viewed by the user. 63 | 64 | 3) No Modified Version of the Font Software may use the Reserved Font 65 | Name(s) unless explicit written permission is granted by the corresponding 66 | Copyright Holder. This restriction only applies to the primary font name as 67 | presented to the users. 68 | 69 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 70 | Software shall not be used to promote, endorse or advertise any 71 | Modified Version, except to acknowledge the contribution(s) of the 72 | Copyright Holder(s) and the Author(s) or with their explicit written 73 | permission. 74 | 75 | 5) The Font Software, modified or unmodified, in part or in whole, 76 | must be distributed entirely under this license, and must not be 77 | distributed under any other license. The requirement for fonts to 78 | remain under this license does not apply to any document created 79 | using the Font Software. 80 | 81 | TERMINATION 82 | This license becomes null and void if any of the above conditions are 83 | not met. 84 | 85 | DISCLAIMER 86 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 87 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 88 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 89 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 90 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 91 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 92 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 93 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 94 | OTHER DEALINGS IN THE FONT SOFTWARE. 95 | -------------------------------------------------------------------------------- /assets/fonts/Lato2OFLWeb/README-WEB.txt: -------------------------------------------------------------------------------- 1 | 2 | Lato font family (Web version) 3 | 4 | ============================== 5 | 6 | Version 2.015; Latin+Cyrillic+Greek+IPA opensource 7 | 8 | Created by: tyPoland Lukasz Dziedzic 9 | Creation year: 2015 10 | 11 | Copyright (c) 2010-2015 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1. 12 | 13 | Lato is a trademark of tyPoland Lukasz Dziedzic. 14 | 15 | Source URL: http://www.latofonts.com/ 16 | License URL: http://scripts.sil.org/OFL 17 | 18 | ================ 19 | 20 | Lato is a sanserif typeface family designed in the Summer 2010 and extended in the Summer 2013 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in the 2010s, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness. In 2013-2014, the family was greatly extended (with the help of Adam Twardoch and Botio Nikoltchev) to cover 3000+ glyphs over nine weights with italics. It now supports 100+ Latin-based languages, 50+ Cyrillic-based languages as well as Greek and IPA phonetics. The Lato fonts are available free of charge under the SIL Open Font License from http://www.latofonts.com/ 21 | 22 | ================ 23 | 24 | CONTENTS: 25 | 26 | This folder contains two subfolders: Lato and LatoLatin. Inside these subfolders, you will find CSS-compatible webfont kits which you can install on your website via self-hosting. The Lato subfolder contains webfonts with the complete character set (160-640 KB per font) while the LatoLatin subfolder contains smaller versions that only include the most important glyphs for European Latin-based languages (40-150 KB per font). 27 | 28 | ================ 29 | 30 | REVISION LOG: 31 | 32 | # Version 2.015 (2015-08-06) 33 | Initial implementation of mark positioning (should work for most glyphs) 34 | Autohinted using ttfautohint 1.3. 35 | 36 | # Version 2.010 (2014-09-01) 37 | Improved some contour bugs and diacritics positioning. 38 | Improved outline quality. 39 | Revised OTL features so that they work in browsers (ot-sanitise). 40 | Autohinted using ttfautohint 1.1. 41 | Interpolated the Medium weight differently so it provides more visual difference from Regular. 42 | 43 | # Version 2.007 (2014-02-27) 44 | Greatly expanded character set, revised metrics, four additional weights. 45 | 46 | # Version 1.104 (2011-11-08) 47 | Merged the distribution again 48 | Autohinted with updated ttfautohint 0.4 (which no longer causes Adobe and iOS problems) 49 | except the Hai and Lig weights which are hinted in FLS 5.1. 50 | 51 | # Version 1.102 (2011-10-28) 52 | Added OpenType Layout features 53 | Ssplit between desktop and web versions 54 | Desktop version: all weights autohinted with FontLab Studio 55 | Web version autohinted with ttfautohint 0.4 except the Hai and Lig weights 56 | 57 | # Version 1.101 (2011-09-30) 58 | Fixed OS/2 table Unicode and codepage entries 59 | 60 | # Version 1.100 (2011-09-12) 61 | Added Polish diacritics to the character set 62 | Weights Hai and Lig autohinted with FontLab Studio 63 | Other weights autohinted with ttfautohint 0.3 64 | 65 | # Version 1.011 (2010-12-29) 66 | Added the soft hyphen glyph 67 | 68 | # Version 1.010 (2010-12-13) 69 | Initial version released under SIL Open Font License 70 | Western character set 71 | 72 | ================ 73 | -------------------------------------------------------------------------------- /assets/fonts/Lora/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright 2011 The Lora Project Authors (https://github.com/cyrealtype/Lora-Cyrillic), with Reserved Font Name "Lora". 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | http://scripts.sil.org/OFL 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /assets/fonts/Lora/TRADEMARKS.txt: -------------------------------------------------------------------------------- 1 | Lora is a trademark of Cyreal. 2 | -------------------------------------------------------------------------------- /assets/fonts/Lora/fonts/ttf/Lora-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lora/fonts/ttf/Lora-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/Lora/fonts/ttf/Lora-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lora/fonts/ttf/Lora-BoldItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/Lora/fonts/ttf/Lora-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lora/fonts/ttf/Lora-Italic.ttf -------------------------------------------------------------------------------- /assets/fonts/Lora/fonts/ttf/Lora-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lora/fonts/ttf/Lora-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/Lora/fonts/webfonts/Lora-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lora/fonts/webfonts/Lora-Bold.woff2 -------------------------------------------------------------------------------- /assets/fonts/Lora/fonts/webfonts/Lora-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lora/fonts/webfonts/Lora-BoldItalic.woff2 -------------------------------------------------------------------------------- /assets/fonts/Lora/fonts/webfonts/Lora-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lora/fonts/webfonts/Lora-Italic.woff2 -------------------------------------------------------------------------------- /assets/fonts/Lora/fonts/webfonts/Lora-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/fonts/Lora/fonts/webfonts/Lora-Regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/Lora/lora.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Lora'; 3 | src: url('fonts/webfonts/Lora-Bold.woff2') format('woff2'), /* Modern Browsers */ 4 | url('fonts/ttf/Lora-Bold.ttf') format('truetype'); 5 | font-style: normal; 6 | font-weight: bold; 7 | text-rendering: optimizeLegibility; 8 | } 9 | 10 | @font-face { 11 | font-family: 'Lora'; 12 | src: url('fonts/webfonts/Lora-BoldItalic.woff2') format('woff2'), /* Modern Browsers */ 13 | url('fonts/ttf/Lora-BoldItalic.ttf') format('truetype'); 14 | font-style: italic; 15 | font-weight: bold; 16 | text-rendering: optimizeLegibility; 17 | } 18 | 19 | /@font-face { 20 | font-family: 'Lora'; 21 | src: url('fonts/webfonts/Lora-Italic.woff2') format('woff2'), /* Modern Browsers */ 22 | url('fonts/ttf/Lora-Italic.ttf') format('truetype'); 23 | font-style: italic; 24 | font-weight: normal; 25 | text-rendering: optimizeLegibility; 26 | } 27 | 28 | @font-face { 29 | font-family: 'Lora'; 30 | src: url('fonts/webfonts/Lora-Regular.woff2') format('woff2'), /* Modern Browsers */ 31 | url('fonts/ttf/Lora-Regular.ttf') format('truetype'); 32 | font-style: normal; 33 | font-weight: normal; 34 | text-rendering: optimizeLegibility; 35 | } 36 | -------------------------------------------------------------------------------- /assets/images/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/images/demo.png -------------------------------------------------------------------------------- /assets/images/embed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/images/embed.png -------------------------------------------------------------------------------- /assets/images/icons/icon-download-form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/images/icons/icon-download-form.png -------------------------------------------------------------------------------- /assets/images/icons/icon-download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/austinhuang0131/joinmatrix/4b2861fbd7aee633fd790b0ec8ca87e10eff0a30/assets/images/icons/icon-download.png -------------------------------------------------------------------------------- /assets/images/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 21 | 23 | 24 | 26 | image/svg+xml 27 | 29 | Matrix (protocol) logo 30 | 31 | 32 | 33 | 35 | 43 | 47 | 51 | 52 | 60 | 64 | 68 | 69 | 77 | 81 | 85 | 86 | 94 | 98 | 102 | 103 | 113 | 116 | 120 | 124 | 125 | 135 | 136 | 160 | Matrix (protocol) logo 162 | 166 | 169 | 172 | 178 | 179 | 180 | -------------------------------------------------------------------------------- /assets/js/stately.js: -------------------------------------------------------------------------------- 1 | // @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat 2 | 3 | function toggleMainNav() { 4 | const nav = document.querySelector('.js-site-nav-list'); 5 | const navItems = document.querySelector('.js-site-nav-item'); 6 | const navTrigger = document.querySelector('.js-site-nav-trigger'); 7 | 8 | if (navTrigger != null) { 9 | navTrigger.addEventListener('click', function(event){ 10 | event.preventDefault(); 11 | toggleClasses(nav, 'open'); 12 | this.classList.toggle('open') 13 | }); 14 | } 15 | } 16 | 17 | function toggleSideNav() { 18 | const nav = document.querySelector('.js-side-nav'); 19 | const navItems = document.querySelector('.js-side-nav-item'); 20 | const activeLink = document.querySelector('.js-side-nav-link-active'); 21 | 22 | if (activeLink != null) { 23 | activeLink.addEventListener('click', function(event){ 24 | event.preventDefault(); 25 | toggleClasses(nav, 'open'); 26 | }); 27 | } 28 | } 29 | 30 | function toggleClasses(el, className){ 31 | if (el.classList) { 32 | el.classList.toggle(className); 33 | } else { 34 | const classes = el.className.split(' '); 35 | const existingIndex = classes.indexOf(className); 36 | 37 | if (existingIndex >= 0) 38 | classes.splice(existingIndex, 1); 39 | else 40 | classes.push(className); 41 | el.className = classes.join(' '); 42 | } 43 | } 44 | 45 | // Document ready 46 | var ready = function(){ 47 | // Handler when the DOM is fully loaded 48 | toggleMainNav(); 49 | toggleSideNav(); 50 | }; 51 | 52 | if ( 53 | document.readyState === "complete" || 54 | (document.readyState !== "loading" && !document.documentElement.doScroll) 55 | ) { 56 | ready(); 57 | } else { 58 | document.addEventListener("DOMContentLoaded", ready); 59 | } 60 | 61 | // @license-end 62 | -------------------------------------------------------------------------------- /assets/sitemap.txt: -------------------------------------------------------------------------------- 1 | https://joinmatrix.org/ 2 | https://joinmatrix.org/guide/ 3 | https://joinmatrix.org/guide/features/ 4 | https://joinmatrix.org/guide/fix-decryption-error/ 5 | https://joinmatrix.org/guide/matrix-vs-al/ 6 | https://joinmatrix.org/guide/matrix-vs-discord/ 7 | https://joinmatrix.org/guide/matrix-vs-guilded/ 8 | https://joinmatrix.org/guide/matrix-vs-telegram/ 9 | https://joinmatrix.org/guide/qna/ 10 | https://servers.joinmatrix.org/ 11 | -------------------------------------------------------------------------------- /guide.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The "Join Matrix!" Guide 3 | ntitle: The Guide 4 | layout: page-two-col 5 | nav: true 6 | parent: guide 7 | permalink: guide/ 8 | description: A beginner-friendly guide for Matrix, the federated chat platform that actually respects you. 9 | --- 10 | 11 | ## The "Join Matrix!" Guide: Basics 12 | 13 | Welcome! This website aims to be a beginner-friendly guide to Matrix (sometimes [mistakenly known](#is-it-matrix-or-element) as Element). Matrix is an open federated communication protocol that strives to be a viable alternative to various centralized proprietary platforms. But those are very big words, and unfortunately, they do confuse people sometimes, so this guide aims to introduce you to the chatting aspect of it in somewhat simpler terms. We'll start by the "why" and then the "how." This part is for people who have never used Matrix before, so if you're looking for more advanced material, check out the sidebar. 14 | 15 | ## Why Matrix? 16 | 17 | Matrix is the long-awaited middleground between one-to-one messaging platforms (Facebook Messenger, WhatsApp, iMessages, SMS...) and social/collaborative messaging platforms (Discord, Slack, Telegram...): it offers an appropriate degree of privacy while allowing you to socialize/collaborate with others. Generally, the merits that make Matrix stand out from others can be boiled down to two categories: 18 | 19 | * **Freedom.** You get to choose how to use the platform and how your data is treated. 20 | * Conversations can be end-to-end encrypted[^1]. This is enabled by default for direct and group messages[^2]. 21 | * Automatic collection of data is minimized: no address book syncing[^3], no "are you human?" checks beyond registration, phone numbers are optional, even email addresses are optional (on select homeservers)! 22 | * You can host your own server, or you can join [an existing public homeserver](../servers) that suits you. Either way, your access to the Matrix federation is the same[^4]! 23 | * [Bridges](./features/#all-about-bridges) allow you to chat with users on other platforms, minimizing the social cost of moving to Matrix! 24 | * Since Matrix is an open protocol, it is extensible and can be used for purposes beyond just chatting. For example: [help desk](https://www.safesupport.chat/), [social media](https://minestrix.henri2h.fr/), real-time collaboration... 25 | * **Trust.** You get to actually trust the software you use. 26 | * Matrix is an open protocol, and most[^5] of its [apps](#what-app-should-i-use) and servers[^6] are both open source, which you may contribute to! 27 | * Matrix is federated, just like email: Unlike conventional platforms which are [centralized](./matrix-vs-al/#centralized-platforms), no single specific entity can control the entirety of the Matrix federation, where homeservers, operated independently from each other, communicate with each other using an agreed-upon protocol. 28 | * Furthermore, while individual homeservers may experience outage, the entire federation *cannot* go offline. 29 | * You are welcomed to improve Matrix by creating new apps around it, or by [reviewing or submitting](https://spec.matrix.org/unstable/proposals/) proposals. You can shape your platform towards a better direction! 30 | * Matrix is backed by the public sector, most notably by the Germans ([healthcare](https://matrix.org/blog/2021/07/21/germanys-national-healthcare-system-adopts-matrix), [army](https://element.io/case-studies/bundeswehr), [universities](https://doc.matrix.tu-dresden.de/en/why/)) as well as [the French](https://element.io/case-studies/tchap). 31 | 32 | And of course, Matrix has everything that a modern messaging platform offers: cross-platform, real-time, usefulness, etc. But that's not the point. Matrix shows that it is **possible** to have a decent chat platform that actually **respects you**. 33 | 34 | If these reasons did not convince you, how about comparing Matrix [with other platforms](./matrix-vs-al) like [Discord](./matrix-vs-discord) and [Telegram](./matrix-vs-telegram)? 35 | 36 |
37 | Matrix is not spotless, but it is constantly improving! You can also follow the Matrix.org blog for all the news around Matrix! 38 |
39 | 40 | ## Get Started 41 | 42 | Ready to try Matrix? Here we go: 43 | 44 | ### Is it Matrix or Element? 45 | 46 | * Matrix is the protocol, developed by the UK-registered non-profit [The Matrix.org Foundation C.I.C.](https://matrix.org/foundation/). It can also refer to the entire Matrix federation that contains all the users and rooms. 47 | * Element (previously known as Riot.im) is the flagship app of Matrix, developed by the UK-registered for-profit [New Vector Ltd](https://element.io/about). It can also refer to commercial services that the company offers, such as [Element Matrix Services](https://element.io/matrix-services). 48 | 49 | [As touched upon later](#what-app-should-i-use), Element is just one of the apps that accesses Matrix. It is therefore correct to refer to the platform as just "Matrix." Though, nobody is stopping you from calling it *[The Matrix](https://en.wikipedia.org/wiki/The_Matrix)*. 50 | 51 | ### Set up your own homeserver, or join an existing homeserver? 52 | 53 | If you have the infrastructure and the technical skills required to host an internet-facing program, then you can try setting up your own homeserver[^6]. The dominant homeserver implementation is [Synapse](https://github.com/matrix-org/synapse/). See [installation instructions](https://matrix.org/docs/guides/installing-synapse). It may be possible to run a homeserver for free [with Oracle Cloud](https://matrix.org/docs/guides/free-small-matrix-server). 54 | 55 | However, hosting is still undesirable for many. In that case, you can... 56 | 57 | * Join an existing homeserver by picking one from [our public homeserver list](../servers), or 58 | * Reaching out to a friend who hosts a homeserver, or 59 | * Purchase [managed homeserver hosting](https://matrix.org/hosting/). 60 | 61 |
62 | The "default" Matrix homeserver is matrix.org, which is used by 35% of all Matrix users as estimated in 2020. Although it is okay to use it (and you can try out Matrix quickly with it), it is highly encouraged to choose a different homeserver (including running your own) for long-term usage, as it serves the spirit of decentralization promoted by the Matrix protocol, and also because matrix.org is occasionally overloaded (though performance has improved in recent times) and behind Cloudflare (which is a security risk). 63 |
64 | 65 | ### Register an account 66 | 67 |
68 | This part does not cover cases where a homeserver uses its own authentication tools. In such cases, please consult your homeserver's instructions. 69 |
70 | 71 | For simplicity, the guide is prepared in such a way that recommends registration on a PC browser, even though many servers allow you to do so from native PC/mobile apps. Regardless, once registered, you can use the account everywhere! 72 | 73 | 1. If you're using our homeserver list which has provided you with a link to the homeserver's in-house Element client, then you may use that. Otherwise, use the official [Element Web client](https://app.element.io) to register. 74 | 2. Click "Create Account". 75 | 3. On the top of the registration dialog, verify that you are registering on the correct server. If necessary, click "edit" and enter the appropriate domain (consult your public/private/managed homeserver's instructions, or the "Registration method" column of the [homeserver list](../servers)). Once verified, **note the domain down.** You will need it to login[^7]. 76 | 4. Fill out the required information. 77 | 5. If you did not enter an email address, then you're in. Otherwise, verify your email, after which you will be prompted to [login](#log-into-an-existing-account). 78 | 79 | Users are uniquely identified by their MXID. Your MXID is your username plus your server name (not necessarily domain). For example, `@austin:tchncs.de` is my MXID, where `austin` is my username and `tchncs.de` is the name of the server I'm on. **You cannot change it later**, as using a new username or a different homeserver requires registering a new account (you may [migrate data](https://ems.element.io/tools/matrix-migration), however). Furthermore, if you deactivate the account, no one else can have this MXID again! You can, however, change the display name, as well as your avatar. 80 | 81 | Remember to [set up key backup](#set-up-key-backup)! 82 | 83 | ### Log into an existing account 84 | 85 | For most apps: 86 | 87 | 1. Enter the login dialog, if necessary. 88 | 2. Verify that you are logging onto the correct server. This is usually shown on top of the dialog. If necessary, click "edit" and enter the appropriate domain (see Step 3 of registration). 89 | 3. Enter your login details. 90 | 91 | ### Encryption 92 | 93 | When you log into a new device, you will be prompted to verify it using your existing device (by scanning a QR code or by comparing emojis). Your new device will then retrieve the room keys from your existing device, thereby enabling it to read your encrypted messages. This prevents anyone else - including your homeserver operator - to read encrypted content[^1]. 94 | 95 |
96 | It is strongly recommended to check for new sessions. (Note that Element does notify you on new sessions.) If you do not recognize the session, then you must remove it immediately! Not doing so can compromise your future encrypted messages. 97 |
98 | 99 | However, a Security Key is required to access encrypted messages if: 100 | 101 | * You have logged out of *all* your sessions prior to this login (note that you cannot recover messages during the time when your account has no session), or 102 | * You are unable to verify interactively from another session. 103 | 104 |
105 | It is strongly recommended to do this step to prevent accidentally losing all of your encrypted messages. 106 |
107 | 108 | You can set up a Security Key with the following steps: 109 | 110 | 1. On your first login, a bubble on the top-left will ask you to "set up secure backup". Click "Continue". If that is not the case, click your avatar, then "Settings" -> "Security & Privacy" -> "Secure Backup" -> click "Set up". 111 | 2. "Generate a Security Key" is enough. 112 | 3. Save the generated security key in a safe place (like in a password manager). 113 | 114 | A graphic tutorial is available [here](https://www.ubuntubuzz.com/2021/01/element-made-easy-setup-security-phrase-and-key.html). 115 | 116 | ## Get Familiar 117 | 118 | ### What app should I use? 119 | 120 | There exists [many different apps](https://matrix.org/clients/) that can access Matrix. Because Matrix is an open protocol, you can even implement Matrix in your own app, if you got the skills. But for most people, here are some recommendations: 121 | 122 | * Element ([browser](https://app.element.io), [app](https://element.io/download)): The flagship app. 123 | * Bleeding edge builds are available [on browser](https://develop.element.io) and [as an app](https://element.io/download#nightly). 124 | * [Cinny](https://cinny.in/): for browser; also available [as an app](https://github.com/cinnyapp/cinny-desktop). Appears to be inspired by Slack. 125 | * [Nheko](https://github.com/Nheko-Reborn/nheko): for PC. Simpler, without compromising features. Recommended if Element is too heavy for you. 126 | * [NeoChat](https://apps.kde.org/neochat/): KDE's Matrix client. 127 | * [Fractal](https://gitlab.gnome.org/GNOME/fractal): GNOME's Matrix client. 128 | * [Hydrogen](https://hydrogen.element.io/): Fast and adaptable to mobile browsers, at the cost of missing some optional features. 129 | 130 | For those living on the edge: [gomuks](https://github.com/tulir/gomuks) and [Syphon](https://syphon.org/). 131 | 132 |
133 | For PC users, if you want a better experience when using Element Desktop or SchildiChat, place this config file in your configuration folder, where $NAME is either "Element", "Element Nightly" or "SchildiChat". The config file enables the "Labs" tab in settings, enables custom themes, preloads a few custom themes, and preloads a few homeservers for room directory searches. 134 |
135 | 136 | ### What rooms can I join? 137 | 138 | Each Matrix homeserver has a public room directory, which is accessible to the users of that homeserver or, if enabled, users of other homeservers as well. 139 | 140 | * On PC, for Element and SchildiChat, click the "Explore Rooms" button on the top-left. 141 | * For FluffyChat, and for Element and SchildiChat on phone, click the search button. 142 | * [MatrixRooms.info](https://matrixrooms.info) allows you to search public room directories of various homeservers on the web. (**Warning**: it does not filter what homeservers it uses, so please exercise caution in joining rooms.) 143 | 144 | In any case mentioned above, you can enter the room address to directly join a room, or you can enter keywords to search for rooms[^8]. However, the directory may be unintuitive to use as it orders rooms by member count[^9]. The author of this guide recommends joining [this Space](https://matrix.to/#/#offtopic-space:envs.net) (`#offtopic-space:envs.net`), which contains a list of active off-topic or no-topic discussion rooms. 145 | 146 | #### Hold on, what's a Space? 147 | 148 | Discord users may be familiar with this format, but Spaces are not exactly the same as a Discord "server." A Space[^10] is a list that can include other rooms and Spaces. It can be used to organize your own rooms, or for a community to organize all its rooms. Joining a Space does not imply joining all of its rooms (however, rooms can choose to require users to join a Space first), nor does leaving a Space imply leaving all of its rooms (by default). 149 | 150 | On Element and SchildiChat, Spaces show up on the left of your room list. Selecting one will filter your room list to DMs with members of the Space and joined rooms within the Space. To see rooms that you have not yet joined, click the Explore button (see above). 151 | 152 | ## Go Deeper 153 | 154 |
155 | The names of your sessions are public, which enable others to know what OS you're using (it used to be accurate to devices but that is no longer the case). You can rename them, however (as long as you know which is which): 156 |
    157 |
  • In Element/SchildiChat, go to user settings, then "Security & Privacy." Rename the sessions as needed.
  • 158 |
  • In FluffyChat, go to settings, then "devices." Click the sessions to rename them.
  • 159 |
160 |
161 | 162 | If you're using Element or SchildiChat, then keep the [Element User Guide](https://element.io/user-guide) handy for a quick reference to the interface! 163 | 164 | * [More Features of Matrix](./features): An introduction to more of Matrix's features! 165 | * [Public homeserver list](../servers) 166 | * [Questions & Answers](./qna) 167 | 168 | ## Footnotes 169 | 170 | [^1]: Only text contents and file attachments of messages are encrypted. Currently, Matrix does not prevent metadata leakage, mainly due to its federated nature. This will change, however, when Matrix starts rolling out [Pinecone](https://archive.fosdem.org/2021/schedule/event/matrix_pinecones/), allowing p2p connections. Currently, it *can* be mitigated if all participants of an E2EE conversation are running their own homeserver (so to eliminate third parties). 171 | 172 | [^2]: Exception: Some bots do not support end-to-end encrypted messaging. Furthermore, when creating an empty private room, you will be prompted (but not by default) to enable encryption. 173 | 174 | [^3]: Element allows you to opt into (not enabled by default as of late 2021) using an "identity server" - think of it as a big online address book. This allows users to share their email addresses and username, which can be looked up manually by other users. However, here "address book" means that Matrix will not store the one locally on your phone; homeservers *can* see who you are talking to, as such information are not encrypted. There is [a proposal](https://github.com/matrix-org/matrix-doc/pull/3414) to address this. See also footnote 1. 175 | 176 | [^4]: Note that public rooms may block certain servers - just like banning individual users - due to prevalence of unacceptable content (spam, hate speech, etc.). If you're not running your own homeserver, don't join homeservers that are known to harbour such content. This does not apply to homeservers listed on [our public list](../servers) as they are vetted against any presence of bad reputation. In any case, behave yourselves, remember the human. 177 | 178 | [^5]: This includes all clients and servers that an average user uses. 179 | 180 | [^6]: [Synapse](https://github.com/matrix-org/synapse/) is the only stable homeserver implementation as of now. If you are living on the edge, you can try out [Dendrite](https://github.com/matrix-org/dendrite/) and [Conduit](https://conduit.rs/), both of which aim to support p2p eventually (see footnote 1). 181 | 182 | [^7]: In most cases, it is equivalent to the server part of your MXID. The exceptions are where homeservers did not set up `.well-known` autodiscovery properly... 183 | 184 | [^8]: Title and description. 185 | 186 | [^9]: Which is not a reasonable gauge of activity. First, accounts can be inactive. Second, if a room uses [bridges](./features/#all-about-bridges), then these accounts are counted as well, even if their activity is mostly not from Matrix (you can still interact with them, however). 187 | 188 | [^10]: Which, to be exact, is a special type of rooms. Other than that you can list rooms (and Spaces) instead of sending messages, there are no differences between a Space and a room. 189 | -------------------------------------------------------------------------------- /guide/fix-decryption-error.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Fix decryption error 3 | layout: page-two-col 4 | nav: false 5 | parent: guide 6 | permalink: guide/fix-decryption-error/ 7 | description: A simple checklist on what to do when your Matrix client cannot decrypt messages. 8 | order: 7 9 | --- 10 | 11 | ## Fix decryption error 12 | 13 |
14 | As homeserver federation is a variable factor in key exchange, homeserver performance and networking does matter in preventing those issues. If you consistently encounter decryption issues, you may want to check whether your homeserver is working correctly. Specifically, if you are on matrix.org, it is recommended to move to a different homeserver due to reliability issues. 15 |
16 | 17 |
18 | Everyone should make sure that all of their active sessions are verified, and that there is at least one active session that you normally use at all times! 19 |
20 | 21 | A detailed explanation is available on [neko.dev](https://blog.neko.dev/posts/unable-to-decrypt-matrix.html). 22 | 23 | ### For recipients 24 | 25 | Note that the instructions are relative to Element, but in principle similar steps can be taken for other clients. 26 | 27 | 1. if key backup is enabled for your account, go to Room Settings => Security & Privacy => Restore from Backup on the device that cannot read the message. If the option does not exist on your client, or if key backup is not enabled on your account yet (please [enable it](https://joinmatrix.org/guide/#encryption) now!), continue. 28 | 2. If at least one of your devices can read the messages: 29 | 30 | 1. Open the device that can read the messages ("device A" thereafter) and navigate to the room that those messages are in. 31 | 2. Open the device that cannot read the messages ("device B" thereafter) and navigate to the same room. 32 | 3. The message keys should start coming in a few moments. 33 | 34 | 3. If the above doesn't work: 35 | 36 | 1. Navigate to Settings => Security & Privacy on both devices. 37 | 2. On device A, click "Export E2E room keys". Follow the instructions. 38 | 3. Move the resulting key file to device B. 39 | 4. On device B, click "Import E2E room keys". Follow the instructions. 40 | 41 | Note that if you logged out of every device when you received the message, the message cannot be recovered. (Dehydrated devices will eventually fix this issue, but it will not recover anything that is already lost.) 42 | 43 | ### For senders 44 | 45 | If others cannot decrypt your message, try: 46 | 47 | * If you do not know what it does, disable the room-specific setting "Never send encrypted messages to unverified sessions in this room from this session" (in Room Settings => Security & Privacy), as well as the default setting "Never send encrypted messages to unverified sessions from this session" (in User Settings => Security & Privacy). 48 | * On PC Element (or Nheko), open the recipient's profile and show their active sessions (for Element, under "Security"). Check if the session that your recipient is using is there. (Alternatively, on Element, check if a red warning indicating unverified or deleted/unknown devices appears next to your recipient's message.) If not, please verify whether your homeserver and clients are working correctly. Some experimental client features (especially [Sliding Sync](https://github.com/element-hq/element-web/issues/27580)) may interfere with decryption. 49 | * If you're selfhosting, check your network setup! 50 | 51 | To prevent future issues, try: 52 | 53 | * Entering `/discardsession` (on Element; `/rotate-megolm-session` on Nheko) in the room. Usually this happens automatically, but client (especially [if your network is not stable](https://mastodon.catgirl.cloud/@sophie/112643481203081172)) and homeserver hiccups could cause issues. 54 | -------------------------------------------------------------------------------- /guide/matrix-vs-al.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Comparison to other platforms 3 | layout: page-two-col 4 | nav: false 5 | parent: guide 6 | permalink: guide/matrix-vs-al/ 7 | description: It's time to ditch whatever messaging platform you're using. Join Matrix, the federated chat platform that actually respects you. 8 | order: 3 9 | --- 10 | 11 | ## How does Matrix compare to other platforms? 12 | 13 | If the [reasons](../#why-matrix) did not convince you, then this page will show you how your existing platform compares with Matrix. Note that the guide only judges the de/merits of the platform itself, not its population (as network effect is used to keep users in [walled gardens](https://en.wikipedia.org/wiki/Closed_platform)). This comparison is also somewhat general, and improvements are welcomed. However, remember that an advantage that Matrix has is that with adequate setup, you can [bridge](../features/#all-about-bridges) other platforms! 14 | 15 | Before we begin, it should be reminded that Matrix is a mix of security and socialization. Recall what we've wrote: 16 | 17 | > Matrix is the long-awaited middleground between one-to-one messaging platforms (Facebook Messenger, WhatsApp, iMessages, SMS...) and social/collaborative messaging platforms (Discord, Slack, Telegram...): It offers an appropriate degree of privacy while allowing you to socialize/collaborate with others. 18 | 19 | This means that Matrix *on its own*[^1] provides a certain degree of flexibility, allowing you to have more private conversations and open group collaborations at the same time, rather that providing absolute security for everything. If you insist on the latter, this guide suggests you to look elsewhere. 20 | 21 | The comparisons for [Discord](../matrix-vs-discord) and [Telegram](../matrix-vs-telegram) are written on separate pages. 22 | 23 | ### Centralized platforms 24 | 25 | Most platforms you see on the market fall into this category. 26 | 27 | The most important advantage of Matrix over these platforms is that Matrix is decentralized. This means that: 28 | 29 | * There is no one entity controlling the day-to-day operations[^2] of the entire platform. 30 | * This prevents any entity from making unilateral decisions, particularly those that may hurt users. 31 | * While incidents (such as outage, acquisitions, and shutdowns) may affect one instance, they do not affect the entire platform, ensuring its longetivity and stability. (For example, incidents like [the Facebook outage on Oct 4, 2021](https://en.wikipedia.org/wiki/2021_Facebook_outage), where a configuration error on one server brought several Facebook-owned platforms to a complete halt, cannot happen to a federated platform.) 32 | * You can either trust one of the several entities (an instance) that holds your data, or hold the data yourself (by running an instance), whereas using centralized platforms requires you to trust the sole owner of the platform, who exclusively receives your private data and can do anything with it in any fashion it wants. 33 | 34 | Matrix allows users to encrypt their message contents, whereas: 35 | 36 | * Centralized unencrypted platforms (such as Discord, Facebook Messenger, Instagram Direct, Revolt[^3], Slack, Snapchat, Telegram cloud chats[^4], QQ and WeChat) allow unobscured access to messages by the sole owner of each platform. 37 | * Centralized platforms that do not fully disclose details about their encryption algorithm (such as iMessage, [Line](https://citizenlab.ca/2017/08/linesecurity/), Telegram secure chats[^4], Viber[^5] and WhatsApp[^6]) cannot have their security independently verified. 38 | 39 | Furthermore, 40 | 41 | * Some "secure" platforms (such as Signal and WhatsApp) require you to provide a phone number or email address. Most Matrix homeservers do not require phone numbers. Depending on setup (either selfhost or with certain public homeservers), it may be possible to use Matrix without an email address as well. 42 | * Although Signal receives widespread approval (and is probably the best centralized messaging platform in existence[^7]), its credibility continues to be subjected to ongoing debate: Its US jurisdiction, its dependence on AWS, its hostile stance towards forked clients, its delay in publishing source code, its controversial implementation of the spam detection mechanism... Whereas Matrix is [open](https://matrix.org/blog/2020/01/02/on-privacy-versus-freedom): freedom to choose jurisdiction, freedom from depending on specific third parties, freedom to choose clients, and transparency for everyone. 43 | 44 | ### Session 45 | 46 | Session claims to be decentralized, but since the platform requires an ever-increasing amount[^8] of cryptocurrency stake for each node, running one is unreachable for most people (whereas for Matrix, there exists no such requirement from the platform), so the amount of nodes will eventually reach a finite ceiling, making it only marginally better than Signal. 47 | 48 | ### Another federated platform: XMPP 49 | 50 | XMPP and Matrix are very similar: most of [these](../#why-matrix) also apply to XMPP. The difference is that Matrix is much *much* more intuitive for an ordinary user, whereas XMPP is far from it. 51 | 52 | * XMPP is relatively barebone, which may not be able to serve modern communication needs. 53 | * Clients are spread across different platforms and may support different features differently, making no client one-size-fits-all. 54 | 55 | Furthermore, XMPP is not encrypted by default, but use of OMEMO is also quite widespread. Still, it has the same [metadata problem](https://web.archive.org/web/20211215132539/https://infosec-handbook.eu/articles/xmpp-aitm/) [as Matrix](../#fn:1). However, it is true that XMPP servers are lighter than Matrix, since in XMPP, most of the heavy work is done by the clients, whereas in Matrix, the homeservers need to constantly store things. 56 | 57 | For reference, the official comment from matrix.org is [here](https://matrix.org/faq/#what-is-the-difference-between-matrix-and-xmpp%3F). 58 | 59 | ### Peer-to-peer platforms 60 | 61 | Platforms like Briar, Cwtch and Jami offer much more security, but at a huge cost in terms of utility due to their peer-to-peer nature, requiring participants to be online to receive messages. 62 | 63 | ## Footnotes 64 | 65 | [^1]: Specifically, using the public Matrix federation. Some Matrix implementations (like the French government's *Tchap*) may have utilized closed federations and extended features for specific purposes, thereby providing more communication security. 66 | 67 | [^2]: i.e. Excluding development. But even so, Matrix allows its users to participate in the decision-making process. 68 | 69 | [^3]: However, they [plan](https://github.com/orgs/revoltchat/projects/3/views/1?filterQuery=encr) to offer encryption in the undetermined future. 70 | 71 | [^4]: Cloud chat is not encrypted in transit and is thus considered unencrypted. Secure chat uses Telegram's own MTProto protocol, comes with serious limitations on features, and is not widely used. 72 | 73 | [^5]: Viber claims to use an encryption mechanism that is similar - but not identical - to the Signal protocol. 74 | 75 | [^6]: Although Signal [claims](https://signal.org/blog/whatsapp-complete/) that WhatsApp is using the Signal protocol, WhatsApp's closed-source nature prevents independent verification. 76 | 77 | [^7]: In terms of both tech and reach (hence excluding Threema). 78 | 79 | [^8]: Relative to fiat currencies. 80 | -------------------------------------------------------------------------------- /guide/matrix-vs-guilded.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Matrix vs. Guilded 3 | layout: page-two-col 4 | nav: false 5 | parent: guide 6 | permalink: guide/matrix-vs-guilded/ 7 | description: It's time to ditch Guilded. Imagine a place where users are actually respected. Join Matrix, the federated chat platform that does exactly that. 8 | order: 5 9 | --- 10 | 11 | ## Matrix vs. Guilded 12 | 13 | Thank you for considering Matrix. Many Discord users have migrated to Guilded after their accounts or communities have been shut down, but this is not recommended, explained below. 14 | 15 | Matrix has been a popular alternative to Guilded, but many people still don't get the why. We will start with why you should move from Guilded to Matrix, followed by comparisons of specific feature and some helpful tips. But before we do that, let's start with... 16 | 17 | ## A Discussion on the Proper Definition of "Server" 18 | 19 | Recall the computing [definition](https://en.wiktionary.org/wiki/server#Noun) of the word "server": 20 | 21 | > 1. A program that provides services to other programs or devices, either in the same computer or over a computer network. 22 | > 23 | > 2. A computer dedicated to running such programs. 24 | 25 | The definitions can hold true for a server for a multiplayer game (eg. Minecraft), a server reserved for a group of people for communication (eg. Mumble & TeamSpeak), and a server where Guilded bots are being operated from. In each case, the server software (such as the Minecraft server jar file) meets definition #1, whereas the server infrastructure (eg. VPS) meets definition #2. 26 | 27 | But that's not the case for a Guilded "server": it's just some data, together with data of other "servers," resting on Guilded's computational servers. A Guilded "server" is not a program on its own, nor has any computational infrastructure been dedicated to any specific "server," thus violating both definitions. Presumably to attract gamers who often utilizes the correct "server" concept, Guilded attempts to equate it to a chat group, muddying the waters for the definition of this technical term. (Hence Guilded refers to "servers" as *teams* in API documentations.) 28 | 29 | ### What about Matrix? 30 | 31 | In Matrix, a *homeserver* is a server, in that it meets both definitions: Dedicated infrastructures (definition #2) running [a server software](../#set-up-your-own-homeserver-or-join-an-existing-homeserver) (definition #1). Furthermore, these homeservers, while operated independently of each other and not under the control of a single entity, communicate (transmitting messages and such) with each other using an agreed-upon protocol, thereby keeping the Matrix platform alive. Platforms that use such structure, such as Matrix, [fediverse](https://fediverse.party/en/fediverse) and email, are called federated platforms. 32 | 33 | ## Why not Guilded? 34 | 35 | In the scope of this guide, the key reasons to move from Guilded to Matrix are: 36 | 37 | * **Lack of privacy for private communications**, as private conversations are not only unencrypted, but also actively scanned. 38 | * **Closed source**, thus cannot be independently inspected. 39 | * **Lack of control for private data and no guarantee on reliability**, as Guilded is centralized, not federated. See [here](../matrix-vs-al/#centralized-platforms). 40 | * **Client-server API has serious performance issues**. This is verified by Guilded, has not been resolved despite several attempts. A Guilded channel causes ten times as much data to be retrieved as a similar Matrix room does. 41 | * **Guilded did not allow deleting user accounts until recently**. Prior to June 2021, it was not possible to delete Guilded user accounts; they instead advised to just stop using Guilded. 42 | * **Guilded is owned by Roblox**. 43 | 44 | [Matrix addresses all of the above](../#why-matrix). 45 | 46 | ### Special Note 47 | 48 | Matrix uses free software for its server and client softwares. 49 | 50 | ## Terminologies 51 | 52 | ### Channel & DMs vs. Room 53 | 54 | In Guilded, a place that allows sending text messages is called a channel (if belongs to a "server") or a DM. 55 | 56 | In Matrix, a place that allows sending text messages is called a room. 57 | 58 | ### "Server" vs. Space 59 | 60 | In Guilded, text channels that are not DMs must be associated with a "server." Thus a "server" can be understood as a collection of channels that share certain settings. 61 | 62 | In Matrix, rooms *can* be included in a Space. A Space can be used in similar fashion to a Discord "server" (controlled by the admins of the constituent rooms) or a "server" folder (controlled by anyone). A Space may also include another Space. Rooms do not share settings with Spaces, although rooms can require Space membership for joining. 63 | 64 | ## Feature comparison 65 | 66 | Note that Matrix does not (and cannot, due to its decentralized nature) paywall features. 67 | 68 | | Feature | Guilded | Matrix | 69 | | ------- | ------- | ------ | 70 | | **Registration** | Requires Roblox account since April 2024. | Depending on homeserver (especially if you're running your own), **email may be optional**, and phone number is usually optional. There is no *automated* human check after registration. | 71 | | Price | Free, effectively subsidized by Roblox the game. | Free for [most homeservers](../../servers) (but please consider donating to them). Hosting a private homeserver may also incur cost (could be [free](https://matrix.org/docs/guides/free-small-matrix-server)). Note that paying (not donation) only affects where your data is hosted and (to a much lesser degree) server performance; it has no effect on features. | 72 | | **Username** | Users are identified by display name (maximum 32 characters) to fellow users, and user UUIDs and roblox user IDs for programming purposes. | Users are identified by their MXID (eg. `@alice:example.com`), composed of the username (must be ASCII characters, upper case letters are not allowed) and the server name (not exceeding 255 characters when combined, including the introducing at symbol and the colon separating the parts). A display name can be optionally added (up to ~65200 bytes)[^7]. | 73 | | Avatar | Static, maximum 25 MB. Can be zoomed. | **See "Attachments" for limits.** Can be zoomed (at least in Element/SchildiChat), in which case the avatar will be shown in the uploaded definition. Animated avatars are **supported**. | 74 | | Profile description and background | **Supported**. | Not supported currently, will be supported using profile rooms. | 75 | | Profile status | **Supported**. Guilded even has a custom status generator. | Effectively not supported[^1]. | 76 | | Nicknames[^2] | **Not supported**. | **Supported** (`/myroomnick`). Up to ~65200 bytes. | 77 | | Forum channels | Supported. | Not supported. | 78 | | Media-only channels | Supported. | Not supported. | 79 | | Specific avatars[^2] | **Not supported**. | [**Supported**](../features/#attachments) (`/myroomavatar`). See "Attachments" for limits. | 80 | | 2FA | Email or TOTP. | Not required for login, but required (QR code, emoji verification, or Security Key) for viewing past encrypted messages. | 81 | | **Text messages** | Maximum 36608 characters (main body section can have up to 4000 characters, the rest has to be placed in the embed cards). Formatted in Markdown. | **Up to ~65200 bytes (up to ~25260 bytes if a formatted message with plain text fallback sent).[^7] [Supports Markdown and HTML.](../features/#text)** | 82 | | Attachments | Maximum 500 MB (25 MB for still images), limited to multimedia and document filetypes[^9]. | **Maximum 50~100 MB, no artificial file type limitations** (for most homeservers; customizable if you run your own homeserver). | 83 | | Reactions | Only emotes (Unicode or custom ones). | Unicode emotes and [text](../features/#reactions). | 84 | | Stickers | **Not supported**. | **Unlimited with setup.** See [here](../features/#stickers). | 85 | | Public read receipts | Not supported. | **Supported.** | 86 | | **Direct messages** | Not encrypted. | **Encrypted by default**, including VoIP. | 87 | | Starting a DM | Depending on privacy settings of the recipient. Friendship and/or mutual "servers" may be required by the recipient. | Initiating a DM solely requires the recipient to accept the request[^3]. Users can leave DMs anytime they wish. | 88 | | **Group chats** | A channel is associated with a "server." You can only join 100 "servers" and own 20 at a time. | A room is standalone, but can be optionally included and associated with a Space, which is just a room linking to other rooms. You can join **unlimited** amount of rooms. | 89 | | VoIP in groups | Supported. | Real-time data using WebRTC, signalling using room state. | 90 | | Organizing chats | Channels in a "server" can only be organized by the "server" owner and moderators with "manage channels" permission, in a many to one fashion into categories and groups, and cannot be moved to another "server" or group once created. A team can have up to 100 groups in it, with up to 350 channels in each. | Rooms can be included within an unlimited amount of Spaces. Spaces may also include other Spaces (similar to Guilded's channel categories and groups). | 91 | | Group chat privacy | You may deny new members from reading messages prior to them being invited / joining. Private threads are only visible to their own members and group/team members with "moderator access" permission to that channel. Teams can choose to make their chat history public, with per-channel granularity. | You may deny new members from reading messages prior to them being invited / joining. You may also allow or deny guest access (such as [Matrix Static](http://view.matrix.org/)) from reading messages. You may also enable encryption[^4]. | 92 | | Publicity | Team URLs are first come first served, however, unused names are reclaimed so often. Teams are searchable by name unless explicitly disabled. | Each homeserver has a room directory which anyone in that homeserver may publish to. Room aliases are usually first come, first served. | 93 | | Invite | Through generating invite or application links, or through shareable addresses. | Through directly inviting users, or through shareable [addresses](../features/#promotion). | 94 | | Permissions in group chats | Single-owner. How long did it take for you to learn role hierarchy? A "server" can only be shut down by its owner, and that affects everyone. Members cannot demote their own permissions. Roles of a member are reset when a member leaves hence do not survive rejoin. | Up to 2^54 power levels (-2^53 to 2^53-1, however I highly doubt you will *ever* reach that limit), with minimal permissions. A user acquires a permission if their power level is equal to or higher than the power level required for the specific permission. Rooms are not owned by any user or server, hence cannot usually forcibly be shut down without coordination. Members can demote their own permissions. Power levels of members survive leave and rejoin. | 95 | | Size limits of group chats | No artificial limits, albeit current implementation behaves badly past approximately ten thousand members. | No artificial limits, albeit current implementations do not perform well with rooms having more than a few tens of thousands of members and a few dozens of homeservers. | 96 | | Bans | Bans are only visible to "server" moderators. One can also see their own ban when they attempt to join a "server", but not the ban reason. | Bans are public to all members, along with the reasons. | 97 | | Disabled and deleted account handling | Deleting an account is irreversible. Messages sent to a "server" from deleted accounts stay unless explicitly removed by somebody else. User name and user settings from deleted accounts are removed. "Servers" owned by accounts deleted by T&S are automatically shut down. "Servers" owned by a manually deleted account is not possible to exist as the account delete API has a precondition of no "server" ownership at the time of the request. | Disabling an account is usually irreversible. Users can cause their messages to be forgotten while disabling their account: in that case, their messages are not sent to further users and servers. Rooms created by disabled accounts stay. | 98 | | **Running a bot** | Public bot API exists, self-botting seems to be tolerated as long as it stays within Guilded and does not propagate to Roblox the game. | You can run bots on any user accounts[^5] [^6]. Selfbotting is permitted (but be nice). | 99 | | **Network access** | **IPv4 and IPv6 supported.** | **Most if not all homeservers participating in the public federation have IPv4 connectivity but IPv6 connectivity varies from homeserver to homeserver.** | 100 | 101 | 102 | ## Helpful Tips 103 | 104 | * Your user colour is chosen by a hash function (varies by app) that takes in your MXID. 105 | 106 | ## Footnotes 107 | 108 | [^1]: Element and SchildiChat has status available as a lab feature, but it is only visible to those who you have a DM with. Statuses are not encrypted. 109 | 110 | [^2]: For Guilded "servers" and for Matrix rooms. 111 | 112 | [^3]: Note that Matrix has no concept of "friends" or "contacts" per se, although the DM list can serve the same purpose. However, user-based contact ignoring exists on Matrix, using two different methods. The former method prevents any and all messages from reaching the recipient, and the latter method using policy rooms hides them client-side by interpreting an ignore list. The latter method is currently only available in Element as a labs feature. 113 | 114 | [^4]: Enabling encryption is irreversible for security reasons. Note that it is pointless to enable encryption in a public room, with one exception: the case you want to have a persistent cryptographic trail of who read the messages. Furthermore, enabling encryption means users will not see messages before their invitation (if applicable) or their entry. 115 | 116 | [^5]: Matrix has no distinction between user and bot accounts (nor is there any dependency between the two). Unless specifically exempted by the homeserver (not needed in most cases), bots have the same ratelimit as other users. In Element and SchildiChat, the user token of an account is available by accessing "User Settings" then "Help & About." When running an autonomous bot, please be courteous and indicate to others (in username or display name) that the account is a bot. Bots that want to control other user accounts need to create an application service, which needs to be approved by an administrator of the homeserver that the bot is using. 117 | 118 | [^6]: If your app/bot is good, then [matrix.org would love to hear from you (with the potential possibility of featuring you on their blog)!](https://matrix.to/#/#thisweekinmatrix:matrix.org) 119 | 120 | [^7]: Limited by Matrix event size limits. The current event size limit is specified to be 65536 bytes. Formatted message size limit assuming the formatted body takes approximately twice as much as plain text body. 121 | 122 | [^8]: Most Matrix servers are known to keep the pre-redaction content of the event for a week, while immediately sending the redaction instruction to their fellow users. Again, redactions are basically a free-for-all matter. 123 | 124 | [^9]: The client and the server rejects upload when you attempt to upload a disallowed file type. 125 | -------------------------------------------------------------------------------- /guide/matrix-vs-telegram.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Matrix vs. Telegram 3 | layout: page-two-col 4 | nav: false 5 | parent: guide 6 | permalink: guide/matrix-vs-telegram/ 7 | description: It's time to ditch Telegram. Join Matrix, the federated chat platform that actually respects you. 8 | order: 6 9 | --- 10 | 11 | ## Matrix vs. Telegram 12 | 13 | Thank you for considering Matrix. We will start with why you should move from Telegram to Matrix, followed by comparisons of specific feature and some helpful tips. 14 | 15 | ## Why not Telegram? 16 | 17 | In the scope of this guide, the key reasons to move from Telegram to Matrix are: 18 | 19 | * **Lack of privacy for private communications** since the default option is Cloud chat, which is not end-to-end encrypted. Secure chat also comes with significant feature limitations, such as no portability across devices, not to mention Telegram's use of its own protocol. 20 | * **Ads**, even if it's just for popular channels. Third-party clients are also not allowed to opt them out, although nobody knows how Telegram will enforce that restriction. 21 | * Involvement with **cryptocurrency** as a mean to monetize. 22 | * **Phone number requirement.** 23 | * Despite Telegram claiming to intervene only minimally on legal content, it nevertheless made **controversial moderation decisions**, such as [shutting down Russian political bots](https://en.wikipedia.org/wiki/Telegram_(software)#2021_shutdown_of_Russian_political_bots). (Matrix, on the other hand, is decentralized, which makes censorship technically difficult.) 24 | * **Questionable political alignment.** See [here](https://plush.city/@PsyChuan/112336464469767051). 25 | * **Telegram servers are closed source.** (Says to defend against state censorship...?) 26 | * **Lack of control for private data and no guarantee on reliability**, as Telegram is centralized, not federated. See [here](../matrix-vs-al/#centralized-platforms). 27 | 28 | Despite recent studies, Telegram's use of its own MTProto protocol remains a debated subject, which will be left up to you. 29 | 30 | ## Feature comparison 31 | 32 | | Feature | Telegram | Matrix | 33 | | ------- | -------- | ------ | 34 | | **Registration** | Requires phone number or [purchasing so called "anonymous numbers" to be used in place of phone number](https://telegram.org/blog/ultimate-privacy-topics-2-0#sign-up-without-a-sim-card). | **Phone number is usually optional.** Depending on homeserver, **email is commonly required**. There is usually no human check after registration. | 35 | | **Username** | Users are identified by phone number or username (if set up, 5\~32 alphanumeric characters) to fellow users, and user IDs (around 9\~10 digits) for programming purposes. A display name can be added (no limit). | Users are identified by their MXID (eg. `@alice:example.com`), composed of the username (must be ASCII characters, upper case letters are not allowed) and the server name (not exceeding 255 characters when combined, including the introducing at symbol and the colon separating the parts). A display name can be optionally added (up to ~65200 bytes)[^2]. | 36 | | Avatar | Static or animated; limit unknown. Can be zoomed; the returned avatar has a maximum definition of 640x640. | **See "Attachments" for limits.** Can be zoomed (at least in Element/SchildiChat), in which case the avatar will be shown in the uploaded definition. Animated avatars are supported and will be rendered (at least in Element/SchildiChat). | 37 | | Profile description | **Supported**. | Will be supported using profile rooms. Not supported currently. | 38 | | Room-specific nicknames | Group admins can talk on behalf of the whole group or [have custom title shown next to their name](https://t.me/TelegramTips/68). | **Supported** (`/myroomnick`). Up to ~65200 bytes. [^2] | 39 | | Room-specific avatars | Not supported. | [**Supported**](../features/#attachments) (`/myroomavatar`). See "Attachments" for limits. | 40 | | 2FA | One-time token sent to another session. | Not required for login, but required (QR code, emoji verification, or Security Key) for viewing past encrypted messages. | 41 | | **Text messages** | Maximum 4096 characters. Supports Markdown. | **Up to ~65200 bytes (up to ~21270 bytes if a formatted message with plain text fallback sent).[^2] [Supports Markdown and HTML.](../features/#text)** | 42 | | Attachments | **Maximum 2 GB for free users and 4 GB for Premium users.** | Maximum 50~100 MB (for most homeservers; customizable if you run your own homeserver). | 43 | | Reactions | Free users can use limited set of reactions, [premium users can use custom emoji](https://t.me/premium/10). | All unicode emotes and [text](../features/#reactions). Custom emojis are supported in certain clients. | 44 | | Stickers | Up to 200 packs of 120 static or 50 animated each. | **Unlimited (static or animated) with setup.** See [here](../features/#stickers). | 45 | | Public read receipts | Supported ambiguously. | **Supported.** | 46 | | **Direct messages** | Not encrypted unless explicitly opted into secret chat, which cannot be carried across devices. VoIP is encrypted. | **Encrypted by default**, including VoIP. | 47 | | **Group chats** | You can join up to 500 groups and channels. | You can join an **unlimited** amount of rooms. | 48 | | VoIP in groups | Supported. | Limited Support via integration with Jitsi. Expected to be replaced by a better solution during 2022. | 49 | | Organizing chats | You can pin or archive groups (similar to favourite and low priority on Element/SchildiChat). | Rooms can be included within an unlimited amount of Spaces. Spaces may also include other Spaces. | 50 | | Group chat privacy | You may deny new members from reading more than 100 messages prior to them joining. | You may deny new members from reading messages prior to them being invited / joining. You may also allow or deny guest access (such as [Matrix Static](http://view.matrix.org/)) from reading messages. You may also enable encryption[^1]. | 51 | | Publicity | Any group or channel set to public can be listed in search results, but how they are shown is arbitrary, as global search is not always visible to users. | Each homeserver has a room directory which anyone in that homeserver may publish to. | 52 | | Invite | Through directly inviting users, or through generating invite links. | Through directly inviting users, or through shareable [addresses](../features/#promotion). | 53 | | Group chat permissions | Permissions of each administrator are set manually. All admins are equal (except owner). Permissions of a member do not survive leave and rejoin. | 2^54 power levels (I think it's -2^53 to 2^53-1, however I highly doubt you will *ever* reach that limit). A user acquires a permission if their power level is equal to or higher than the power level required for the specific permission. Power levels of members survive leave and rejoin. | 54 | | Size limits of group chats | Up to 100k members in groups, unlimited in one-to-many channels. | No artificial limits, albeit current implementations do not perform well with rooms having more than a few tens of thousands of members and a few dozens of homeservers. | 55 | | Disabled and deleted account handling | Disabling an account is reversible until one year after disabling. Accounts that do not login for a year get automatically deleted. Messages from deleted accounts survive for one more year from deletion. | Disabling an account is usually irreversible. Messages from disabled accounts are not sent to further users and servers. Rooms created by disabled accounts stay. | 56 | | Ads | Popular channels now show ads for free users. [Users with premium subscription do not see ads](https://telegram.org/faq_premium#q-what-features-are-included) | It is technically possible for a homeserver to insert ads, but **there are no known occurrences**. | 57 | | **Network access** | **IPv4 supported, [IPv6 broken](https://flameeyes.blog/2017/08/06/ipv6-horror-story-telegram/)**. | ***Most if not all homeservers participating in the public federation have IPv4 connectivity but IPv6 connectivity varies from homeserver to homeserver.**. | 58 | 59 | 60 | ## Helpful Tips 61 | 62 | There is a [bridge](https://t2bot.io/telegram) that allows you to connect a Telegram group with a Matrix room. 63 | 64 | ## Footnotes 65 | 66 | [^1]: Enabling encryption is irreversible for security reasons. Note that it is pointless to enable encryption in a public room, with one exception: the case you want to have a persistent cryptographic trail of who read the messages. Furthermore, enabling encryption means users will not see messages before their invitation (if applicable) or their entry. 67 | 68 | [^2]: Limited by Matrix event size limits. The current event size limit is specified to be 65536 bytes. Formatted message size limit assuming the formatted body takes approximately twice as much as plain text body. 69 | -------------------------------------------------------------------------------- /guide/popular-rooms.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Popular rooms/spaces 3 | layout: page-two-col 4 | nav: false 5 | parent: guide 6 | permalink: guide/popular-rooms/ 7 | description: Here are some popular rooms/spaces on Matrix! 8 | order: 2 9 | --- 10 | 11 | ## A Collection of Popular Rooms/Spaces 12 | 13 | Below are some active rooms with minimal bridging that you may be interested in. 14 | 15 | You can search for other rooms on [MatrixRooms.info](https://matrixrooms.info), but please note that the results are unfiltered, and you should exercise caution in selecting rooms. 16 | 17 |
18 | Unlike the homeserver list, this list does not require explicit consent: as long as the room/space is reasonably public (eg. on room directories that can be publicly searched), it can be included here. Please let me know (see footer) of any popular room/space and I will consider. 19 |
20 | 21 | ### Technology 22 | 23 | #### Privacy & Security 24 | 25 | * Cybersec [`#cyber-space:matrix.org`](https://matrix.to/#/#cyber-space:matrix.org) 26 | * Infosec.Exchange's lounge [`#infoseclounge:infosec.exchange`](https://matrix.to/#/#infoseclounge:infosec.exchange) 27 | * [Privacy Guides](https://privacyguides.org) [`#privacyguides:matrix.org`](https://matrix.to/#/!XvLsfIFskBFvyfBuel:pixie.town?via=tchncs.de) 28 | * Privacy Frontends [`#alternative-frontends:tchncs.de`](https://matrix.to/#/#alternative-frontends:tchncs.de): a collection of discussion rooms of various open source alternative frontends of proprietary websites. 29 | * [PrivSec.dev](https://privsec.dev) [`#PrivSec.dev-space:arcticfoxes.net`](https://matrix.to/#/#PrivSec.dev-space:arcticfoxes.net) 30 | 31 | #### Linux 32 | 33 | * Arch Linux [`#public-space:archlinux.org`](https://matrix.to/#/#public-space:archlinux.org) 34 | * Fedora [`#fedora-space:fedoraproject.org`](https://matrix.to/#/%23fedora-space:fedoraproject.org) 35 | * Ubuntu [`#community:ubuntu.com`](https://matrix.to/#/#community:ubuntu.com) 36 | 37 | #### Others 38 | 39 | * [Codeberg](https://codeberg.org) [`#codeberg-space:matrix.org`](https://matrix.to/#/#codeberg-space:matrix.org) 40 | * [FOSDEM](https://fosdem.org) [`#home:fosdem.org`](https://matrix.to/#/#home:fosdem.org) 41 | * #selfhosted [`#selfhosted:matrix.org`](https://matrix.to/#/#selfhosted:matrix.org) 42 | 43 | ### LGBTQ+ 44 | 45 | * [The Apothecary](https://the-apothecary.club/) [`#community:the-apothecary.club`](https://matrix.to/#/#community:the-apothecary.club) 46 | * [FurryMatrix.info](https://furrymatrix.info/) and [squirrel.rocks](https://matrix.squirrel.rocks/furry_servers) contains info pertaining to furry rooms and homeservers on Matrix. 47 | 48 | ### Hobbies 49 | 50 | * Ham Radio Space [`#ham-radio-space:matrix.m0aws.co.uk`](https://matrix.to/#/#ham-radio-space:matrix.m0aws.co.uk): see [here](https://m0aws.co.uk/matrix/) for details. 51 | * Matrix United [`#matrixunited-space:matrix.org`](https://matrix.to/#/#matrixunited-space:matrix.org) 52 | 53 | ### Miscellaneous 54 | 55 | * Cyberia.club [`#cyberia-space:cyberia.club`](https://matrix.to/#/%23cyberia-space:cyberia.club) 56 | * Cybre.space [`#meta:cybre.space`](https://matrix.to/#/#meta:cybre.space) 57 | * Offtopic Space [`#offtopic-space:envs.net`](https://matrix.to/#/#offtopic-space:envs.net): a collection of off-topic rooms of various communities. 58 | * Stickers and emoji [`#stickers-and-emojis:tastytea.de`](https://matrix.to/#/#stickers-and-emojis:tastytea.de): a collection of rooms serving MSC2545 sticker packs. 59 | -------------------------------------------------------------------------------- /guide/qna.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Questions & Answers 3 | layout: page-two-col 4 | nav: false 5 | parent: guide 6 | permalink: guide/qna/ 7 | order: 8 8 | --- 9 | 10 | ## Questions and Answers 11 | 12 | Miscellaneous clarifications and explanations. 13 | 14 | ## Other Matrix Guides 15 | 16 | The following guides contain configurations that are specific to a homeserver, but most of the guidances apply across the Matrix federation: 17 | 18 | * [matrix-help.envs.net](https://matrix-help.envs.net/) 19 | * [Matrix at TU Dresden](https://doc.matrix.tu-dresden.de/en/) 20 | 21 | ## About This Guide 22 | 23 | This guide is written by [Austin Huang](https://austinhuang.me) with the help of many people, whose feedback is greatly appreciated. 24 | 25 | The `joinmatrix.org` domain is donated by [Jonah Aragon](https://www.jonaharagon.com/), whose contribution is also greatly appreciated. 26 | 27 | All contents of this guide are licensed under [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/). Please link back to this website. 28 | 29 | The logo is a derivative work of: 30 | 31 | * [Matrix icon](https://commons.wikimedia.org/wiki/File:Matrix_icon.svg). 32 | * [Green Stylish Arrow](https://commons.wikimedia.org/wiki/File:Green_Stylish_Arrow.svg). Copyright 2015 Vitor Mazuco. CC BY-SA 4.0. 33 | 34 | ### Privacy 35 | 36 | This site is hosted on GitHub pages and thus [GitHub Privacy Statement](https://docs.github.com/en/github/site-policy/github-privacy-statement) applies. 37 | 38 | This site uses analytics from [GoatCounter](https://goatcounter.com). It's [open source](https://github.com/zgoat/goatcounter). Here are [public stats for this website](https://joinmatrix.goatcounter.com) (The authors can see no more info than what you can see there) and [their privacy policy](https://www.goatcounter.com/privacy). You can disable this by blocking `gc.zgo.at` through your adblocker. 39 | 40 | No cookies. 41 | 42 | ### Translations 43 | 44 | You can translate this guide to your own language. However, to be endorsed by this website, the translations are subject to the following conditions: 45 | 46 | 1. Remember the human. Do *whatever* you think is best for the advocacy of Matrix usage in your cultural context. This means that you have flexibility over how exactly to translate the texts. 47 | 2. The [homeserver list](../../servers) is off-limits. You may, however, incorporate relevant information (such as how to read the list) in the guide. You may also suggest (but not endorse) homeservers according to your cultural context. 48 | 3. You are under no obligation to use any specific theme or any static site generator at all - All I ask is please make sure the translations form a standalone website that is good-looking. 49 | 4. You are responsible for hosting that allows a custom subdomain (GitHub/GitLab/Gitea pages is fine). 50 | 51 | After you've done that, please [create an issue](https://github.com/austinhuang0131/joinmatrix/issues) to get your CNAME (language code `.joinmatrix.org`). 52 | 53 | ## Questions about Matrix 54 | 55 | Check out [the official matrix.org FAQ](https://matrix.org/faq) as well! 56 | 57 | ### For average users, is Matrix trustworthy? 58 | 59 | The tech? Yes, most of the components of Matrix are open source. The only exception that this guide is aware of is the Scalar integration manager, which Element and SchildiChat use as default. (The open source [Dimension](https://github.com/turt2live/matrix-dimension) integration manager has been abandoned.) 60 | 61 | The operators? Note that you have the freedom to pick [your homeserver](../../servers). Do you trust big corporations, or small guys that are actually enthusiastic about privacy? Do your research. 62 | 63 | The only thing that may negatively affect trust is Matrix's use of a central identity server `vector.im` (`matrix.org` is just an alias of it), which handles contact discovery through email. However, as of late 2021 it can only be enabled on an opt-in basis. Furthermore, you can start a DM based on their MXID, so email is not required. 64 | 65 | ### How is Matrix funded? 66 | 67 | * The Matrix.org Foundation C.I.C., who develops the protocol and runs the matrix.org homeserver, is funded ["through a combination of community support, corporate sponsorship, and grant funding"](https://matrix.org/docs/legacy/faq/#how-is-matrix-org-funded). 68 | * New Vector Ltd, who develops Element and offers commercial services related to Matrix, is funded by [investors](https://element.io/blog/tag/funding/). 69 | * Homeservers are independently funded. Some solicit donations. Others operate homeservers as part of a business. 70 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Chat Freely with Matrix. 3 | description: Imagine a place... where you are welcomed to be yourself, where you have control on your data, and where you can talk more privately, while also allowing you to socialize with others. Join Matrix, the federated chat platform that actually respects you. 4 | layout: default 5 | --- 6 |
7 |
8 |
9 |

Chat Freely
with Matrix

10 |

11 | Imagine a place... where you are welcomed to be yourself, where you have control on your data, and where you can talk more privately, while also allowing you to socialize with others. 12 |

13 |

14 | Tell me more! 15 | How can I join? 16 |

17 |
18 |
19 |
20 |

Get started in minutes:

21 |
    22 |
  1. Pick a homeserver to use Matrix with
  2. 23 |
  3. Register an account
  4. 24 |
  5. Join some rooms to start your exploration
  6. 25 |
  7. Have fun chatting!
  8. 26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | Abstract screenshot of Element 36 |
37 |
38 |

Yet another chat platform?

39 |

I get it, you would say that because you're annoyed by Discord, skeptical of Telegram, angered by Facebook, tired of Slack, frustrated by XMPP, and bored of IRC. No need to go back to the good ol' email: There is a greener pasture waiting for you, and - you guessed it right - it's Matrix!

40 |
    41 |
  • End-to-end encryption to protect your private messages!
  • 42 |
  • Retain control of your data, without compromising access to the Matrix federation - Run your own server, or join an existing server!
  • 43 |
  • Got friends who just won't come over? Bridges to existing platforms allow you to stay in touch with them!
  • 44 |
  • Open source software means you can audit, customize, and improve Matrix yourself!
  • 45 |
  • Matrix is not centralized: No need to rely on the big tech for your basic needs!
  • 46 |
  • A platform of the people, by the people, for the people!
  • 47 |
48 |

Learn more about Matrix

49 |
50 |
51 |
52 |
53 | 81 | 82 | -------------------------------------------------------------------------------- /node_modules/primer-alerts/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 GitHub Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/primer-alerts/index.scss: -------------------------------------------------------------------------------- 1 | // support files 2 | @import "primer-support/index.scss"; 3 | @import "./lib/flash.scss"; 4 | -------------------------------------------------------------------------------- /node_modules/primer-alerts/lib/flash.scss: -------------------------------------------------------------------------------- 1 | // Default flash 2 | // stylelint-disable selector-no-type 3 | .flash { 4 | position: relative; 5 | padding: 15px; 6 | font-size: 14px; 7 | line-height: 1.5; 8 | color: $flash-text-blue; 9 | background-color: $flash-bg-blue; 10 | border: 1px solid $flash-border-blue; 11 | border-radius: 3px; 12 | 13 | p:last-child { 14 | margin-bottom: 0; 15 | } 16 | } 17 | 18 | // Contain the flash messages 19 | .flash-messages { 20 | margin-bottom: 20px; 21 | } 22 | 23 | // Close button 24 | .flash-close { 25 | float: right; 26 | width: 34px; 27 | height: 44px; 28 | margin: -11px; 29 | line-height: 40px; 30 | color: inherit; 31 | text-align: center; 32 | cursor: pointer; 33 | // Undo `