Giter VIP home page Giter VIP logo

flyerhq / flutter_firebase_chat_core Goto Github PK

View Code? Open in Web Editor NEW
248.0 248.0 201.0 550 KB

Actively maintained, community-driven Firebase BaaS for chat applications with an optional chat UI.

Home Page: https://flyer.chat

License: Apache License 2.0

Dart 48.25% Kotlin 0.11% Swift 1.57% Objective-C 0.04% Ruby 2.78% HTML 1.21% CMake 19.44% C++ 25.17% C 1.42%
android chat dart firebase flutter ios

flutter_firebase_chat_core's People

Contributors

adetayoadeyemi avatar alihen avatar awesomejerry avatar barriehadfield avatar demchenkoalex avatar fox-avokadik avatar giorgio79 avatar gmgm60 avatar lrsvmb avatar markzakharyan avatar marlonjd avatar rootd avatar salahaddin avatar voidozzer avatar waseeksenju 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

flutter_firebase_chat_core's Issues

Message stream pagination

The library does not seem to have pagination on the messages stream. Is this something that will be added?

Is there a way to align all messages to one side?

While using chat in web mode short messages are spaced very far from each other. That is, your messages appear on the right, and everyone else's on the left.

image

I know this is normal behaviour for a chat client, but I was wondering if there was a way to align all messages to the left (or right, if that's somehow easier).

Consolation prize: is there a way to always show the author's name on a message, even if it's your own message? I can open a separate issue/question for this if you'd prefer.

Thanks!

Efficiently get number of unread messages

Hi,

Thank you for creating this Flutter package.

I'm trying to figure out how to efficiently get the number of unread messages (of a room) since the last time the user opened the room (so that I can show a notification bubble with a number in it). I looked through the API doc but didn't find anything that does that. It's possible that I missed it since I'm still learning this.

What's the best way to achieve this through the API?

Thanks in advance.

Audio messages functionality missing. Can I do PR?

Hi, As i can seethe functionality to send audio is still missing, i have added a similar thing in my project, Just wanted to ask if i do a pull request for audio messages, will it be added?
I mean Are you guys looking for this feature?

When using orderByUpdatedAt, no messages get returned

General

What bug do you experience? 🐞

When using orderByUpdatedAt: true, no messages get returned

How can it be reproduced? 🤔

set orderByUpdatedAt to be true inside rooms stream. I'm using a group chat, and updatedAt is configured in firestore for all rooms.

What behavior is expected? 💡

Rooms list is sorted by how lately they were updated

Extras

Screenshots or videos 📸

Relevant Database Snippet:
image

Without orderByUpdatedAt:
image

With orderByUpdatedAt:
image

Code snippets 📝

If applicable, add code samples to help explain your problem.

stream: FirebaseChatCore.instance.rooms(orderByUpdatedAt: true),

Environment info

Please specify the flutter, flutter_firebase_chat_core versions.

flutter: 2.2.1 stable
flutter_firebase_chat_core: ^1.1.2

flutter doctor -v output 👇

[√] Flutter (Channel stable, 2.2.1, on Microsoft Windows [Version 10.0.19042.1083], locale en-US)
    • Flutter version 2.2.1 at C:\Users\space\Documents\flutter
    • Framework revision 02c026b03c (7 weeks ago), 2021-05-27 12:24:44 -0700
    • Engine revision 0fdb562ac8
    • Dart version 2.13.1

[√] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at C:\Users\space\AppData\Local\Android\sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

[√] Android Studio (version 4.1.0)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[√] IntelliJ IDEA Ultimate Edition (version 2020.2)
    • IntelliJ at C:\Program Files\JetBrains\IntelliJ IDEA 2020.2.3
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart

[√] VS Code (version 1.58.1)
    • VS Code at C:\Users\space\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.24.0

[√] Connected device (3 available)
    • sdk gphone x86 arm (mobile) • emulator-5554 • android-x86    • Android 11 (API 30) (emulator)
    • Chrome (web)                • chrome        • web-javascript • Google Chrome 91.0.4472.106
    • Edge (web)                  • edge          • web-javascript • Microsoft Edge 91.0.864.48

• No issues found!

Platform

Pixel 4 XL Android Emulator

Android 11 (API 30)


createUser doesn't return a populated room after creation

General

What bug do you experience? 🐞

When creating a new room (with no entry in the Firebase database yet) using createRoom(), the room which gets returned the very first time doesn't any additional data besides the room ID. A second createRoom() call right afterwards is needed to receive a room which actually contains all the necessary data.

How can it be reproduced? 🤔

Step 1. Delete the room with the other user from the firebase database
Step 2. Create a new room with the other user using createRoom()
Step 3. Overserve the returned room

What behavior is expected? 💡

I expect createRoom to return a room with all values populated

Extras

Screenshots or videos 📸

Returned room after creating a new room with createRoom():
createRoom1

Returned room after calling createRoom() on a user with an already existing room:
createRoom2

My current workaround is to call createUser() twice. First time to actually create the room and then the second time to receive a proper room.

    await FirebaseChatCore.instance.createRoom(user);
    final types.Room room = await FirebaseChatCore.instance.createRoom(user);

    // ..open chat Widget
    Navigator.of(context).push(SwipeablePageRoute(
        builder: (BuildContext context) => ChatWithUser(room: room)));

Environment info

flutter_firebase_chat_core: ^1.5.0

flutter doctor -v output 👇

flutter doctor -v
[✓] Flutter (Channel master, 2.10.0-1.0.pre.407, on Fedora Linux 35 (Workstation
    Edition) 5.16.5-200.fc35.x86_64, locale de_DE.UTF-8)
    • Flutter version 2.10.0-1.0.pre.407 at /home/alex/Flutter/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision a7e1c4fd34 (vor 6 Tagen), 2022-02-03 13:45:18 -0500
    • Engine revision e5433ffef9
    • Dart version 2.17.0 (build 2.17.0-79.0.dev)
    • DevTools version 2.10.0

[✓] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
    • Android SDK at /home/<user>/Android/Sdk
    • Platform android-31, build-tools 32.1.0-rc1
    • Java binary at: /usr/bin/java
    • Java version OpenJDK Runtime Environment 18.9 (build 11.0.14+9)
    • All Android licenses accepted.

Delete room and messages

Hello everybody! I want to ask, is there any functionality for deleting messages and rooms? Do you need to develop it?

why is the firebase web app necessary here

In the read-me section, I see:

  1. Create a web app in Firebase console of your project.

Q1) why do I need a web app while I am developing a Flutter mobile app ? Is this because files will be stored in web ?

Create a firebase-config.js file in the example/web folder and put there only js part like this

Q2) Where will I find the example/web folder ?

Use cases: one to one, one to many

Hello,

Fantastic docs so far!

Could you perhaps add some examples for one to one chats, or one to many (including firestore security rules etc)

Eg in case one to one, when someone is doing a tinder clone, there is no need for list of rooms probably.

Firebase Realtime DB

First of all I really like this awesome chat package!
I'm consider to use this package for my application, but as far as I know from my research is Firestore DB significantly expensive than Firebase Realtime DB, example for this you can see here https://stackoverflow.com/a/68220273

I would like to know what your opinion about this and whether the package will support in Firebase Realtime DB soon

A complete example showcasing how to use feature can be helpful.

Hello 👋

Thank you for creating this amazing package, I am hacking but could not figure out how to update lastMessages, how to show profile picture within the message as shown in the image please help me. if there is a complete example demonstrating the use of this package I will appreciate it.

Cloud security rule sample giving permission denied

Using the drop in replacement sec rules https://docs.flyer.chat/flutter/firebase/firebase-rules

I am seeing a permission denied error like so:

W/Firestore( 6266): (23.0.1) [WriteStream]: (5c0bee9) Stream closed with status: Status{code=PERMISSION_DENIED, description=The caller does not have permission, cause=null}.
W/Firestore( 6266): (23.0.1) [Firestore]: Write failed at users/xxxxxxx: Status{code=PERMISSION_DENIED, description=The caller does not have permission, cause=null}

Return latest message from room

Hi everyone!

I want to be able to show the latest message (constantly updating, probably with StreamBuilder) on the Groups page.

Is there a way to return just the latest message from a room?

Thanks,
Mark

Add metadata to message

Hi, is there any way to add metadata to message and then send it? From what I found out it is not impossible. So I assume it can only be done with cloud function but can someone explain where do I call this function to provide full info about the message (message id and so on)

Example does not compile

The example does not compile, lib/chat.dart has an issue line 84:

lib/chat.dart:84:25: Error: The argument type 'String?' can't be assigned to the parameter type 'String' because 'String?' is nullable and 'String' isn't.
final file = File(filePath);

Flutter environment:

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.5.1, on macOS 11.6 20G165 darwin-x64, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[✓] Xcode - develop for iOS and macOS
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.2)
[✓] VS Code (version 1.60.1)
[✓] Connected device (1 available)

• No issues found!

Include messageId in lastMessages

  1. User delete the last message in messages collection
  2. There's no way to update / remove lastMessages in room document.

Suggestion: Please also include messageId in lastMessages Array in room doc.

design decision

Hello 👋

thanks for having such a great project 🚀

I am Having troubles with understanding the design decision about storing all the room messages in the same room doc.
is it a good idea over time ?
I mean that after some time appending a new message to the end of a huge list would cost with bad performance.

also, here https://firebase.google.com/docs/firestore/quotas its say that the limit for a single doc is 1 mb, so adding new messages would fail.

am I missing something ?

room.lastMessages returning empty list

I'm trying to get the last messages that was sent in a room using room.lastMessages but I'm always getting an empty list even when the room does have some messages in it, what am I missing?

Thanks for the awesome package btw.

New messages on chat's notifications

Is your feature request related to a problem?

In every chat application, there is the need to be informed when a new unreaded message come in a chat, so she/he can be aware he/she must read the new messages.

What solution would you suggest?

Related to the fireabase_chat_core, following the events on the stream and having a delivered/unread status, it is possible to warn when a new message comes with a notification.

Is there any additional solution to that?

A clear and concise description of any alternative solutions or features you've considered.

Extras

Screenshots or videos 📸
If applicable, add screenshots or videos to help explain your feature.

Code snippets 📝
If applicable, add code samples to help explain your feature.

// Your snippet here...

Related issues/PRs

Let us know if this is related to any issue/pull request.

Isuue with messages stram

Hi! I need a clarification.
Stream<List<types.Message>> messages(types.Room room) {

It always returns all the messages from the room, which means that parsing all over the messages occurs on each new message, right? Don't you think it's time consuming?
Should the stream return only the updated document?
What do you think?

Flutter web gives back a blank page

The doc on how to deploy to web is a bit unclear. I have built the project, deployed it in Firebase and when hitting the provided link, it opens a blank page (chrome and safari).

Here are the steps I followed:

1- Create web app in firebase and created as specified in the doc a firebase-config.js in the web directory with the output of the web project creation (without script tags).

2- flutter build web

3- firebase init providing as the location of the index file: build/web, selected also single page
firebase,json was created:
{
"hosting": {
"public": "build/web",
"ignore": [
"firebase.json",
"/.*",
"
/node_modules/"
],
"rewrites": [
{
"source": "
",
"destination": "/index.html"
}
]
}
}

4- firebase deploy
I can see 36 files deployed, I hit the URL: https://flyerchat-c8d43.web.app/ and it just displays a white page

Output of flutter doctor:

`Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.5.1, on macOS 11.6 20G165 darwin-x64, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[✓] Xcode - develop for iOS and macOS
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.2)
[✓] VS Code (version 1.60.1)
[✓] Connected device (2 available)

• No issues found!`

Hello, I'd like to contribute

Hello I'm Pach,

First of all, thank you so much for your support to the firebase community. I've recently used your packages flutter_firebase_chat_core and flutter_chat_types. The problem I had was, I already had a users collection with my own configured params on what's on the firestore document. I had to fork those 2 repositories and changed the params to match the ones on my firebase users document. I'd like to get your opinion if you're open to the idea of me contributing to find a solution for this issue. No strings attached, just a way of saying Thank you.

All users channel / group chat

First off, thanks for creating this great library! I was ecstatic to find a chat package that was actively maintained.

Is your feature request related to a problem?

I have a multi-tenant app and I want to create a chat room (like a slack channel) for all the users of a given tenant.

Currently there doesn't seem to be a way to create a channel for all users. There's also no way to set the room ID.

I see there is a RoomType.channel, but it doesn't seem to be used anywhere.

There also seems to be no way to get messages without first getting the room. This seems unnecessary since messages should be reachable via the path {roomId}/messages

What solution would you suggest?

I'd like to have a way to set the room ID, and a way to retrieve messages by room ID alone, instead of having to first get the room object.

I'd also like to see Room.users as an optional parameter, with the default value being all users in the users collection. That is, all users should be able to see the room and interact with it, so long as the userIds list is empty

Is there any additional solution to that?

I've fiddled around with dynamically adding users to the group room but haven't really had any luck. I'm open to suggestions though!

Code snippets 📝
I'm using Riverpod, so I'm building my ChatPage as a ConsumerStatefulWidget. The upshot being that certain methods must be called in the build method (like how I get my organization ID).

  @override
  Widget build(BuildContext context) {
    FirebaseChatCore firebaseChatCore = FirebaseChatCore.instance;
    String organizationId = organizationIdProvider(ref);
    FirebaseChatCoreConfig firebaseChatCoreConfig = FirebaseChatCoreConfig(
        Firebase.apps.first.name,
        'organizations/$organizationId/rooms',
        'organizations/$organizationId/users');
    firebaseChatCore.setConfig(firebaseChatCoreConfig);
    }

Related issues/PRs

Not that I can see.

Thanks for your time and keep up the great work!

Code is not running in Flutter

The method 'Chat' isn't defined for the type '_ChatPageState'.
Try correcting the name to the name of an existing method, or defining a method named 'Chat'

Displaying Messages directly (creating room from backend)

Hello

I am trying to display the Chat ui (messages list) from a room.

I am creating room from a php backend, and also assigining users to the rooms from the same backend.

How do I display the Chat ui without having the room list ?

I noticed FirebaseChatCore.instance.room(String roomId) gives a Stream but how to get the object Room.

Thank you for your help

Message Type not set in 1.3.0

In the recent update, when you send a message, the "type" property is not set in the Firebase entity. Was working before the recent upgrade to 1.3.0

Allow option to rename `users` and `rooms` collections

Is your feature request related to a problem?

There are users who might already have those collections and we will have data collisions.

What solution would you suggest?

Add an option to provide custom names for those collections.

Related issues/PRs

#12

No host specified in URI file on RoomsPage when other chat user has not profile photo

General

What bug do you experience? 🐞

When we come to the rooms list page and one of the users, for instance, has no a profile photo, it gives an error on console:

======== Exception caught by image resource service ================================================
The following ArgumentError was thrown resolving an image codec:
Invalid argument(s): No host specified in URI file:///

When the exception was thrown, this was the stack: 
#0      _HttpClient._openUrl (dart:_http/http_impl.dart:2636:9)
flyerhq/flutter_chat_ui#1      _HttpClient.getUrl (dart:_http/http_impl.dart:2565:48)
flyerhq/flutter_chat_ui#2      NetworkImage._loadAsync (package:flutter/src/painting/_network_image_io.dart:89:59)
flyerhq/flutter_chat_ui#3      NetworkImage.load (package:flutter/src/painting/_network_image_io.dart:50:14)
flyerhq/flutter_chat_ui#4      ImageProvider.resolveStreamForKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:503:13)
...
Image provider: NetworkImage("", scale: 1.0)
Image key: NetworkImage("", scale: 1.0)
====================================================================================================

How can it be reproduced? 🤔

A few steps to define where does the bug occur.
Step 1. Add a new user without any profile photo.
Step 2. Go to the Rooms Page.
Step 3. Look at console.

What behavior is expected? 💡

As it happens in the Chat page, if there is no a profile photo, just put the user's name initial letter.


Extras

Screenshots or videos 📸

image

Code snippets 📝

If applicable, add code samples to help explain your problem.

// Your snippet here...

Environment info

Please specify the flutter, flutter-chat-ui versions.

  cloud_firestore: ^2.3.0
  file_picker: ^3.0.3
  firebase_auth: ^1.4.1
  firebase_core: ^1.3.0
  firebase_storage: ^8.1.3
flutter: 2.2.2

  flutter_chat_ui: ^1.1.5
  flutter_firebase_chat_core: ^1.1.0
  image_picker: ^0.8.1+3

flutter doctor -v output 👇

❯ flutter doctor -v
[✓] Flutter (Channel stable, 2.2.2, on Linux, locale en_US.UTF-8)
    • Flutter version 2.2.2 at /opt/flutter
    • Framework revision d79295af24 (3 weeks ago), 2021-06-11 08:56:01 -0700
    • Engine revision 91c9fc8fe0
    • Dart version 2.13.3

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at /home/luisalaguna/Android/Sdk
    • Platform android-30, build-tools 30.0.3
    • Java binary at: /opt/android-studio/jre/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.8+0-b944-P17168821)
    • All Android licenses accepted.

[✓] Chrome - develop for the web
    • Chrome at google-chrome

[✓] Android Studio (version 4.2)
    • Android Studio at /opt/android-studio
    • Flutter plugin version 57.0.2
    • Dart plugin version 202.8531
    • Java version OpenJDK Runtime Environment (build 11.0.8+0-b944-P17168821)

[✓] VS Code (version 1.57.1)
    • VS Code at /usr/share/code
    • Flutter extension version 3.23.0

[✓] Connected device (2 available)
    • Xiaomi Redmi Note 7 (mobile) • 192.168.56.101:5555 • android-x86    • Android 10 (API 29)
    • Chrome (web)                 • chrome              • web-javascript • Google Chrome 91.0.4472.114

• No issues found!

Platform

Device (e.g. Android emulator, iOS simulator, Samsung Galaxy S21): ...

OS version (e.g. iOS 14.5, Android 11): ...


Additional context

Add any other context about the problem here.

type Timestamp is not a subtype of type 'int?' in type cast

Hi
while parsing the user data from the Firestore I get this error "type 'Timestamp' is not a subtype of type 'int?' in type cast".
Here's how I am trying to get the user

//get the firestore user from the firestore collection
  Future<types.User> getFirestoreUser() {
    return _db
        .doc('/users/${firebaseUser.value!.uid}')
        .get()
        .then((documentSnapshot) {
      return types.User.fromJson(documentSnapshot.data()!);
    });
  }

Firestore collection
image

I did some digging and found out that here is how you are saving the timestamp
image

so I am not getting the fact that why are you having the int for the timestamp?

where and how to create this file

<script> // Your web app's Firebase configuration var firebaseConfig = { apiKey: "...", authDomain: "[YOUR_PROJECT].firebaseapp.com", projectId: "[YOUR_PROJECT]", storageBucket: "[YOUR_PROJECT].appspot.com", messagingSenderId: "...", appId: "1:...:web:..." }; // Initialize Firebase firebase.initializeApp(firebaseConfig); </script>

My custom auth service

I have a question concerning custom service for auth. Such as, I am want to use my server logic with auth instead of Firebase Auth. I can is it make or not?

I see that this package uses Firebase auth rules, so I want to implement my logic for user auth. And I want that how developers to have a possibility to select between Firebase Auth and them auth logic

Cache first when querying.

Thank you for this great package, would love to first load data from cache then server, this would help in reducing cost on firestore side and good user experience, I thank you in advance.

Documentation regarding Firebase Storage security rules

Great project!! Would it be possible to add documentation regarding the firebase storage security rules - the example shows how to use Firebase Storage rules, but doesn't really provide any details on how to set up permissions.

room.lastMessages is Always null

I am streaming rooms using code below
FirebaseChatCore.instance.rooms(orderByUpdatedAt: true)

However it looks like lastMessages is always null
room.lastMessages

I am 100 percent sure that I have last messages on the rooms collection (Which is updated by cloud function)

Support security rules determined by my own server

Hello 👋

This real-world scenario is related to issue #6, but it's not quite the same question.
In most real-world applications, you want to limit a specific user to be able to create chat with a subset of users.

Let's take Tinder clone as an example.
The users interact with Tinder's server, which determines in turn which users are matched (both swiped right on each other's profiles).
Only a pair of users who are already matched can chat with each other.
Tinder's server determines which users are matched or not.

I'm very unclear as to how I would Implement security rules which depend on my own server (for example, go to my server and get the current "matched with current user" users list).

In the documentation, there's the title "Firebase Chat with custom backend" which seems relevant, but to me, if this question was answered in the documentation, it's not straightforward. Also it says "This wasn't verified on production...", is this a concern?

How to filter users according to metadata

Hello 👋
So I added some information in the metada field. And in the users.dart example i changed the stream from the build to my stream function that filters.
I just noticed that the metadata from the current user and the actual user arent the same. Did i update the information incorrectly ? How could i filter the users according to metadata information

  final User? currentUser = FirebaseAuth.instance.currentUser;

  Stream<List<types.User>> filterUsers() async* {
    var users = FirebaseChatCore.instance.users();
    var filteredUser;
    await for (final doc in users) {
      for (final user in doc) {
        // check if user is different from us
        if (currentUser?.uid != user.id) {
          print(currentUser!.metadata.toString());
        }
      }
    }
  }

What I see in the metadata field is :
image

And how I updated the user's metadata

  void updateUserData() async {
    usersCollection
        .doc(currentUser!.uid.toString())
        .update({'metadata': activities});
  }
}

What I see in my firestore
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.