{"id":36804428,"url":"https://github.com/shiroyk/cowork","last_synced_at":"2026-01-12T13:37:53.733Z","repository":{"id":70480657,"uuid":"357178822","full_name":"shiroyk/cowork","owner":"shiroyk","description":"Cowork is an online real-time collaborative editing system","archived":false,"fork":false,"pushed_at":"2024-12-17T14:57:09.000Z","size":5372,"stargazers_count":29,"open_issues_count":0,"forks_count":8,"subscribers_count":2,"default_branch":"k8s","last_synced_at":"2024-12-17T15:45:14.744Z","etag":null,"topics":["collaborative-editor","crdt","echo-framework","gin","k8s","kubernetes","spring"],"latest_commit_sha":null,"homepage":"","language":"Go","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/shiroyk.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}},"created_at":"2021-04-12T12:07:45.000Z","updated_at":"2024-12-17T14:57:13.000Z","dependencies_parsed_at":"2024-12-17T15:42:01.995Z","dependency_job_id":"7ae82240-ea62-404c-bb07-86e3dffcb53b","html_url":"https://github.com/shiroyk/cowork","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/shiroyk/cowork","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shiroyk%2Fcowork","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shiroyk%2Fcowork/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shiroyk%2Fcowork/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shiroyk%2Fcowork/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shiroyk","download_url":"https://codeload.github.com/shiroyk/cowork/tar.gz/refs/heads/k8s","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shiroyk%2Fcowork/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28339289,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T12:22:26.515Z","status":"ssl_error","status_checked_at":"2026-01-12T12:22:10.856Z","response_time":98,"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":["collaborative-editor","crdt","echo-framework","gin","k8s","kubernetes","spring"],"created_at":"2026-01-12T13:37:52.929Z","updated_at":"2026-01-12T13:37:53.714Z","avatar_url":"https://github.com/shiroyk.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cowork\n**Cowork** is an online real-time collaborative editing system, internal use of [Yjs CRDT](https://github.com/yjs/yjs) algorithm.\n\n## Architecture\n```mermaid\ngraph TB\nclassDef pod fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff;\nclient([client]) --\u003e ingress\nsubgraph ingress\n    ingress-pod(ingress-pod):::pod\nend\nsubgraph cowork\n    subgraph Deployment\n        subgraph auth-service\n            auth-pod(auth-pod):::pod\n        end\n        subgraph user-service\n            user-pod(user-pod):::pod\n        end\n        subgraph doc-service\n            doc-pod(doc-pod):::pod\n        end\n        subgraph collab-service\n            collab-pod(collab-pod):::pod\n        end\n        subgraph frontend-service\n            frontend-pod(frontend-pod):::pod\n        end\n    end\n    subgraph StatefulSet\n        subgraph redis-service\n            redis-pod(redis-pod):::pod\n        end\n        subgraph nats-service\n            nats-pod(nats-pod):::pod\n        end\n        subgraph user-db-service\n            user-db-pod(user-db-pod):::pod\n        end\n        subgraph doc-db-service\n            doc-db-pod(doc-db-pod):::pod\n        end\n    end\n    user-service --\u003e user-db-service\n    auth-service --\u003e user-service\n    collab-service --\u003e user-service\n    doc-service --\u003e doc-db-service\n    collab-service --\u003e doc-service\n    doc-service --\u003e nats-service\n    auth-service --\u003e redis-service\n    collab-service --\u003e redis-service\n    collab-service --\u003e nats-service\nend\ningress -- api.cowork.local/auth --\u003e auth-service\ningress -- api.cowork.local/users --\u003e user-service\ningress -- api.cowork.local/docs --\u003e doc-service\ningress -- api.cowork.local/collab --\u003e collab-service\ningress -- app.cowork.local --\u003e frontend-service\n```\n## Usage\nInstall dependencies `docker`, [docker-buildx](https://github.com/docker/buildx), [minikube](https://minikube.sigs.k8s.io/docs/), `kubectl`, `make` and start the `minikube`\n- build the image\n```shell\nchmod +x ./scripts/*\nmake\n```\n- start\n```shell\n./scripts/start.sh\n```\n- update hosts, need permission to modify the hosts file.\n```shell\nexport INGRESS_IP=$(kubectl get svc -n ingress-nginx ingress-nginx-controller -o=jsonpath='{.spec.clusterIP}')\nsudo cat \u003c\u003c EOF \u003e\u003e /etc/hosts\n$INGRESS_IP api.cowork.local\n$INGRESS_IP app.cowork.local\n$INGRESS_IP dashboard.cowork.local\nEOF\n```\n- waiting all pods start, execute to view the pods status\n```shell\nkubectl get pods -n cowork\n```\nopen the page\n- [app.cowork.local](http://app.cowork.local)\n- [dashboard.cowork.local](https://dashboard.cowork.local)\n\n## Reference\n- [Yjs](https://github.com/yjs/yjs)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshiroyk%2Fcowork","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshiroyk%2Fcowork","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshiroyk%2Fcowork/lists"}