0.10.0: Archify Sync, optional live collaboration on a model

Several people edit one model at once through a server you run yourself
(archify-vscode-ext-sync); the files stay ordinary files on each disk.
Sign-in through the browser, offline-first with later merge, teammates'
cursors in the Source view and text editors, and a Shared section on the
model page with people, versions, Compare and Restore.

Without a server nothing changes: the sync code is a separate bundle that
loads only when a model is shared, after a sign-in, or when a sync command
or invite link is used.
This commit is contained in:
root-at-skic committed 2026-11-06 22:55:01 +02:00
1 parent a9021312b0
commit c99f3e5fe8
27 files changed
+2899 -14

No files matched your search

+85 -3
View File
@@ -2,7 +2,7 @@
"name": "archify-vscode-ext",
"displayName": "Archify Diagram Viewer",
"description": "Archify diagrams in VS Code. Write diagrams as .archify files in YAML: they open as the interactive diagram, with live updates, validation, templates and completion. Also previews Archify's own JSON files (*.architecture.json, …) and opens rendered Archify HTML.",
"version": "0.9.3",
"version": "0.10.0",
"publisher": "root-at-skic",
"license": "MIT",
"sponsor": {
@@ -45,7 +45,8 @@
"workspaceContains:**/*.{archify,architecture.json,workflow.json,sequence.json,dataflow.json,lifecycle.json}",
"onWebviewPanel:archify.preview",
"workspaceContains:**/*.archify-registry",
"workspaceContains:**/*.archify-decision"
"workspaceContains:**/*.archify-decision",
"onUri"
],
"contributes": {
"commands": [
@@ -118,6 +119,51 @@
"command": "archify.openModelGraph",
"title": "Archify | Open Model Graph",
"icon": "$(type-hierarchy)"
},
{
"command": "archify.sync.signIn",
"title": "Archify | Sign in to Sync Server…",
"icon": "$(account)"
},
{
"command": "archify.sync.signOut",
"title": "Archify | Sign out of Sync Server",
"icon": "$(sign-out)"
},
{
"command": "archify.sync.share",
"title": "Archify | Share Model…",
"icon": "$(live-share)"
},
{
"command": "archify.sync.invite",
"title": "Archify | Copy Invite Link",
"icon": "$(person-add)"
},
{
"command": "archify.sync.join",
"title": "Archify | Join Shared Model…",
"icon": "$(link)"
},
{
"command": "archify.sync.publish",
"title": "Archify | Publish Version…",
"icon": "$(tag)"
},
{
"command": "archify.sync.versions",
"title": "Archify | Versions…",
"icon": "$(history)"
},
{
"command": "archify.sync.stop",
"title": "Archify | Stop Syncing Model…",
"icon": "$(debug-disconnect)"
},
{
"command": "archify.sync.menu",
"title": "Archify | Sync…",
"icon": "$(broadcast)"
}
],
"menus": {
@@ -161,6 +207,26 @@
{
"command": "archify.openModelGraph",
"when": "archify.isDiagramSource || archifyPreviewFocus || activeCustomEditorId == 'archify.diagram' || activeCustomEditorId == 'archify.registry' || activeCustomEditorId == 'archify.decision'"
},
{
"command": "archify.sync.invite",
"when": "archify.sync.active"
},
{
"command": "archify.sync.publish",
"when": "archify.sync.active"
},
{
"command": "archify.sync.versions",
"when": "archify.sync.active"
},
{
"command": "archify.sync.stop",
"when": "archify.sync.active"
},
{
"command": "archify.sync.menu",
"when": "archify.sync.active"
}
],
"editor/title": [
@@ -250,6 +316,11 @@
"command": "archify.openModelGraph",
"when": "resourceFilename =~ /\\.archify(-registry|-decision)?$/",
"group": "zzz_archify@9"
},
{
"command": "archify.sync.share",
"when": "resourceFilename == main.archify",
"group": "archify@9"
}
],
"editor/title/context": [
@@ -464,6 +535,12 @@
"fileMatch": "*.archify-registry",
"url": "./schemas/archify-registry.schema.json"
}
],
"authentication": [
{
"id": "archify-sync",
"label": "Archify Sync"
}
]
},
"scripts": {
@@ -482,6 +559,7 @@
"@types/node": "^22.0.0",
"@types/three": "^0.186.0",
"@types/vscode": "~1.100.0",
"@types/ws": "^8.18.2",
"@vscode/test-electron": "^3.1.0",
"@vscode/vsce": "^3.0.0",
"esbuild": "^0.25.0",
@@ -506,7 +584,11 @@
"codemirror-json-schema": "^0.8.1",
"cytoscape": "^3.34.4",
"cytoscape-fcose": "^2.2.0",
"lib0": "^0.2.119",
"three": "^0.186.1",
"yaml": "^2.9.1"
"ws": "^8.22.1",
"y-protocols": "^1.0.7",
"yaml": "^2.9.1",
"yjs": "^13.6.33"
}
}