ssbc / patchwork Goto Github PK
View Code? Open in Web Editor NEWA decentralized messaging and sharing app built on top of Secure Scuttlebutt (SSB).
Home Page: https://www.scuttlebutt.nz
License: GNU Affero General Public License v3.0
A decentralized messaging and sharing app built on top of Secure Scuttlebutt (SSB).
Home Page: https://www.scuttlebutt.nz
License: GNU Affero General Public License v3.0
Being able to hide a message you mistakenly posted would help enable hacking on new applications - at least it would make it safer to test them with out annoying everyone by filling their feeds with noise.
Currently, spam flags do work somewhat like this... but it's not obvious that you can do this by flagging your own message as spam.
That said, redaction shouldn't hide the message entirely - it's still there in the database, so it would be dishonest of the application to hide it completely. Opening that message directly should show it, for example.
I cloned the repo and ran npm install -d
.
When I run the app I get an error. It seems to be an issue with Electron or the chloride module.
Running npm run test
in both ssb-keys and chloride directories passes.
I can also require() the referenced sodium.node
from a nodejs repl without error. Any idea what to do now?
$ npm start
> [email protected] start /usr/local/src/patchwork
> electron .
[28382:0814/073314:ERROR:browser_main_loop.cc(173)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
App threw an error when running [Error: /usr/local/src/patchwork/node_modules/ssb-keys/node_modules/chloride/build/Release/sodium.node: undefined symbol: _ZN2v87Context10GetCurrentEv]
A JavaScript error occured in the browser process
Uncaught Exception:
Error: /usr/local/src/patchwork/node_modules/ssb-keys/node_modules/chloride/build/Release/sodium.node: undefined symbol: _ZN2v87Context10GetCurrentEv
at Error (native)
at Object.module.(anonymous function) (ATOM_SHELL_ASAR.js:137:20)
at Object.module.(anonymous function) [as .node] (ATOM_SHELL_ASAR.js:137:20)
at Module.load (module.js:351:32)
at Function.Module._load (module.js:306:12)
at Module.require (module.js:361:17)
at require (module.js:380:17)
at Object.<anonymous> (/usr/local/src/patchwork/node_modules/ssb-keys/node_modules/chloride/lib/sodium.js:16:15)
at Module._compile (module.js:426:26)
at Object.Module._extensions..js (module.js:444:10)
[28382:0814/073315:INFO:audio_manager_pulse.cc(258)] Failed to connect to the context. Error: Connection refused
I created a new account, made a post, flagged it, then unflagged it.
But if I went back to the main feed this message was still shown as flagged.
If I restarted patchwork it is shown correctly, but not if I simply switch back to the feed view.
The goal here is not to create the perfect solution to apps, but just to get an app model that can bootstrap better models.
appname->hash
.We don't need to figure out a sophisticated app model, with updates, etc, that is just part of the app manager app.
Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The HTMLImageElement provided is in the 'broken' state.
Error: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The HTMLImageElement provided is in the 'broken' state.
at Error (native)
at draw (/home/marina/prefix/lib/node_modules/ssb-patchwork/ui/lib/com/image-uploader.js:50:9)
at HTMLCanvasElement.onmouseup (/home/marina/prefix/lib/node_modules/ssb-patchwork/ui/lib/com/image-uploader.js:131:5)
This was an unhandled exception.
These instructions are for once you've cloned the repo or...?
just installed patchwork. No errors from what I can tell. When I run patchwork
I see:
➜ ~ patchwork
dyld: lazy symbol binding failed: Symbol not found: __ZN2v86Object3GetENS_6HandleINS_5ValueEEE
Referenced from: /Users/Nicholas/.nvm/versions/node/v0.12.7/lib/node_modules/ssb-patchwork/node_modules/chloride/build/Release/sodium.node
Expected in: dynamic lookup
dyld: Symbol not found: __ZN2v86Object3GetENS_6HandleINS_5ValueEEE
Referenced from: /Users/Nicholas/.nvm/versions/node/v0.12.7/lib/node_modules/ssb-patchwork/node_modules/chloride/build/Release/sodium.node
Expected in: dynamic lookup
currently the adder always defaults to a public post. But I feel it should be contextual:
thoughts?
the window just stays open but is frozen.
my hunch is that the OSX stuff may be related: #45
That enables the cli to work, otherwise i run sbot server,
and then the client works. I have been telling people to use sbot invite.accept <code>
because and that gets them on the network.
None has been chosen yet. Do we want something more restrictive than MIT?
Sorry to ask a question founded in ignorance, but can patchwork be run on mobile devices? If not why not? Any long term plans for this? What sub-project(s) would need work?
I had to kill the process to get the green light on my laptop that signals that the webcam is capturing to turn off.
[70184:0813/220710:INFO:CONSOLE(0)] "Refused to load the image 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcwAAAHMCAYAAABY25iGAAAgAElEQVR4nOy8SY/kV5bl93vzfzQznyKCTGYyqzq7JUEL9UYfUxut9MmkRld3ZyUzSUaEh7u5Df/pjVo8Y2QNQDUESYVa8AIEgXCDh8Wb7j3nnnPF//a//x/l73/4Cz8+P5OlZLe/48M37/jdN0887DqeGss3jwdaIfjjH//I//mf/gvPrycCjqIUW0ws0bNlgdAK5xoaY7GqxRjDNE38+Pkjb/MV5xyNM3TKIGPkOnuwB9Ca6XIhrGfe73f85t0dO2MwOXLfdDzset4/HOgaQ04riIhQkMgs28qwH/j22w88Ph2QWlFSICZPDBkpNT/8+SP/+T/9iR9+/MJp8QjdIXRPSoGhF+wPA09P7wgl8/JyZPOeUgTzPJNjQQgBSFJK+BDIAoZhYNz1/Pb9e7bpyvHLM35ZiJvHbxNCCFKJNK1jd3egHwaGYeDdu...+iM3mAiCJB66hFz4BFhWr1eE73+PX13DV98XfDFMMCaTCJ9YwPatYWjMaHIAr85iA5zOCDkavf0fEf3z8WVZYR1eXd09aJI+HT0/yAas1YNm9J1Dqzt0a1clTq/ZEIiEL7zbo6qmCD1CsmlCzuGzxK9iED8V7SY/UEPUf4IAUR3GN6EJiK8yVkgHEYGDQxyEZpSgqYDjh8o4sUMhpj/RqdNW12P0canlCtdWddVy7bwnLbHZodCmUeSWOhxXBokjjx53bl7Xrjsi4s687WdvIwcjqd+PJ05vPzE19fX3kaC5M5OC/NWwem5haeeqTI/lktJoscTNleRaaP67MHk9Y+fF9b9L9ziSTTjiRNOoTb75M4OXQYBlDh7e3C/q//H0///YWvf54YnxLj/ImX1yf+/Kcf+eV65bItpFwoJaxFR/eNleSkQsnqfJbH9/gQMNVLxA/VsSeI9178Yww7AmaMIrMjCPdH//3/HxrkoGhK0bm/AAAAAElFTkSuQmCC' because it violates the following Content Security Policy directive: "default-src 'self' http://localhost:7777 http://localhost:7778". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback.
", source: file:///Users/feross/code/patchwork/node_modules/ssb-patchwork-ui/main.html#/setup (0)
Cannot read property 'width' of undefined
TypeError: Cannot read property 'width' of undefined
at checkFrames (file:///Users/aredridel/Downloads/Patchwork.app/Contents/Resources/app/ui/vendor/whammy.js:234:26)
at new toWebM (file:///Users/aredridel/Downloads/Patchwork.app/Contents/Resources/app/ui/vendor/whammy.js:14:16)
at WhammyVideo.window.Whammy.WhammyVideo.compile (file:///Users/aredridel/Downloads/Patchwork.app/Contents/Resources/app/ui/vendor/whammy.js:519:12)
at stopRecording (/Users/aredridel/Downloads/Patchwork.app/Contents/Resources/app/ui/lib/com/webcam-giffer-form.js:252:20)
at HTMLDocument.onmouseup (/Users/aredridel/Downloads/Patchwork.app/Contents/Resources/app/ui/lib/com/webcam-giffer-form.js:84:5)
This was an unhandled exception.
I'd like to keep a registry of pubs that the user has joined. Why:
The registry could be updated when an invite is successfully used.
@dominictarr you have any objections to this? Do you think this registry should live in the invites plugin, or in PW?
Appeared after clicking "Flag this post > Spam"
TypeError: Cannot read property 'appendChild' of null
at /home/cryptix/patchwork/ui/lib/com/message.js:197:52
at Object._requests.(anonymous function) (/home/cryptix/patchwork/node_modules/packet-stream/index.js:37:5)
at PacketStream._onrequest (/home/cryptix/patchwork/node_modules/packet-stream/index.js:139:26)
at PacketStream.write (/home/cryptix/patchwork/node_modules/packet-stream/index.js:122:41)
at /home/cryptix/patchwork/node_modules/muxrpc/pull-weird.js:55:15
at /home/cryptix/patchwork/node_modules/muxrpc/node_modules/pull-stream/sinks.js:15:33
at /home/cryptix/patchwork/node_modules/pull-stream/throughs.js:97:9
at EventEmitter.onincoming (/home/cryptix/patchwork/node_modules/pull-ipc/index.js:54:7)
at emitOne (events.js:77:13)
at EventEmitter.emit (events.js:169:7)
This was an unhandled exception.
Ps: I tried it because I posted a dead link but I'm not sure what I would actually trigger..
this is not right. if you query the gossip.peers api you get this:
[
{
"port": 8008,
"key": "@J+0DGLgRn8H5tVLCcRUfN7NfUcTGEZKqML3krEOJjDY=.ed25519",
"host": "localhost",
"announcers": [
"@BIbVppzlrNiRJogxDYz3glUS7G4s4D4NiXiPEAEzxdE=.ed25519"
],
"time": {
"connect": 0,
"attempt": 1438966681043
},
"connected": true
},
{
"host": "176.58.117.63",
"port": 8008,
"key": "@J+0DGLgRn8H5tVLCcRUfN7NfUcTGEZKqML3krEOJjDY=.ed25519",
"announcers": [
"@BIbVppzlrNiRJogxDYz3glUS7G4s4D4NiXiPEAEzxdE=.ed25519"
],
"time": {
"connect": 1438966696787,
"attempt": 1438966696603
},
"connected": true,
"id": "@J+0DGLgRn8H5tVLCcRUfN7NfUcTGEZKqML3krEOJjDY=.ed25519",
"failure": 0
}
]
seems like duplicated functionality and it should just consult the peers api.
Customary OSX app behavior is to stay running even when all windows are closed.
both sbot and patchwork has this error occur when initialize
Uncaught Exception:
TypeError: Cannot read property 'timestamp' of undefined
at /home/myf/.npm-packages/lib/node_modules/ssb-patchwork/node_modules/scuttlebot/plugins/blobs.js:235:51
at EventEmitter.<anonymous> (/home/myf/.npm-packages/lib/node_modules/ssb-patchwork/node_modules/muxrpc-validation/index.js:79:23)
at EventEmitter.hooked [as get] (/home/myf/.npm-packages/lib/node_modules/ssb-patchwork/node_modules/hoox/index.js:10:15)
at /home/myf/.npm-packages/lib/node_modules/ssb-patchwork/node_modules/scuttlebot/plugins/blobs.js:233:20
at /home/myf/.npm-packages/lib/node_modules/ssb-patchwork/node_modules/multiblob/index.js:77:15
at continuation (/home/myf/.npm-packages/lib/node_modules/ssb-patchwork/node_modules/continuable-list/index.js:24:25)
at /home/myf/.npm-packages/lib/node_modules/ssb-patchwork/node_modules/multiblob/index.js:56:9
at FSReqWrap.oncomplete (fs.js:82:15)
I upgraded node to [email protected] (no version manager) and still get this error. I was able to get past it once, but on restart it came back, and since then can't defeat the bug.
A JavaScript error occurred in the main process
Uncaught Exception:
Error: /home/johnny/.npm/lib/node_modules/ssb-patchwork/node_modules/ssb-keys/node_modules/chloride/build/Release/sodium.node: undefined symbol: _ZN2v87Context10GetCurrentEv
at Error (native)
at Object.module.(anonymous function) (ATOM_SHELL_ASAR.js:137:20)
at Object.module.(anonymous function) [as .node] (ATOM_SHELL_ASAR.js:137:20)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (/home/johnny/.npm/lib/node_modules/ssb-patchwork/node_modules/ssb-keys/node_modules/chloride/lib/sodium.js:16:15)
at Module._compile (module.js:434:26)
at Object.Module._extensions..js (module.js:452:10)
there is currently no way to get the id of a comment. this is useful when demoing ssb and explaining how it all works, but it is also important if you want to refer to another comment later, or look it up with the CLI.
Viewing replies required a page navigation to the thread's page. This was tedious. It made it hard to monitor threads.
The latest build experiments with the subwindow component (it was already built). Here's what it looks like:
The idea is that you can open threads in subwindows to watch for replies.
Because of #32 , I found myself wanting to keep track of conversations separately. The mechanic I reached for was to open a new tab (not possible as far as I can tell?), but the problem I was trying to solve is tracking multiple conversations at once.
From an article about AirBnB's recent Prop F adverts:
SF resident Martha Kenney posted to her Facebook page: “Dear Airbnb, I’m happy to hear that you paid your taxes this year. I did too! Isn’t it awesome?” She crunched the numbers, and found the $12 million would only pay $0.78 to library employees per day – and that’s if the taxes only went to libraries.
...
“However, had you donated that $8 million you spent fighting Proposition F directly to the public libraries you love so much, that could have made a bigger difference,” she wrote.
That would be cool. An ad space where, to buy time, you make charitable donations.
This doesn't work with the ui rework because the message type has changed and the backend handles another message type.
Hey,
I would like to try patchwork. Any tips on how to get it to run on Linux?
I did npm install. When I try to run npm run build:nix I get the following output:
thomas@sting:~/repositories/patchwork$ npm run build:nix
[email protected] build:nix /home/thomas/repositories/patchwork
electron-packager ./ scuttlebot --out=dist/linux --platform=linux --arch=x64 --ignore=node_modules/electron* --version=0.28.3 --icon=assets/osx/scuttlebot.icns
Packaging app for platform linux x64 using electron v0.28.3
[ { [Error: ENOENT, stat '/home/thomas/repositories/patchwork/dist/osx/Scuttlebot.app/Contents/Frameworks/Electron Framework.framework/Libraries/Libraries']
errno: -2,
code: 'ENOENT',
path: '/home/thomas/repositories/patchwork/dist/osx/Scuttlebot.app/Contents/Frameworks/Electron Framework.framework/Libraries/Libraries' },
{ [Error: ENOENT, stat '/home/thomas/repositories/patchwork/dist/osx/Scuttlebot.app/Contents/Frameworks/Electron Framework.framework/Versions/Current/Libraries/Libraries']
errno: -2,
code: 'ENOENT',
path: '/home/thomas/repositories/patchwork/dist/osx/Scuttlebot.app/Contents/Frameworks/Electron Framework.framework/Versions/Current/Libraries/Libraries' },
{ [Error: ENOENT, stat '/home/thomas/repositories/patchwork/dist/osx/Scuttlebot.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/Libraries']
errno: -2,
code: 'ENOENT',
path: '/home/thomas/repositories/patchwork/dist/osx/Scuttlebot.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/Libraries' } ] undefined
npm ERR! Linux 4.1.0-1-amd64
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "build:nix"
npm ERR! node v0.12.7
npm ERR! npm v2.11.3
npm ERR! code ELIFECYCLE
npm ERR! [email protected] build:nix: electron-packager ./ scuttlebot --out=dist/linux --platform=linux --arch=x64 --ignore=node_modules/electron* --version=0.28.3 --icon=assets/osx/scuttlebot.icns
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] build:nix script 'electron-packager ./ scuttlebot --out=dist/linux --platform=linux --arch=x64 --ignore=node_modules/electron* --version=0.28.3 --icon=assets/osx/scuttlebot.icns'.
npm ERR! This is most likely a problem with the ssb-patchwork package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! electron-packager ./ scuttlebot --out=dist/linux --platform=linux --arch=x64 --ignore=node_modules/electron* --version=0.28.3 --icon=assets/osx/scuttlebot.icns
npm ERR! You can get their info via:
npm ERR! npm owner ls ssb-patchwork
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR! /home/thomas/repositories/patchwork/npm-debug.log
Any tips?
iojs v2.5.0
npm 2.13.2
message has invalid properties
Error: message has invalid properties
at Object.exports.isInvalidShape (/Users/bret/repos/patchwork/node_modules/scuttlebot/node_modules/ssb-feed/util.js:105:12)
at validate (/Users/bret/repos/patchwork/node_modules/scuttlebot/node_modules/ssb-feed/validator.js:69:14)
at /Users/bret/repos/patchwork/node_modules/scuttlebot/node_modules/ssb-feed/validator.js:50:7
at /Users/bret/repos/patchwork/node_modules/scuttlebot/node_modules/secure-scuttlebutt/index.js:317:22
at /Users/bret/repos/patchwork/node_modules/scuttlebot/node_modules/secure-scuttlebutt/node_modules/level-sublevel/shell.js:101:15
at /Users/bret/repos/patchwork/node_modules/scuttlebot/node_modules/secure-scuttlebutt/node_modules/level-sublevel/nut.js:120:19
This error occurred while trying to post a new profile in setup.
@mmckegg installed patchwork, entered the invite code, and then was shown a 404 page.
in the location bar it said "news".
hitting the home button works, but why did it take the user to "news"
I'm seeing some bugs in patchwork-ui's RPC connection with patchwork's main thread. How it manifests:
createLogStream({ live: true })
is sometimes failing to emit. The {sync: true}
message will emit, then the new reply will not.Patchwork's RPC code: main thread and ui thread. I put logs in both ends and found that, when the reply auto-insert message fails to emit, it fails to emit on the server-side (at this point). This suggests that the issue is not within the messaging channel. It may be a bug with how I've setup the RPC in the main thread, or a bug in muxrpc/packet-stream.
Sidenote: There are currently 2 kinds of refresh in patchwork: soft, which reloads the current view, and hard, which reloads the entire ui thread. The in-ui refresh button does a soft reload, while ctrl/cmd+r
does a hard reload. When a hard reload occurs, resetRpc
is called (code here). I was suspicious that a bug in resetRpc
could be causing the issue, but found that was not the case. The issues occur on a fresh load, with no hard refreshes having occurred.
@dominictarr Can you review the RPC code in patchwork and patchwork-ui to see if there are any visible bugs? If it looks correct, I'll dig into muxrpc and packetstream to see if the issue is there.
When you open a PDF, it will be saved into a directory, and then you get this message:
Security Error This page attempted to navigate out of its sandbox through explicit circumvention. Do not trust it!
When I click the webcam icon, the webcam media area is empty, and an error appears in the console:
main.html:1
Refused to load media from 'blob:file%3A///31acfe39-df1a-45d8-bfb7-92556a0a6b82' because it violates the following Content Security Policy directive: "default-src 'self' http://localhost:7777 http://localhost:7778". Note that 'media-src' was not explicitly set, so 'default-src' is used as a fallback.
When I then click the webcam media area, the following message is logged on the console, followed by the same error as before:
/usr/local/src/patchwork/ui/lib/com/webcam-giffer-form.js:250
Webm video encoded: 321 bytes
Debian testing amd64, Node v4.2.1, patchwork 4fb5789
still getting invalid invite code, am telling people to use scuttlebot cli directly, which works.
Selecting a mention leaves the cursor directly after the name, so if you continue typing it extends the name. It should have a space so the name stays on what you selected.
Clicking on "replies to" gives me the conversation context, but I can't distinguish between conversations I'm a part of and conversations I'm not without having to click on every "replies to" (or gather it from context)
We noticed a message by max to mix included "@mixmix," but it didnt register as a mention in the system. That's because max doesn't follow mix, and mentions are currently only recognized for people you follow. But, since max sees mix from FoaF, he expects to be able to mention him.
So, he should be able to!
Cannot read property 'appendChild' of null
TypeError: Cannot read property 'appendChild' of null
at /home/dominic/c/ssb/patchwork/ui/lib/com/message.js:192:52
at Object._requests.(anonymous function) (/home/dominic/c/ssb/patchwork/node_modules/packet-stream/index.js:37:5)
at PacketStream._onrequest (/home/dominic/c/ssb/patchwork/node_modules/packet-stream/index.js:139:26)
at PacketStream.write (/home/dominic/c/ssb/patchwork/node_modules/packet-stream/index.js:122:41)
at /home/dominic/c/ssb/patchwork/node_modules/muxrpc/pull-weird.js:55:15
at /home/dominic/c/ssb/patchwork/node_modules/muxrpc/node_modules/pull-stream/sinks.js:15:33
at /home/dominic/c/ssb/patchwork/node_modules/pull-stream/throughs.js:97:9
at EventEmitter.onincoming (/home/dominic/c/ssb/patchwork/node_modules/pull-ipc/index.js:54:7)
at emitOne (events.js:77:13)
at EventEmitter.emit (events.js:169:7)
This was an unhandled exception.
max flaged my message as spam, and so I tried to flag that as abuse
There are some bugs that only manifest in the built version of OSX.
I found myself wanting to reply to a post in the middle of a conversation thread but couldn't figure out how to make that happen. I only saw the ability to reply to the last post in the conversation thread.
https://github.com/segmentio/nightmare looks like a good option
segment-boneyard/nightmare#224 (comment) gives advice to get it working in linux
I'm not saying it needs to be a back button, but eg, if you open an image to view it, you can't easily go back to where you were. Clicking on feed again takes you to the top of the feed.
this is probably a symptom of a larger issue with recording an animated gif, but the UI changed to show a box, but that box was empty. I suspect the footage being captured will be shown there? Also, the resulting gif seems broken: %xFjj3lZ1Oynxj+X4BLpirZFY5ZDEBbnrdoONACscVik=.sha256
Used the location bar to get a handle on a secific message. Sometimes I use this because I want to view that message via the CLI, but othertimes I link to a message. In the new UI there is no way to grab the id for a message, so I can't refer to a message directly.
@mafintosh flagged my message as spam and then I got this message in my inbox:
{"type":"flag","flag":{"link":"%wb6717KILS+jLhnxSBklL+og+8/a7Mu27wlOte4FRFM=.sha256","reason":"sp...
3m ago
I tried building this but did get past this:
> ./dist/linux/scuttlebot-linux/scuttlebot
[14759:0807/154247:ERROR:browser_main_loop.cc(173)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
[14788:0807/154248:INFO:renderer_main.cc(200)] Renderer process started
[14759:0807/154248:WARNING:accelerator_util.cc(185)] Invalid accelerator token: command
...many of these lines...
[14759:0807/154248:WARNING:accelerator_util.cc(185)] Invalid accelerator token: command
[14776:0807/154248:ERROR:gles2_cmd_decoder.cc(11539)] [GroupMarkerNotSet(crbug.com/242999)!:D0A2C717D83F0000]GL ERROR :GL_INVALID_OPERATION : glTexStorage2DEXT: <- error from previous GL command
[14759:0807/154249:INFO:CONSOLE(26)] "got manifest", source: /home/dominic/c/ssb/patchwork/dist/linux/scuttlebot-linux/resources/default_app/node_modules/ssb-patchwork-ui/lib/muxrpc-ipc.js (26)
Log history read...
Indexes generated
[14759:0807/154249:INFO:CONSOLE(15)] "Uncaught TypeError: Cannot read property 'createEventStream' of undefined", source: file:///home/dominic/c/ssb/patchwork/dist/linux/scuttlebot-linux/resources/default_app/node_modules/ssb-patchwork-ui/main.js (15)
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.