{"id":19252754,"url":"https://github.com/tomaszrewak/timewriter","last_synced_at":"2025-08-19T21:08:11.486Z","repository":{"id":125409519,"uuid":"158444190","full_name":"TomaszRewak/TimeWriter","owner":"TomaszRewak","description":"An online collaborative text editor based on event sourcing architecture.","archived":false,"fork":false,"pushed_at":"2019-02-22T12:17:00.000Z","size":1624,"stargazers_count":46,"open_issues_count":0,"forks_count":14,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-21T13:39:05.351Z","etag":null,"topics":["collaborative","event-sourcing","react","text-editor","website","websockets"],"latest_commit_sha":null,"homepage":"https://text-sourcing.tomasz-rewak.com/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TomaszRewak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2018-11-20T19:59:11.000Z","updated_at":"2024-09-13T15:08:01.000Z","dependencies_parsed_at":null,"dependency_job_id":"e4d12f33-bc90-4dae-952d-f575c99b9afb","html_url":"https://github.com/TomaszRewak/TimeWriter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/TomaszRewak/TimeWriter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TomaszRewak%2FTimeWriter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TomaszRewak%2FTimeWriter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TomaszRewak%2FTimeWriter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TomaszRewak%2FTimeWriter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TomaszRewak","download_url":"https://codeload.github.com/TomaszRewak/TimeWriter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TomaszRewak%2FTimeWriter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271222831,"owners_count":24721542,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-19T02:00:09.176Z","response_time":63,"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":["collaborative","event-sourcing","react","text-editor","website","websockets"],"created_at":"2024-11-09T18:28:18.298Z","updated_at":"2025-08-19T21:08:11.474Z","avatar_url":"https://github.com/TomaszRewak.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Text sourcing\nAn online collaborative text editor based on event sourcing.\n\nWorking example can be found here: https://text-sourcing.tomasz-rewak.com/\n\nA longer project description can be found here: https://blog.tomasz-rewak.com/text-sourcing/\n\nEverything here is written from a scratch: including the text editor as well as the event sourcing logic on the server and the client sides.\n\n# About the project\n\nThis text editor enables multiple people to edit the same text file at the same time. \nAll users should be even able to edit the same line without any input drops.  \n\nThis app doesn't send the entire content of the file between users after each change is made, but rather just basic events.\nBase on those events and the initial state of the document each client should be able to recreate the current state of the document.\nEvent management is not only limited to simple state transformations. Event history is also used for undo/redo operations.\nThe order of events is synchronized based on the server's internal clock so that the impact of communication delay can be neutralized.\n\n# Technology\n\nThis project is created using javascript, socket.io (for the clinet-server communication) and react (a frontend framework).\n\n# Disclaimer\n\nIt's just a demo that I've created as a pet project. \nBut if you've found any bugs, please, let me know.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomaszrewak%2Ftimewriter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftomaszrewak%2Ftimewriter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomaszrewak%2Ftimewriter/lists"}