Coder Social home page Coder Social logo

vc-examples's Introduction

vc-examples

Verifiable Credentials Examples

This GitHub Pages Website hosts example credentials, as well as documents needed to construct them. When contributing an example, you are encouraged to provide everything needed to generate an verify a credential. Do your best not to include ANY broken links or missing documentation. If possible, try to make the credential id resolvable as well.

This test suite has moved next to the API spec which it relies on.

See w3c-ccg/vc-http-api.

vc-examples's People

Contributors

cykoder avatar dependabot[bot] avatar gannan08 avatar gjgd avatar kimdhamilton avatar mkhraisha avatar msporny avatar or13 avatar peacekeeper avatar rolsonquadras avatar srmalley-sphereon avatar troyronda avatar vaishnavipanchal23 avatar victormartinezjurado avatar vsnt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vc-examples's Issues

Factom VC - Invalid RDF in ForestTransportGuide

The VC contains ForestTransportGuide type which is not included in any of the contexts. Hence the TrustBloc verifier fails with invalid signature due to invalid RDF.

JSON Playground normalization result has -
<http://example.com/credentials/123> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://json-ld.org/playground/ForestTransportGuide> .

no challenge option to verifier behavior

If the challenge option is not passed but the proof contains a challenge, it seems the test suite currently expects the verifier to fail the request.

Is this the desired behavior?

Factom Issuer fails with "Unknown Issuer"

POST https://vc.api.factom.sphereon.com/services/issue/credentials

{
    "credential": {
        "@context": [
            "https://www.w3.org/2018/credentials/v1",
            "https://www.w3.org/2018/credentials/examples/v1",
            "https://digitalbazaar.github.io/citizenship-vocab/contexts/citizenship-v1.jsonld"
        ],
        "id": "http://example.gov/credentials/3732",
        "type": [
            "VerifiableCredential",
            "UniversityDegreeCredential"
        ],
        "name": "Bachelor Degree",
        "description": "Bachelor of Science and Arts",
        "issuer": "did:v1:test:nym:z6MkvSbsrm44VnhngbyW2rZk2u9bvSPUSmJwqYjMd4RSJT7A",
        "issuanceDate": "2020-03-16T22:37:26.544Z",
        "credentialSubject": {
            "id": "did:key:z6MkjRagNiMu91DduvCvgEsqLZDVzrJzFrwahc4tXLt9DoHd",
            "degree": {
                "type": "BachelorDegree",
                "name": "Bachelor of Science and Arts"
            }
        }
    },
    "options": {
        "assertionMethod": "did:v1:test:nym:z6MkvSbsrm44VnhngbyW2rZk2u9bvSPUSmJwqYjMd4RSJT7A#z6MkjFhRvbXfjmQ8iFHeYh42cNS7v4CtguLzvwZSXcHe8zqy"
    }
}

Yields 400, "Unknown Issuer DID"

Transmute Verifier fails to verify `did:v1` Credentials Issued by Factom or Mavennet

Factom Issued Credential
POST https://vc.transmute.world/v0.1.0/verify/credentials

{
    "verifiableCredential": {
        "@context": [
            "https://www.w3.org/2018/credentials/v1",
            "https://www.w3.org/2018/credentials/examples/v1"
        ],
        "id": "http://example.gov/credentials/3732",
        "type": [
            "VerifiableCredential",
            "UniversityDegreeCredential"
        ],
        "issuanceDate": "2020-03-10T04:24:12.164Z",
        "credentialSubject": {
            "id": "did:key:z6Mkg9AkjefxdJFSphkStzXwHQnbweN43mCqA37aANGRxF1o",
            "degree": {
                "type": "BachelorDegree",
                "name": "Bachelor of Science and Arts"
            }
        },
        "issuer": "did:v1:test:nym:z6MkvSbsrm44VnhngbyW2rZk2u9bvSPUSmJwqYjMd4RSJT7A",
        "proof": {
            "type": "Ed25519Signature2018",
            "created": "2020-04-29T13:04:57Z",
            "jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..FUGNtv74xIug4YUOGB9lZk0Xw1v49helfIKLwJpbj0FQCHMqCg5H7Urg4iY5hFYXw0EwsfnIsRD20fvah8fLCA",
            "proofPurpose": "assertionMethod",
            "verificationMethod": "did:v1:test:nym:z6MkvSbsrm44VnhngbyW2rZk2u9bvSPUSmJwqYjMd4RSJT7A#z6MkjFhRvbXfjmQ8iFHeYh42cNS7v4CtguLzvwZSXcHe8zqy"
        }
    }
}

Yields 400, "{message: {}}"

Mavennet Issued Credential
POST https://vc.transmute.world/v0.1.0/verify/credentials

{
    "verifiableCredential": {
        "@context": [
            "https://www.w3.org/2018/credentials/v1",
            "https://www.w3.org/2018/credentials/examples/v1"
        ],
        "id": "http://example.gov/credentials/3732",
        "type": [
            "VerifiableCredential",
            "UniversityDegreeCredential"
        ],
        "issuanceDate": "2020-03-10T04:24:12.164Z",
        "credentialSubject": {
            "id": "did:key:z6Mkg9AkjefxdJFSphkStzXwHQnbweN43mCqA37aANGRxF1o",
            "degree": {
                "type": "BachelorDegree",
                "name": "Bachelor of Science and Arts"
            }
        },
        "issuer": "did:v1:test:nym:z6MkfG5HTrBXzsAP8AbayNpG3ZaoyM4PCqNPrdWQRSpHDV6J",
        "proof": {
            "type": "Ed25519Signature2018",
            "created": "2020-04-29T12:46:27Z",
            "jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..C5L6wDYVhxFfn8EF8Csw4woQwN_92zkzX03JomSlLvtwg1EsJc542SNL_fNMtmrgHNMYXtdQ0AWwqv3wBUy3Bw",
            "proofPurpose": "assertionMethod",
            "verificationMethod": "did:v1:test:nym:z6MkfG5HTrBXzsAP8AbayNpG3ZaoyM4PCqNPrdWQRSpHDV6J#z6MkqfvdBsFw4QdGrZrnx7L1EKfY5zh9tT4gumUGsMMEZHY3"
        }
    }
}

Yields 400, "{message: {}}"

Transmute presentation verifier fails for Factom DIDs

POST https://vc.transmute.world/v0.1.0/verify/presentations

{
    "verifiablePresentation": {
        "@context": [
            "https://www.w3.org/2018/credentials/v1"
        ],
        "type": [
            "VerifiablePresentation"
        ],
        "verifiableCredential": [
            {
                "@context": [
                    "https://www.w3.org/2018/credentials/v1",
                    "https://www.w3.org/2018/credentials/examples/v1"
                ],
                "id": "http://example.gov/credentials/3732",
                "type": [
                    "VerifiableCredential",
                    "UniversityDegreeCredential"
                ],
                "issuanceDate": "2020-03-10T04:24:12.164Z",
                "credentialSubject": {
                    "id": "did:key:z6Mkg9AkjefxdJFSphkStzXwHQnbweN43mCqA37aANGRxF1o",
                    "degree": {
                        "type": "BachelorDegree",
                        "name": "Bachelor of Science and Arts"
                    }
                },
                "issuer": "did:factom:5d0dd58757119dd437c70d92b44fbf86627ee275f0f2146c3d99e441da342d9f",
                "proof": {
                    "type": "Ed25519Signature2018",
                    "created": "2020-05-01T13:13:56Z",
                    "jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..2w_w-SiGkN1ChlTXnv18FbdBQ-G7sGx58FI6Xe8S7dNQykU8TNBJSDnWA3COui6UcsA2kFyyHrostgOX9VyoCQ",
                    "proofPurpose": "assertionMethod",
                    "verificationMethod": "did:factom:5d0dd58757119dd437c70d92b44fbf86627ee275f0f2146c3d99e441da342d9f#key-0"
                }
            }
        ],
        "holder": "did:factom:7569b2bdb5ee34a6d886c8d39f2dad7f50d6a1135f75e53f383364516a0aceb5",
        "proof": {
            "type": "Ed25519Signature2018",
            "created": "2020-05-01T13:16:15Z",
            "challenge": "424f5466-fa03-40b8-933e-ead265d69afa",
            "domain": "issuer.example.com",
            "jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..PH8ZBqmYfONsnia7mEN-9xR90_QOdpWw32Bny5Yj8QWGvKC1fsjIdRXJcAiIY6t_IpsyY98_W-easOBcPVyYBQ",
            "proofPurpose": "authentication",
            "verificationMethod": "did:factom:7569b2bdb5ee34a6d886c8d39f2dad7f50d6a1135f75e53f383364516a0aceb5#key-0"
        }
    },
    "options": {
        "domain": "issuer.example.com",
        "challenge": "424f5466-fa03-40b8-933e-ead265d69afa",
        "checks": ["proof"]
    }
}

Response: HTTP/2 400 {"message":{}}

I can only seem to verify the Transmute example presentations, which seem to have the same structure:
POST ttps://vc.transmute.world/v0.1.0/verify/presentations

{
    "verifiablePresentation":{
      "@context": ["https://www.w3.org/2018/credentials/v1"],
      "type": ["VerifiablePresentation"],
      "holder": "did:web:vc.transmute.world",
      "verifiableCredential": [
        {
          "@context": [
            "https://www.w3.org/2018/credentials/v1",
            "https://www.w3.org/2018/credentials/examples/v1"
          ],
          "id": "http://example.gov/credentials/3732",
          "type": ["VerifiableCredential", "UniversityDegreeCredential"],
          "issuer": "did:v1:test:nym:z6MkhdmzFu659ZJ4XKj31vtEDmjvsi5yDZG5L7Caz63oP39k",
          "issuanceDate": "2020-03-10T04:24:12.164Z",
          "credentialSubject": {
            "id": "did:key:z6MkjRagNiMu91DduvCvgEsqLZDVzrJzFrwahc4tXLt9DoHd",
            "degree": {
              "type": "BachelorDegree",
              "name": "Bachelor of Science and Arts"
            }
          },
          "proof": {
            "type": "Ed25519Signature2018",
            "created": "2019-12-11T03:50:55Z",
            "verificationMethod": "did:v1:test:nym:z6MkhdmzFu659ZJ4XKj31vtEDmjvsi5yDZG5L7Caz63oP39k#z6MkiukuAuQAE8ozxvmahnQGzApvtW7KT5XXKfojjwbdEomY",
            "proofPurpose": "assertionMethod",
            "jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..uzx8px7eGewfc5Qa-GN1qjcYZH4nX3PBBaFW22x_573nnMu_Uzn6oT6ITL54QEk08XCqCE2OX2L-8ovsffXPDg"
          }
        }
      ],
      "proof": {
        "type": "Ed25519Signature2018",
        "created": "2020-04-16T17:58:26Z",
        "verificationMethod": "did:web:vc.transmute.world#z6MksHh7qHWvybLg5QTPPdG2DgEjjduBDArV9EF9mRiRzMBN",
        "proofPurpose": "authentication",
        "challenge": "99612b24-63d9-11ea-b99f-4f66f3e4f81a",
        "domain": "issuer.example.com",
        "jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..FtI4bekQdsVyx9OXcz4a6hL6Y2GAQ9gjA1_nQTmYXLCHenBnap-LlaLlh3DGXdATkXz7Oq5iCRcxTvc4aI7oCg"
      }
    },
        "options": {
          "domain": "issuer.example.com",
          "challenge": "99612b24-63d9-11ea-b99f-4f66f3e4f81a",
          "checks": [
            "proof"
        ]
    }
}

Response: HTTP/2 200 {"checks":["proof"]}

I can't seem to get any more specific error messages on this one.

Issuer test case 5 is probably not a good idea.

  1. The Issuer's Issue Credential HTTP API MUST reject if the value of "credential.issuer" or "credential.issuer.id" in the body of the POST request is not a DID.

VC Data Model does not require this, I suggest we eliminate this test case.

Mavennet Issuer does not implement v0.0.0 CCG API

From the UI here: https://mavennet.github.io/issuer-verifier-frontend/

POST https://api.neo-flow.com/credentials/issueCredential

{
    "credential": {
        "@context": [
            "https://www.w3.org/2018/credentials/v1",
            "https://www.w3.org/2018/credentials/examples/v1"
        ],
        "id": "http://example.gov/credentials/3732",
        "type": [
            "VerifiableCredential",
            "UniversityDegreeCredential"
        ],
        "issuer": {
            "id": "did:web:vc.transmute.world"
        },
        "issuanceDate": "2020-03-10T04:24:12.164Z",
        "credentialSubject": {
            "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
            "degree": {
                "type": "BachelorDegree",
                "name": "Bachelor of Science and Arts"
            }
        }
    },
    "options": {
        "issuer": "did:key:z6MkiTsvjrrPNDZ1rrg9QDEYCFWCmEswT6U2cEkScb7edQ9b",
        "issuanceDate": "2020-04-28T01:47:25.522Z",
        "proofPurpose": "assertionMethod",
        "verificationMethod": "did:key:z6MkiTsvjrrPNDZ1rrg9QDEYCFWCmEswT6U2cEkScb7edQ9b#z6MkiTsvjrrPNDZ1rrg9QDEYCFWCmEswT6U2cEkScb7edQ9b"
    }
}

Yields 400, "assertion method invalid"

options should look like:

    "options": {
        "assertionMethod": "did:key:z6MkiTsvjrrPNDZ1rrg9QDEYCFWCmEswT6U2cEkScb7edQ9b#z6MkiTsvjrrPNDZ1rrg9QDEYCFWCmEswT6U2cEkScb7edQ9b"
    }

Issuer is not correctly pulled from "assertionMethod"... issuer should be:

assertionMethod.split('#')[0]... this needs to be set client side in the credential payload.

Issuer and Verifier functionality tests

In order to proceed with interop I propose we identify functionality that each VC issuer/ verifier would support described as a test. We can then add those tests to this repo's test suite. The following is a compiled list of tests:

Required Functionality:

Issuer

  1. Issuer must return 201 HTTP-Response when a credential is successfully issued.
  2. Issuer must support the vc-credential data model with no options field.
  3. Issuer must support issuance of credentials with at least 2 different DID methods as an issuer
  4. Issuer must return a 400 HTTP-Response when the request is rejected.
  5. Issuer must reject if the issuer is not a did or issuer.id is not a did.
  6. Issuer must reject if the proofPurpose is not supported in controller
  7. Issuer must reject if the verificationMethod does not exist
  8. Issuer must reject if the credential does not contain a context
  9. Issuer must reject a malformed JSON-LD context.

Verifier

  1. Verifier must check for a Credential Signature Failure due to mutation of the jws property
  2. Verifier must check for a Credential Signature Failure due to lack of create field
  3. Verifier must check for a Credential Signature Failure due to invalid proofPurpose
  4. Verifier must reject an added property to the credential
  5. Verifier must reject a removed property to the credential
  6. Verifier must reject a mutated property to the credential
  7. Verifier must reject an added property to the proof object
  8. Verifier must reject a removed property to the proof object
  9. Verifier must reject a mutated property to the proof object
  10. Verifier must be able to verify credentials with atleast 2 different DID methods as the did issuer
  11. Verifier must be able to verify presentations when the issuer, holder and subject are different
  12. Verifier must be able to verify presentations when the issuer, holder and subject are the same
  13. Verifier response must adhere to proof verification format for credential and presentation
  14. Verifier error response must provide an error object
  15. Verifier must support the the Ed25519 Cryptographic Suite.
  16. Verifier must return a 400 HTTP-Response if the issuer is not a did or issuer.id is not a did.

Optional Functionality:

  1. Issuer may support composition of credentials
  2. Issuer may support issuance of presentations
  3. Verifier may verify a presentation with multiple credentials.
  4. Verifier may reject an expired credential
  5. Verifier may reject an expired key

Things I am unclear about:

  1. Issuer/Verifier may support domain and challenge

Unable to verify Danube presentations on Mavennet/Transmute/Trustbloc verifiers

When using Mavennet, Transmute and Trustbloc's verifiers I could not verify any PRC presentation issued by DanubeTech (v1, sov). When i extracted the credential embedded, i was able to verify it.

{
   "verifiablePresentation":{
      "@context":[
         "https://www.w3.org/2018/credentials/v1",
         "https://www.w3.org/2018/credentials/examples/v1"
      ],
      "holder":"did:key:z6MkjRagNiMu91DduvCvgEsqLZDVzrJzFrwahc4tXLt9DoHd",
      "type":"VerifiablePresentation",
      "verifiableCredential":[
         {
            "@context":[
               "https://www.w3.org/2018/credentials/v1",
               "https://w3id.org/citizenship/v1"
            ],
            "type":[
               "VerifiableCredential",
               "PermanentResidentCard"
            ],
            "credentialSubject":{
               "id":"did:gov:usa:dhs:uscis:d656a3c3-0f14-477c-9a9f-ae4c2524af32",
               "type":[
                  "PermanentResident",
                  "Person"
               ],
               "givenName":"JOHN",
               "familyName":"SMITH",
               "gender":"Male",
               "image":"data:image/png;base64,iVBORw0KGgo...kJggg==",
               "residentSince":"2015-01-01",
               "lprCategory":"C09",
               "lprNumber":"000-000-204",
               "commuterClassification":"C1",
               "birthCountry":"Bahamas",
               "birthDate":"1958-08-17"
            },
            "issuer":"did:v1:test:nym:z6MktyAYL7sVcmPQPTbbMqrnGMNwp6zkvRvKREs94f81fA1K",
            "issuanceDate":"2020-05-05T15:58:23Z",
            "id":"https://sampleurl.com/eabe1c8b-ec80-431f-a0e5-ea6c34f3a2bf",
            "name":"Danube 3",
            "description":"",
            "proof":{
               "type":"Ed25519Signature2018",
               "created":"2020-05-05T15:58:23Z",
               "proofPurpose":"assertionMethod",
               "verificationMethod":"did:v1:test:nym:z6MktyAYL7sVcmPQPTbbMqrnGMNwp6zkvRvKREs94f81fA1K#z6MkgumSeJ8FGqFjXFPJSsT2EFCNYVvx5RXDQ6oBYDrmtiDb",
               "jws":"eyJjcml0IjpbImI2NCJdLCJiNjQiOmZhbHNlLCJhbGciOiJFZERTQSJ9..dPmVCcnlqDUHwXFSeBdVPNwLCwJHClSkbqgxrduPa3-Rd1DvDTZcuIDh5sTixcnwNNph3Jx1Az2pFmD6GXyDCA"
            }
         }
      ],
      "proof":{
         "type":"Ed25519Signature2018",
         "created":"2020-05-05T15:59:03Z",
         "verificationMethod":"did:key:z6MkjRagNiMu91DduvCvgEsqLZDVzrJzFrwahc4tXLt9DoHd#z6MkjRagNiMu91DduvCvgEsqLZDVzrJzFrwahc4tXLt9DoHd",
         "proofPurpose":"authentication",
         "challenge":"99591bde-acad-4b52-84b8-7167246ec0b3",
         "domain":"mavennet.github.io",
         "jws":"eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..et3H3k7mu_7iiNV20LC6BFJMwSlInwOdhY8te_Jwu7JnifvoilyfJjpJ3yrKRlzL40IYpmhZXBMtY4YVUlFgDA"
      }
   },
   "options":{
      "challenge":"99591bde-acad-4b52-84b8-7167246ec0b3",
      "domain":"mavennet.github.io",
      "checks":[
         "proof"
      ]
   }
}

Add examples of unlocked DID Documents

In order to easily issue as a DID, you need a kind of did document representation, that might be described as "unlocked"...

I'm not sure this data model is formalized anywhere, and its probably not always available.. (especially if hardware keys are involved)... however for simple testing, its extremely convenient.

We might want to consider supporting such a thing here... Here is an example: https://github.com/transmute-industries/vc.transmute.world/blob/master/src/services/unlockedDIDs/did:web:vc.transmute.world.json

plugfest test for added property - Proof vs JSON-LD testing

For the “The Verifier’s Verify Credential HTTP API MUST fail to verify a Verifiable Credential with an added property to the credential.“ (similarly with proof case).

Is the intention to check for properties that are not in the JSON-LD context OR check that an additional property hasn’t been added (that isn’t included in the signature)? Note the property that is added is “newProp”: “bar” … which isn’t in the JSON-LD context.

The tests should be delineated so we separate testing of proofs (and extra properties not in the proof) from testing of JSON-LD.

Is unique credential id a requirment

should everyone be using this?

if(issuer.endpoint.includes('digitalbazaar.com')) {
                  vendor.credentials = annotateWithUniqueId(vendor.credentials);
                }

COVID-19 Test Credentials V2

Copied from the email list:

Based on feedback from Daniel and Adrian's comments, I'm planning on implementing a new ImmunoglobulinDetectionTest schema.

The first format was aimed at anyone with a face, and assumed a cassette test and that the credential subject has a DID.

There pros and cons to that approach... the most obvious con is that absolutely nobody has DIDs.

I like the idea of splitting up the sample collection part and rest results part into 2 credentials, and using existing identifiers and hashing to link them.

Here would be the new user story:

  1. Subject drives up to a tent in a parking lot.

  2. Testing Facility Checks some id ( "presentedIDType: a picklist with strings such as "drivers license", "passport", "national ID card", etc " )

  3. Testing Facility Collects blood sample and issues a "SampleCollectionCredential"

subject = sha256 ( presentedIDType + presentedIDNumber + 8-DIGIT-PIN )
presentedIDType (repeated in credential)
testResultURL: https://example.com/covid-19/vc-test-results/ ( subject )

credential is provided on paper, to the subject after sample is taken (multiple copies are provided, and it's safe for them to be copied further).

  1. sample get sent to lab... days go by, etc...

  2. Subjects can check a registry for their test results, when test results are ready they are published at a URL, which is provided to them in their credential.

testResultURL: https://example.com/covid-19/vc-test-results/ ( subject )

  1. Subject can present test results to TSA / Law Enforcement when traveling by presenting their "SampleCollectionCredential" , whatever ID type they used for it, and disclosing their 8 DIGIT PIN

  2. Verification is as follows
    7.1 confirming the face / gender / eyes / height (etc) of the ID Card used for "SampleCollectionCredential"
    7.2 Verify "SampleCollectionCredential" (no VP here, since the subject has no keys / DID).
    7.3 Confirm subject = sha256 ( presentedIDType + presentedIDNumber + 8-DIGIT-PIN ) (website helps them do this)
    7.3 Lookup testResultURL: https://example.com/covid-19/vc-test-results/ ( subject )
    7.4 Verify "SampleTestResultCredential"
    7.5 Apply allow / deny list (any other business logic rules)

Only the issuers would have DIDs in this scenario, and there would be no signed verifiable presentations.

anyone with presentedIDType + presentedIDNumber + 8-DIGIT-PIN, could claim a test result belonged to them, and its the responsibility of the verifier to check the presentedIDType.

Assuming that the presentedIDType where digital and that SampleCollectionCredential were digital, a Presentation that included the disclosure of the 8-DIGIT-PIN could be made over any transport that was supported ( CHAPI / DIDComm / Bluetooth )

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.