yjs / ycs Goto Github PK
View Code? Open in Web Editor NEWA compatible .Net implementation of the Yjs CRDT framework.
License: MIT License
A compatible .Net implementation of the Yjs CRDT framework.
License: MIT License
Failure in the struct stores detected, test logs:
MAP by 1 at pos 0
---- MSG 1 -> 0, len 27: 2,25,0,0,1,1,0,0,1,7,7,5,97,114,114,97,121,5,1,1,1,1,0,1,1,0,0
DELETE by 0 at pos 0, len: 1, oldContent: Ycs.YMap
New content:
---- MSG 1 -> 2, len 27: 2,25,0,0,1,1,0,0,1,7,7,5,97,114,114,97,121,5,1,1,1,1,0,1,1,0,0
MAP by 0 at pos 0
DISCONNECT 2
MAP by 0 at pos 0
RECONNECT 2
ARRAY by 0 at pos 0
---- MSG 1 -> 0, len 34: 2,32,0,0,2,65,0,1,0,0,1,40,10,8,115,111,109,101,112,114,111,112,8,1,0,0,1,1,1,1,1,125,42,0
DELETE by 0 at pos 1, len: 1, oldContent: Ycs.YArray,Ycs.YMap,Ycs.YMap
New content: Ycs.YArray,Ycs.YMap
MAP by 0 at pos 1
MAP by 0 at pos 3
Flushing ALL
---- MSG 1 -> 0, len 28: 2,26,0,0,2,65,0,1,2,0,1,168,1,0,0,0,1,1,1,1,2,125,43,1,1,1,1,0
---- MSG 2 -> 0, len 5: 0,3,1,1,1
---- RPL 0 -> 2, len 136: 1,133,1,0,0,8,1,0,1,64,8,1,64,0,9,0,4,12,0,8,4,92,32,4,5,1,0,8,0,72,27,0,0,71,0,33,0,168,0,65,0,0,0,71,0,8,0,199,0,33,0,168,0,199,0,33,0,168,27,24,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,72,1,1,0,4,1,0,65,0,10,66,0,65,0,67,0,2,1,2,1,2,1,1,13,0,125,44,125,1,125,2,125,3,125,44,125,44,2,1,1,0,2,0,4,1,1,1,3,5,1,2,1
---- MSG 0 -> 2, len 7: 0,5,2,1,1,0,8
---- RPL 2 -> 0, len 27: 1,25,0,0,1,1,0,0,1,7,7,5,97,114,114,97,121,5,1,1,1,1,0,1,1,0,0
---- MSG 1 -> 2, len 5: 0,3,1,1,4
---- RPL 2 -> 1, len 27: 1,25,0,0,1,1,0,0,1,7,7,5,97,114,114,97,121,5,1,1,1,1,0,1,1,0,0
---- MSG 2 -> 0, len 27: 1,25,0,0,1,1,0,0,1,7,7,5,97,114,114,97,121,5,1,1,1,1,0,1,1,0,0
---- MSG 0 -> 2, len 35: 2,33,0,0,3,1,64,0,0,1,8,3,1,0,71,7,5,97,114,114,97,121,5,1,1,1,0,1,1,2,1,0,1,8,0
---- MSG 0 -> 2, len 43: 2,41,0,0,3,1,64,0,1,16,0,3,1,0,8,7,5,97,114,114,97,121,5,3,1,0,0,0,2,1,3,2,1,0,1,9,125,1,125,2,125,3,0
---- MSG 1 -> 0, len 28: 2,26,0,0,2,65,0,1,4,0,1,168,1,0,0,0,1,1,1,1,3,125,44,1,1,1,2,0
---- MSG 0 -> 2, len 88: 2,86,0,0,5,1,0,1,64,3,3,0,4,12,3,1,0,8,17,1,0,0,0,71,0,33,0,168,0,65,0,0,0,71,0,8,16,13,97,114,114,97,121,115,111,109,101,112,114,111,112,5,8,3,1,0,0,2,1,0,7,65,0,2,65,0,67,0,2,2,0,7,0,125,44,125,1,125,2,125,3,1,0,2,4,0,2,0
---- MSG 2 -> 1, len 5: 0,3,1,1,1
---- RPL 1 -> 2, len 42: 1,40,0,0,2,65,1,2,0,4,0,3,33,0,168,10,8,115,111,109,101,112,114,111,112,8,1,0,0,2,2,1,1,2,1,125,44,1,1,1,1,1
---- MSG 0 -> 1, len 31: 2,29,0,0,1,1,0,0,1,1,7,5,97,114,114,97,121,5,1,1,0,1,1,1,1,0,1,1,1,0,0
---- MSG 2 -> 1, len 27: 1,25,0,0,1,1,0,0,1,7,7,5,97,114,114,97,121,5,1,1,1,1,0,1,1,0,0
---- MSG 0 -> 1, len 35: 2,33,0,0,3,1,0,1,0,1,0,3,1,0,71,7,5,97,114,114,97,121,5,1,1,1,1,1,1,2,1,0,1,0,0
---- MSG 1 -> 2, len 42: 1,40,0,0,2,65,1,2,0,4,0,3,33,0,168,10,8,115,111,109,101,112,114,111,112,8,1,0,0,2,2,1,1,2,1,125,44,1,1,1,1,1
---- MSG 0 -> 2, len 39: 2,37,0,0,3,1,64,1,1,16,1,8,5,1,0,0,0,199,7,5,97,114,114,97,121,5,1,1,1,1,2,65,0,2,2,0,1,12,0
---- MSG 0 -> 2, len 50: 2,48,0,0,3,1,64,0,1,24,0,5,1,0,0,0,40,16,13,97,114,114,97,121,115,111,109,101,112,114,111,112,5,8,3,1,0,0,0,2,65,1,2,2,0,1,13,125,42,0
---- MSG 0 -> 1, len 48: 2,46,0,0,3,1,64,0,1,0,0,3,1,0,40,16,13,97,114,114,97,121,115,111,109,101,112,114,111,112,5,8,3,1,0,0,0,2,65,0,2,1,0,1,1,125,42,0
---- MSG 0 -> 2, len 43: 2,41,0,0,3,1,64,0,1,26,0,5,1,0,0,0,168,7,5,97,114,114,97,121,5,1,1,0,2,65,1,2,2,0,1,14,125,43,1,0,1,13,0
---- MSG 0 -> 1, len 41: 2,39,0,0,3,1,64,0,1,2,0,3,1,0,168,7,5,97,114,114,97,121,5,1,1,0,2,65,0,2,1,0,1,2,125,43,1,0,1,1,0
---- MSG 0 -> 2, len 43: 2,41,0,0,3,1,64,0,1,28,0,5,1,0,0,0,168,7,5,97,114,114,97,121,5,1,1,0,2,65,1,2,2,0,1,15,125,44,1,0,1,14,0
---- MSG 0 -> 1, len 41: 2,39,0,0,3,1,64,0,1,4,0,3,1,0,168,7,5,97,114,114,97,121,5,1,1,0,2,65,0,2,1,0,1,3,125,44,1,0,1,2,0
---- MSG 0 -> 1, len 35: 2,33,0,0,3,1,64,0,0,1,0,3,1,0,71,7,5,97,114,114,97,121,5,1,1,1,1,1,1,2,1,0,1,4,0
---- MSG 0 -> 2, len 40: 2,38,0,0,4,1,64,0,1,1,0,1,0,5,1,0,0,0,199,7,5,97,114,114,97,121,5,1,1,1,1,2,65,0,2,2,0,1,16,0
---- MSG 0 -> 2, len 50: 2,48,0,0,3,1,64,0,1,32,0,5,1,0,0,0,40,16,13,97,114,114,97,121,115,111,109,101,112,114,111,112,5,8,3,1,0,0,0,2,65,1,2,2,0,1,17,125,42,0
---- MSG 0 -> 2, len 43: 2,41,0,0,3,1,64,0,1,34,0,5,1,0,0,0,168,7,5,97,114,114,97,121,5,1,1,0,2,65,1,2,2,0,1,18,125,43,1,0,1,17,0
---- MSG 0 -> 2, len 43: 2,41,0,0,3,1,64,0,1,36,0,5,1,0,0,0,168,7,5,97,114,114,97,121,5,1,1,0,2,65,1,2,2,0,1,19,125,44,1,0,1,18,0
---- MSG 0 -> 1, len 48: 2,46,0,0,3,1,64,0,1,8,0,3,1,0,40,16,13,97,114,114,97,121,115,111,109,101,112,114,111,112,5,8,3,1,0,0,0,2,65,0,2,1,0,1,5,125,42,0
---- MSG 0 -> 1, len 41: 2,39,0,0,3,1,64,0,1,10,0,3,1,0,168,7,5,97,114,114,97,121,5,1,1,0,2,65,0,2,1,0,1,6,125,43,1,0,1,5,0
---- MSG 0 -> 2, len 136: 1,133,1,0,0,8,1,0,1,64,8,1,64,0,9,0,4,12,0,8,4,92,32,4,5,1,0,8,0,72,27,0,0,71,0,33,0,168,0,65,0,0,0,71,0,8,0,199,0,33,0,168,0,199,0,33,0,168,27,24,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,72,1,1,0,4,1,0,65,0,10,66,0,65,0,67,0,2,1,2,1,2,1,1,13,0,125,44,125,1,125,2,125,3,125,44,125,44,2,1,1,0,2,0,4,1,1,1,3,5,1,2,1
---- MSG 0 -> 1, len 41: 2,39,0,0,3,1,64,0,1,12,0,3,1,0,168,7,5,97,114,114,97,121,5,1,1,0,2,65,0,2,1,0,1,7,125,44,1,0,1,6,0
---- MSG 0 -> 1, len 35: 2,33,0,0,3,1,64,0,0,1,8,3,1,0,71,7,5,97,114,114,97,121,5,1,1,1,0,1,1,2,1,0,1,8,0
---- MSG 0 -> 1, len 43: 2,41,0,0,3,1,64,0,1,16,0,3,1,0,8,7,5,97,114,114,97,121,5,3,1,0,0,0,2,1,3,2,1,0,1,9,125,1,125,2,125,3,0
---- MSG 0 -> 1, len 88: 2,86,0,0,5,1,0,1,64,3,3,0,4,12,3,1,0,8,17,1,0,0,0,71,0,33,0,168,0,65,0,0,0,71,0,8,16,13,97,114,114,97,121,115,111,109,101,112,114,111,112,5,8,3,1,0,0,2,1,0,7,65,0,2,65,0,67,0,2,2,0,7,0,125,44,125,1,125,2,125,3,1,0,2,4,0,2,0
---- MSG 0 -> 1, len 39: 2,37,0,0,3,1,64,1,1,16,1,8,5,1,0,0,0,199,7,5,97,114,114,97,121,5,1,1,1,1,2,65,0,2,2,0,1,12,0
---- MSG 0 -> 1, len 50: 2,48,0,0,3,1,64,0,1,24,0,5,1,0,0,0,40,16,13,97,114,114,97,121,115,111,109,101,112,114,111,112,5,8,3,1,0,0,0,2,65,1,2,2,0,1,13,125,42,0
---- MSG 0 -> 1, len 43: 2,41,0,0,3,1,64,0,1,26,0,5,1,0,0,0,168,7,5,97,114,114,97,121,5,1,1,0,2,65,1,2,2,0,1,14,125,43,1,0,1,13,0
---- MSG 0 -> 1, len 43: 2,41,0,0,3,1,64,0,1,28,0,5,1,0,0,0,168,7,5,97,114,114,97,121,5,1,1,0,2,65,1,2,2,0,1,15,125,44,1,0,1,14,0
---- MSG 0 -> 1, len 40: 2,38,0,0,4,1,64,0,1,1,0,1,0,5,1,0,0,0,199,7,5,97,114,114,97,121,5,1,1,1,1,2,65,0,2,2,0,1,16,0
---- MSG 0 -> 1, len 50: 2,48,0,0,3,1,64,0,1,32,0,5,1,0,0,0,40,16,13,97,114,114,97,121,115,111,109,101,112,114,111,112,5,8,3,1,0,0,0,2,65,1,2,2,0,1,17,125,42,0
---- MSG 0 -> 1, len 43: 2,41,0,0,3,1,64,0,1,34,0,5,1,0,0,0,168,7,5,97,114,114,97,121,5,1,1,0,2,65,1,2,2,0,1,18,125,43,1,0,1,17,0
---- MSG 0 -> 1, len 43: 2,41,0,0,3,1,64,0,1,36,0,5,1,0,0,0,168,7,5,97,114,114,97,121,5,1,1,0,2,65,1,2,2,0,1,19,125,44,1,0,1,18,0
MAP by 0 at pos 4
ARRAY by 1 at pos 4
DELETE by 0 at pos 3, len: 1, oldContent: Ycs.YArray,Ycs.YMap,Ycs.YMap,Ycs.YMap,Ycs.YMap
New content: Ycs.YArray,Ycs.YMap,Ycs.YMap,Ycs.YMap
---- MSG 1 -> 0, len 124: 2,122,0,0,10,1,0,1,0,1,64,8,1,64,0,10,32,96,4,12,0,8,4,92,32,4,5,1,1,8,0,72,27,199,0,71,0,33,0,168,0,65,0,0,0,71,0,8,0,199,0,33,0,168,0,199,0,33,0,168,27,24,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,72,1,1,0,5,0,1,0,65,0,9,2,65,0,67,0,2,1,2,1,2,1,4,13,0,125,44,125,1,125,2,125,3,125,44,125,44,0
DELETE by 1 at pos 0, len: 4, oldContent: Ycs.YArray,Ycs.YMap,Ycs.YMap,Ycs.YMap,Ycs.YArray
New content: Ycs.YArray
DELETE by 0 at pos 2, len: 2, oldContent: Ycs.YArray,Ycs.YMap,Ycs.YMap,Ycs.YMap,Ycs.YArray
New content: Ycs.YArray,Ycs.YMap,Ycs.YArray
---- MSG 1 -> 0, len 129: 2,127,0,0,9,65,0,0,1,64,8,1,64,0,10,8,72,4,12,0,8,4,92,32,4,5,1,0,8,0,72,27,8,0,71,0,33,0,168,0,65,0,0,0,71,0,8,0,199,0,33,0,168,0,199,0,33,0,168,27,24,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,72,1,1,0,4,1,0,65,0,10,3,2,65,0,67,0,2,1,2,1,2,1,5,125,1,125,2,125,3,13,0,125,44,125,1,125,2,125,3,125,44,125,44,0
---- MSG 1 -> 0, len 105: 2,103,0,0,9,1,0,65,0,0,1,64,3,1,4,32,88,8,80,5,1,1,8,0,72,27,1,0,0,0,199,0,8,0,65,0,0,0,65,0,0,0,65,0,0,0,193,0,0,0,193,0,0,7,5,97,114,114,97,121,5,3,1,0,0,1,0,13,1,67,0,1,3,1,3,1,3,1,3,1,3,2,4,0,125,1,125,2,125,3,10,0,1,0,5,0,0,2,0,4,4,2,1,2,0
---- MSG 0 -> 2, len 40: 2,38,0,0,4,1,64,0,1,1,32,1,0,5,1,0,0,0,199,7,5,97,114,114,97,121,5,1,1,1,1,2,1,3,2,2,0,1,20,0
---- MSG 0 -> 1, len 40: 2,38,0,0,4,1,64,0,1,1,32,1,0,5,1,0,0,0,199,7,5,97,114,114,97,121,5,1,1,1,1,2,1,3,2,2,0,1,20,0
---- MSG 1 -> 2, len 124: 2,122,0,0,10,1,0,1,0,1,64,8,1,64,0,10,32,96,4,12,0,8,4,92,32,4,5,1,1,8,0,72,27,199,0,71,0,33,0,168,0,65,0,0,0,71,0,8,0,199,0,33,0,168,0,199,0,33,0,168,27,24,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,72,1,1,0,5,0,1,0,65,0,9,2,65,0,67,0,2,1,2,1,2,1,4,13,0,125,44,125,1,125,2,125,3,125,44,125,44,0
---- MSG 0 -> 1, len 51: 2,49,0,0,3,1,64,0,1,40,0,5,1,0,0,0,40,16,13,97,114,114,97,121,115,111,109,101,112,114,111,112,5,8,3,1,0,0,0,3,1,3,1,2,2,0,1,21,125,42,0
---- MSG 0 -> 1, len 44: 2,42,0,0,3,1,64,0,1,42,0,5,1,0,0,0,168,7,5,97,114,114,97,121,5,1,1,0,3,1,3,1,2,2,0,1,22,125,43,1,0,1,21,0
---- MSG 1 -> 2, len 129: 2,127,0,0,9,65,0,0,1,64,8,1,64,0,10,8,72,4,12,0,8,4,92,32,4,5,1,0,8,0,72,27,8,0,71,0,33,0,168,0,65,0,0,0,71,0,8,0,199,0,33,0,168,0,199,0,33,0,168,27,24,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,72,1,1,0,4,1,0,65,0,10,3,2,65,0,67,0,2,1,2,1,2,1,5,125,1,125,2,125,3,13,0,125,44,125,1,125,2,125,3,125,44,125,44,0
---- MSG 0 -> 2, len 51: 2,49,0,0,3,1,64,0,1,40,0,5,1,0,0,0,40,16,13,97,114,114,97,121,115,111,109,101,112,114,111,112,5,8,3,1,0,0,0,3,1,3,1,2,2,0,1,21,125,42,0
---- MSG 1 -> 2, len 105: 2,103,0,0,9,1,0,65,0,0,1,64,3,1,4,32,88,8,80,5,1,1,8,0,72,27,1,0,0,0,199,0,8,0,65,0,0,0,65,0,0,0,65,0,0,0,193,0,0,0,193,0,0,7,5,97,114,114,97,121,5,3,1,0,0,1,0,13,1,67,0,1,3,1,3,1,3,1,3,1,3,2,4,0,125,1,125,2,125,3,10,0,1,0,5,0,0,2,0,4,4,2,1,2,0
---- MSG 0 -> 1, len 44: 2,42,0,0,3,1,64,0,1,44,0,5,1,0,0,0,168,7,5,97,114,114,97,121,5,1,1,0,3,1,3,1,2,2,0,1,23,125,44,1,0,1,22,0
---- MSG 0 -> 1, len 149: 2,146,1,0,0,10,1,0,1,64,8,1,0,1,64,0,10,0,4,12,0,8,4,92,32,8,4,6,1,0,8,0,72,0,33,1,0,0,0,71,0,33,0,168,0,65,0,0,0,71,0,8,0,199,0,33,0,168,0,193,0,0,0,199,0,33,0,168,33,29,97,114,114,97,121,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,5,72,1,3,1,0,0,4,1,0,65,0,13,1,3,2,65,0,67,0,2,65,0,3,2,1,2,2,0,15,0,125,44,125,1,125,2,125,3,125,44,125,44,1,0,2,16,0,2,0
---- MSG 0 -> 2, len 44: 2,42,0,0,3,1,64,0,1,42,0,5,1,0,0,0,168,7,5,97,114,114,97,121,5,1,1,0,3,1,3,1,2,2,0,1,22,125,43,1,0,1,21,0
---- MSG 0 -> 2, len 44: 2,42,0,0,3,1,64,0,1,44,0,5,1,0,0,0,168,7,5,97,114,114,97,121,5,1,1,0,3,1,3,1,2,2,0,1,23,125,44,1,0,1,22,0
---- MSG 0 -> 1, len 125: 2,123,0,0,10,1,0,1,0,1,64,6,1,0,1,7,32,80,0,8,4,92,32,6,1,1,8,0,72,0,31,1,0,0,0,199,0,65,0,0,0,65,0,0,0,71,0,8,0,199,0,33,0,168,0,193,0,0,0,193,0,0,16,13,97,114,114,97,121,115,111,109,101,112,114,111,112,5,8,3,1,0,0,3,64,0,1,13,1,3,1,3,1,67,0,2,65,0,3,1,3,2,3,0,13,0,125,1,125,2,125,3,125,44,1,0,4,0,0,2,0,16,0,2,0
---- MSG 0 -> 2, len 149: 2,146,1,0,0,10,1,0,1,64,8,1,0,1,64,0,10,0,4,12,0,8,4,92,32,8,4,6,1,0,8,0,72,0,33,1,0,0,0,71,0,33,0,168,0,65,0,0,0,71,0,8,0,199,0,33,0,168,0,193,0,0,0,199,0,33,0,168,33,29,97,114,114,97,121,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,115,111,109,101,112,114,111,112,5,72,1,3,1,0,0,4,1,0,65,0,13,1,3,2,65,0,67,0,2,65,0,3,2,1,2,2,0,15,0,125,44,125,1,125,2,125,3,125,44,125,44,1,0,2,16,0,2,0
---- MSG 0 -> 2, len 125: 2,123,0,0,10,1,0,1,0,1,64,6,1,0,1,7,32,80,0,8,4,92,32,6,1,1,8,0,72,0,31,1,0,0,0,199,0,65,0,0,0,65,0,0,0,71,0,8,0,199,0,33,0,168,0,193,0,0,0,193,0,0,16,13,97,114,114,97,121,115,111,109,101,112,114,111,112,5,8,3,1,0,0,3,64,0,1,13,1,3,1,3,1,67,0,2,65,0,3,1,3,2,3,0,13,0,125,1,125,2,125,3,125,44,1,0,4,0,0,2,0,16,0,2,0
Hi,
I wonder how difficult it would be to upgrade to the latest versions of Yjs? I'm seriously considering using Ycs in my heavily Yjs-based project with .NET backend (because of my expertise and background).
So, I'd even consider contributing with such an update. But with my current understanding of Yjs, it is really hard for me to even estimate the amount of changes and work. And what's in the end missing because of using Yjs from two-years-ago.
While I see discussion in #5 about ydotnet, I just wonder does it still make sense or not to consider updating it?
Hey, i work with Prosemirror.
I cant get this to work for me, because prosemirror uses XMLFragment
Is there a way to fix this?
XMLFragment would be nice as type :D
Describe the bug
Applying update from Ycs documents with subdocuments on Yjs documents generate new subdocuments guids.
To Reproduce
Steps to reproduce the behavior:
For example:
// C# code
var document = new YDoc();
var subDoc1 = new YDoc(new YDocOptions(){Guid = "subdoc1"});
var subDoc2 = new YDoc(new YDocOptions(){Guid = "subdoc2"});
document.GetMap("subdocs").Set("subdoc1", subDoc1);
document.GetMap("subdocs").Set("subdoc2", subDoc2);
byte[] update = document.EncodeStateAsUpdateV2();
// send this update to Node.js (e. g. with Convert.FromBase64String())
// JavaScript code
const document = new Y.Doc()
Y.applyUpdateV2(document, updateFromYcs)
Expected behavior
Ycs subdocuments guids the same as Yjs subdocuments guids.
Screenshots
Yjs document state after applying:
Environment Information
Additional context
Applying an update from a Yjs document with subdocuments to a Ycs document keeps guids as expected.
Applying an update from a Ycs document with subdocuments to the new Ycs document keeps guids as expected too.
I'm currently using Ycs as a library so I can interface with a Yjs websocket server. The intention is to use it as a client and so far i'm able to read and write sync steps and also send updates with EncodeStateAsUpdateV2.
However I can't see any exposed functionality to apply the update sent from the server when another edit has been made by a different client. Is this missing intentionally or is it something that i've just not been able to find? The update packet is only 10 bytes which I believe starts with a state vector and from what I can see the only function which takes that format is EncodeStateAsUpdateV2 but I think that just gives a local update up to that state vectors clock.
If you're not able to do this, could you point me to the function in the Yjs library and i'll have a go at writing + pull requesting my own. Am I right in thinking the Ycs library has only been written to be a Yjs server and will I bump into any more issues?
Thanks
Use github issues for bug reports and feature requests. For general questions, please use https://discuss.yjs.dev/
if use signalr on server , how to use y-prosemirror for client ?
As we were looking to use ycs in our project we noticed that there wasn't a Nuget package.
Publishing a Nuget package of this project would make it much more discoverable and consumable.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.