{ "module": "matrix", "version": "1", "capabilities": [ "container-runtime" ], "listens": [ { "name": "client", "port": 6167, "protocol": "tcp", "from": "mesh", "why": "Conduit's client-server and federation APIs over plain HTTP. Both arrive through the route on 443: Conduit answers /.well-known/matrix/server with :443, so other homeservers federate through the proxy and nothing needs the traditional 8448" }, { "name": "web", "port": 80, "protocol": "tcp", "from": "mesh", "why": "Element Web, the static browser client, served by the image's nginx; reached through its route" } ], "requires": [ "route" ], "contributes": { "route": { "homeserver": { "label": "matrix", "endpoint": "client" }, "element": { "label": "element", "endpoint": "web" } } }, "binds": { "route": "${dir:state}/route.json" }, "data": { "own": [ { "id": "db", "path": "${dir:db}", "class": "valuable", "why": "every room, message and account" } ] }, "config": { "default_server_name": { "type": "string", "description": "Element's default_server_name setting of config.json: the homeserver Element signs in to by default, by name; the file's default is the module's own route.", "trusted": true, "default": "${bound:route:name-homeserver}" }, "default_server_config": { "type": "object", "description": "Element's default_server_config setting of config.json: the homeserver and identity server Element uses by default, by URL.", "trusted": true, "default": { "m.homeserver": { "base_url": "https://${bound:route:name-homeserver}" }, "m.identity_server": { "base_url": "https://vector.im" } } }, "brand": { "type": "string", "description": "Element's brand setting of config.json: the name Element shows itself as.", "trusted": true, "default": "Element" }, "integrations_ui_url": { "type": "string", "description": "Element's integrations_ui_url setting of config.json: the integration manager's page, a URL.", "trusted": true, "default": "https://scalar.vector.im/" }, "integrations_rest_url": { "type": "string", "description": "Element's integrations_rest_url setting of config.json: the integration manager's API, a URL.", "trusted": true, "default": "https://scalar.vector.im/api" }, "integrations_widgets_urls": { "type": "list", "description": "Element's integrations_widgets_urls setting of config.json: the URLs whose widgets Element trusts as the integration manager's.", "trusted": true, "default": [ "https://scalar.vector.im/_matrix/integrations/v1", "https://scalar.vector.im/api", "https://scalar-staging.vector.im/_matrix/integrations/v1", "https://scalar-staging.vector.im/api", "https://scalar-staging.riot.im/scalar/api" ] }, "bug_report_endpoint_url": { "type": "string", "description": "Element's bug_report_endpoint_url setting of config.json: where Element sends a bug report, a URL; its default here is empty, and the file's own value (Element's, naming outside servers) stays in the file and is never replaced unless this is set.", "trusted": true, "default": "" }, "uisi_autorageshake_app": { "type": "string", "description": "Element's uisi_autorageshake_app setting of config.json: the app name Element files an automatic report of an undecryptable message under.", "trusted": true, "default": "element-auto-uisi" }, "show_labs_settings": { "type": "boolean", "description": "Element's show_labs_settings setting of config.json: whether Element shows its Labs settings.", "trusted": true, "default": true }, "room_directory": { "type": "object", "description": "Element's room_directory setting of config.json: the servers whose room directories Element offers; its default here is empty, and the file's own value (Element's, naming outside servers) stays in the file and is never replaced unless this is set.", "trusted": true, "default": {} }, "enable_presence_by_hs_url": { "type": "object", "description": "Element's enable_presence_by_hs_url setting of config.json: whether Element shows presence, per homeserver URL.", "trusted": true, "default": { "https://matrix.org": false, "https://matrix-client.matrix.org": false } }, "terms_and_conditions_links": { "type": "list", "description": "Element's terms_and_conditions_links setting of config.json: the links Element shows as its terms, each a URL and its text; its default here is empty, and the file's own value (Element's, naming outside servers) stays in the file and is never replaced unless this is set.", "trusted": true, "default": [] }, "features": { "type": "object", "description": "Element's features setting of config.json: Element's feature switches, each on or off.", "trusted": true, "default": { "feature_video_rooms": true, "feature_rust_crypto": true } }, "element_call": { "type": "object", "description": "Element's element_call setting of config.json: where Element starts a call with Element Call, a URL.", "trusted": true, "default": { "url": "https://call.element.dev" } } }, "resources": [ { "id": "state", "type": "directory", "mode": "0700", "place": "." }, { "id": "db", "type": "directory", "mode": "0700" }, { "id": "conduit-conf", "type": "file", "path": "${dir:state}/conduit.toml", "mode": "0644", "template": "files/conduit.toml", "names-on-purpose": { "matrix.org": "the federation's public key server, trusted by default; the world's, not this mesh's" } }, { "id": "element-conf", "type": "file", "path": "${dir:state}/element.json", "mode": "0644", "merge": "json", "takes-config": ["default_server_name", "default_server_config", "brand", "integrations_ui_url", "integrations_rest_url", "integrations_widgets_urls", "bug_report_endpoint_url", "uisi_autorageshake_app", "show_labs_settings", "room_directory", "enable_presence_by_hs_url", "terms_and_conditions_links", "features", "element_call"], "template": "files/element.json", "names-on-purpose": { "matrix.org": "the public room directory and the federation's largest homeserver; the world's", "matrix-client.matrix.org": "the same homeserver's client endpoint; the world's", "vector.im": "Element's public identity server; the world's", "scalar.vector.im": "Element's public integration manager; the world's", "scalar-staging.vector.im": "Element's staging integration manager, named by the upstream default config; the world's", "scalar-staging.riot.im": "the same, under its former name; the world's", "element.io": "Element's bug reports, privacy and cookie pages; the world's", "gitter.im": "a public room directory; the world's", "libera.chat": "a public room directory; the world's", "call.element.dev": "Element Call's public instance; the world's" } }, { "id": "net", "type": "network", "name": "matrix" }, { "id": "homeserver", "type": "container", "name": "matrix", "image": "matrixconduit/matrix-conduit@sha256:b0d24248e94f944ca49f90f10c429e3d65f4472bdde25661ecea9840134fb133", "network": "matrix", "env": { "CONDUIT_CONFIG": "/etc/conduit/conduit.toml" }, "ports": [ "6167" ], "volumes": [ "${dir:db}:/var/lib/matrix-conduit", "${dir:state}/conduit.toml:/etc/conduit/conduit.toml:ro" ], "restart-on": [ "conduit-conf" ] }, { "id": "element", "type": "container", "name": "element-web", "image": "vectorim/element-web@sha256:a8f415462ab8d2600a592ba1b92bea51efe5a4d10eb738aab9bed769f7099613", "health": { "kind": "runtime" }, "network": "matrix", "ports": [ "80" ], "volumes": [ "${dir:state}/element.json:/app/config.json:ro" ], "restart-on": [ "element-conf" ] } ], "build": { "artifacts": [ { "name": "files", "kind": "archive", "from": "files" } ] } }