hygraph / gatsby-source-graphcms Goto Github PK
View Code? Open in Web Editor NEWThe official Gatsby source plugin for GraphCMS projects
Home Page: https://graphcms.com
License: MIT License
The official Gatsby source plugin for GraphCMS projects
Home Page: https://graphcms.com
License: MIT License
I have an error with the lastest beta version .8
This query works with the GraphCMS.com playground:
{
forms {
id
name
formFields {
__typename
... on FormField {
id
name
locale
}
... on FormFieldGroup {
id
locale
}
}
}
}
but locally it doesn't:
query MyQuery {
allGraphCmsForm {
nodes {
id
name
formFields {
... on GraphCMS_FormField {
id
name
}
}
}
}
}
Here is the error we get:
{
"errors": [
{
"message": "Abstract type GraphCMS_FormFormFields must resolve to an Object type at runtime for field GraphCMS_Form.formFields with value {}, received \"null\". Either the GraphCMS_FormFormFields type should provide a \"resolveType\" function or each possible type should provide an \"isTypeOf\" function.",
"locations": [
{
"line": 6,
"column": 7
}
],
"path": [
"allGraphCmsForm",
"nodes",
0,
"formFields",
1
],
"stack": [
"GraphQLError: Abstract type GraphCMS_FormFormFields must resolve to an Object type at runtime for field GraphCMS_Form.formFields with value {}, received \"null\". Either the GraphCMS_FormFormFields type should provide a \"resolveType\" function or each possible type should provide an \"isTypeOf\" function.",
" at ensureValidRuntimeType (/Users/phil/Documents/Code/newrade/node_modules/graphql/execution/execute.js:667:11)",
" at completeAbstractValue (/Users/phil/Documents/Code/newrade/node_modules/graphql/execution/execute.js:660:42)",
" at completeValue (/Users/phil/Documents/Code/newrade/node_modules/graphql/execution/execute.js:585:12)",
" at completeValue (/Users/phil/Documents/Code/newrade/node_modules/graphql/execution/execute.js:557:21)",
" at completeValueCatchingError (/Users/phil/Documents/Code/newrade/node_modules/graphql/execution/execute.js:495:19)",
" at /Users/phil/Documents/Code/newrade/node_modules/graphql/execution/execute.js:618:25",
" at Array.forEach (<anonymous>)",
" at forEach (/Users/phil/Documents/Code/newrade/node_modules/iterall/index.js:83:25)",
" at completeListValue (/Users/phil/Documents/Code/newrade/node_modules/graphql/execution/execute.js:614:24)",
" at completeValue (/Users/phil/Documents/Code/newrade/node_modules/graphql/execution/execute.js:573:12)",
" at completeValue (/Users/phil/Documents/Code/newrade/node_modules/graphql/execution/execute.js:557:21)",
" at /Users/phil/Documents/Code/newrade/node_modules/graphql/execution/execute.js:492:16",
" at processTicksAndRejections (internal/process/task_queues.js:93:5)",
" at async Promise.all (index 2)",
" at async Promise.all (index 0)",
" at async Promise.all (index 0)"
]
}
],
"data": null,
"extensions": {
"enableRefresh": "true"
}
}
We have decided on Renovate, using this issue to keep track of setup status
Build Gatsby markdown nodes for GraphCMS RichText fields. This will enable usage of gatsby-plugin-mdx
with GraphCMS projects.
Some users are reporting the following is returned when running Gatsby with the source plugin installed.
ERROR
[object Object] [object Object]
- gatsby-node.js:93
We should improve error handling here.
Currently if a few people are working on new branches, which includes work involving changes made to the GraphCMS schema, any new changes are brought in when you run the source plugin.
This can include models which perhaps aren't finished, and cause merge issues later down the line.
Could GraphCMS environments help here? We should document "working with graphcms-fragments" on the README for the best way to tackle this.
I'm evaluating GraphCMS for my company using the gatsby-source-graphcms
plugin for fetching data from a GraphCMS endpoint, for now public available at https://api-us-east-1.graphcms.com/v2/ckh67cd5i176t01z23h0fe7dy/master
GraphCMS's Graphiql playground ist working perfectly well for all needs.
Still, I faced some issues while fetching/accessing data from the GraphCMS API using Gatsby locally:
1) Gatsby DID work pretty well fetching and showing the models. Still, some model's fields aren't there: for instance, it couldn't find most fields related my Homepage model (foreign key), as shown in the images bellow.
Homepage model with many fields
2) I made some experiments to try to figure out the problem source and I end up excluding the Foreign Key relation between the Homepage and SlideHeader models.
Since I made it, I'm running in the error Error: Schema customization failed to find remote field SlideHeader.homepage
using Gatsby, although everything seems to work pretty well using GraphCMS's online Graphiql playground.
I've already tried cleaning the (i) cache and (ii) updating some packages locally, (iii) commenting some other gatsby plugins, (iv) republishing and (v)updating my project's contents at graphcms.com and (vi) cloning the GraphCMS project and using the new API's url, but nothing seems to work.
I'm suspecting it's an intern error from the GraphCMS GraphQL API by deleting/renaming models and it's relations.
Gatsby's complete log running gatsby develop
:
success open and validate gatsby-configs - 0.037s
success load plugins - 0.830s
success onPreInit - 0.029s
success initialize cache - 0.006s
success copy gatsby files - 0.057s
success onPreBootstrap - 0.020s
success createSchemaCustomization - 0.007s
ERROR #11321 PLUGIN
"gatsby-source-graphcms" threw an error while running the sourceNodes lifecycle:
Schema customization failed to find remote field SlideHeader.homepage
189 | const config = await createSourcingConfig(gatsbyApi, pluginOptions)
190 |
> 191 | await createSchemaCustomization(config)
| ^
192 |
193 | if (webhookBody && Object.keys(webhookBody).length) {
194 | const { operation, data } = webhookBody
File: node_modules/gatsby-source-graphcms/src/gatsby-node.js:191:9
Error: Schema customization failed to find remote field SlideHeader.homepage
- build-fields.ts:96 buildFieldConfig
[netlex-site2]/[gatsby-graphql-source-toolkit]/src/create-schema-customization/build-fields.ts:96:11
- build-fields.ts:34
[netlex-site2]/[gatsby-graphql-source-toolkit]/src/create-schema-customization/build-fields.ts:34:20
- Array.reduce
- build-fields.ts:33 Object.buildFields
[netlex-site2]/[gatsby-graphql-source-toolkit]/src/create-schema-customization/build-fields.ts:33:17
- build-types.ts:99 objectType
[netlex-site2]/[gatsby-graphql-source-toolkit]/src/create-schema-customization/build-types.ts:99:13
- build-types.ts:156 buildTypeDefinition
[netlex-site2]/[gatsby-graphql-source-toolkit]/src/create-schema-customization/build-types.ts:156:12
- build-types.ts:176 Object.buildTypeDefinitions
[netlex-site2]/[gatsby-graphql-source-toolkit]/src/create-schema-customization/build-types.ts:176:21
- create-schema-customization.ts:14 createSchemaCustomization
[netlex-site2]/[gatsby-graphql-source-toolkit]/src/create-schema-customization/create-schema-customization.ts:14:20
- gatsby-node.js:191 Object.exports.sourceNodes
[netlex-site2]/[gatsby-source-graphcms]/src/gatsby-node.js:191:9
- api-runner-node.js:460 runAPI
[netlex-site2]/[gatsby]/src/utils/api-runner-node.js:460:16
- From previous event:
- api-runner-node.js:589 Promise.catch.decorateEvent.pluginName
[netlex-site2]/[gatsby]/src/utils/api-runner-node.js:589:9
- From previous event:
- api-runner-node.js:588
[netlex-site2]/[gatsby]/src/utils/api-runner-node.js:588:14
- timers.js:461 processImmediate
internal/timers.js:461:21
- From previous event:
- api-runner-node.js:561
[netlex-site2]/[gatsby]/src/utils/api-runner-node.js:561:13
- From previous event:
- api-runner-node.js:477 module.exports
[netlex-site2]/[gatsby]/src/utils/api-runner-node.js:477:3
- source-nodes.ts:97 _default
[netlex-site2]/[gatsby]/src/utils/source-nodes.ts:97:9
- source-nodes.ts:24 sourceNodes
[netlex-site2]/[gatsby]/src/services/source-nodes.ts:24:9
- interpreter.js:722 Interpreter.exec
[netlex-site2]/[xstate]/lib/interpreter.js:722:27
- interpreter.js:204 Interpreter.execute
[netlex-site2]/[xstate]/lib/interpreter.js:204:22
- interpreter.js:224 Interpreter.update
[netlex-site2]/[xstate]/lib/interpreter.js:224:18
- interpreter.js:125
[netlex-site2]/[xstate]/lib/interpreter.js:125:23
- scheduler.js:60 Scheduler.process
[netlex-site2]/[xstate]/lib/scheduler.js:60:13
- scheduler.js:44 Scheduler.schedule
[netlex-site2]/[xstate]/lib/scheduler.js:44:14
- interpreter.js:121 Interpreter.send
[netlex-site2]/[xstate]/lib/interpreter.js:121:29
- interpreter.js:840 actor.id
[netlex-site2]/[xstate]/lib/interpreter.js:840:23
warn The gatsby-source-graphcms plugin has generated no Gatsby nodes. Do you need it?
success Checking for changed pages - 0.002s
success source and transform nodes - 1.289s
success building schema - 0.287s
info Total nodes: 505, SitePage nodes: 25 (use --verbose for breakdown)
success createPages - 0.045s
success Checking for changed pages - 0.001s
success createPagesStatefully - 0.115s
success update schema - 0.051s
success write out redirect data - 0.002s
success onPostBootstrap - 0.001s
info bootstrap finished - 5.778s
success onPreExtractQueries - 0.001s
success extract queries from components - 0.914s
success write out requires - 0.040s
success run page queries - 0.046s - 1/1 21.55/s
⠀
You can now view XXXXX [removed by the author] in the browser.
⠀
http://localhost:8000/
⠀
View GraphiQL, an in-browser IDE, to explore your site's data and schema
⠀
http://localhost:8000/___graphql
⠀
Note that the development build is not optimized.
To create a production build, use gatsby build
⠀
success Building development bundle - 9.508s
Dependencies in the package.json file
{
[...]
"dependencies": {
"axios": "^0.19.2",
"framer-motion": "^1.8.4",
"gatsby": "^2.26.0",
"gatsby-background-image": "^1.1.1",
"gatsby-image": "^2.2.39",
"gatsby-plugin-google-gtag": "^2.1.4",
"gatsby-plugin-graphql-codegen": "^2.7.1",
"gatsby-plugin-i18n": "^1.0.1",
"gatsby-plugin-preact": "^3.2.1",
"gatsby-plugin-react-helmet": "^3.1.21",
"gatsby-plugin-react-helmet-canonical-urls": "^1.4.0",
"gatsby-plugin-remote-images": "^2.2.0",
"gatsby-plugin-root-import": "^2.0.5",
"gatsby-plugin-s3": "^0.3.3",
"gatsby-plugin-sass": "^2.1.28",
"gatsby-plugin-sharp": "^2.4.4",
"gatsby-source-filesystem": "^2.1.47",
"gatsby-source-graphcms": "^2.1.0",
"gatsby-transformer-sharp": "^2.3.13",
"intl": "^1.2.5",
"node-sass": "^4.13.1",
"preact": "^10.3.4",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-helmet": "^5.2.1",
"react-intl": "^3.12.0",
"sharp": "^0.24.0",
"typeface-lato": "0.0.75",
"typescript": "^4.0.5",
"yup": "^0.29.3"
},
"devDependencies": {
"@types/yup": "^0.29.7",
"prettier": "^1.19.1"
},
[...]
}
configs in the gatsby-config.js file (I commented some for test purporses)
require("dotenv").config({
path: `.env.${process.env.NODE_ENV}`,
})
const path = require(`path`)
const languages = require("./src/data/languages")
const siteURL = new URL("https://netlex.io")
module.exports = {
siteMetadata: {
title: "netLex",
titleTemplate: "netLex | %s",
description:
"Solução para automatização e gestão de documentos e contratos. Faça seus documentos fluírem!",
url: "https://www.netlex.io",
image: "/netlex.jpg",
keywords: "automatização, gestão, documento, contrato, netlex",
languages,
},
plugins: [
{
resolve: `gatsby-plugin-google-gtag`,
options: {
trackingIds: [
process.env.GATSBY_GA_TRACKING_ID, // Google Analytics / GA
process.env.GATSBY_AW_CONVERSION_ID, // Google Ads / Adwords / AW
],
gtagConfig: {
anonymize_ip: true,
cookie_expires: 0,
},
pluginConfig: {
head: true,
respectDNT: true,
exclude: ["/preview/**"],
},
},
},
// `gatsby-plugin-graphql-codegen`,
{
resolve: "gatsby-plugin-root-import",
options: {
"~": `${__dirname}/public/`,
"~images": path.join(__dirname, "src/images/"),
"~components": path.join(__dirname, "src/components/"),
},
},
{
resolve: `gatsby-source-filesystem`,
options: {
name: `images`,
path: path.join(__dirname, `src`, `images`),
},
},
{
resolve: `gatsby-source-filesystem`,
options: {
name: `data`,
path: `${__dirname}/src/data/`,
},
},
{
resolve: "gatsby-plugin-i18n",
options: {
langKeyForNull: "pt",
langKeyDefault: languages.defaultLangKey,
useLangKeyLayout: true,
prefixDefault: false,
},
},
`gatsby-plugin-sharp`,
`gatsby-transformer-sharp`,
`gatsby-plugin-react-helmet`,
{
resolve: `gatsby-plugin-react-helmet-canonical-urls`,
options: {
siteUrl: siteURL.origin,
},
},
{
resolve: `gatsby-plugin-s3`,
options: {
bucketName: process.env.AWS_BUCKET_NAME,
protocol: siteURL.protocol.slice(0, -1),
hostname: siteURL.hostname,
},
},
`gatsby-plugin-sass`,
`gatsby-plugin-preact`,
{
resolve: "gatsby-source-graphcms",
options: {
endpoint: process.env.GRAPHCMS_ENDPOINT,
},
},
// {
// resolve: `gatsby-plugin-remote-images`,
// options: {
// nodeType: "GraphCMS_Asset",
// imagePath: "url",
// },
// },
],
}
@hmeissner in slack
I vote for no semicolons
I also vote for spaces (tab isxo
s default)
We have decided on CircleCI, using this issue to keep track of setup status
Create documentation for working with locales and GraphCMS localisation using the source plugin.
This should include examples in the existing demo app.
@Redmega comment on #1 review:
Without the .babelrc we can't use stuff like spread operator or new feature imports or whatever... To the best of my knowledge, at least.
Though I will say, I don't think we need babel-plugin-transform-runtime. Don't see it being used anywhere
@hmeissner in slack:
do we need this noop with plugin decoupled? https://github.com/GraphCMS/gatsby-source-graphcms/blob/master/index.js
Let’s get CircleCI set up (#4) and testing oldest active node LTS, 6.12.0, and use it as baseline so we are not sayin “dunno builds for me”
ERROR #11330 PLUGIN
"gatsby-source-graphcms" threw an error while running the sourceNodes lifecycle:
[line: 1] field 'daydesigns' is not defined
100 | })
101 | } else {
> 102 | await sourceAllNodes(config)
| ^
103 | }
104 | }
105 |
Make sure that you don't have a typo somewhere and use valid arguments in sourceNodes lifecycle.
Learn more about sourceNodes here: https://www.gatsbyjs.org/docs/node-apis/#sourceNodes
File: node_modules\gatsby-source-graphcms\gatsby-node.js:102:5
What would you like to see in a revamped example? i18n? What else?
Gatsby cannot query slug field and throws an error.
Do you plan to migrate this plugin to support gatsby-plugin-image to build upon the other benefits Gatsby v3 provides?
As a happy user of both Gatsby and GraphCMS, we're looking forward to finally taking advantage of image optimization for our GraphCMS Assets after having failed to take advantage of this source plugin and Gatsby-image.
We should probably better document how this works locally for anyone contributing.
GraphCMS has announced a new Beta for a revised UI and API. There will be breaking changes with this API so I'm assuming this plugin will need a migration and new version.
We need to ensure that we perform delta sourcing events for all localised nodes, not just the default (en
) node.
master
branch failed. 🚨I recommend you give this issue a high priority, so other packages depending on you could benefit from your bug fixes and new features.
You can find below the list of errors reported by semantic-release. Each one of them has to be resolved in order to automatically publish your package. I’m sure you can resolve this 💪.
Errors are usually caused by a misconfiguration or an authentication problem. With each error reported below you will find explanation and guidance to help you to resolve it.
Once all the errors are resolved, semantic-release will release your package the next time you push a commit to the master
branch. You can also manually restart the failed CI job that runs semantic-release.
If you are not sure how to resolve this, here is some links that can help you:
If those don’t help, or if this issue is reporting something you think isn’t right, you can always ask the humans behind semantic-release.
package.json
file.A package.json file at the root of your project is required to release on npm.
Please follow the npm guideline to create a valid package.json
file.
Good luck with your project ✨
Your semantic-release bot 📦🚀
Once gatsbyjs/gatsby#25468 lands, update our implementation to reflect any API changes.
Generated MarkdownNode
nodes are conflicting for multiple RichText
fields on the same node due to us using a non-unique ID.
Pass an unique identifier to the createNodeId
helper to ensure created nodes aren't overwritten.
There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.
Error type: undefined. Note: this is a nested preset so please contact the preset author if you are unable to fix it yourself.
My query using this plugin doesn't come back parsed. Ex: data.allGraphCMSProducts.nodes.productName returns blank.
With the last version of the plugin, we encounter the following error.
"gatsby-source-graphcms": "2.0.0-next.8",
"gatsby-source-graphcms" threw an error while running the sourceNodes lifecycle:
Schema customization failed to find remote field FormFieldGroup.locale
137 | const config = await createSourcingConfig(gatsbyApi, pluginOptions)
138 |
> 139 | await createSchemaCustomization(config)
| ^
140 |
141 | if (webhookBody && Object.keys(webhookBody).length) {
142 | const { operation, data } = webhookBody
File: ../../node_modules/gatsby-source-graphcms/gatsby-node.js:139:9
Error: Schema customization failed to find remote field FormFieldGroup.locale
Thank You
Hello, thanks first for that plugin
I am running into an issue serving content from graphql using your plugin. When I empty a relation field, it is shown as non existent on gatsby graphql side, creating an error on graphql.
I see on the TODO that relationship are not supported, although, except from that problem, it is working really fine for me (relationship and localization included)
Screenshots below shows that problem is not reproduce on graphql graphcms side :
GATSBY SIDE WHEN NO ITEM (type global and homepage
GATSBY SIDE WHEN AN ITEM HAS BEEN ADDED TO THE RELATION FIELD
Hi, it is possible to access graphcms data via MarkdownRemark? I want to use some remark plugins.
See readme
@hmeissner: https://github.com/GraphCMS/gatsby-source-graphcms#length-must-be-aliased will also be gone
npm WARN prepublish-on-install As of npm@5,
prepublish
scripts are deprecated.
npm WARN prepublish-on-install Useprepare
for build steps andprepublishOnly
for upload-only.
npm WARN prepublish-on-install See the deprecation note innpm help scripts
for more information.
master
branch failed. 🚨I recommend you give this issue a high priority, so other packages depending on you could benefit from your bug fixes and new features.
You can find below the list of errors reported by semantic-release. Each one of them has to be resolved in order to automatically publish your package. I’m sure you can resolve this 💪.
Errors are usually caused by a misconfiguration or an authentication problem. With each error reported below you will find explanation and guidance to help you to resolve it.
Once all the errors are resolved, semantic-release will release your package the next time you push a commit to the master
branch. You can also manually restart the failed CI job that runs semantic-release.
If you are not sure how to resolve this, here is some links that can help you:
If those don’t help, or if this issue is reporting something you think isn’t right, you can always ask the humans behind semantic-release.
package.json
file.A package.json file at the root of your project is required to release on npm.
Please follow the npm guideline to create a valid package.json
file.
Good luck with your project ✨
Your semantic-release bot 📦🚀
Currently the source plugin can build markdown nodes for RichText fields from the CMS (for subsequent use with gatsby-plugin-mdx
).
We should look to extend this functionality to also work with markdown fields.
I found the official document for GraphCMS 2.0. According to that, it seems only need the official plugin named gatsby-source-graphql
.
Is this plugin outdated? Or what difference between the official plugin and this?
I ran into this problem when querying images for my localized project, though I think it is a general issue with how gatsby-source-graphcms
queries localized content.
On GraphCMS images are localized per default, although it doesn't often make sense to actually upload two images (en/de). This brings me to my current issue:
As English is the default language I would like to fall back to the English content, if there is no translated content for de
. As far as I can see, it's not possible to pass an array of locales: [de, en]
like in the general GraphCMS documentation (and like I did before) but only filter by one distinct language. Through this, I am missing a lot of e.g images on the queries for the German translation.
de | en |
---|---|
Am I missing something here or is this not possible to fallback/query the default language with the package yet? If so is there a way around it? Thanks in advance for clarifying! 🙂
Add notes to documentation stating how Gatsby types and query fields are generated from the remote GraphCMS, and how configuring typePrefix
impacts this.
Is there a current workaround for the need for an absolute url endpoint?
Attempts to pass process.env.* fail with error.
Currently if the fetch
call to the GraphCMS project fails for whatever reason (network error, API issue) then the build continues and nodes failed to build. This results in a continuously build loop.
Instead we should throw an error during the build.
Add placeholder
argument to gatsbyImageData
resolver and generate supported placeholders.
When generating query fragments, we should provide the ability to write them to the project directory so they can be customised/extended. This is mostly required to allow for field arguments to be used when working with relational fields.
Using the "gatsby-source-plugin" I can retrieve records only by the "default stage" configured in the API settings. I would ask to maintainers to let us to filter the content accordingly the "Content that can be queried" setting. Reference: https://graphcms.slack.com/archives/C2VP3HAJH/p1603438442078400
I've created a multi-line text field with the name of "description" and filled it with dummy content.
Even upon restarting the server and renaming the API ID, my query throws the following error:
Cannot query field "description" on type "GraphCMS_Project".
Gatsby: 2.22.10
gatsby-source-graphcms: 2.1.1
Hello everyone,
i have created a graphcms endpoint and trying to fetch some data from there and show them in a demo website.
in my gatsby config i have the following setup:
module.exports = {
siteMetadata: {
title: 'Gatsby Default Starter',
},
plugins: [
{
resolve: `gatsby-source-graphcms`,
options: {
endpoint: `https://api.graphcms.com/simple/v1/MYENDPOINT`,
token: `MYTOKEN`,
query: `{
allCurrentEvents {
tip
awayteam
hometeam
date
}
}`,
},
}
],
}
from this setup i wanna fetch the tip,awayteam,hometeam & date and parse them to my site.
My problem is at index.js file where i have the below setup:
import React from 'react'
import PropTypes from 'prop-types'
import Helmet from 'react-helmet'
import Header from '../components/header'
import './index.css'
const Layout = ({ children, data }) => (
<div>
<Helmet
title={data.site.siteMetadata.title}
meta={[
{ name: 'description', content: 'Sample' },
{ name: 'keywords', content: 'sample, something' },
]}
/>
<Header siteTitle={data.site.siteMetadata.title} />
<Header siteTitle={data.site2.allCurrentEvents.tip} /> //trying to show my data here
<div
style={{
margin: '0 auto',
maxWidth: 960,
padding: '0px 1.0875rem 1.45rem',
paddingTop: 0,
}}
>
{children()}
</div>
</div>
)
Layout.propTypes = {
children: PropTypes.func,
}
export default Layout
export const query = graphql`
query SiteTitleQuery {
site {
siteMetadata {
title
}
}
}
`
export const query2 = graphql` //problematic query
query SiteTitleQuery2 {
allCurrentEvents{
tip
}
}
`
i am getting the following error
GraphQL Error Unknown field
allCurrentEventson type
RootQueryType``
any ideas?
best,
a.
Ensure we use the configurable typePrefix
value when generating markdown and asset nodes.
Currently we're using the previously hardcode GraphCMS_
value.
Use the new Gatsby API to validate plugin options during build.
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.