hypery2k / nativescript-urlhandler Goto Github PK
View Code? Open in Web Editor NEWNativeScript URL Handler Plugin
License: MIT License
NativeScript URL Handler Plugin
License: MIT License
import * as application from 'application';
import { getCallback, extractAppURL } from './urlhandler.common';
export { handleOpenURL } from './urlhandler.common';
var lastReceivedData = null;
application.android.on(application.AndroidApplication.activityResumedEvent, function (args) {
var data = args.activity.getIntent().getData();
if (data !== lastReceivedData) {
try {
if (new String(args.activity.getIntent().getAction()).valueOf() === new String(android.content.Intent.ACTION_VIEW).valueOf()) {
getCallback()(extractAppURL(data));
lastReceivedData = data;
}
}
catch (e) {
console.error('Unknown error during getting App URL data', e);
}
}
});
I am very new to typescript but i think that with a target of es5 those import statements should be require statements. I think
Branch | Build failing π¨ |
---|---|
Dependency | tns-core-modules |
Current Version | 3.0.0 |
Type | peerDependency |
This version is covered by your current version range and after updating it in your project the build failed.
As tns-core-modules is βonlyβ a peerDependency of this project it might not break production or downstream projects, but βonlyβ your build or test tools β preventing new deploys or publishes.
I recommend you give this issue a high priority. Iβm sure you can resolve this πͺ
There is a collection of frequently asked questions and of course you may always ask my humans.
Your Greenkeeper Bot π΄
Please answer the following questions for yourself before submitting an issue.
I have done all the configurations given for android:
added android:launchMode="singleTask" to main activity
added intent filter
When doing login , app navigates to mobile browser, after success login it should redirect back to app.
Not redirecting back to app
Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions.
NativeScript version:
Java version:
NodeJS and NPM version:
Platform(s) running:
βΉ Please link to or upload a project we can download that reproduces the issue.
CLOSED because the problem was not related to this plugin.
Please answer the following questions for yourself before submitting an issue.
Using oauth plugin for logging in, I have the redirect url to my url scheme.
Sometimes it works and the callback function is called, but sometime it doesn't work. I always see the url called in the log (I guess it's the plugin that print it?) but sometimes the callback is not called.
app.component.ts:
import { Component } from "@angular/core";
import { handleOpenURL, AppURL } from 'nativescript-urlhandler';
import * as querystring from "querystring";
import { User } from "./model/users/user";
import { AuthenticationService } from "./services/auth.service";
import { Route, Router } from "@angular/router";
import * as moment from 'moment';
import {exit} from 'nativescript-exit';
@Component({
selector: "ns-app",
moduleId: module.id,
templateUrl: "./app.component.html"
})
export class AppComponent {
constructor(
private authenticationService: AuthenticationService,
private router: Router
) {}
ngOnInit(){
handleOpenURL((appURL: AppURL) => {
if(!appURL) return;
let auth = querystring.parse(appURL.path);
let u = new User();
console.log(JSON.stringify(auth));
u.token = auth.access_token;
let expiration = moment();
expiration.add(parseInt(auth.expires_in), "seconds");
u.tokenExpiration = expiration;
this.authenticationService.setUser(u);
this.router.navigate(['']);
});
}
}
Url scheme in Android Manifest:
<activity
android:name="com.tns.NativeScriptActivity"
android:label="@string/title_activity_kimera"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout|locale|uiMode"
android:theme="@style/LaunchScreenTheme"
android:launchMode="singleTask">
<meta-data android:name="SET_THEME_ON_LAUNCH" android:resource="@style/AppTheme" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="auth" android:scheme="ed" />
</intent-filter>
</activity>
In console, after the app reopen and the browser closes itself, I see this:
JS: ed://auth/#code=bbd0cf23047fc66e813c96...........
That should be the url that trigger the callback function.
Thanks in advance, I searched everywhere but without solutions...
Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions.
NativeScript version: 5.4.0
Java version: javac 11.0.3
NodeJS and NPM version: Node v8.10.0 - Npm 3.5.2
Platform(s) running: Android
I'm catching the following link: https://myapp.it/test/redirectPage.html?itemType='xxx' with the following code:
handleOpenURL((appURL: AppURL) => { console.log(JSON.stringify(appURL.params['itemType'])); });
but params is an empty object, and appURL.path doesn't contain the params (it is: myapp.it/test/redirectPage.html)
This is AndroidManifest configuration:
<data android:scheme="https" android:host="myapp.test.com" android:pathPrefix="/manager" />
when app is active deep handler works well, but when it's closed (terminated) it does not redirect to intended page, it only opens the app.
I have the following intent-filter:
<activity
android:name="com.tns.NativeScriptActivity"
android:label="@string/title_activity_kimera"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@style/LaunchScreenTheme"
android:launchMode="singleTask">
<meta-data android:name="SET_THEME_ON_LAUNCH" android:resource="@style/AppTheme" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<data android:scheme="https" android:host="some.hostname.com" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
and a handleOpenURL(...)
call in the AppModule constructor. It works wonderfully, but only the first time a link is clicked, triggering the app to load up. If the app was already running when the link is clicked, it's brought to foreground, but the callback for handleOpenURL isn't called.
Am I missing something or is this a bug?
I've installed the plugin to handle the URL sent from a Share Extension to my main app. I've placed the handleUrl() function in the app.component.ts inside ngOnInit() so I can use other Angular components for the callback.
I was expecting that when receiving the URL from the share extension, the callback function will be called.
However, when the app is resumed this works fine but when the app it's closed and opened using the URL the callback is not defined. I believe this happens because the bootstrapping for the angular happens after the call of "didFinishLaunchingWithOptions()" so the callback is not yet defined.
NativeScript version: 4.0.0
Java version: -
NodeJS and NPM version: node v8.11.1, npm v5.6.0
Platform(s) running: macOS, iOS
Please answer the following questions for yourself before submitting an issue.
Following the instructions but plugin fails to load and reports error
The plugin should load and fire during app startup
Added the plugin as follows: tns plugin add nativescript-urlhandler
package.json says: "nativescript-urlhandler": "^1.3.0",
This is my app.js:
import Vue from 'nativescript-vue'
import RadSideDrawer from 'nativescript-ui-sidedrawer/vue'
Vue.use(RadSideDrawer)
import { handleOpenURL } from "nativescript-urlhandler" // .handleOpenURL;
import App from './components/App'
Vue.config.silent = !__DEV__
new Vue({
render: h => h(App),
created() {
// handleOpenURL(url) => { console.log('handleOpenUrl', url) }
handleOpenURL(function(appURL) {
console.log('Got the following appURL', appURL);
});
}
}).$start()
Can't start the app:
Please provide detailed steps for reproducing the issue.
app.js
from abovePlease provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions.
NativeScript version: nativescript/core 8.3.0
Java version: n/a
NodeJS and NPM version: Tried on node 16 and node 18
Platform(s) running: Xcode Version 13.4.1 (13F100)
βΉ Please link to or upload a project we can download that reproduces the issue.
https://github.com/dcolley/ns-vue-urlhandler
$ ns run ios
ERROR in ./app/app.js 6:0-55
Module not found: Error: Can't resolve 'nativescript-urlhandler' in '/Users/derek/demoproj/example-app2/app'
resolve 'nativescript-urlhandler' in '/Users/derek/demoproj/example-app2/app'
Parsed request is a module
using description file: /Users/derek/demoproj/example-app2/package.json (relative path: ./app)
resolve as module
looking for modules in /Users/derek/demoproj/example-app2/node_modules
single file module
using description file: /Users/derek/demoproj/example-app2/package.json (relative path: ./node_modules/nativescript-urlhandler)
no extension
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler doesn't exist
.ios.vue
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ios.vue doesn't exist
.vue
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.vue doesn't exist
.ios.ts
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ios.ts doesn't exist
.ts
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ts doesn't exist
.ios.js
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ios.js doesn't exist
.js
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.js doesn't exist
.ios.mjs
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ios.mjs doesn't exist
.mjs
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.mjs doesn't exist
.ios.css
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ios.css doesn't exist
.css
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.css doesn't exist
.ios.scss
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ios.scss doesn't exist
.scss
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.scss doesn't exist
.ios.json
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ios.json doesn't exist
.json
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.json doesn't exist
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler doesn't exist
/Users/derek/demoproj/example-app2/app/node_modules doesn't exist or is not a directory
looking for modules in /Users/derek/demoproj/example-app2/node_modules
single file module
using description file: /Users/derek/demoproj/example-app2/package.json (relative path: ./node_modules/nativescript-urlhandler)
no extension
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler doesn't exist
.ios.vue
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ios.vue doesn't exist
.vue
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.vue doesn't exist
.ios.ts
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ios.ts doesn't exist
.ts
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ts doesn't exist
.ios.js
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ios.js doesn't exist
.js
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.js doesn't exist
.ios.mjs
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ios.mjs doesn't exist
.mjs
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.mjs doesn't exist
.ios.css
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ios.css doesn't exist
.css
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.css doesn't exist
.ios.scss
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ios.scss doesn't exist
.scss
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.scss doesn't exist
.ios.json
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.ios.json doesn't exist
.json
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler.json doesn't exist
/Users/derek/demoproj/example-app2/node_modules/nativescript-urlhandler doesn't exist
/Users/derek/demoproj/node_modules doesn't exist or is not a directory
/Users/derek/metaspan/node_modules doesn't exist or is not a directory
/Users/derek/node_modules doesn't exist or is not a directory
/Users/derek/node_modules doesn't exist or is not a directory
/Users/node_modules doesn't exist or is not a directory
/node_modules doesn't exist or is not a directory
webpack 5.74.0 compiled with 1 error in 222 ms
Webpack compilation complete. Watching for file changes.
Hi ! I tried to use this plugin for my deep links. On ANdroid no problem, it's work. But on iOS the callback is never called. I followed the instructions : change Info.plist, call handleOpenURL into the app.component.ts (into ngOnInit).
Did I miss something ?
applicationOpenURLSourceApplicationAnnotation
is deprecated, and doesn't get called when the app is launched from a url (only if the app is already running). application:openURL:options:
gets called in both situations, and should be used instead.
Hello
I installed the plugin successfully then created my own URL Scheme. When I type my own URL Scheme in a browser, it goes to the app correctly but handleOpenURL
method is not called and I can't get anything.
I expected, handleOpenURL
ran and I can get the App URL in App Component.
The method,handleOpenURL
, was not raised.
NativeScript version: 5.4.0
Java version:
NodeJS and NPM version: NodeJS: v8.9.1
Platform(s) running: iPhone 6s iOS 12.3.1
N/A
app.component
import { Component, OnInit } from "@angular/core";
import { NavigationEnd, Router } from "@angular/router";
import { AppURL, handleOpenURL } from "nativescript-urlhandler";
@Component({
moduleId: module.id,
selector: "ns-app",
templateUrl: "app.component.html",
})
export class AppComponent implements OnInit {
constructor(
private router: Router,
) {}
public ngOnInit() {
handleOpenURL((appURL: AppURL) => {
console.log("Got the following appURL", appURL);
});
}
}
Does this plugin work with applinks (apple-app-site-association).
I have my app loading with myapp:// and your plugin works perfectly.
I'm really struggling to find anything on the internet as to how to find out what deep link opened the app.
Hopefully I'm not wasting your time with this questions and you might know of something.
thank you !
Add by @one-adam-nolan in this PR. More details here.
Related to #24.
I have followed the directions exactly. but the urlHandler never fires. I am running into this issue
NativeScript/NativeScript#3738
i have followed the directions above to cextend the native script activity but It precludes using your handler witch i really like because it helps pars the url and will work on ios. I tried adding
protected onNewIntent(intent: android.content.Intent): void {
super.onNewIntent(intent)
this.setIntent(intent);
}
instead of
protected onNewIntent(intent: android.content.Intent): void {
super.onNewIntent(intent)
if (intent.getDataString) {
let data = intent.getDataString()
if (data) {
console.log('data', data)
}
}
}
This solves the issue and i can use your plugin without issue unfortunately this seems to break the ActionBar -> ActionItem click event i am not sure why
have you run into these issues using your plugin? am i missing something. I would really appreciate your help.
Please answer the following questions for yourself before submitting an issue.
Currently there is no opportunity to interpret the relative path passed via the URL scheme.
I.E. exampleApp://comments/1
The plugin should return the relative path of the URL scheme inside the promise so that the app may navigate to the appropriate intended route.
Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions.
NativeScript version:
Java version:
NodeJS and NPM version:
Platform(s) running:
"nativescript-urlhandler": "^1.3.0",
"nativescript-vue": "^2.4.0",
"nativescript": {
"id": "example.app.name",
"tns-android": {
"version": "6.3.1"
},
"tns-ios": {
"version": "6.3.0"
}
},
I try to call router.navigateByUrl('targetComponent') in handleOpenURL(), but I always got a blank component page without console log.
I can get the appURL in handleOpenURL() and I would like to navigate to some target router with some console log for the target component initialization.
I just got a blank component page with back button in the header. If I click the back button, it will go to the entry component with all console log which should print out during the target component life cycle.
NativeScript version: 3.3.0-2017-10-16-9974
Java version: 1.8.0_144
NodeJS and NPM version: 7.4.0 and 4.0.5
Platform(s) running: Android
N/A
I wanted to know, is it supporting bitcoin:XXX url scheme?
It would be nice to have access to URI parts, like this: https://github.com/ZixiaoWang/tns-urihandler/blob/master/urihandler.android.ts
It doesn't seem that the function handleOpenUrl is ever fired.
I have tried in my main-page.js:
handleOpenURL(function(appURL) {
console.log("Hello " + appURL);
});
But nothing happens and no error is giving.
Is there a demo app for this project?
if (new String(intent.getAction()).valueOf() === new String(android.content.Intent.ACTION_VIEW).valueOf()) {
...
}
new String(intent.getAction()).valueOf()
"android.intent.action.VIEW"
new String(android.content.Intent.ACTION_VIEW).valueOf()
"android.intent.action.MAIN"
There are a lot of people on NS 8 trying to use this plugin because they don't know there is a new one. It would be nice to mark it as deprecated and report that the new plugin is this: https://github.com/nativescript-community/appurl
Following the setup guide, setting up the handler in the application component seemed to be too late, receiving: No callback provided. Please ensure that you called "handleOpenURL" during application init!
I tried to look at the angular-demo but couldn't find any mention of handleOpenUrl. Is that just an unfinished place holder at the moment or was there something I missed?
Adding the handler in main.ts seemed to log the expected results but it is not the ideal place to have it.
I am try running the URL handler with nativescript-facebook.
(https://github.com/NativeScript/nativescript-facebook)
[handleOpenURL((appURL: AppURL) => {
console.log('Got the following appURL', appURL);
}); will be not function.]
When I try remove "let nsFacebook = require('nativescript-facebook');" from the code. The URL Handler is working.
Please help checking
Thank!
@hypery2k
Will you be releasing a new patch version with the changes made recently?
Do you have any plans to add support for NativeScript 8 ? Currently I always have to go to node_nodules and change require("application") to require("@nativescript/core/application")
Please answer the following questions for yourself before submitting an issue.
There is no documentation on how to setup app links for web urls. If I have a website and an app I would like to use this package to enable links to my website to open the user's app if it's installed according to the Android app links tutorial.
However, they use some assistant tool from Android Studio and it is not clear how we can set this up for ourselves using nativescript with Vue, Angular or React and this package. The current demo is also outdated it seems as the AndroidManifest does not have the autoVerify
attribute on the intent-filter
and is not supported for NativeScript cli 6
I would like to see an up to date chapter and demo using web urls instead of the current demo://test
scheme which is not useful when wanting to link to a website.
Versions:
"tns-core-modules": "2.5.2",
"tns-android": "version": "3.0.0-rc.1"
When testing on emulator appURL.params is an empty map.
adb shell am start -W -a android.intent.action.VIEW -d "myApp://mobile?recoveryToken=22\&[email protected]"
This is my AndroidManifest.xml
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="myApp"
android:host="mobile" />
</intent-filter>
I managed to get it working by changing urlhandler.common.js
into this:
function extractAppURL(urlParam) {
if (!!urlParam) {
var url_1 = urlParam.toString(), params = {}, urlWithPath = url_1.indexOf('//') < url_1.length - 2, urlWithParams = url_1.indexOf('?') !== -1, path = urlWithPath ? url_1.substring(url_1.indexOf('//') + 2, urlWithParams ? url_1.indexOf('?') : url_1.length) : null, parameters = url_1.substring(url_1.indexOf('?') + 1).split('&');
// create JSON object
if (urlWithParams) {
for (var i = 0, len = parameters.length; i < len; i++) {
var paramData = parameters[i].split('=');
params[paramData[0]] = paramData[1] ? paramData[1] : null;
}
}
Hey, the plugin will fail when bundled using webpack.
The fix is to set "noEmitHelpers"
to true
at the tsconfig.json
as mentioned here https://github.com/NativeScript/nativescript-dev-webpack/issues/70#issuecomment-279085077
So far it's working fine for me.
in case you need my environment:
Platform: Android
As explained is this comment, when the application is already opened and the user attempts to reopen it with the deep link, the intent data is not updated.
not able to call below function in iOS ,but its working fine in android.
handleOpenURL((appURL: AppURL) => {
console.log( appURL);
}
can anyone help please...
This plugin overrides any existing app delegate:
application.ios.delegate = UrlHandlerAppDelegate;
This seems like a bad idea..
Please answer the following questions for yourself before submitting an issue.
Function handleOpenURL is called each time that the application is resumed (goes to front) with the latest deeplink consumed.
Function handleOpenURL would be called only when the deeplink is used to bring the app to front.
I am trying to setup a redirection to a certain page after the deeplink is clicked on. It works just fine, but when I navigate away from the deeplinked page, next time the application is resumed I get redirected back to the deeplinked page again. Looks like handleOpenURL memorizes the last used deeplink and calls the callback with it everytime the app is brought to front.
Please provide detailed steps for reproducing the issue.
ngOnInit() {
console.log('Initializing app component');
handleOpenURL((appUrl: AppURL) => {
console.log('Opening deeplink', appUrl.path, JSON.stringify(Array.from(appUrl.params.entries())
.reduce((object, [key, value]) => {
object[key] = value;
return object;
}, {})
));
return this.zone.run(() => {
switch (appUrl.path) {
case 'abc':
return this.routerExtensions.navigate([
'abc/' + appUrl.params.get('def') + '/' + appUrl.params.get('xyz')
], {clearHistory: true}).then(() => console.log('App :: Navigating to abc'));
case 'xyz':
return this.routerExtensions.navigate([
'xyz/' + appUrl.params.get('abc')
], {clearHistory: true}).then(() => console.log('App :: Navigating to xyz'));
default:
return this.routerExtensions.navigate([
'home'
], {clearHistory: true}).then(() => console.log('App :: Navigating to home'));
}
});
});
}
NativeScript version: 5.1.0
Java version: 1.8.0_211
NodeJS and NPM version: v8.11.4 and 6.10.1
Platform(s) running: Android
βΉ None...
JS: Opening deeplink xyz {"abc":"123"}
JS: App :: Navigating to xyz
Using version 1.3.0 of nativescript-urlhandler
Just a PSA, for whatever reason the plugin did not seem to work with Android when android:host="__PACKAGE__"
was included in the AndroidManifest along with the scheme. Removing that particular piece fixes the issue.
Copy of the working element
<application android:name="com.tns.NativeScriptApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">
<activity android:name="com.tns.NativeScriptActivity" ... android:launchMode="singleTask">
<meta-data android:name="SET_THEME_ON_LAUNCH" android:resource="@style/AppTheme" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!---- Here -----> <data android:scheme="myappscheme" />
</intent-filter>
</activity>
<activity android:name="com.tns.ErrorReportActivity" />
</application>
Hi Martin,
First of all, thank you for sharing this plug-in. I have implemented it successfully in IOS. However, I couldn't make it work on Android. Then, I tried your demo app and got the same result. It only works on IOS.
Thanks in advance for your support.
OS --> Mac
NativeScript version:
4.2.4
Java version:
1.8.0_181-b13
NodeJS and NPM version:
10.10 / 6.4.1
Platform(s) running:
IOS -> Runs fine on Emulator
Android -> Fails on Emulator
The Demo project in this repo
Edit - not an issue... issue was me... I needed to add config to app/App_Resources/iOS... I was adding to the generated plist... sorry
Unknown error during getting App URL data TypeError: Cannot read property 'toString' of null
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.