Giter VIP home page Giter VIP logo

speckle-unity's Introduction

Connector Unity

Twitter Follow Community forum users website docs

Introduction

This repo holds Speckle's Unity Connector package + a sample project (Speckle playground).

The package offers several Unity Components to send and receive data from Speckle, and allows developers to easily develop their own components and features. It has a simple UI, and is missing some of the comforts present in other connectors. The connector uses our Speckle .NET SDK.

unity

Checkout our dedicated Tutorials and Docs.

If you are enjoying using Speckle, don't forget to ⭐ our GitHub repositories, and join our community forum where you can post any questions, suggestions, and discuss exciting projects!

Notice

We officially support Unity 2021.3 or newer.

Features:

  • Receive Speckle Objects at Editor or Runtime
  • Send Speckle Objects at Editor or Runtime
  • Material override/substitution
  • Automatic receiving changes

Currently tested on Windows, Linux, and MacOS.

Android will work with some signficant limitations, and other platforms likly work with similar limitations.

Sample Project

This repo holds a simple sample project (Speckle Playground), containing an example GUI (UnityUI) for fetching stream/branch data, and sending/receiving geometry to/from Speckle.

Simply download this repo or clone with git, and open in Unity 2021.3 or newer.

git clone https://github.com/specklesystems/speckle-unity.git

Installation (Package)

To install the connector into your own Unity project (rather than using the sample project), open the Package Manager (Windows -> Package Manager) and select Add Package from git URL. (requires git installed)

Paste in the following URL

https://github.com/specklesystems/speckle-unity.git?path=/Packages/systems.speckle.speckle-unity

We encourage everyone interested to hack / contribute / debug / give feedback to this project.

Requirements

  • Unity 2021 or greater
  • Have created an account on app.speckle.systems (or your own server)
  • Installed Speckle Manager (recommended, otherwise you'll need to implement your own authentication system in Unity)

Dependencies

All dependencies to Speckle Core have been included; compiled in systems.speckle.speckle-unity package.

Contributing

Please make sure you read the contribution guidelines for an overview of the best practices we try to follow.

License

Unless otherwise described, the code in this repository is licensed under the Apache-2.0 License. Please note that some modules, extensions or code herein might be otherwise licensed. This is indicated either in the root of the containing folder under a different license file, or in the respective file's header. If you have any questions, don't hesitate to get in touch with us via email.

speckle-unity's People

Contributors

alanrynne avatar didimitrie avatar haitheredavid avatar iainsproat avatar jr-morgan avatar jsdbroughton avatar philipbelesky avatar pkratten avatar psarras avatar teocomi 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

speckle-unity's Issues

Improvements/Fixes to sample projects

The Speckle Playground sample project has some rough edges that may put off new users.
This issue is a maser issue for small tweaks that could be made to improve the experience.

Selection:

  • Selection graphics have a phantom mirrored version.
  • Selection graphics slow performance.
  • Selection graphics not always clear what is selected.

Extra buttons:

  • Open in browser button for sender/receiver.
  • Gravity on/off toggle button.
  • Zoom extent/reset to origin button? sometimes you can get lost.

Bugs:

  • It is possible to zoom while hovering over the UI (or outside the Game window).
  • Receiving branch selection sometimes displays the wrong branch. (I think maybe the order is reversed)
  • #81

Moving

  • Keyboard controls are generally a little clunky.
  • Missing Up/Down control on Q,E keys.

New Features:

  • Sending branch selection not implemented. (see #81)
  • Show more details about a stream/commit (preview, collaborations, etc) this is a sample project after all.
  • Allow for commit selection on receiver (we already allow for branch selection).
  • Display Speckle Properties when selecting object? maybe difficult?

Other feature suggestions can be discussed under this issue.

Support Speckle metadata

We decided to support metadata by storing it in a script that gets attached to the GOs received and to be sent.

Missing Shader on Build

It seems that after you build the line shader = Shader.Find("Transparent/Diffuse"); has trouble returning a valid shader.
I think this is probably because this shader is not included in the build, unless it is used somewhere in the scenes..

image

A potential fix would be to have a central settings GO or panel to add your own materials.

ln 414 in ConvertUnity.Geometry.cs

Alpha release

Get feedback from the community and bring to alpha stage

Unity Error : "Destroy may not be called from edit mode!" during editor mode stream recieving.

When receiving streams during editor mode.
Many GameObjects are not cleared up and are left parent-less in the root of the scene hierarchy . (see Image)

The following Unity error is printed to the console many times:

Destroy may not be called from edit mode! Use DestroyImmediate instead.

Destroy may not be called from edit mode! Use DestroyImmediate instead.
Destroying an object in edit mode destroys it permanently.
UnityEngine.Object:Destroy (UnityEngine.Object)
Speckle.ConnectorUnity.RecursiveConverter:TryConvertItemToNative (object) (at Assets/Speckle Connector/RecursiveConverter.cs:137)
Speckle.ConnectorUnity.RecursiveConverter:RecurseTreeToNative (object) (at Assets/Speckle Connector/RecursiveConverter.cs:95)
Speckle.ConnectorUnity.RecursiveConverter:b__3_0 (object) (at Assets/Speckle Connector/RecursiveConverter.cs:84)
System.Linq.Enumerable:ToList (System.Collections.Generic.IEnumerable`1)
Speckle.ConnectorUnity.RecursiveConverter:RecurseTreeToNative (object) (at Assets/Speckle Connector/RecursiveConverter.cs:84)
Speckle.ConnectorUnity.RecursiveConverter:ConvertRecursivelyToNative (Speckle.Core.Models.Base,string) (at Assets/Speckle Connector/RecursiveConverter.cs:61)
Speckle.ConnectorUnity.StreamManagerEditor/d__43:MoveNext () (at Assets/Speckle Connector/Editor/StreamManagerEditor.cs:173)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Startd__43> (Speckle.ConnectorUnity.StreamManagerEditor/d__43&)
Speckle.ConnectorUnity.StreamManagerEditor:Receive ()
Speckle.ConnectorUnity.StreamManagerEditor/d__44:MoveNext () (at Assets/Speckle Connector/Editor/StreamManagerEditor.cs:309)
System.Runtime.CompilerServices.AsyncVoidMethodBuilder:Startd__44> (Speckle.ConnectorUnity.StreamManagerEditor/d__44&)
Speckle.ConnectorUnity.StreamManagerEditor:OnInspectorGUI ()
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)

This is because, if the stream contains a Base where no children can be converted to a native object, Their corresponding GameObject should be destroyed here:

if (!goos.Any())
{
Destroy(go);
return null;
}

However, Due to running during Editor mode, The Object.Destroy(Object) function does not work as intended (a restriction imposed by Unity)

I have drafted a potential solution to this here JR-Morgan@5a789f9. Streams now properly import without leaving a bunch of empty and parent-less GameObjects.
However, Unity is still complaining about another editor mode related issue (also present on main).

Instantiating mesh due to calling MeshFilter.mesh during edit mode. This will leak meshes. Please use MeshFilter.sharedMesh instead.

Instantiating mesh due to calling MeshFilter.mesh during edit mode. This will leak meshes. Please use MeshFilter.sharedMesh instead.
UnityEngine.StackTraceUtility:ExtractStackTrace ()
Objects.Converter.Unity.ConverterUnity:MeshToNative (Objects.Geometry.Mesh,Objects.Other.RenderMaterial,System.Collections.Generic.Dictionary`2) (at Assets/Speckle Connector/ConverterUnity.Geometry.cs:275)
Objects.Converter.Unity.ConverterUnity:MeshToNative (Speckle.Core.Models.Base) (at Assets/Speckle Connector/ConverterUnity.Geometry.cs:220)
Objects.Converter.Unity.ConverterUnity:ConvertToNative (Speckle.Core.Models.Base) (at Assets/Speckle Connector/ConverterUnity.cs:68)
Speckle.ConnectorUnity.RecursiveConverter:TryConvertItemToNative (object) (at Assets/Speckle Connector/RecursiveConverter.cs:160)
Speckle.ConnectorUnity.RecursiveConverter:RecurseTreeToNative (object) (at Assets/Speckle Connector/RecursiveConverter.cs:98)
Speckle.ConnectorUnity.RecursiveConverter:b__4_0 (object) (at Assets/Speckle Connector/RecursiveConverter.cs:87)
System.Linq.Enumerable:ToList (System.Collections.Generic.IEnumerable`1)
Speckle.ConnectorUnity.RecursiveConverter:RecurseTreeToNative (object) (at Assets/Speckle Connector/RecursiveConverter.cs:87)
Speckle.ConnectorUnity.RecursiveConverter:ConvertRecursivelyToNative (Speckle.Core.Models.Base,string) (at Assets/Speckle Connector/RecursiveConverter.cs:64)
Speckle.ConnectorUnity.StreamManagerEditor/d__43:MoveNext () (at Assets/Speckle Connector/Editor/StreamManagerEditor.cs:173)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Startd__43> (Speckle.ConnectorUnity.StreamManagerEditor/d__43&)
Speckle.ConnectorUnity.StreamManagerEditor:Receive ()
Speckle.ConnectorUnity.StreamManagerEditor/d__44:MoveNext () (at Assets/Speckle Connector/Editor/StreamManagerEditor.cs:309)
System.Runtime.CompilerServices.AsyncVoidMethodBuilder:Startd__44> (Speckle.ConnectorUnity.StreamManagerEditor/d__44&)
Speckle.ConnectorUnity.StreamManagerEditor:OnInspectorGUI ()
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)

Steps to reproduce

Clone speckle-unity main branch and open Unity Project.
Add a StreamManager to any GameObject in the scene and import a stream that has nested non-native convertible objects. (eg. this stream https://speckle.xyz/streams/59185c5b8a
Click Receive and wait for the editor dialogue to complete.
Observe scene Hierarchy and console errors.

Unity -> BIM workflow improvements

There have been requests to improve Unity -> Revit workflows.

Two main use cases:

  • Preserving Speckle Types when passing objects through Unity. i.e. Revit -> Unity -> Revit
  • manual (code heavy) BIM authoring inside Unity. (e.g. creating assigning Wall/Collumn properties to unity objects)

Duplicate Newtonsoft dll

When you clone main unity greets you with an error for having multiple newtonsoft.json dll's. I threw out the one included in SpeckleConnector/Core and that fixed the error.

Multiple precompiled assemblies with the same name Newtonsoft.Json.dll included or the current platform. Only one assembly with the same name is allowed per platform. (Assets/Speckle Connector/Core/Newtonsoft.Json.dll)

🐞 Check if a material has already been converted

Description

While editing the materials of the models coming from Revit, a faulty behavior is encountered. Unity connector successfully generates Material Assets on receive, but when these assets are modified, only some of the items with edited material get affected. Rest stays with the old material definition. The image below is an example of this.

I'm not sure if this only occurs on models from Revit.

Expected Behaviour

When material assets are modified, all items with the same material should be affected by this change.

Streams Used

https://latest.speckle.dev/streams/8e2e6ad4f3/commits/68946ac902

Steps to reproduce

  1. Receive the above stream via Unity connector. Make sure to check “Generate Material Assets” option.

  2. Change the color of one of the generated material assets, for example Grass material, to red.

    image

  3. Although there were multiple floors with Grass material applied, only one turned red. The remaining two still use the old definition. See👇:

    image

Issues with IFC geometry

Geometry imported with the IFC import leads to issues with Base objects with displayValue not being converted.
Since the displayValue prop is a dynamic List not a IEnumerable<Base>.

EDIT: ^ is the correct reason why it's failing? need to double check

Add mesh colliders to imported game objects

When working with Speckle>Unity for a project I needed to use the imported assets a an environment for a "game". The imported elements do not come with colliders so I wrote this editor code to add colliders to all children of the selected game object. It is probably not very robust code but helped me when I needed it.

MeshColliderCreator.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MeshColliderCreator : MonoBehaviour
{
    //Filed to set the target for the colliders
    public GameObject targetObject;
    //Variable to store if the colliders have been built
    public bool collidersBuilt = false;

    //Method to build the colliders
    public void BuildMeshColliders()
    {
        Transform[] allChildren = targetObject.transform.GetComponentsInChildren<Transform>();
        foreach (Transform child in allChildren)
        {
            child.gameObject.AddComponent<MeshCollider>();
        }
        Debug.Log("Colliders have been built");
        collidersBuilt = true;
    }
    
    //Method to remove the colliders
    public void RemoveColliders()
    {
        Transform[] allChildren = targetObject.transform.GetComponentsInChildren<Transform>();
        foreach (Transform child in allChildren)
        {
            DestroyImmediate(child.gameObject.GetComponent<MeshCollider>());
        }
        Debug.Log("Colliders have been removed");
        collidersBuilt = false;
    }
}

MeshColliderCreator_Editor.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

//Defines which sript is associated with this editor function
[CustomEditor(typeof(MeshColliderCreator))]
public class customInspectorColliders : Editor
{
    public override void OnInspectorGUI()
    {
        //Draws the default InspectorGUI
        //base.OnInspectorGUI();

        //Defines where the functions must be called from
        MeshColliderCreator calledScript = (MeshColliderCreator)target;

        //Variable to store is colliders have been created
        bool checkColliders = calledScript.collidersBuilt;

        //Field to input where to build the colliders
        calledScript.targetObject = (GameObject)EditorGUILayout.ObjectField("Target Object", calledScript.targetObject, typeof(GameObject), true);

        //Sets the buttons to be side-by-side
        GUILayout.BeginHorizontal();
        //Creates the buttons and calls functions when they are pressed
        if (GUILayout.Button("Build Colliders") & calledScript.collidersBuilt == false)
        {
            calledScript.BuildMeshColliders();
            checkColliders = true;
        }
        if (GUILayout.Button("Remove Colliders") & calledScript.collidersBuilt == true)
        {
            calledScript.RemoveColliders();
            checkColliders = false;
        }
        GUILayout.EndHorizontal();
    }
}

Improvements for Android platforms

Discussion started over on this thread .

Currently, The Unity connector builds fine for all platforms (except IL2CPP dependent ones)
However, There are some significant limitations for non-desktop platforms.

  • SQLite cache does not work out of the box, and it being the default local transport, causes problems.
  • No mechanism to load accounts.

It is, however, possible to manually receive through a hardcoded auth token, and manually specifying an alternative local transport (E.g. memory transport).

See https://github.com/specklesystems/speckle-unity/blob/main/Assets/Extra/ManualReceive.cs

Additionally, there are a number of ways we can improve the DX for Android/IOS builds.

  • Add Android/IOS to our release testing cycle.
  • Scope web based auth improvements.
  • Scope transport improvements.
  • Scope full SQLite support.

See discussion

Consolidate Editor and Runtime components

Currently, the editor only StreamManager component duplicates a lot of behaviour of the Receiver component designed for runtime usage.

Ideally, I'd like to see one component that can be used for both runtime and editor in the same way.

  • Allows both sending and receiving
  • Generic account/stream/branch/commit selection
  • Exposed events (similar to blender's Receive/Send scripts)
  • Auto-receive / subscriptions
  • Extensibility for more complex runtime behaviour (filters, scene management, etc)

[macOS] seemingly missing dll reference prevents use

Hi! I was following along the documentation and encounter an error when attempting to add the Stream Manager to an empty Game Object. This occurs with Unity 2020.3.21f1 or 2021.2.8f1 running on macOS. After the error appears, the Stream Manager attaches to the object but does not have any fields.

DllNotFoundException: SQLite.Interop.dll assembly:<unknown assembly> type:<unknown type> member:(null)
System.Data.SQLite.SQLite3.Open (System.String strFilename, System.String vfsName, System.Data.SQLite.SQLiteConnectionFlags connectionFlags, System.Data.SQLite.SQLiteOpenFlagsEnum openFlags, System.Int32 maxPoolSize, System.Boolean usePool) (at <c8c2e4911ed34956a0a24a3548a3c49c>:0)
System.Data.SQLite.SQLiteConnection.Open () (at <c8c2e4911ed34956a0a24a3548a3c49c>:0)
Speckle.Core.Transports.SQLiteTransport+<GetAllObjects>d__66.MoveNext () (at <943162bfe3e94db593fcade4af5d1518>:0)
System.Linq.Enumerable+SelectEnumerableIterator`2[TSource,TResult].MoveNext () (at <37609d1fc2d04496895227262e1b2fe0>:0)
System.Collections.Generic.List`1[T].AddEnumerable (System.Collections.Generic.IEnumerable`1[T] enumerable) (at <e7b4371ec0dc4ed2ab84299cc150e9c3>:0)
System.Collections.Generic.List`1[T].InsertRange (System.Int32 index, System.Collections.Generic.IEnumerable`1[T] collection) (at <e7b4371ec0dc4ed2ab84299cc150e9c3>:0)
System.Collections.Generic.List`1[T].AddRange (System.Collections.Generic.IEnumerable`1[T] collection) (at <e7b4371ec0dc4ed2ab84299cc150e9c3>:0)
System.Linq.Enumerable+ConcatIterator`1[TSource].ToList () (at <37609d1fc2d04496895227262e1b2fe0>:0)
System.Linq.Enumerable.ToList[TSource] (System.Collections.Generic.IEnumerable`1[T] source) (at <37609d1fc2d04496895227262e1b2fe0>:0)
Speckle.ConnectorUnity.StreamManagerEditor.LoadAccounts () (at Packages/systems.speckle.speckle-unity/Editor/StreamManagerEditor.cs:103)
Speckle.ConnectorUnity.StreamManagerEditor.OnInspectorGUI () (at Packages/systems.speckle.speckle-unity/Editor/StreamManagerEditor.cs:213)
System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) (at <e7b4371ec0dc4ed2ab84299cc150e9c3>:0)
UnityEngine.UnitySynchronizationContext+WorkRequest.Invoke () (at /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/UnitySynchronizationContext.cs:153)
UnityEngine.UnitySynchronizationContext.Exec () (at /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/UnitySynchronizationContext.cs:83)
UnityEngine.UnitySynchronizationContext.ExecuteTasks () (at /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/UnitySynchronizationContext.cs:107)

Hopefully this isn't anything specific to my machine. I also wasn't sure if macOS was supported.

If helpful, I could attempt a PR for this although would need some pointers - my experience with .NET dependency management is pretty limited.

Slow loading times on Operations.Receive

Hi,

we are currently having issues with long loading times within unity with the latest connector.
When we are getting an object with ~10k objects then we need to wait ~4min (at least!) for just the Receiving operation of speckle.
The algorithm which generates the game objects from the base object only takes around ~30seconds which is really good for that amount of objects.

The problem is at file Receiver.cs @ line 134.

var @base = await Operations.Receive( objectId, remoteTransport: transport, onErrorAction: OnErrorAction, onProgressAction: OnProgressAction, onTotalChildrenCountKnown: OnTotalChildrenCountKnown, disposeTransports: true );

Nearly the same code which I reproduced on .NET Core 3.1 Console Application with the latest NuGet package of speckle core only needs ~45seconds.

Why is it so slow? Is it a known problem? What can I do to speed it up?
We are using the connector within an application for an 3d cave environment with a customer.
Later on we want to load even larger models, the customer already told us that he experienced loading times up to 40 minutes.

The test above were taken both from our cave application and the provided unity speckle playground. There was no difference in performance.

I also tried to upgrade the speckle connectors speckle sharp dlls manually to the latest version, which also didn't help. Same issue.

Tested on hardware:
11th Gen Intel Core i7 1165G7 @ 2,8GHz
16GB DDR4 RAM 3200MHz
SSD
Integrated Graphics

Serialised SpeckleProperties

In regards to editor mode receiving of streams.
I would really like SpeckleProperties.Data to be serialised so that the SpeckleProperties of streams received in editor mode can be used during play mode.

public class SpeckleProperties : MonoBehaviour
{
public Dictionary<string, object> Data { get; set; }
}

Unity doesn't support serialisation of Dictionary<K,V> types which makes SpeckleProperties effectively unusable for most applications of Editor mode receiving.

Steps to reproduce issue:

  1. Receive a stream through the StreamManager in editor mode.
  2. SpeckleProperties.Data will be null in play mode and after reloading scripts or scene.

In the past, I have used several different open-source implementations of a serialisable dictionary, but they have all had their own quirks that mean that it wouldn't be a simple drop-in replacement for the current Dictionary type.
Perhaps @haitheredavid could suggest some possible solutions.

Publish on unity package manager

Current installation through git has some disadvantages

  • Users not notified of updates
  • Versioning is difficult (requires knowledge of unity's git syntax)
  • Requires git

UPM solves these issues, as well as allowing us to bundle sample projects in a convenient manor.

Speckle comments on wrong position/location

Hi there,

we are currently trying to integrate the speckle comments on a stream within unity.
For that we firstly wanted to just show the comments as basic game objects w/o any text or context.

I've had no problems getting the comments, but as I've looked at the location something wasn't correct. The comments from the graph ql api seem to return the (wrong?) locations.

Where I've expected it to be:
grafik

Where it actually is: (the green dot represents it)
grafik

I've used the data.location property from a CommentItem

Im sure that the coordinates are correct as I've checked against the graphql api explorer from speckle.xyz.
grafik
grafik

Code:

    public void LoadComments(string streamId, string streamName, GameObject go)
    {
        var comments = speckleLoader.Client.StreamGetComments(streamId).Result;
        foreach (var item in comments.items)
        {
            var comment = GameObject.Instantiate(commentPrefab, new Vector3((float)item.data.location.x, (float)item.data.location.y, (float)item.data.location.z), Quaternion.identity, go.transform);
            comment.name = $"Comment #{item.id}";
        }
    }

For our use case we would need the exact position like in the speckle viewer seen in the first picture.

I don't know if it fits in this correct repository as ait also seems to connect to Speckle.Core, please dont kill me!

Missing Stream Prefab

Example scene requires stream prefab that has some buttons and text fields setup but that prefab seems to be missing from the project. It might be helpful to have an example scene that doesn't rely on any ui assets. I've started extracting some of the example code into a general stream manager component (mos def a wip).

Pushed objects very different from the received ones

How to replicate:

  • Push a stream from Revit
  • Receive it in Unity
  • Push back from unity

Effect

  • Lost structure
  • Extremely slow to load on the online viewer (haven't managed, not enough patience 😊 )

Unity pushes a single object, losing any structure from Revit. This makes it almost impossible to read on the online viewer (which probably gives us a pick to a viewer deficiency).

From Revit:

image

From Unity (Same data)

image

Consolidate object transform/basepoint/bounds.center origin points

Currently, we use 0,0,0 as the origin point for all meshes. (tonative)
This is wildly undesirable for most use cases.

Previously we used the bounds.center (but stopped for some reason?)

Some connectors will attach a transform or insersionpoint or basepoint (need to double-check exactly what each connector is doing). We should use those here to give proper object transforms between softwares.

Rendering Point Clouds

Currently there is no means of rendering point clouds in unity. Something like pcx or unity's p.system would be useful. I took a pass at implementing this type of object into the converter in this pr. #32

Allowing for different Kits and Converters

Putting an issue on the board that builds off of #54. Currently there is no ability to switch out the converter for custom objects as the receiving code is hardcoded in the package. This creates a blockers for our dependency on speckle in unity.

Use of UnityEditor breaks builds

I tried to make a build but it is not allowed to use UnityEditor namespace on builds. I commented out the effected lines and managed to build. If you can clarify what this code is meant to do I am sure we can find a workaround. No file is using this directly.

Infected file: RosolynDirectoryCreator.cs

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.