{"id":27219792,"url":"https://github.com/etkecc/synapse-admin","last_synced_at":"2026-01-15T03:15:02.875Z","repository":{"id":332053246,"uuid":"848107360","full_name":"etkecc/synapse-admin","owner":"etkecc","description":"A maintained fork of the admin console for (Matrix) Synapse homeservers, including additional features","archived":false,"fork":false,"pushed_at":"2026-01-12T09:29:27.000Z","size":7454,"stargazers_count":270,"open_issues_count":4,"forks_count":18,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-12T16:36:44.875Z","etag":null,"topics":["matrix-org","synapse","synapse-admin"],"latest_commit_sha":null,"homepage":"https://admin.etke.cc","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/etkecc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"liberapay":"etkecc"}},"created_at":"2024-08-27T06:28:35.000Z","updated_at":"2026-01-12T09:15:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/etkecc/synapse-admin","commit_stats":null,"previous_names":["etkecc/synapse-admin"],"tags_count":40,"template":false,"template_full_name":null,"purl":"pkg:github/etkecc/synapse-admin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etkecc%2Fsynapse-admin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etkecc%2Fsynapse-admin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etkecc%2Fsynapse-admin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etkecc%2Fsynapse-admin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/etkecc","download_url":"https://codeload.github.com/etkecc/synapse-admin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etkecc%2Fsynapse-admin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28442250,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T00:55:22.719Z","status":"online","status_checked_at":"2026-01-15T02:00:08.019Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["matrix-org","synapse","synapse-admin"],"created_at":"2025-04-10T06:02:50.166Z","updated_at":"2026-01-15T03:15:02.868Z","avatar_url":"https://github.com/etkecc.png","language":"TypeScript","funding_links":["https://liberapay.com/etkecc"],"categories":["TypeScript"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Synapse Admin Logo\" src=\"./public/images/logo.webp\" height=\"140\" /\u003e\n  \u003ch3 align=\"center\"\u003e\n    Synapse Admin\u003cbr\u003e\n    \u003ca href=\"https://matrix.to/#/#synapse-admin:etke.cc\"\u003e\n      \u003cimg alt=\"Community room\" src=\"https://img.shields.io/badge/room-community_room-green?logo=matrix\u0026label=%23synapse-admin%3Aetke.cc\"\u003e\n    \u003c/a\u003e\u003cbr\u003e\n    \u003ca href=\"./LICENSE\"\u003e\n      \u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/etkecc/synapse-admin\"\u003e\n    \u003c/a\u003e\n  \u003c/h3\u003e\n  \u003cp align=\"center\"\u003eFeature-packed and visually customizable: A better way to manage your Synapse homeserver.\u003c/p\u003e\n\u003c/p\u003e\n\n---\n\n![Login form showing dark and light modes](./screenshots/auth.webp)\n![Screenshots](./screenshots/screenshots.jpg)\n\n\u003c!-- vim-markdown-toc GFM --\u003e\n\n* [Fork differences](#fork-differences)\n  * [Availability](#availability)\n    * [IPFS](#ipfs)\n  * [Changes](#changes)\n    * [exclusive for etke.cc customers](#exclusive-for-etkecc-customers)\n  * [Development](#development)\n  * [Support](#support)\n* [Configuration](#configuration)\n  * [Prefilling login form](#prefilling-login-form)\n  * [Restricting available homeserver](#restricting-available-homeserver)\n  * [Configuring CORS credentials](#configuring-cors-credentials)\n  * [Protecting appservice managed users](#protecting-appservice-managed-users)\n  * [Adding custom menu items](#adding-custom-menu-items)\n  * [Enabling external auth provider-compatible mode](#enabling-external-auth-provider-compatible-mode)\n* [Usage](#usage)\n  * [Supported Synapse](#supported-synapse)\n  * [Prerequisites](#prerequisites)\n  * [Use without install](#use-without-install)\n  * [Step-By-Step install](#step-by-step-install)\n    * [Steps for 1)](#steps-for-1)\n    * [Steps for 2)](#steps-for-2)\n    * [Steps for 3)](#steps-for-3)\n  * [Serving Synapse Admin on a different path](#serving-synapse-admin-on-a-different-path)\n* [Development](#development-1)\n\n\u003c!-- vim-markdown-toc --\u003e\n\n## Fork differences\n\nWith [Awesome-Technologies/synapse-admin](https://github.com/Awesome-Technologies/synapse-admin) as the upstream,\nthis fork introduces numerous enhancements to improve usability and extend functionality,\nincluding support for authenticated media, advanced user management options, and visual customization.\nThe full list is described below in the [Changes](#changes) section.\n\n### Availability\n\n* As a core/default component on [etke.cc](https://etke.cc/?utm_source=github\u0026utm_medium=readme\u0026utm_campaign=synapse-admin)\n* As a standalone app on [admin.etke.cc](https://admin.etke.cc)\n* As a prebuilt distribution on [GitHub Releases](https://github.com/etkecc/synapse-admin/releases)\n* As a Docker container on [Docker Hub](https://hub.docker.com/r/etkecc/synapse-admin) and [GitHub Container Registry](https://github.com/etkecc/synapse-admin/pkgs/container/synapse-admin)\n* As a component in [Matrix-Docker-Ansible-Deploy Playbook](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/configuring-playbook-synapse-admin.md)\n* As a [Nix package](https://search.nixos.org/packages?show=synapse-admin-etkecc) maintained by [@Defelo](https://github.com/Defelo)\n* As a [Arch Linux AUR package](https://aur.archlinux.org/packages/synapse-admin-etke-git) maintained by [@drygdryg](https://github.com/drygdryg)\n\n#### IPFS\n\n\u003e Maintained by [Fеnикs (@fenuks:sibnsk.net)](https://matrix.to/#/@fenuks:sibnsk.net)\n\n**Latest version**\n\n`/ipns/synapse-admin.sibnsk.net` (dnslink key `/ipns/k51qzi5uqu5dj91scsxoqu0ebmy7uqajrt9ohl98vs7fl7l429h0chgozk58i2`)\n\n**Archive**\n\n`/ipns/synapse-admin-archive.sibnsk.net` (dnslink key `/ipns/k51qzi5uqu5dhxwc36sld1hn6jn935k71ww8rdyqomrnqcqucixy7re08qeu7z`)\n\n### Changes\n\n_the list will be updated as new changes are added_\n\nThe following changes are already implemented:\n\n* 🛑 [Prevent admins from deleting themselves](https://github.com/etkecc/synapse-admin/pull/1)\n* 🐛 [Fix user's default tab not being shown](https://github.com/etkecc/synapse-admin/pull/8)\n* 🔑 [Add identifier when authorizing with password](https://github.com/Awesome-Technologies/synapse-admin/pull/601)\n* 🔒 [Add ability to toggle whether to show locked users](https://github.com/Awesome-Technologies/synapse-admin/pull/573)\n* 🖊️ [Fix user's display name in header on user's page](https://github.com/etkecc/synapse-admin/pull/9)\n* 🧹 [Fix footer overlapping content](https://github.com/Awesome-Technologies/synapse-admin/issues/574)\n* 🐋 Switch from nginx to [SWS](https://static-web-server.net/) for serving the app, reducing the size of the Docker image\n* 🔄 [Fix redirect URL after user creation](https://github.com/etkecc/synapse-admin/pull/16)\n* 🔍 [Display actual Synapse errors](https://github.com/etkecc/synapse-admin/pull/17)\n* ⚠️ [Fix base_url being undefined on unsuccessful login](https://github.com/etkecc/synapse-admin/pull/18)\n* 📜 [Put the version into manifest.json](https://github.com/Awesome-Technologies/synapse-admin/issues/507) (later replaced with a proper manifest.json generation on build)\n* 📊 [Federation page improvements](https://github.com/Awesome-Technologies/synapse-admin/pull/583) (using icons)\n* 🚪 [Add UI option to block deleted rooms from being rejoined](https://github.com/etkecc/synapse-admin/pull/26)\n* 🛠️ [Fix required fields check on Bulk registration CSV upload](https://github.com/etkecc/synapse-admin/pull/32)\n* 🛡️ [Fix requests with invalid MXIDs on Bulk registration](https://github.com/etkecc/synapse-admin/pull/33)\n* 🖼️ [Expose user avatar URL field in the UI](https://github.com/etkecc/synapse-admin/pull/27)\n* 🚀 [Upgrade react-admin to v5](https://github.com/etkecc/synapse-admin/pull/40)\n* 🔒 [Restrict actions on specific users](https://github.com/etkecc/synapse-admin/pull/42)\n* 📞 [Add `Contact support` menu item](https://github.com/etkecc/synapse-admin/pull/45)\n* 🧹 [Provide options to delete media and redact events on user erase](https://github.com/etkecc/synapse-admin/pull/49)\n* 🎞️ [Authenticated Media support](https://github.com/etkecc/synapse-admin/pull/51)\n* 👁️ [Better media preview/download](https://github.com/etkecc/synapse-admin/pull/53)\n* 🔐 [Login with access token](https://github.com/etkecc/synapse-admin/pull/58)\n* 📏 [Fix footer causing vertical scrollbar](https://github.com/etkecc/synapse-admin/pull/60)\n* 🍴 [Custom Menu Items](https://github.com/etkecc/synapse-admin/pull/79)\n* 🧑‍💻 [Add user profile to the top menu](https://github.com/etkecc/synapse-admin/pull/80)\n* 🎨 [Enable visual customization](https://github.com/etkecc/synapse-admin/pull/81)\n* 🛋️ [Fix room state events display](https://github.com/etkecc/synapse-admin/pull/100)\n* 🧹 [Sanitize CSV on import](https://github.com/etkecc/synapse-admin/pull/101)\n* ⚙️ Allow setting version using `SYNAPSE_ADMIN_VERSION` environment variable on build (if git is not available)\n* 🧪 [Add option to control user's experimental features](https://github.com/etkecc/synapse-admin/pull/111)\n* 🔑 [Add random password generation on user create/edit form](https://github.com/etkecc/synapse-admin/pull/123)\n* 🚦 [Add option to set user's rate limits](https://github.com/etkecc/synapse-admin/pull/125)\n* 🌐 [Support configuration via /.well-known/matrix/client](https://github.com/etkecc/synapse-admin/pull/126)\n* 🛑 [Prevent accidental user overwrites](https://github.com/etkecc/synapse-admin/pull/139)\n* 🔍 [Allow providing login form details via GET params](https://github.com/etkecc/synapse-admin/pull/140)\n* 🎨 [Add preferred theme colors to login page and footer](https://github.com/etkecc/synapse-admin/pull/155)\n* 🛡️ [Add \"Assign Admin\" button to the rooms](https://github.com/etkecc/synapse-admin/pull/156)\n* 🖼️ [Add rooms' avatars](https://github.com/etkecc/synapse-admin/pull/158)\n* 🏷️ [User Badges](https://github.com/etkecc/synapse-admin/pull/160)\n* 🔄 [Allow prefilling any fields on the login form via GET params](https://github.com/etkecc/synapse-admin/pull/181)\n* 🎞️ [Add \"Media\" tab for rooms](https://github.com/etkecc/synapse-admin/pull/196)\n* 📞 [Support E.164-based Matrix IDs (MSC4009)](https://github.com/etkecc/synapse-admin/pull/214)\n* 🛑 [Add support for Account Suspension (MSC3823)](https://github.com/etkecc/synapse-admin/pull/195)\n* 🗑️ [Add \"Purge Remote Media\" button](https://github.com/etkecc/synapse-admin/pull/237)\n* 📁 [Respect base url (`BASE_PATH` / `vite build --base`) when loading `config.json`](https://github.com/etkecc/synapse-admin/pull/274)\n* 🗂️ [Add Users' Account Data tab](https://github.com/etkecc/synapse-admin/pull/276)\n* 🧾 [Make bulk registration CSV import more user-friendly](https://github.com/etkecc/synapse-admin/pull/411)\n* 🌐 [Configurable CORS Credentials](https://github.com/etkecc/synapse-admin/pull/456)\n* 🧪 [Do not check homeserver URL during typing in the login form](https://github.com/etkecc/synapse-admin/pull/585)\n* 🔧 [Improve user account status toggles](https://github.com/etkecc/synapse-admin/pull/608)\n* 🛡️ [Validate that password is entered upon reactivation of account](https://github.com/etkecc/synapse-admin/pull/609)\n* 🇯🇵 [Add Japanese localization](https://github.com/etkecc/synapse-admin/pull/631)\n* 🗣️ [Correctly set document language based on the selected locale](https://github.com/etkecc/synapse-admin/issues/723)\n* 📇 [Support 3pids in CSV users import (bulk registration)](https://github.com/etkecc/synapse-admin/pull/804)\n* 🇺🇦 [Add Ukrainian localization](https://github.com/etkecc/synapse-admin/pull/806)\n* 🧩 [External Auth Provider-compatible mode](https://github.com/etkecc/synapse-admin/pull/821)\n* 🪪 [OIDC Auth Support](https://github.com/etkecc/synapse-admin/pull/902)\n* 🗂️ [Add Public Rooms and Empty Rooms filters](https://github.com/etkecc/synapse-admin/pull/945)\n* 🗓️ [Localized date and time formatting](https://github.com/etkecc/synapse-admin/pull/989)\n\n#### exclusive for [etke.cc](https://etke.cc) customers\n\nWe at [etke.cc](https://etke.cc) attempting to develop everything open-source, but some things are too specific to be used by anyone else.\nThe following list contains such features - they are only available for [etke.cc](https://etke.cc) customers.\n\n* 📊 [Server Status indicator and page](https://github.com/etkecc/synapse-admin/pull/182)\n* 📬 [Server Notifications indicator and page](https://github.com/etkecc/synapse-admin/pull/240)\n* 🛠️ [Server Commands panel](https://github.com/etkecc/synapse-admin/pull/365)\n* 🚀 [Server Actions page](https://github.com/etkecc/synapse-admin/pull/457)\n* 💳 [Billing page](https://github.com/etkecc/synapse-admin/pull/691)\n* ⚙️ [Instance config](./src/components/etke.cc/README.md#instance-config)\n\n### Development\n\n`just run-dev` to start the development stack (depending on your system speed, you may want to re-run this command if\n   user creation fails)\n\nThis command initializes the development environment (local Synapse server, Element Web client app, and Postgres DB),\nand launches the app in a dev mode at `http://localhost:5173`\n\nAfter that open [http://localhost:5173](http://localhost:5173?username=admin\u0026password=admin\u0026server=http://localhost:8008) in your browser,\nlogin using the following credentials:\n\n* Login: admin\n* Password: admin\n* Homeserver URL: http://localhost:8008\n\nElement Web runs on http://localhost:8080\n\n### Support\n\nIf you have any questions or need help, feel free to join the [community room](https://matrix.to/#/#synapse-admin:etke.cc) or create an issue on GitHub.\n\n## Configuration\n\nYou can use `config.json` file to configure Synapse Admin instance,\nand `/.well-known/matrix/client` file to provide Synapse Admin configuration specifically for your homeserver.\nIn the latter case, any instance of Synapse Admin will automatically pick up the configuration from the homeserver.\nNote that configuration inside the `/.well-known/matrix/client` file should go under the `cc.etke.synapse-admin` key,\nand it will override the configuration from the `config.json` file.\n\nIn case you use [spantaleev/matrix-docker-ansible-deploy](https://github.com/spantaleev/matrix-docker-ansible-deploy) or\n[etkecc/ansible](https://github.com/etkecc/ansible),\nconfiguration will be automatically added to the `/.well-known/matrix/client` file.\n\n[Configuration options](./docs/config.md)\n\nThe `config.json` can be injected into a Docker container using a bind mount.\n\n```yml\nservices:\n  synapse-admin:\n    ...\n    volumes:\n      - ./config.json:/app/config.json:ro\n    ...\n```\n\n### Prefilling login form\n\nYou can prefill all fields on the login page using GET parameters.\n\n[Documentation](./docs/prefill-login-form.md)\n\n\n### Restricting available homeserver\n\nYou can restrict the homeserver(s), so that the user can no longer define it himself.\n\n[Documentation](./docs/restrict-hs.md)\n\n### Configuring CORS credentials\n\nYou can configure the CORS credentials mode for the Synapse Admin instance.\n\n[Documentation](./docs/cors-credentials.md)\n\n### Protecting appservice managed users\n\nTo avoid accidental adjustments of appservice-managed users (e.g., puppets created by a bridge) and breaking the bridge,\nyou can specify the list of MXIDs (regexp) that should be prohibited from any changes, except display name and avatar.\n\n[Documentation](./docs/system-users.md)\n\n### Adding custom menu items\n\nYou can add custom menu items to the main menu by providing a `menu` array in the config.\n\n[Documentation](./docs/custom-menu.md)\n\n### Enabling external auth provider-compatible mode\n\nIf you use an external authentication provider (like OIDC, LDAP, etc.) for your Synapse server,\nyou can enable the `externalAuthProvider` mode to adjust Synapse Admin's behavior accordingly.\n\n[Documentation](./docs/external-auth-provider.md)\n\n## Usage\n\n### Supported Synapse\n\nIt needs at least [Synapse](https://github.com/element-hq/synapse) v1.116.0 for all functions to work as expected!\n\nYou get your server version with the request `/_synapse/admin/v1/server_version`.\nSee also [Synapse version API](https://element-hq.github.io/synapse/latest/admin_api/version_api.html).\n\nAfter entering the URL on the login page of synapse-admin the server version appears below the input field.\n\n### Prerequisites\n\nYou need access to the following endpoints:\n\n- `/_matrix`\n- `/_synapse/admin`\n\nSee also [Synapse administration endpoints](https://element-hq.github.io/synapse/latest/reverse_proxy.html#synapse-administration-endpoints)\n\n### Use without install\n\nYou can use the current version of Synapse Admin without own installation direct\nvia [admin.etke.cc](https://admin.etke.cc).\n\n**Note:**\nIf you want to use the deployment, you have to make sure that the admin endpoints (`/_synapse/admin`) are accessible for your browser.\n**Remember: You have no need to expose these endpoints to the internet but to your network.**\nIf you want your own deployment, follow the [Step-By-Step Install Guide](#step-by-step-install) below.\n\n### Step-By-Step install\n\nYou have three options:\n\n1.  [Download the tarball and serve with any webserver](#steps-for-1)\n2.  [Download the source code from github and run using nodejs](#steps-for-2)\n3.  [Run the Docker container](#steps-for-3)\n\n#### Steps for 1)\n\n- make sure you have a webserver installed that can serve static files (any webserver like nginx or apache will do)\n- configure a vhost for synapse admin on your webserver\n- download the .tar.gz [from the latest release](https://github.com/etkecc/synapse-admin/releases/latest)\n- unpack the .tar.gz\n- move or symlink the `synapse-admin` into your vhosts root dir\n- open the url of the vhost in your browser\n\n[Reverse Proxy Documentation with Examples](./docs/reverse-proxy.md)\n\n#### Steps for 2)\n\n- make sure you have installed the following: git, yarn, nodejs\n- download the source code: `git clone https://github.com/etkecc/synapse-admin.git`\n- change into downloaded directory: `cd synapse-admin`\n- download dependencies: `yarn install`\n- start web server: `yarn start`\n\n#### Steps for 3)\n\n- run the Docker container from the public docker registry: `docker run -p 8080:80 ghcr.io/etkecc/synapse-admin` or use the [docker-compose.yml](docker-compose.yml): `docker-compose up -d`\n\n  \u003e note: if you're building on an architecture other than amd64 (for example a raspberry pi), make sure to define a maximum ram for node. otherwise the build will fail.\n\n  \u003e note: if you're running on a ipv4-only system, make sure to set `SERVER_HOST=0.0.0.0` env var. Otherwise synapse-admin will not be able to start.\n\n  ```yml\n  services:\n    synapse-admin:\n      container_name: synapse-admin\n      hostname: synapse-admin\n      build:\n        context: https://github.com/etkecc/synapse-admin.git\n        dockerfile: Dockerfile.build\n        args:\n          - BUILDKIT_CONTEXT_KEEP_GIT_DIR=1\n        #   - NODE_OPTIONS=\"--max_old_space_size=1024\"\n        #   - BASE_PATH=\"/synapse-admin\"\n      ports:\n        - \"8080:80\"\n      restart: unless-stopped\n  ```\n\n- browse to http://localhost:8080\n\n### Serving Synapse Admin on a different path\n\nThe path prefix where synapse-admin is served can only be changed during the build step.\n\nIf you downloaded the source code, use `yarn build --base=/my-prefix` to set a path prefix.\n\nIf you want to build your own Docker container, use the `BASE_PATH` argument.\n\nWe do not support directly changing the path where Synapse Admin is served in the pre-built Docker container. Instead please use a reverse proxy if you need to move Synapse Admin to a different base path. If you want to serve multiple applications with different paths on the same domain, you need a reverse proxy anyway.\n\nExample for Traefik:\n\n`docker-compose.yml`\n\n```yml\nservices:\n  traefik:\n    image: traefik:v3\n    restart: unless-stopped\n    ports:\n      - 80:80\n      - 443:443\n    volumes:\n      - /var/run/docker.sock:/var/run/docker.sock:ro\n\n  synapse-admin:\n    image: ghcr.io/etkecc/synapse-admin:latest\n    restart: unless-stopped\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.admin.rule=Host(`example.com`) \u0026\u0026 PathPrefix(`/admin`)\"\n      - \"traefik.http.services.admin.loadbalancer.server.port=80\"\n      - \"traefik.http.middlewares.admin-slashless-redirect.redirectregex.regex=(/admin)$$\"\n      - \"traefik.http.middlewares.admin-slashless-redirect.redirectregex.replacement=$${1}/\"\n      - \"traefik.http.middlewares.admin-strip-prefix.stripprefix.prefixes=/admin\"\n      - \"traefik.http.routers.admin.middlewares=admin-slashless-redirect,admin-strip-prefix\"\n```\n\n## Development\n\n- See https://yarnpkg.com/getting-started/editor-sdks how to setup your IDE\n- Use `yarn lint` to run all style and linter checks\n- Use `yarn test` to run all unit tests\n- Use `yarn fix` to fix the coding style\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fetkecc%2Fsynapse-admin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fetkecc%2Fsynapse-admin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fetkecc%2Fsynapse-admin/lists"}