GithubHelp home page GithubHelp logo

pixijs / animate Goto Github PK

View Code? Open in Web Editor NEW
196.0 31.0 33.0 16.7 MB

PixiJS runtime library for content from Adobe Animate CC

Home Page: https://pixijs.io/animate/

License: MIT License

JavaScript 71.94% TypeScript 28.06%
javascript-library pixi animation movieclips es6-javascript

animate's Introduction

PixiJS — The HTML5 Creation Engine

pixi.js logo

Discord npm version Node.js CI Financial Contributors

This project aims to provide a fast, lightweight 2D library that works across all devices. The PixiJS renderer allows everyone to enjoy the power of hardware acceleration without prior knowledge of WebGL. Also, it's fast. Really fast.

If you want to keep up to date with the latest PixiJS news then feel free to follow us on Twitter @PixiJS and we will keep you posted! You can also check back on our site as any breakthroughs will be posted up there too!

We are now a part of the Open Collective and with your support you can help us make PixiJS even better. To make a donation, simply click the button below and we'll love you forever!

What to Use PixiJS for and When to Use It

PixiJS is a rendering library that will allow you to create rich, interactive graphics and cross-platform applications and games without having to dive into the WebGL API or deal with browser and device compatibility.

PixiJS supports WebGPU with fallback support for WebGL. As a library, PixiJS is a fantastic tool for authoring interactive content. Use it for your graphics-rich, interactive websites, applications, and HTML5 games. Out-of-the-box, cross-platform compatibility and graceful degradation mean you have less work to do and more fun doing it! If you want to create polished and refined experiences relatively quickly without delving into dense, low-level code, all while avoiding the headaches of browser inconsistencies, then sprinkle your next project with some PixiJS magic!

Boost your development and feel free to use your imagination!

Current features

  • WebGL renderer (with automatic smart batching, allowing for REALLY fast performance)
  • WebGPU renderer (new to the latest browsers!)
  • Canvas renderer (Fastest in town!)
  • Full scene graph
  • Super easy to use API (similar to the flash display list API)
  • Support for texture atlases
  • Asset loader / sprite sheet loader
  • Auto-detect which renderer should be used
  • Full Mouse and Multi-touch Interaction
  • Text
  • BitmapFont text
  • Multiline Text
  • Render Texture
  • Primitive Drawing
  • Masking
  • Filters
  • Community-Supported Plugins

Setup

It's easy to get started with PixiJS! Simply download a prebuilt build!

Alternatively, PixiJS can be installed with npm or simply using a content delivery network (CDN) URL to embed PixiJS directly on your HTML page.

NPM Install

npm install pixi.js

There is no default export. The correct way to import PixiJS is:

import * as PIXI from 'pixi.js';

CDN Install

Via jsDelivr:

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/pixi.min.js"></script>

Or via unpkg:

<script src="https://unpkg.com/[email protected]/dist/pixi.min.js"></script>

Basic Usage Example

import { Application, Sprite, Assets } from 'pixi.js';

// The application will create a renderer using WebGL, if possible,
// with a fallback to a canvas render. It will also setup the ticker
// and the root stage PIXI.Container
const app = new Application();

// Wait for the Renderer to be available
await app.init();

// The application will create a canvas element for you that you
// can then insert into the DOM
document.body.appendChild(app.canvas);

// load the texture we need
const texture = await Assets.load('bunny.png');

// This creates a texture from a 'bunny.png' image
const bunny = new Sprite(texture);

// Setup the position of the bunny
bunny.x = app.renderer.width / 2;
bunny.y = app.renderer.height / 2;

// Rotate around the center
bunny.anchor.x = 0.5;
bunny.anchor.y = 0.5;

// Add the bunny to the scene we are building
app.stage.addChild(bunny);

// Listen for frame updates
app.ticker.add(() => {
    // each frame we spin the bunny around a bit
    bunny.rotation += 0.01;
});

Learn

  • Website: Find out more about PixiJS on the official website.
  • Getting Started:
    • Check out the getting started guide.
    • Also, check out @miltoncandelero's PixiJS tutorials aimed toward videogames with recipes and best practices here
  • Examples: Get stuck right in and play around with PixiJS code and features right here!
  • API Documentation: Get to know the PixiJS API by checking out the docs.
  • Guide: Supplementary usage guides to the API Documentation here.

Demos

Community

  • Forums: Check out the discussions and Stackoverflow -- both friendly places to ask your PixiJS questions.
  • Chat: You can join us on Discord to chat about PixiJS.

How to build

Note that for most users you don't need to build this project. If all you want is to use PixiJS, then just download one of our prebuilt releases. The only time you should need to build PixiJS is if you are developing it.

If you don't already have Node.js and NPM, go install them. Then, in the folder where you have cloned the repository, install the build dependencies using npm:

npm install

Then, to build the source, run:

npm run build

How to generate the documentation

The docs can be generated using npm:

npm run docs

Contribute

Want to be part of the PixiJS project? Great! All are welcome! We will get there quicker together :) Whether you find a bug, have a great feature request, or you fancy owning a task from the road map above, feel free to get in touch.

Make sure to read the Contributing Guide before submitting changes.

License

This content is released under the (http://opensource.org/licenses/MIT) MIT License.

animate's People

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  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

animate's Issues

MovieClip timescale

Is this functionality supported at the moment, I didn't find anything that would indicate so in the code?
If no, do you have any plans for adding it in the future?
I'm currently working on a project that would almost certainly require this and I imagine it would be useful for others as well.

Stopping a MovieClip

I'd like to play a MovieClip on the timeline once and then stop. Back in the day I would add a frame-script stop() on the last frame of the MovieClip.
When I publish with pixi-animate however, the frame-script doesn't seem to be respected and the MovieClip keeps on playing.
Is there something I'm missing? It's been quite a while since I've done anything in Flash.
I've attached a sample file.
frameScriptStop.zip

Changing Shapes' Fill colors dynamically

Hello!
I'm trying to change the fill color of Shapes dynamically. I've tried a few things with the instances, like changing their fillColor property and drawCommands but is not having an effect. Is this something controlled by the ShapesCache? What is the best practice for updating a Graphic's fill at runtime?

Thank you!

Replace class mixins with inheritance.

I would like to create separate classes which extend the core PIXI classes instead of relying on mixins, for instance PIXI.animate.Container extends PIXI.Container. The current approach is limiting, for instance, when adding new property or overriding things that happen in the constructor. This also would add methods to things outside of the context of PixiAnimate, which developers might not like. Generally adds more flexibility and better V8 optimization of classes.

having issues setting framerate

Hello,

I am trying to experiment with the framerate property, but I can't seem to change the framerate.

upon reading the docs, I see that it mentions 'This feature is dependent on the tick event object (or an object with an appropriate 'delta' property) being
passed into {{#crossLink 'Stage/update'}}{{/crossLink}}.`, which is the same comment from CreateJS's MovieClip class, here: http://www.createjs.com/docs/easeljs/files/easeljs_display_MovieClip.js.html

It's confusing that the comment is the same between pixi-animate and createJS, is this intentional?

so, since nothing I have done seems to change the framerate of my clips, I assume that I'm not passing the delta into the stage/update method, is there an example someplace of this working I could reference?

[UPDATE] I was able to increase the framerate, but I need to set clip.framerate recursively across all children.

thank you

SymbolLoader - additional condition

The middleware for parsing flash symbols sometimes fails if resource has not been loaded and iterator function also fails at this point

else if (data.nodeName && data.nodeName === 'IMG') {
or at this
_ShapesCache2.default.add(resource.name, data);
when we pass empty object as shape data

In order to have able to continue loading flow even when loading fails (for example we wanna retry loading of this resource) please provide some additional conditions for this function to prevent empty object accces.
My solution is
if (!data){
next();
}else if (url.search(/.shapes.(json|txt)$/i) > -1) {
_ShapesCache2.default.add(resource.name, data);
} else if (data.nodeName && data.nodeName === 'IMG') {
// Add individual images to the texture cache by their
// short symbol name, not the URL
PIXI.Texture.addTextureToCache(PIXI.Texture.fromFrame(url), resource.name);
}
next();

Using gotoAndPlay with lib.stage & nested MovieClips

Hello,
I'm trying to use Pixi-Animate and I'm running into issues with gotoAndPlay. When looking at the Javascript file generated by Adobe Animate, I see that the Animate MovieClips inherit the PIXI MovieClip class. It's odd though (and maybe this is simply a misunderstanding of Javascript): I cannot call gotoAndPlay on lib.stage (or any other nested MovieClips). When I look at the Prototype for the object, I see gotoAndPlay (screenshot 1), but not in the instances themselves (screenshot 2). If I call lib.stage.gotoAndPlay("frame_label") it doesn't work. Could you please shed some light on how to work with the main stage timeline and nested timelines with Pixi-Animate? Thank you very much!

Prototype:
screen shot 2017-11-27 at 4 32 55 pm

lib.stage:
screen shot 2017-11-27 at 4 33 04 pm

Late action execution

When a frame with an action is skipped, the action is executed on the next possible frame. This works fine, but there is a problem with movieclip properties about the current frame.

My exact case is the following. There are multiple animations for a movieclip on the timeline, separated by labels. When a specific animation is required to be played, it is supposed to stop at its end with this.stop(), but when a frame is skipped the animation stops a few frames later(which is a completely different state for the movieclip).

My current workaround solution is to have an animation end label and another keyframe at the end with the action this.gotoAndStop('animation_end_label'), but this is a very hacky solution and adds extra complexity to the .fla resources.

unable to install npm module by git url

This may be 'by design', however I found that the package.json's files obj is defining only dist and libs, but those folders are compiled for the NPM publish and not part of the git repo. This means that installing the NPM module by the git url, not the NPM package name, is not supported.

Is this intentional?

Dispatching Events from MovieClips

Hello,
Is it possible to dispatch Pixi Animate events from the Adobe Animate timeline? If so, how would I listen for them?

Thank you!

Not exporting the .js file

Hi,

This plugin is not exporting the .js file. It is exporting the .html, .json , libs and sounds folder.

I'm using Animate CC 2017.5 Pls help me out in this issue.

Thanks in advance.

Asset Crashing Site on iOS

We have an animated asset that has a pretty large export from Adobe Animate.

.js file - 700k
shapes file - 3megs

When we use it in our site, it works fine on desktop, but when we load the asset on iOS devices the site crashes shortly after the page loads.

We're assuming, given that it's only happening on iOS that this is most likely a memory issue. Would that be a fair assessment? Are animations loaded when they are played? Does the memory consumption increase with time? We tried reducing the number of animations it played and that seems to increase the time before the crash.

Do you have any recommendations on the best way to handle this? The asset is composed of vector shapes in Animate as opposed to bitmaps, would converting it to bitmaps help?

Thanks!

Resizing a Scene & Its Elements: Best methods?

Hello!
What would be the best way to resize a Pixi Animate scene with a window resize event? I see that PIXI.animate.Scene has width and height properties. Would this be the same values as in the scene.renderer? This was the way I saw many people resizing Pixi:

window.onresize = function (event)
{
    var w = window.innerWidth;
    var h = window.innerHeight;
    scene.renderer.view.style.width = w + "px";
    scene.renderer.view.style.height = h + "px";
}

Also, I'm not sure how to go about resizing the contents of my scene so they match the new dimensions. Any tips would be wonderful. Thank you.

Usage instructions?

Hey there,

This project seems interesting, couldn't find usage instructions though.
I'm currently just trying to figure out how to use it, do you have some caveats? :)

Is there some known issues you're facing right now?

Cheers!

how to duplicate display objects loaded in from loadScene

Hello,

I am trying to create a workflow for adding multiple exported FLA files into one scene.

I have the items each loaded in, and in the callback from loadScene I can get access to the instance and change the position of the assets. This works great.

but when I try and load in the same scene more than once, I get errors about texture cache already having items cached with the same name, and performance is just horrendous.

It's clear to me that trying to load the same scene more than once is not a good approach.

I have moved on, and I am now trying to simply duplicate the root display object of the loaded scene, and instantiate 15 instances of the duplicate onto the stage.

Do you have any code examples for this?

thank you

please delete

sorry please remove this issue, it was with my fork and not the main repo

Requires PIXI error

is V5 supported? getting a pixi linkage issue
Typescript project setup
importing like this on the main script file

import 'pixi.js';
import 'pixi-animate';

Cannot add child stage pixijs and pixi animate

Hello,

I am using PixiJs 4.4.2 and Pixi-animate to load stages generated by Adobe animate. in my project,

I have divided my project into components and generated adobe stage pixijs code for each component. Now want to combine them into one project. I have succeeded to load one component as the main stage but cannot load other components as child.

Here is my code, where I have loaded my main stage:

var waterfall = lib.Waterfall_PixiAnimate;
var bear = lib.reference_BearLevel_PixiAnimate;

var salmon = new PIXI.animate.Scene(3840, 2160, {}, true)
document.body.appendChild(salmon.view);
salmon.load(waterfall)

In the above code, I have succeeded to add waterfall stage but on that stage, I want to render my child stage bear but cannot render on waterfall stage.

How can I add child stage?

Action in frame0 only execute once

Demo fla here

Reproduce

  1. Create a MovieClip with 3 frame
  2. Each frame have its frame script ( console.log(frameNumber) )
  3. Run, and you would see the first frame number is only print one time. (Infers that script in frame 0 only execute 1 time)

Online demo
See the console
Expect

1
2
3
1
2
3
...

Actual

1
2
3
2
3
2
3
...

Adobe Animate 2020 API changes

I received this email from Adobe about changes in 2020. We will need to fix this.

————-

Dear CPSDK Plugin Developers - Greetings from Animate Team!

We have released Animate 2020 couple of days back and this release has an updated CPSDK and Sample Plugin.

In addition we would like to inform you about the change that requires your attention as your plugin may not show up in Animate 2020

Background:

Animate 2019 and older versions of Animate uses Xerces lib version 3.1 which has been updated to Xerces lib 3.2 in Animate 2020. The older CPSDK Sample plugin has a dependency on Xerces lib version 3.1 installed with Animate and the plugins built based on older sample plugin will not find Xerces 3.1 in Animate 2020 and hence will not load.

Solution:

You can just comment out the following piece of code to remove the Xerces library dependency in your plugin

In DocType.cpp remove/comment following lines

#include "MyXmlParser.h"

#include "xercesc/framework/MemBufInputSource.hpp"

try {

        XMLPlatformUtils::Initialize();

        FeatureDocumentHandler featureXmlDocHandler(this);

        SAXParser *parser = new SAXParser();

        parser->setDocumentHandler(&featureXmlDocHandler);
        XERCES_CPP_NAMESPACE::MemBufInputSource    *memInput = new XERCES_CPP_NAMESPACE::MemBufInputSource((const XMLByte*) buffer, length, "dummy", false);

        m_bInited = true;

        parser->parse(*memInput);

        delete parser;

        delete memInput;

        XMLPlatformUtils::Terminate();

    }

    catch (...) {

        ASSERT(0);

    }

Delete/Remove MyXmlParser.cpp from project
Remove Xerces libs from project settings
You can refer to the latest CPSDK Sample Plugin where the Xerces lib dependency has been removed.

Or remove the dependency of the Xerces lib installed by Animate and package a version of Xerces lib that you are using if needed for any reason in the plugin itself.

Please let us know if you need any more details.

Thanks!

Mohan

Support crossOrigin in the loader

I had to edit your load function just to make this one change:

loader.add(id, _basePath + assets[id], {crossOrigin: true});

The crossOrigin property should be configurable... actually the whole options object for the loader should be.

Using MovieClips in an existing Pixi application?

Hi, is it possible to add exported MovieClip instances to a pixi stage (PIXI.Container) where we run our own requestAnimationFrame loop? We'd like to be able to add instances, move, scale, rotate, etc. and control playback from JS.

We're evaluating using Adobe Animate to produce animations vs DragonBones or Spine. We're not sure if this export will give us the same flexibility to use animations.

Filters for Animate

Design a set of PIXI filters which mirror the properties of how Animate renders. Main filters to support would be:

  • Blur
  • Drop Shadow
  • Glow

Warning: Frame scripts cannot be added to empty keyframes.

Hi,
I'm using this.stop() from my timeline in an empty layer. I get an error on export from Adobe Animate:
Warning: Frame scripts cannot be added to empty keyframes. (Layer: 0)

From a desktop web browser, the this.stop() calls work. When I load my Pixi Animate animation in an Android Web View, however, the this.stop() calls are ignored. What would be the best practice for adding a script to a MovieClip?

To prevent the MovieClips from reseting to the first frame upon completion, I added the following. It still does not allow me to stop the timeline from the MovieClip's timeline.

mc.autoReset = false;

Any help would be tremendous. Thanks!

Creating Dynamic Tweens with Easing

Hello,
Sorry for all of the messages and thank you for the help so far (I'm under a deadline). I'm now trying to create Tweens using Pixi Animate.

Currently I'm doing the following:

var target = timeline.categories_mc.categories_text_mc;
new PIXI.animate.Tween(target, {y:0}, {y:-200}, 24);

Nothing is happening. I also did not see anything in the library or in Pixi specifying eases, your final parameter. What are you looking for with them? Something like this?

function (x, t, b, c, d) {
    return c*((t=t/d-1)*t*t + 1) + b;
},

Thanks again!

Sample Project

I have been trying to use the library, I have successfully exported the fla file into js and HTML files.
The problem is that I didn't find any sample project using pixi-animate that uses all its methods like nested child stag anyone has please share.

Retina strategy

Hello,

Do you have any advice for retina strategies when using assets from a FLA file ?

The best approach I can come up with is to create a timeline with labels for x1 x2 and x3 pixel densities, with their contents scaled to 100%, 50% and 33.3%, then to loop through the scene, and if it find a label, gotoAndStop on the correct label after removing the unused clips.

This works, however it's a lot of work for the artists to need to create these timelines for each static image used.

Is there a better solution here?

Way to access all Graphics used in a Timeline layer?

Hi,
Currently I have a layer in my project that uses different graphics. I'd like to make changes to them dynamically. I could do something like this to affect a Graphic on the 3rd layer:

scene.stage.children[2].alpha = 0;

However, this would only affect the Graphic on the first frame, not the subsequent ones in the Timeline. I could convert the later Graphics to MovieClip instances and name them, but I'd like to keep them Graphics for the looping/single frame features. Is there a way for me to access all of the Graphic instances on a layer?

Thank you!

vuejs empty canvas

I'm trying to get the ColorTween example to load using vuejs. All I get is an empty canvas with the background color set. No animation or shapes seem to load and I don't see any errors. Anyone have any suggestions?

<template>
    <canvas id="stage" width="550" height="400"></canvas>
</template>

<script>
  import * as PIXI from 'pixi.js' // version 4.8.6
  const animate = require('pixi-animate');
  const ct = require("./colortween/ColorTween.js");

  export default {
    data() {
      return {};
    },
    mounted(){
        var scene = new PIXI.animate.Scene(550, 400, {
                view: document.getElementById("stage"),
                backgroundColor: 0x000000,
                antialias: true
            });
        scene.load(ct.library.ColorTween);
    }
  }
</script>

Loading Images...

I was able to use the extension to successfully publish a shapes-only FLA (works great!), but when I published an FLA with bitmaps, I started getting the following error in pixi.js:

Texture.js:309 Uncaught Error: The frameId "Bitmap 4" does not exist in the texture cache

Do the published atlas png(s) need to be loaded apart from PIXI.animate.load()? There are no images listed in the published JS file's assets property, but I did notice that it includes an atlas JSON file. However, it doesn't appear to be automatically adding the image and its frames from that file to pixi's TextureCache (where the error above is trying to reference the unloaded asset).

can i use pixi-animate in pixijs ?

I have had a problem for a long time. Can I use pixi-animate to load files created by animate cc in pixijs? After all, animate cc creates animations very conveniently. thanks!

addTimedChild doesn't work with frame labels, only fame numbers

I haven't investigated thoroughly here, instead I just use a work around. But I still wanted to report the issue.

I would like this to work:

 targetClip.addTimedChild( mc, "label" );

but, instead, I need to:

let frameNum:number = targetClip._labelDict["label"];
targetClip.addTimedChild( mc, frameNum );

Version 1.0.0 Requirements

Todo List

  • Convert build process to pixify
  • Remove loophole from dependencies
  • Move pixi.js to peerDependencies make a property plugin
  • Add Typescript typings

Duplicate MovieClip actions at low framerates

When MovieClip actions (e.g. addActions) are triggered in an environment where the MovieClip's animated at a much lower frame-rate than the ticker, actions can be fired multiple times. Or if gotoAndStop is called on the same frame (which contains an action) multiple times in a row, it will also be fired multiple times.

Unless the playback changes frame, an action should be triggered again.

Change loaders to NOT use convenience methods

I've noticed some 'bad' practice with the loaders, according to pixi.js dev's.

If you take a look here http://www.html5gamedevs.com/topic/18951-texture-not-in-texturecache-again/, you will see that xerver states

Don't mix the loader and convenience methods. Don't mix the loader and convenience methods. Don't mix the loader and convenience methods. Don't mix the loader and convenience methods. Don't mix the loader and convenience methods. Don't mix the loader and convenience methods. Don't mix the loader and convenience methods. Don't mix the loader and convenience methods. Write that line 50 times and you will be out of detention. Just use the loader, forget the convenience methods exist.

I was experiencing issues with the fromFrame method not having it's texture in the cache, due to this code in the SymbolLoader:

PIXI.Texture.addTextureToCache(
	PIXI.Texture.fromFrame(url),
	resource.name
);

Using PIXI.Texture.fromFrame here is the issue. You're telling it to add a texture, but then tell it to fetch the texture as the first param, which is a logic error. The texture can't exist before adding it. This is why we shouldn't be mixing the loader and convenience methods.

Instead, I've changed this to:

PIXI.Texture.addToCache(
  resource.texture,
  resource.name
);

it's cleaner, and uses the resource directly. This should be applied to all loaders.

Should I do Cleanup on ShapesCache?

If I plan to load a lot of assets as json files throughout my game, should I be using the ShapesCache.add and remove functions to restrict the ShapesCache to just the shapes I need, or would it not affect performance if I keep adding to the ShapesCache as I run into new assets I need, but never remove the old ones I don't need anymore.

I was originally thinking it worked similarly to GPU memory, where we can use bindTexture and destoryTexture to do cleanup, but now it seems that would be pointless for the ShapesCache.

So should I do cleanup on the ShapesCache or is it not relevant to performance?

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.