{"id":28461218,"url":"https://github.com/cryptpad/scalable-server","last_synced_at":"2026-02-07T12:02:11.366Z","repository":{"id":272628820,"uuid":"829342019","full_name":"cryptpad/scalable-server","owner":"cryptpad","description":"Scalable CryptPad server prototype","archived":false,"fork":false,"pushed_at":"2026-02-05T15:36:17.000Z","size":728,"stargazers_count":3,"open_issues_count":1,"forks_count":2,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-02-06T01:50:53.136Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://cryptpad.org","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cryptpad.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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}},"created_at":"2024-07-16T08:35:36.000Z","updated_at":"2025-12-21T13:21:53.000Z","dependencies_parsed_at":"2025-01-15T18:35:53.586Z","dependency_job_id":"82844ebd-b51c-48bb-9d98-ef5051aa3139","html_url":"https://github.com/cryptpad/scalable-server","commit_stats":null,"previous_names":["cryptpad/scalable-server"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cryptpad/scalable-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryptpad%2Fscalable-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryptpad%2Fscalable-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryptpad%2Fscalable-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryptpad%2Fscalable-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cryptpad","download_url":"https://codeload.github.com/cryptpad/scalable-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryptpad%2Fscalable-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29194007,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T07:37:03.739Z","status":"ssl_error","status_checked_at":"2026-02-07T07:37:03.029Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2025-06-07T03:07:59.333Z","updated_at":"2026-02-07T12:02:11.360Z","avatar_url":"https://github.com/cryptpad.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- SPDX-FileCopyrightText: 2024 XWiki CryptPad Team \u003ccontact@cryptpad.org\u003e and contributors\n\nSPDX-License-Identifier: AGPL-3.0-or-later\n--\u003e\n# Prototype: Scalable Server for CryptPad\n\nThis repository contains a distributed server prototype for CryptPad. This is\nstill in progress exploratory work.\n\n## Architecture\n\n### Taxonomy\n\nThe new server architecture is composed of three types of nodes:\n\n- **Core:** these nodes take care of most of the computations and internal\ncommunication handling. They are connected to the other type of servers.\n- **Client WebSocket:** these nodes catch the different queries from the\noutside and forward them to the core nodes for processing.\n- **Storage:** these nodes are responsible for accessing and serving a fraction\nof the (encrypted) data for CryptPad. They are also doing light computation if\nthey can be done in place without too much pressure on them.\n\n### Topology\n\nThe core nodes are connected to both ws and storage nodes, but the latter two\ncannot communicate directly.\n\n## Configuration\n\nThe configuration can be done using the `Config` argument, which will store the\ngraph topology of the nodes.\n\nUsing websockets for communication, this variable looks like this:\n\n```javascript\nlet Config = {\n    infra: {\n        ws: [{\n            host: 'localhost',\n            port: 3010\n        }],\n        core: [{\n            host: 'localhost',\n            port: 3011\n        }, {\n                host: 'localhost',\n                port: 3012\n            }],\n        storage: [{\n            host: 'localhost',\n            port: 3014\n        }]\n    }\n};\n```\n\nThe above configuration describes a network comprised of 4 nodes, having one\nwebsocket client node on port `3010`, 2 core servers on port `3011` and `3012`\nand a storage node accessible via port `3014`.\n\nIn addition, launching a server requires setting the field `myId` with your\nidentifier, which will be of the form `type:id`. For instance, in the first core\nnode (the node listening on port `3011`), it would be `Config.myId = 'core:0'`.\n\n## Usage\n\nBefore first use, you may want to install the dependencies with:\n```bash\nnpm install\n```\n\nTo spawn the server topology described in `ws-config.js`, run the start script:\n```bash\nnpm run start\n```\n\nAlternatively, you can the new servers manually. You first need to start the\n`core` nodes with the following command.\n\n```bash\nnode core/index.js\n```\n\nThen you can start a `ws` and `storage` nodes in any order:\n```bash\nnode storage/index.js\nnode websocket/index.js\n```\n\n## Tests\n\nThe directory [`tests`](tests/) contains some unit and integration tests scripts\nand files.\n\n- [`interface.test.js`](tests/interface.test.js): test the communication\ninterface by implementing a simple ping-pong protocol that computes the time it\ntakes to go back and forth in the network.\n\nThe aforementioned tests can be run with the following command (make sure to\nhave installed the dependencies with `npm install` beforehand):\n```bash\nnpm run tests\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcryptpad%2Fscalable-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcryptpad%2Fscalable-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcryptpad%2Fscalable-server/lists"}