Giter VIP home page Giter VIP logo

univoice's Introduction

UniVoice

An extensible voice chat/VoIP solution for Unity.

Features

  • πŸ‘₯ Group Voice Chat

    • Multiple peers can join a chatroom and exchange audio.
    • APIs to mute audio on a per peer basis
  • πŸ“¦ Plug-And-Play

    • No need to write audio and networking code for most use cases
    • Support for multiple network types, including PUN2 and WLAN
  • πŸŽ›οΈ Customizable

    • UniVoice is pretty much collection of interfaces, you can make your own implementations
    • For more info, see the Customization section below

Installation

The recommended installation is via the UniVoice UPM package named com.adrenak.univoice available on npmjs.org

  1. Add the NPM registry with UniVoice as a scope. To do this, go to Edit/Project Settings/Package Manager, add the NPM scope registry with the URL https://registry.npmjs.org and add com.adrenak.univoice as a scope.

  2. Install the package from NPM registry To do this, go to Window/Package Manager and refresh packages. Select in the My Registries view (located at the top left, the default selection is Unity Registry), locate UniVoice and click install. After installation, the package will show up in the In Project view as well.

Usage

Creating a chatroom agent

To be able to host and join voice chatrooms, you need a ChatroomAgent instance.

var agent = new ChatroomAgent(IChatroomNetwork network, IAudioInput audioInput, IAudioOutputFactory audioOutputFactory);

Hosting and joining chatrooms

agent.Network is the most commonly accessed object to do things with UniVoice.

// Host a chatroom 
agent.Network.HostChatroom(optional_data);

// Join an existing
agent.Network.JoinChatroom(optional_data);

// Leave the chatroom
agent.Network.LeaveChatroom(optional_data);

// Closes a chatroom
agent.Network.CloseChatroom(optional_data);

The current mode of the ChatroomAgent can be accessed using agent.Network.CurrentMode, this will return a ChatroomAgentMode enum object, the possible values are:

  • Unconnected: The agent is neither hosting or currently a guest of a chatroom
  • Host: The agent is currently hosting a chatroom
  • Guest: The agent is currently a guest in a chatroom

Interacting with peers

Everyone in the chatroom is assigned an ID by the host. And everyone has a list of IDs of their peers. An ID in UniVoice is a C# short that is unique for each member in the chatroom

To get your ID

short myID = agent.Network.OwnID;

To get a list of the other peers in the chatroom, use this:

short others = agent.Network.PeerIDs

To mute everyone in the chatroom, use agent.MuteOthers = true;, set it to false to unmute. This will stop audio from every peer in the chatroom.

To mute yourself to everyone in the chatroom use agent.MuteSelf = true; set it to false to unmute. This will stop sending your audio to the peers in the chatroom.

For muting a specific peer, first get the peers settings object using this:

agent.PeerSettings[id].muteThem = true; // where id belongs to the peer you want to mute

If you want to mute yourself towards a specific peer, use this:

agent.PeerSettings[id].muteSelf = true; // where id belongs to the peer you don't want to hear you

Events

agent.Network provides several network related events. Refer to the API reference for them.

βš™οΈ Customization

UniVoice is a plug-and-play solution with several pre-existing modules. The most common use case (which is probably 3D/spatial audio group chat) doesn't need you to write any audio or networking code yourself

But it also offers you ways to extend and modify it.

🎀 Audio Input

UniVoice is audio input source agnostic. This means, it doesn't care where it is getting the audio from. It only cares about getting the audio data, giving you freedom to change where it gets that from.

  • transmit real-time mic input
  • send audio by reading an mp3 file from disk
  • send the audio track of a video file.
  • send in-game audio

The most common input source is real-time mic input. If this is what you're looking for, an official input implementation based on UniMic is available here which can be used for this.

The IAudioInput interface API reference is here

πŸ”Š Audio Output

UniVoice is also audio output agnostic. This means, it doesn't care what you do with the audio you receive from peers. It just gives you the data and forgets about it, leaving it up to you what you want to do with it.

  • you can play it back in Unity using an AudioSource
  • you can save it to disk
  • you can use it as input for a speech-to-text
  • stream it to a server

The most common use output source is playing it inside your app. An official output implementation that plays peer audio on Unity AudioSource is available here

Creating an audio output requires implementing two interfaces. They are IAudioOutput and IAudioOutputFactory

🌐 Network

You guessed it. UniVoice is network agnostic. This means, it doesn't care how the audio is exchanged between peers. It just needs a networking implementation of its IChatroomNetwork interface, which allows you to adapt it to different kinds of network infra.

  • you can send audio over WLAN
  • or webrtc
  • or popular networking solution providers such as Photon
  • or your own custom backend solution

Creating your own network requires you to implement the IChatroomNetwork interface

Docs and samples

Manual is not available yet. For the API reference, please visit http://www.vatsalambastha.com/univoice

A sample app is available here

License and Support

This project is under the MIT license.

Updates and maintenance are not guaranteed and the project is maintained by the original developer in his free time. Community contributions are welcome.

Commercial consultation and development can be arranged but is subject to schedule and availability.

Contact

The developer Vatsal Ambastha can be reached at the following links:

Website
LinkedIn
GitHub
Twitter

univoice's People

Contributors

adrenak avatar joshuadahlunr avatar semantic-release-bot 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

univoice's Issues

Sample Scene,where is it ?

Unable to locate sample scene. where is it ,is there any separate sample project which uses both univoice and unimic ?
i saw an entry here "Assets/Adrenak.UniVoice/Samples/Scenes/GroupVoiceCallSample.unity" , but its not found in project.
Screenshot_4

Is there a way for user data transmission?

I want to transfer some basic user data(eg. alias, description) after entering the room, is there a way to do that, or what should I do?
Data might be changed during the room lifecycle(user also might enter or leave the room), everyone should be notified with the newest data.

PC build works fine, but Android doesn't

Its working fine in PC but when I switch to android, it doens't work, after doing debugging using log cat, I got this issue
2023/10/14 03:20:44.566 21419 21441 Fatal libc Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 21441 (UnityMain), pid 21419 (ngleMultiplayer) 2023/10/14 03:20:44.838 22927 22927 Fatal DEBUG #13 pc 00387d4f /data/app/com.DefaultCompany.SingleMultiplayer-9CyCLx7zqtwpt5nFFx0rbg==/lib/arm/libunity.so
any idea?

also I get this issue as well
2023/10/17 20:55:51.424 25214 25234 Error Unity DllNotFoundException: Unable to load DLL 'webrtccsharpwrap'. Tried the load the following dynamic libraries: Unable to load dynamic library 'webrtccsharpwrap' because of 'Failed to open the requested dynamic library (0x06000000) dlerror() = dlopen failed: library "webrtccsharpwrap" not found

Sample for other audio input then mic?

Hi
Sorry it's not really an issue more a question. I'm trying to use univoice to send game audio from a audio clip from the host to all clients but i'm actually not an audio expert. I tried to write a new IAudioInput but to only thing i don't get is how to do the reading of the data correctly. Also because it's not sent each frame and has to be recorded and then sent like in the ReadRawAudio() in the UniVoiceAudioSampler.cs.
So i wanted to ask if you maybe have a sample script for sending audio other then the mic?

Best

How use Univoice with Fish-Net

Hi! I've been trying use Univoice with Fish-Net in my multiplayer project, but i can't implement it. Do you know how i can make this work?

Android build not work

On unity editor work but on android phone can not press button or enter room id (Unity 2019.3.3)

update:
found problem mic permission on start up

IL2CPP Build Runtime Issue

Hello, I guess Airpeer or Unimic doesn't support IL2CPP build. I've got error constantly in Update method. Is there any solution for that? I'd need to use that in a project that I build in IL2CPP... Thanks in advance! (It works in Mono build btw)

UnloadTime: 0.580600 ms
Using workaround for the SslStream.AuthenticateAsClient unity bug
UnityEngine.Logger:Log(LogType, Object)
UnityEngine.Debug:Log(Object)
Byn.Net.WebRtcNetworkFactory:TryStaticInitialize()
Byn.Net.WebRtcNetworkFactory:.ctor()
UnityEngine.GameObject:AddComponent()
Byn.Common.UnitySingleton`1:get_Instance()
Adrenak.AirPeer.APNetwork:New(String, String[], String)
Adrenak.AirPeer.APNode:.ctor(String, String[], String)
Adrenak.AirPeer.APNode:.ctor(String, String)
Adrenak.UniVoice.InbuiltImplementations.InbuiltChatroomAgentFactory:Create()
VoipRoomSample:InitializeAgent()
VoipRoomSample:Start()

Initializing native webrtc for windows ...
UnityEngine.Logger:Log(LogType, Object)
UnityEngine.Debug:Log(Object)
Byn.Net.WebRtcNetworkFactory:TryStaticInitialize()
Byn.Net.WebRtcNetworkFactory:.ctor()
UnityEngine.GameObject:AddComponent()
Byn.Common.UnitySingleton`1:get_Instance()
Adrenak.AirPeer.APNetwork:New(String, String[], String)
Adrenak.AirPeer.APNode:.ctor(String, String[], String)
Adrenak.AirPeer.APNode:.ctor(String, String)
Adrenak.UniVoice.InbuiltImplementations.InbuiltChatroomAgentFactory:Create()
VoipRoomSample:InitializeAgent()
VoipRoomSample:Start()

NotSupportedException: To marshal a managed method, please add an attribute named 'MonoPInvokeCallback' to the method definition. The method we're attempting to marshal is: WebRtcCSharp.WebRtcSwigPINVOKE+SWIGExceptionHelper::SetPendingApplicationException
at WebRtcCSharp.WebRtcSwigPINVOKE+SWIGExceptionHelper..cctor () [0x00000] in <00000000000000000000000000000000>:0
at WebRtcCSharp.WebRtcSwigPINVOKE..cctor () [0x00000] in <00000000000000000000000000000000>:0
at WebRtcCSharp.WebRtcWrap.GetVersion () [0x00000] in <00000000000000000000000000000000>:0
at Byn.Net.WebRtcNetworkFactory.TryStaticInitialize () [0x00000] in <00000000000000000000000000000000>:0
at Byn.Net.WebRtcNetworkFactory..ctor () [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.GameObject.AddComponent[T] () [0x00000] in <00000000000000000000000000000000>:0
at Byn.Common.UnitySingleton1[T].get_Instance () [0x00000] in <00000000000000000000000000000000>:0 at Adrenak.AirPeer.APNetwork.New (System.String signalingServer, System.String[] iceServers, System.String gameObjectName) [0x00000] in <00000000000000000000000000000000>:0 at Adrenak.AirPeer.APNode..ctor (System.String signalingServer, System.String[] iceServers, System.String apNetworkGameObjectName) [0x00000] in <00000000000000000000000000000000>:0 at Adrenak.AirPeer.APNode..ctor (System.String signalingServer, System.String apNetworkGameObjectName) [0x00000] in <00000000000000000000000000000000>:0 at Adrenak.UniVoice.InbuiltImplementations.InbuiltChatroomAgentFactory.Create () [0x00000] in <00000000000000000000000000000000>:0 at VoipRoomSample.InitializeAgent () [0x00000] in <00000000000000000000000000000000>:0 at VoipRoomSample.Start () [0x00000] in <00000000000000000000000000000000>:0 Rethrow as TypeInitializationException: The type initializer for 'WebRtcCSharp.WebRtcSwigPINVOKE.SWIGExceptionHelper' threw an exception. at WebRtcCSharp.WebRtcSwigPINVOKE..cctor () [0x00000] in <00000000000000000000000000000000>:0 at WebRtcCSharp.WebRtcWrap.GetVersion () [0x00000] in <00000000000000000000000000000000>:0 at Byn.Net.WebRtcNetworkFactory.TryStaticInitialize () [0x00000] in <00000000000000000000000000000000>:0 at Byn.Net.WebRtcNetworkFactory..ctor () [0x00000] in <00000000000000000000000000000000>:0 at UnityEngine.GameObject.AddComponent[T] () [0x00000] in <00000000000000000000000000000000>:0 at Byn.Common.UnitySingleton1[T].get_Instance () [0x00000] in <00000000000000000000000000000000>:0
at Adrenak.AirPeer.APNetwork.New (System.String signalingServer, System.String[] iceServers, System.String gameObjectName) [0x00000] in <00000000000000000000000000000000>:0
at Adrenak.AirPeer.APNode..ctor (System.String signalingServer, System.String[] iceServers, System.String apNetworkGameObjectName) [0x00000] in <00000000000000000000000000000000>:0
at Adrenak.AirPeer.APNode..ctor (System.String signalingServer, System.String apNetworkGameObjectName) [0x00000] in <00000000000000000000000000000000>:0
at Adrenak.UniVoice.InbuiltImplementations.InbuiltChatroomAgentFactory.Create () [0x00000] in <00000000000000000000000000000000>:0
at VoipRoomSample.InitializeAgent () [0x00000] in <00000000000000000000000000000000>:0
at VoipRoomSample.Start () [0x00000] in <00000000000000000000000000000000>:0
Rethrow as TypeInitializationException: The type initializer for 'WebRtcCSharp.WebRtcSwigPINVOKE' threw an exception.
at WebRtcCSharp.WebRtcWrap.GetVersion () [0x00000] in <00000000000000000000000000000000>:0
at Byn.Net.WebRtcNetworkFactory.TryStaticInitialize () [0x00000] in <00000000000000000000000000000000>:0
at Byn.Net.WebRtcNetworkFactory..ctor () [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.GameObject.AddComponent[T] () [0x00000] in <00000000000000000000000000000000>:0
at Byn.Common.UnitySingleton1[T].get_Instance () [0x00000] in <00000000000000000000000000000000>:0 at Adrenak.AirPeer.APNetwork.New (System.String signalingServer, System.String[] iceServers, System.String gameObjectName) [0x00000] in <00000000000000000000000000000000>:0 at Adrenak.AirPeer.APNode..ctor (System.String signalingServer, System.String[] iceServers, System.String apNetworkGameObjectName) [0x00000] in <00000000000000000000000000000000>:0 at Adrenak.AirPeer.APNode..ctor (System.String signalingServer, System.String apNetworkGameObjectName) [0x00000] in <00000000000000000000000000000000>:0 at Adrenak.UniVoice.InbuiltImplementations.InbuiltChatroomAgentFactory.Create () [0x00000] in <00000000000000000000000000000000>:0 at VoipRoomSample.InitializeAgent () [0x00000] in <00000000000000000000000000000000>:0 at VoipRoomSample.Start () [0x00000] in <00000000000000000000000000000000>:0 UnityEngine.GameObject:AddComponent() Byn.Common.UnitySingleton1:get_Instance()
Adrenak.AirPeer.APNetwork:New(String, String[], String)
Adrenak.AirPeer.APNode:.ctor(String, String[], String)
Adrenak.AirPeer.APNode:.ctor(String, String)
Adrenak.UniVoice.InbuiltImplementations.InbuiltChatroomAgentFactory:Create()
VoipRoomSample:InitializeAgent()
VoipRoomSample:Start()

NullReferenceException: Object reference not set to an instance of an object.
at Byn.Net.WebRtcNetworkFactory.CreateDefault (System.String websocketUrl, Byn.Net.IceServer[] urls) [0x00000] in <00000000000000000000000000000000>:0
at Adrenak.AirPeer.APNetwork.New (System.String signalingServer, System.String[] iceServers, System.String gameObjectName) [0x00000] in <00000000000000000000000000000000>:0
at Adrenak.AirPeer.APNode..ctor (System.String signalingServer, System.String[] iceServers, System.String apNetworkGameObjectName) [0x00000] in <00000000000000000000000000000000>:0
at Adrenak.AirPeer.APNode..ctor (System.String signalingServer, System.String apNetworkGameObjectName) [0x00000] in <00000000000000000000000000000000>:0
at Adrenak.UniVoice.InbuiltImplementations.InbuiltChatroomAgentFactory.Create () [0x00000] in <00000000000000000000000000000000>:0
at VoipRoomSample.InitializeAgent () [0x00000] in <00000000000000000000000000000000>:0
at VoipRoomSample.Start () [0x00000] in <00000000000000000000000000000000>:0

NullReferenceException: Object reference not set to an instance of an object.
at VoipRoomSample.Update () [0x00000] in <00000000000000000000000000000000>:0

NullReferenceException: Object reference not set to an instance of an object.
at VoipRoomSample.Update () [0x00000] in <00000000000000000000000000000000>:0

NullReferenceException: Object reference not set to an instance of an object.
at VoipRoomSample.Update () [0x00000] in <00000000000000000000000000000000>:0

NullReferenceException: Object reference not set to an instance of an object.
at VoipRoomSample.Update () [0x00000] in <00000000000000000000000000000000>:0

NullReferenceException: Object reference not set to an instance of an object.
at VoipRoomSample.Update () [0x00000] in <00000000000000000000000000000000>:0

NullReferenceException: Object reference not set to an instance of an object.
at VoipRoomSample.Update () [0x00000] in <00000000000000000000000000000000>:0

NullReferenceException: Object reference not set to an instance of an object.
at VoipRoomSample.Update () [0x00000] in <00000000000000000000000000000000>:0

NullReferenceException: Object reference not set to an instance of an object.
at VoipRoomSample.Update () [0x00000] in <00000000000000000000000000000000>:0

NullReferenceException: Object reference not set to an instance of an object.
at VoipRoomSample.Update () [0x00000] in <00000000000000000000000000000000>:0

NullReferenceException: Object reference not set to an instance of an object.
at VoipRoomSample.Update () [0x00000] in <00000000000000000000000000000000>:0

NullReferenceException: Object reference not set to an instance of an object.
at VoipRoomSample.Update () [0x00000] in <00000000000000000000000000000000>:0

NullReferenceException: Object reference not set to an instance of an object.
at VoipRoomSample.Update () [0x00000] in <00000000000000000000000000000000>:0

Advanced audio control

Allow the user to have more control over the inner workings of Voice, Buffer, Streamer, Gate etc.

WebGL

Hello,
quick question:
Does univoice work on WebGL?
Thank you!

Can't access peer output on peer join

agent.Network.OnPeerJoinedChatroom += id => {
    Debug.Log("Joined " + id + agent.PeerOutputs.Count);

    var a = agent.PeerOutputs[id];  // is null, no key found
};

Support AudioMixer or AudioFilter

Sometimes we need to apply additional effects to audio sources, such as using bandpass filtering to filter out vocals and remove ambient noise. Can we support custom extensions for sound effects at the interface level?

How can I Set Turn Server in univoice ?

I had Problem for Connecting Device With difference Network . for solve that I have Ice serve .but i don't know how to add this setup .
my ice server Config is like this :
const configuration = {
'iceServers': [{
urls: "stun:stun.relay.metered.ca:80",
},
{
urls: "turn:a.relay.metered.ca:80",
username: "f6354f6eae6993753c1c1b9a",
credential: "RseLoSxMBSjDjNBs",
},
{
urls: "turn:a.relay.metered.ca:80?transport=tcp",
username: "f6354f6eae6993753c1c1b9a",
credential: "RseLoSxMBSjDjNBs",
},
{
urls: "turn:a.relay.metered.ca:443",
username: "f6354f6eae6993753c1c1b9a",
credential: "RseLoSxMBSjDjNBs",
},
{
urls: "turn:a.relay.metered.ca:443?transport=tcp",
username: "f6354f6eae6993753c1c1b9a",
credential: "RseLoSxMBSjDjNBs",
} ]
};
const peerConn = new RTCPeerConnection(configuration);

how can Init that for new ChatRoomAgent

    void InitializeAgent()
    {
        agent = new ChatroomAgent(
                  new UniVoiceAirPeerNetwork("ws://24.199.109.229:12776"),
               new UniVoiceUniMicInput(0, 16000, 100),
            new UniVoiceAudioSourceOutput.Factory()
        );

Cant create a room

Hello sorry to bother I am not sure if I am doing something wrong here, I was following the example. I just cant to connect to any room.

I saw it in know issue that it can fail on mobile data/wifi, but I use cable connection and running it on the computer(might be this the problem?). I Would really appreciate help with my issue because this library really looks awesome and I would love to use it!

    public AudioSource audioSource;
    private Voice voice;
    void Start()
    {
        voice = Voice.New(audioSource);
        if (PhotonNetwork.IsMasterClient)
        {
            Debug.Log($"Creating voice chat room: '{NetworkManager.RoomName}'");
            voice.Create(NetworkManager.RoomName, onCreate);
        }
        else
        {
            voice.Join(NetworkManager.RoomName, onConnect);
        }
    }
    
    void onCreate(bool success)
    {
        voice.Join(NetworkManager.RoomName, onConnect);
        Debug.Log($"Create Event {success}");
    }
    void onConnect(bool success)
    {
        voice.Speaking = true;
        Debug.Log($"Connect event {success}");
    }

bug when pressing create room

NullReferenceException: Object reference not set to an instance of an object
Adrenak.UniVoice.Examples.SimpleApp.Create (UnityEngine.UI.InputField input) (at Assets/Adrenak/UniVoice/Scripts/SimpleApp.cs:75)
UnityEngine.Events.InvokableCall1[UnityEngine.UI.InputField].Invoke (UnityEngine.UI.InputField args0) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:207) UnityEngine.Events.CachedInvokableCall1[UnityEngine.UI.InputField].Invoke (System.Object[] args) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:345)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:70)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:66)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:108)
UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.EventSystem:Update() (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/EventSystem.cs:377)

Host on server

hi
how can i set host on the dedicated server build
or how can i change the host when current host leave or disconnect? i need a way to keep connection open whenever host is online or disconnected

Voice sounds "crackly"

I currently have a barebones implementation using this package. It seems that even without introducing networking, the voice just doesn't sound crisp (lots of static and sounds 'robotic'). Has anyone else experienced this? I am using just the default values for UniMic and UniVoiceAudioSourceOutput.Factory.

Any help would be greatly appreciated.

Guide for Netcode for Gameobjects?

Hi there! I've been trying to implement Univoice into my Netcode multiplayer project and it seems pretty difficult to do so far. Do you have any interest in putting a guide together for this?

Thanks!

Add docs

Add more documentation to illustrate how the Streamer, Buffer and Gate work

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.