{"id":17315396,"url":"https://github.com/frando/composer","last_synced_at":"2025-10-29T10:11:50.625Z","repository":{"id":3177152,"uuid":"4208721","full_name":"Frando/composer","owner":"Frando","description":"Content Composition for your web application","archived":false,"fork":false,"pushed_at":"2012-05-02T04:39:49.000Z","size":1928,"stargazers_count":2,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-07T07:51:21.671Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://composer.substance.io","language":"JavaScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"webscalesql/webscalesql-5.6","license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Frando.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}},"created_at":"2012-05-02T23:41:12.000Z","updated_at":"2015-03-06T02:31:17.000Z","dependencies_parsed_at":"2022-07-09T00:30:22.968Z","dependency_job_id":null,"html_url":"https://github.com/Frando/composer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Frando/composer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Frando%2Fcomposer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Frando%2Fcomposer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Frando%2Fcomposer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Frando%2Fcomposer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Frando","download_url":"https://codeload.github.com/Frando/composer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Frando%2Fcomposer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276341166,"owners_count":25625428,"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-09-22T02:00:08.972Z","response_time":79,"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":[],"created_at":"2024-10-15T13:08:04.924Z","updated_at":"2025-09-22T03:30:39.588Z","avatar_url":"https://github.com/Frando.png","language":"JavaScript","readme":"Substance Composer\n=====================\n\nThe Substance Composer is an open source effort dedicated to the development of a truly flexible editing component to be used by applications such as Substance.io for collaborative content composition. It uses operations to transform documents. By keeping track of atomic document operations, we can replay the complete history and go back and forth in time.\n\n\nAPI Appetizer\n=====================\n\n```js\nvar op1 = {\"_rev\": 1, \"command\": \"insert-node\", params: {\"type\": \"section\", after: \"/text/1\"}}\n\ncomposer.document.rev // =\u003e 1\ncomposer.execute(op1);\ncomposer.document.rev // =\u003e 2\n\nvar op2 = {\"command\": \"insert-comment\", params: {\n  referenced_nodes: [\"/text/1\", \"/section\"],\n  \"content\": \"There's a typo in line 5 at the first paragraph.\"},\n  \"user\": {username: \"john\", \"name\": \"John Doe\"}\n};\n\ncomposer.execute(op2);\ncomposer.document.rev // =\u003e 3\n\nvar op3 = {\"command\": \"update-node\", \"params\": {\"node\": \"/text/1\", \"operation\": \"ret(15) del('abc') ins('ABC') ret(241)\"}}\n\ncomposer.execute(op3); // just transforms the content of text nodes using OT.\n```","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrando%2Fcomposer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrando%2Fcomposer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrando%2Fcomposer/lists"}