GithubHelp home page GithubHelp logo

planetscale / docs Goto Github PK

View Code? Open in Web Editor NEW
90.0 25.0 68.0 294.37 MB

PlanetScale documentation

Home Page: https://planetscale.com/docs

License: Apache License 2.0

Shell 100.00%
planetscale database docs mysql vitess scaling

docs's Introduction

PlanetScale Documentation

πŸ‘‹ Welcome to the PlanetScale Documentation repo!

Request content

If you'd like to request content around using PlanetScale or general MySQL/database questions we'd love to hear from you!

Head over to the Issues tab, click "New issue", and select the appropriate template.

Contribute to docs

We welcome contributions to the PlanetScale documentation! If you have a fix for an existing issue or you found a typo/bug, you can open a new PR in this repo.

For larger pull requests, such as language/framework quickstarts, we ask that you open an issue to request the new content instead of creating it yourself.

PlanetScale resources

You can find more tutorials, content, and support in the following places:

  • PlanetScale Blog β€” PlanetScale tutorials, product information, MySQL/database tips, engineering content, and more
  • PlanetScale YouTube β€” PlanetScale tutorials, recorded conference/stream talks, and more.
  • PlanetScale Twitch β€” Follow us on the PlanetScale Twitch channel for livestreams from PlanetScale employees and guests.
  • PlanetScale Support β€” Get in touch with our Support team, read about known issues, and more.
  • PlanetScale discussion board β€” Have a specific question? Join the conversation in our PlanetScale discussion board.

docs's People

Contributors

antibland avatar avaidyanatha avatar ayrton avatar bmorrisondev avatar bnlandry avatar dbussink avatar dependabot[bot] avatar fooforge avatar github-actions[bot] avatar hallaroo avatar hollylawly avatar iheanyi avatar jamesqquick avatar jasonlong avatar jbbelcher53 avatar jgreet avatar johnyerhot avatar jtcunning avatar lkburns avatar mscoutermarsh avatar nickvanw avatar orware avatar pixeljanitor avatar planetscale-actions-bot avatar pritianka avatar raunaqgupta avatar reimertz avatar skottler avatar skullface avatar tbarn 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  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  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

docs's Issues

Add more details on what is working / not working

I am trying to create a trigger using the web-console on app.planetscale.com. I have realized that the documentation does not include some details about the supported commands / statements. For example, I am trying to run:

DELIMITER ;;
CREATE TRIGGER `foo_before_insert` 
BEFORE INSERT ON `foo` FOR EACH ROW 
BEGIN
  IF new.id IS NULL THEN
    SET new.id = uuid();
  END IF;
END;;
DELIMITER ;

I am getting the following error: syntax error at position 10 near 'DELIMITER'

I couldn't find anything on your documents about delimeter or trigger. I assume that PlanetScale currently does not support DELIMETER or TRIGGER. I didn't see any piece of documentation that states that whether you support it or not. I would be glad if you can add some documentation, thanks!

[UPDATED DOC] Connect a Next.js application to PlanetScale

Which doc needs updating?

https://planetscale.com/docs/tutorials/connect-nextjs-app

Why is this needed?

Tutorial uses DATABASE_URL but actual code uses PLANETSCALE_PRISMA_DATABASE_URL

Also running npx prisma db push results in an error:

Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Datasource "db": MySQL database "my_database" at "ir3t6fhn0wnu.us-west-2.psdb.cloud:3306"

Error: P1012: error: Error validating: This line is not a valid definition within a datasource.
  -->  schema.prisma:4
   | 
 3 |                 provider = "mysql"
 4 |                 url = "mysql://redacted"             }
   | ```

## Urgency
No

## Additional resources
N/A

## Point of contact
N/A

Add "Copy to Clipboard" functionality to docs

Add "Copy to Clipboard" functionality to docs

Which doc needs an update?

All with code snippets (through MDX config change)

What needs to be updated?

Hi! Firstly, love Planetscale, and love how clear and well thought out the docs are. However, I feel as though the docs could be improved by adding "copy to clipboard" functionality, similar to Github's read-me's, Vercel's docs, Remix's, etc.

I saw that for the docs, you're currently using Remix, and although I'm not too familiar with the framework, I did end up putting together a lot of the boilerplate already to configure MDX code blocks to include a copy button.


Step 0 would be renaming all files from .md to .mdx.


From there, for the button itself, there'd be a copy-to-clipboard.tsx file (in whatever directory works) that contains most of the logic to handle copying to clipboard. Apologies for the inordinate amount of lines in the SVG elements, thought it'd be easier to inline them rather than bringing a new package, since I'm not sure which icon packages the Planetscale team prefers:

// copy-to-clipboard.tsx

import React, {
  ComponentProps,
  useCallback,
  useEffect,
  useState
} from 'react';

function CopyIcon() {
  return (
    <svg width="13" height="16" viewBox="0 0 13 16" fill="none" xmlns="http://www.w3.org/2000/svg">
      <path d="M3.33594 4.13867V2.73242C3.33594 2.12305 3.48633 1.66406 3.78711 1.35547C4.0918 1.04687 4.54688 0.892578 5.15234 0.892578H7.39648C7.71289 0.892578 7.99609 0.9375 8.24609 1.02734C8.49609 1.11328 8.72461 1.26367 8.93164 1.47852L11.8906 4.48438C12.1094 4.71094 12.2617 4.94922 12.3477 5.19922C12.4336 5.44922 12.4766 5.75391 12.4766 6.11328V10.8711C12.4766 11.4805 12.3242 11.9395 12.0195 12.248C11.7188 12.5566 11.2656 12.7109 10.6602 12.7109H9.45312V11.7676H10.6074C10.9121 11.7676 11.1426 11.6895 11.2988 11.5332C11.4551 11.373 11.5332 11.1465 11.5332 10.8535V5.84375H8.79102C8.45508 5.84375 8.20312 5.76172 8.03516 5.59766C7.87109 5.43359 7.78906 5.18164 7.78906 4.8418V1.83594H5.19922C4.89453 1.83594 4.66406 1.91602 4.50781 2.07617C4.35547 2.23242 4.2793 2.45703 4.2793 2.75V4.13867H3.33594ZM8.63867 4.70117C8.63867 4.80664 8.66016 4.88281 8.70312 4.92969C8.75 4.97266 8.82422 4.99414 8.92578 4.99414H11.2871L8.63867 2.29883V4.70117ZM0.494141 13.7949V5.65625C0.494141 5.04688 0.644531 4.58789 0.945312 4.2793C1.25 3.9707 1.70508 3.81641 2.31055 3.81641H4.37891C4.70703 3.81641 4.97852 3.85156 5.19336 3.92188C5.4082 3.99219 5.62695 4.14258 5.84961 4.37305L9.07812 7.66016C9.23438 7.82031 9.35156 7.97266 9.42969 8.11719C9.51172 8.25781 9.56641 8.41406 9.59375 8.58594C9.62109 8.75781 9.63477 8.96875 9.63477 9.21875V13.7949C9.63477 14.4043 9.48242 14.8633 9.17773 15.1719C8.87695 15.4805 8.42383 15.6348 7.81836 15.6348H2.31055C1.70508 15.6348 1.25 15.4805 0.945312 15.1719C0.644531 14.8672 0.494141 14.4082 0.494141 13.7949ZM1.4375 13.7773C1.4375 14.0703 1.51367 14.2949 1.66602 14.4512C1.82227 14.6113 2.05078 14.6914 2.35156 14.6914H7.77148C8.07227 14.6914 8.30078 14.6113 8.45703 14.4512C8.61328 14.2949 8.69141 14.0703 8.69141 13.7773V9.26562H5.38086C5.01758 9.26562 4.74219 9.17383 4.55469 8.99023C4.37109 8.80664 4.2793 8.5293 4.2793 8.1582V4.75977H2.35742C2.05273 4.75977 1.82227 4.83984 1.66602 5C1.51367 5.15625 1.4375 5.37891 1.4375 5.66797V13.7773ZM5.49219 8.38086H8.50977L5.16406 4.97656V8.05273C5.16406 8.16992 5.18945 8.25391 5.24023 8.30469C5.29102 8.35547 5.375 8.38086 5.49219 8.38086Z" fill="white"/>
    </svg>
  )
}

function CompleteIcon() {
  return (
    <svg width="11" height="11" viewBox="0 0 11 11" fill="none" xmlns="http://www.w3.org/2000/svg">
      <path d="M4.31445 10.9434C4.08398 10.9434 3.88086 10.8301 3.70508 10.6035L0.664062 6.73047C0.605469 6.66016 0.5625 6.58984 0.535156 6.51953C0.507812 6.44531 0.494141 6.37305 0.494141 6.30273C0.494141 6.14258 0.546875 6.01172 0.652344 5.91016C0.757812 5.80469 0.892578 5.75195 1.05664 5.75195C1.25195 5.75195 1.41992 5.84766 1.56055 6.03906L4.29102 9.61328L9.55273 1.22852C9.62305 1.11914 9.69531 1.04297 9.76953 1C9.84375 0.953125 9.93945 0.929688 10.0566 0.929688C10.2168 0.929688 10.3457 0.978516 10.4434 1.07617C10.541 1.17383 10.5898 1.30273 10.5898 1.46289C10.5898 1.5332 10.5781 1.60352 10.5547 1.67383C10.5312 1.74023 10.4941 1.81445 10.4434 1.89648L4.90625 10.6152C4.76172 10.834 4.56445 10.9434 4.31445 10.9434Z" fill="white"/>
    </svg>
  )
}

export default function CopyToClipboard ({ getValue, ...props }: { getValue: () => string } & ComponentProps<'button'>) {
  const [isCopied, setCopied] = useState(false)
  
  // Function to determine which icon to show, either the
  // two-documents-icon (copy to clipboard),
  // or the success-icon (successfully copied to clipboard)
  useEffect(() => {
    if (!isCopied) return
    const timerId = setTimeout(() => {
      setCopied(false)
    }, 2000)
    
    return () => {
      clearTimeout(timerId)
    }
  }, [isCopied])
  
  // Function to copy the value to the clipboard and handle errors if failed
  const handleClick = useCallback<NonNullable<ComponentProps<'button'>['onClick']>>(async () => {
    setCopied(true)
    if (!navigator?.clipboard) {
      console.error("Error: No access to clipboard, cannot copy code block.")
    }
    try {
      await navigator.clipboard.writeText(getValue())
      console.log("Success: Copied to clipboard.")
    } catch {
      console.error("Error: Failed to copy to clipboard. Please try again.")
    }
  }, [getValue])
  
  
  const Icon = isCopied ? CompleteIcon : CopyIcon
  
  return (
    <button onClick={handleClick} title="Copy to clipboard" {...props} className={`rounded-md h-6 w-6 grid place-items-center hover:bg-gray-600 group-hover:opacity-100 opacity-0`}>
      <Icon />
    </button>
  )
}

There's basic styling on the button using Tailwind (saw that Tailwind is what the docs use as well), and the main thing is that when the user hovers on the code block, the button will appear.


In the next file (also in whatever directory works), we'll just define the new component that's going to replace the standard <pre> element that MDX outputs:

// pre.tsx

import { ReactNode, useRef } from "react"
import CopyToClipboard from "./copy-to-clipboard"

export default function Pre ({ children }: { children: ReactNode }) {
  const preRef = useRef<HTMLPreElement | null>(null)
  
  return (
    <pre>
      <code ref={preRef} className="group flex justify-between">
        {children}
        <CopyToClipboard getValue={() => preRef.current?.querySelector('code')?.textContent || ''} />
      </code>
    </pre>
  );
}

You could just include this in the copy-to-clipboard.tsx file, but just for clarity, I made it its own thing. Also, note that from earlier, I mentioned that upon hovering over the code block (the <code> element nested inside the <pre> element), you'd see the button. That's because the <code> element includes the Tailwind "group" class, and the CopyToClipboard's <button> element has an opacity of 0 until the group (code block) is hovered over using group-hover:opacity-100.


Finally, (and here's where I won't be of much help), there's the issue of implementing the new Pre component to replace the standard <pre> element.

I'm not too familiar with Remix's implementation of MDX and/or extending MDX, as they only mentioned rehype plugins in their docs, but I implemented it in Next.js as follows:

  1. Create an mdx-components.tsx file at the root directory of the project.
  2. Extend the standard MDX <pre> component to be defined as our new Pre component.
// mdx-components.tsx

// Ignore the 'use client', since I'm using the app 
// directory in Next 13 and Remix doesn't use RSC's.
// Just included for clarity as far as what *I* did

'use client';

import type { MDXComponents } from 'mdx/types';
import Pre from './app/pre';

export function useMDXComponents(components: MDXComponents): MDXComponents {
  return {
    pre: ({ children }) => <Pre>{children}</Pre>,
    ...components,
  };
}
  1. Here's where it'll likely differ significantly from Remix. Remix says to use their remix.config.js's mdx export in their docs. I don't use Remix so don't know how this export would work, but in Next.js, I changed my next.config.js to be as include mdxRS: true and added a wrapper around my config to require the @next/mdx package:
/** @type {import('next').NextConfig} */

const nextConfig= {
  reactStrictMode: true,
  experimental: {
    serverActions: true,
    mdxRs: true,
  },
};

const withMDX = require('@next/mdx')();

module.exports = withMDX(nextConfig);

Now, all .mdx files that include a code block will automatically include copy-to-clipboard functionality without any additional work. Final result is in the MP4 attached to this issue.

As far as the dependencies I had, since I'm using Next, the only unique package I used that wouldn't be included in Remix is @next/mdx, but here's the full list of dependencies I needed to make this work:

@next/mdx @mdx-js/loader @mdx-js/react @types/mdx tailwindcss

Essentially the same as any other MDX-supporting React app, but also with Next's specific package to support MDX.

The only thing is going to be translating this to Remix, which should only be a matter of adjusting the last code block to work in the context of remix.config.js, but not too sure. Let me know if I can be of any help or if this looks like a good idea! Would love to help out wherever I can, Planetscale's been awesome to me, so would love to return the favor, however small.

Cheers!

Create a separate connection - two connections code is identical

Which doc needs an update?

https://planetscale.com/docs/tutorials/node-boost-guide#create-a-separate-connection

What needs to be updated?

Code example for Create a separate connection is:

;(async () => {
  // Create the standard connection
  const connection = await mysql.createConnection(process.env.DATABASE_URL)
  connection.execute('SET @@boost_cached_queries = true')
  let [rows] = await connection.query('SELECT * FROM users')

  // Create a Boost-enabled connection
  const boostedConnection = await mysql.createConnection(process.env.DATABASE_URL)
  await boostedConnection.execute('SET @@boost_cached_queries = true')
  let [rowsFromCache] = await connection.query('SELECT * FROM users')
})()

while i think it should not have connection.execute('SET @@boost_cached_queries = true') in first connection

;(async () => {
  // Create the standard connection
  const connection = await mysql.createConnection(process.env.DATABASE_URL)
  let [rows] = await connection.query('SELECT * FROM users')

  // Create a Boost-enabled connection
  const boostedConnection = await mysql.createConnection(process.env.DATABASE_URL)
  await boostedConnection.execute('SET @@boost_cached_queries = true')
  let [rowsFromCache] = await connection.query('SELECT * FROM users')
})()```

docs: Deploy to Edgio

What type of content do you want to see?

About Me: Rishi Raj Jain, I'm Technical Customer Success at Edgio.

Currently, under the Next.js applications, how to deploy to Vercel and Netlify are available. I'd like to propose addition of a guide: Deploy to Edgio.

Existing PR describing the expected content: #233

Thanks to @ayrton @hollylawly for being open and explaining the process to me πŸ™πŸ»

Is this specific to a language/framework?

Nope

Error when I try db push following the documentation

II'm following all the steps in the guide to make changes in the schema and update those changes in planetscale database. connected to planetscale locally but when I run prisma db run I get this:

`npx prisma db push
Environment variables loaded from .env
Prisma schema loaded from prisma\schema.prisma
Datasource "db": MySQL database "platforms" at "127.0.0.1:3309"

⚠️ There might be data loss when applying the changes:

β€’ You are about to drop the column gh_username on the User table, which still
contains 1 non-null values.
β€’ You are about to drop the column image on the User table, which still contains 1 non-null values.
β€’ You are about to drop the column name on the User table, which still contains 1 non-null values.

√ Do you want to ignore the warning(s)? ... yes
Error: P3022

Direct execution of DDL (Data Definition Language) SQL statements is disabled on this database. Please read more here how to handle this: https://pris.ly/d/migrate-no-direct-ddl `

So this link refers to the old docs. I really need to change that database schema...kinda stuck here. Really appreciate some help.

tutorial about prisma does not work

Which doc needs an update?

https://planetscale.com/docs/prisma/prisma-quickstart

What needs to be updated?

1 line summary : npx prisma db push does not work

when I run commands, it throws error

Error: Migration engine error:
unknown error: Code: UNAVAILABLE
server does not allow insecure connections, client must use SSL/TLS

I searched stackoverflow and found solution. the like is https://stackoverflow.com/questions/74830570/planetscaledb-prisma-setup-server-does-not-allow-insecure-connections-client

1 line solution summary : replace ssl={"rejectUnauthorized":true} to sslaccept=strict in DATABASE_URL of .env file

also, pscale connect star-app initial-setup --port 3309 is not needed.

Error during 'Push Prisma schema to PlanetScale' Section: "server does not allow insecure connections, client must use SSL/TLS"

What type of content do you want to see?

I have followed the instructions almost exactly to this point (using my own branch name and db name, of course) but whenever I run npx prisma db push I get the error shown above,

server does not allow insecure connections, client must use SSL/TLS

I have googled that error, but seldom do the solutions seem to be for PlanetScale / Prisma setups

Is this specific to a language/framework?

Prisma

Invisible "connect" button on app/overview

I'm currently working on: MacBook Pro (13-inch, M1, 2020) - MacOS Monterey 12.5. Google Chrome version -> 104.0.5112.101 (arm64) On full width there is no "connect" button. On 767px breakpoint there is menu that includes connect button properly.

Some ss below:
Zrzut ekranu 2022-08-24 o 11 23 00
Zrzut ekranu 2022-08-24 o 11 23 15

Specify how to set local config

Which doc needs an update?

https://planetscale.com/docs/reference/org#global-flags

What needs to be updated?

Currently we have this detail about the config:

Config file. Default is $HOME/.config/planetscale/pscale.yml.

It would be nice to add how the local config works because it is easy to miss that, see this issue.

So something like:

Config file.
Default is `$HOME/.config/planetscale/pscale.yml`.
Local override inside a Git repository is `$CWD/.pscale.yml` in the project's root.

"Help us improve this page" link is broken

πŸ‘‹

href={`https://github.com/planetscale/docs/blob/main/content/docs/${slug}.mdx`}

Slug when looking at tutorials is a 404: https://github.com/planetscale/docs/blob/main/content/docs/tutorials/connect-any-application.mdx instead of https://github.com/planetscale/docs/blob/main/content/docs/tutorial/connect-any-application.mdx for this lil guy:

image

It seems to be taking tutorials instead of tutorial for some reason 🀷

More details about how to deploy to Vercel in production

Hi there, the docs are really helpful!
But I might found something missing when reading https://docs.planetscale.com/tutorials/prisma-quickstart
After finish this page, we got a working NextJS project, and then I'd like to deploy it to Vercel.
The link Deploy to Vercel guide doesn't help since it's a totally different project and the env variables are totally different.

My question is how can I deploy a nextjs project described in https://docs.planetscale.com/tutorials/prisma-quickstart
I'm not sure if the only action I need to do is setting DATABASE_URL env variable

docs.planetscale.com doesn't redirect to planetscale.com/docs

Looks like docs.planetscale.com goes straight to the planetscale.com instead of planetscale.com/docs.

 curl -v https://docs.planetscale.com
*   Trying 76.76.21.93:443...
* Connected to docs.planetscale.com (76.76.21.93) port 443 (#0)
* ALPN: offers h2,http/1.1
* (304) (OUT), TLS handshake, Client hello (1):
*  CAfile: /etc/ssl/cert.pem
*  CApath: none
* (304) (IN), TLS handshake, Server hello (2):
* (304) (IN), TLS handshake, Unknown (8):
* (304) (IN), TLS handshake, Certificate (11):
* (304) (IN), TLS handshake, CERT verify (15):
* (304) (IN), TLS handshake, Finished (20):
* (304) (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / AEAD-CHACHA20-POLY1305-SHA256
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=docs.planetscale.com
*  start date: Jul 17 15:07:52 2023 GMT
*  expire date: Oct 15 15:07:51 2023 GMT
*  subjectAltName: host "docs.planetscale.com" matched cert's "docs.planetscale.com"
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify ok.
* using HTTP/2
* h2 [:method: GET]
* h2 [:scheme: https]
* h2 [:authority: docs.planetscale.com]
* h2 [:path: /]
* h2 [user-agent: curl/8.1.2]
* h2 [accept: */*]
* Using Stream ID: 1 (easy handle 0x15580fc00)
> GET / HTTP/2
> Host: docs.planetscale.com
> User-Agent: curl/8.1.2
> Accept: */*
> 
< HTTP/2 308 
< cache-control: public, max-age=0, must-revalidate
< content-type: text/plain
< date: Tue, 08 Aug 2023 13:00:52 GMT
< location: https://planetscale.com/
< refresh: 0;url=https://planetscale.com/
< server: Vercel
< strict-transport-security: max-age=63072000
< x-vercel-cache: MISS
< x-vercel-id: fra1::md4zv-1691499652326-ae4a7dbfa114
< 
Redirecting...

New page: How to import data from an existing database

Hi πŸ‘‹ I recently spun up a new database for an existing database I created and I wanted to import that database into my PlanetScale database but it wasn't super clear the best way to do that. I was wondering if there was such a place in the docs and if not if you'd be open to a PR to add a new page to it. I was thinking under the Tutorials section and explaining how you can import a sql dump file or connect to a MySQL client and import it through that clients GUI (thanks to John from PS support who helped point me in the right direction).

Github Oauth - still using old logo

What is the issue?

Super minor (probably not worthy of an issue) but thought I would bring it up
I know this does not have anything to do with documentation but could not find a more relevant repo

When attempting to login with Github, I noticed that the Oauth logo seams to still need updated to the new pscale branding:
Screen Shot 2022-06-17 at 9 31 48 PM

Steps to reproduce

Vercel Deployment Instructions can be improved

Which doc needs an update?

deploy-to-vercel

What needs to be updated?

I have just attempted connecting Vercel to PlanetBase and failed.

Going to describe my user journey (talk aloud):

However:

  • If you choose Prisma in Connect it says sslaccept=strict.
  • The method above uses sslmode=require&sslcert=/etc/pki/tls/certs/ca-bundle.crt
  • If you look at the screenshot, it says (at the bottom) "View the certificate validation settings for the sslcert details."

So still not sure which is correct. And if sslaccept=strict is correct, should we still have the certificate validation link?

I'm sure for someone in the know this makes perfect sense, but this wasn't as smooth as many other journeys through your (excellent) documentation.

image

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.