5e-bits / 5e-database Goto Github PK
View Code? Open in Web Editor NEWDatabase for the D&D 5th Edition API
Home Page: http://dnd5eapi.co/
License: MIT License
Database for the D&D 5th Edition API
Home Page: http://dnd5eapi.co/
License: MIT License
I'm wondering if it's possible to define multiattacks in a way that's more easily parsed in code. Right now, the only place that specifies all of the possible attacks is the "desc" field of the "Multiattack" action. For example, in trying to figure out which attacks are available to the "Bandit Captain" on their turn, the only information I have is, "The captain makes three melee attacks: two with its scimitar and one with its dagger. Or the captain makes two ranged attacks with its daggers."
This is tricky to parse out programmatically. One option I can think of is to maybe add an explicit list of "action sets", where each set is considered a potential set of actions for each turn, something like:
"action_sets": [
{
"name": "Multiattack",
"actions": [
{
"name": "Scimitar",
"count": 2,
"type": "melee"
},
{
"name": "Dagger",
"count": 1,
"type": "melee"
}
]
},
{
"name": "Multiattack",
"actions": [
{
"name": "Dagger",
"count": 2,
"type": "ranged"
}
]
}
]
I wouldn't mind giving this a shot if we can agree on a format.
@ogregoire @Alex-frazer @benjaminapetersen
I was going to add a Discord Server to coordinate some stuff because things are probably about to go bananas between the two repos and it would nice to talk to y'all about some API related stuff outside of Github Issues. I'll add a link in the README.
The Gnome subraces (Forest Gnome and Rock Gnome) with ID's /subraces/7 and /subraces/8 respectively are missing in the API. Can you fix it, please?
Ancient White Dragon is at monsters/24/. Missing legendary actions should be as follows:
"legendary_actions": [
{
"attack_bonus": 0,
"desc": "The dragon makes a Wisdom (Perception) check.",
"name": "Detect"
},
{
"attack_bonus": 0,
"desc": "The dragon makes a tail attack.",
"name": "Tail Attack"
},
{
"attack_bonus": 0,
"desc": "The dragon beats its wings. Each creature within 15 ft. of the dragon must succeed on a DC 22 Dexterity saving throw or take 15 (2d6 + 8) bludgeoning damage and be knocked prone. The dragon can then fly up to half its flying speed.",
"name": "Wing Attack (Costs 2 Actions)"
}
],
A few monsters are present in the database but should be removed.
So far I could only spot the Ancient Blue Dracolich, but I suspect more are present. I'll check this deeper in the following days.
I believe the Tiefling race has +2 CHA and +1 INT. The ability_bonuses array for the Tiefling shows +2 STR and +1 CON. See the SRD values here https://www.dandwiki.com/wiki/5e_SRD:Tiefling
In the ability score library for acrobatics sub 'name' it shows 'STR' when it should be 'DEX' if I am not mistaken
{"_id":"58f40b8dc9e7ce9f72153252","index":1,"name":"Acrobatics","desc":["Your Dexterity (Acrobatics) check covers your attempt to stay on your feet in a tricky situation, such as when you’re trying to run across a sheet of ice, balance on a tightrope, or stay upright on a rocking ship’s deck. The GM might also call for a Dexterity (Acrobatics) check to see if you can perform acrobatic stunts, including dives, rolls, somersaults, and flips."],"ability_score":{"url":"http://www.dnd5eapi.co/api/ability-scores/1","name":**"STR"**},"url":"http://www.dnd5eapi.co/api/skills/1"}
Howdy!
First of all, great work on this. I'm messing around with a small Clojure project to parse this info and I'm glad somebody has done the hard work for me 👍
Just curious - the following spells have a spell level of -1
- Is this correct?
Regards,
James.
While reviewing a PR I noticed for some of the monsters we show damage dice and damage bonus but we don't differentiate between what kinds of damage each roll is. It might not be a bad idea to determine a better way to convey damage. I'll probably think on this some when I have some time but I'll happily review a PR if anyone wants to take a crack at it.
The traits database is invalid, contains the subraces databse
This will probably have to wait until after the repos are transferred. But it would nice to have some CD for DB changes. I'll most likely use BK to set it up. I'll also put in a test that just verifies all the files are valid JSON before we try to upload.
There are two missing subraces in "/races/1" (Elf) result: Wooden Elf and Drow
I believe Travis-CI will run for free against a github repo. As long as PRs are used rather than direct merge to master, a simple test script could be written to read the JSON files, and validate the items.
For example, load the monsters-SRD.json
, loop all the names
and verify a hard-coded list of names
. If anyone adds additional, tests fail.
The Gnome subraces (Forest Gnome and Rock Gnome) with links http://www.dnd5eapi.co/api/subraces/7 and http://www.dnd5eapi.co/api/subraces/8 respectively, return "null".
The Elf subraces Wood Elf and Dark Elf (Drow) with links http://www.dnd5eapi.co/api/subraces/5 and http://www.dnd5eapi.co/api/subraces/6 respectively, are not listed under subraces
property of Elf race (http://www.dnd5eapi.co/api/races/2).
Please fix.
I might just need to php code help, but I have a website that uses this API for the data. When searching through the equipment, my results always return invalid when I search for any equipment packs, ie Explorer's pack (equipment/155 - 160).
I also can only however search for items like Alchemist's supplies (equipment/161-177) if I copy and paste it directly from the overall list.
The apostrophe doesn't match what the keyboard inputs.
{"name":"Scholar's Pack","url":"http://www.dnd5eapi.co/api/equipment/160"},{"name":"Alchemist’s supplies","url":"http://www.dnd5eapi.co/api/equipment/161"}
This could be better written using the choice
structure as well as showing the recharge rate.
{
"name": "Breath Weapons (Recharge 5-6)",
"desc": "The dragon uses one of the following breath weapons.\nFire Breath. The dragon exhales fire in an 20-foot line that is 5 feet wide. Each creature in that line must make a DC 11 Dexterity saving throw, taking 14 (4d6) fire damage on a failed save, or half as much damage on a successful one.\nSleep Breath. The dragon exhales sleep gas in a 15-foot cone. Each creature in that area must succeed on a DC 11 Constitution saving throw or fall unconscious for 1 minute. This effect ends for a creature if the creature takes damage or someone uses an action to wake it.",
"attacks": [
{
"name": "Fire Breath",
"dc": {
"dc_type": {
"name": "DEX",
"url": "http://www.dnd5eapi.co/api/ability-scores/2"
},
"dc_value": 11,
"success_type": "half"
},
"damage": [
{
"damage_type": {
"name": "Fire",
"url": "http://www.dnd5eapi.co/api/damage-types/4"
},
"damage_dice": "4d6",
"damage_bonus": 0
}
]
},
{
"name": "Sleep Breath",
"dc": {
"dc_type": {
"name": "CON",
"url": "http://www.dnd5eapi.co/api/ability-scores/3"
},
"dc_value": 11,
"success_type": "none"
}
}
]
}
Check out "starting proficiencies" -- there's an extra colon at the end of the quoted text that needs to be removed:
{ "_id":"5a52bbf7559f00418e532cf8", "index":1, "name":"Hill Dwarf", "race":{ "url":"http://www.dnd5eapi.co/api/races/1", "name":"Dwarf"}, "desc":"As a hill dwarf, you have keen senses, deep intuition, and remarkable resilience.", "ability_bonuses":[0,0,0,0,1,0], "starting_proficiencies:":[], "languages":[], "racial_traits":[ { "name":"Dwarven Toughness", "url":"http://www.dnd5eapi.co/api/traits/4" }], "url":"http://www.dnd5eapi.co/api/subraces/1" }
Add into the races:
Dragonborn
Gnome
Half-Elf
Half-Orc
Tiefling
Info can be found on:
http://www.5esrd.com/
https://www.5thsrd.org/
It seems that this commit removed the correct ranges for ranged weapons and replaced them all with melee stats.
e05a873#diff-3020366f2048c53f42ed3e0dc6549dbaL280
This seems like it had to be a conscious decision. Was it?
For all equipment that is in the"Weapon" equipment category, there's an extra colon at the end of the "weapon_category" key. Should be weapon_category: {...category}
Sample data fetched from http://www.dnd5eapi.co/api/equipment/3
{ _id: "5bce91275b7768e792017db1", index: 3, name: "Greatclub", equipment_category: "Weapon", **weapon_category:: "Simple",** // Should be weapon_category: "Simple" weapon_range: "Melee", ... }
Hi
Just been helping a friend debug some encoding issue with the API. Namely, the example we were on was for https://github.com/adrpadua/5e-database/blob/master/5e-SRD-Spells.json#L18.
Seems Windows-1252 has been stored as UTF-8 or vice versa (not quite sure which way around it is).
Solution for us was to do the following.
import requests
res = requests.get('http://www.dnd5eapi.co/api/spells/1')
data = res.json()
print(data['material'])
>>> 'Powdered rhubarb leaf and an adder’s stomach.'
data['material'] = data['material'].encode('windows-1252').decode('utf-8')
print(data['material'])
>>> 'Powdered rhubarb leaf and an adder’s stomach.'
The HTTP response headers are being sent in UTF-8 format, which is why I reckon this is being sent wrong, rather than being corrected by the library when it detects the encoding.
Hope this is of help.
There is a lot of other data for monster, classes, races, etc. for dnd.
Are you planning on adding this data to database?
Would it be ok if I submitted pull requests for new data added?
-------I know it won't work with the API, but at least it can be in the database
I was able to connect to the database that drives - http://www.dnd5eapi.co/
I dropped classes and the API no longer returned classes, I restored the collection.
Aboleth is missing Charisma Score ("charisma":18)
"strength":21,"dexterity":9,"constitution":15,"intelligence":18,"wisdom":15,"constitution_save":6,"intelligence_save":8,"wisdom_save":6
Camel travels on "ground" speed
"speed":{"quantity":50,"unit":"ft/round"}
Mounts and Vehicles duplicated
Equpiment 201- 225 == 226 - 250
http://www.dnd5eapi.co/api/equipment/201 == http://www.dnd5eapi.co/api/equipment/226
We can probably link these without much issue.
"condition_immunities": [
{
"condition_type": "prone",
"condition_url": "http://www.dnd5eapi.co/api/conditions/11"
}
]
Instead of strings with newline characters, turn them into lists of strings.
The Chain Devil's CR is listed in the json as 11, but in the actual SRD, it's 8.
"special_abilities": [{
"name": "Spellcasting",
"desc": "The acolyte is a 1st-level spellcaster. Its spellcasting ability is Wisdom (spell save DC 12, +4 to hit with spell attacks). The acolyte has following cleric spells prepared:\n\n• Cantrips (at will): light, sacred flame, thaumaturgy\n• 1st level (3 slots): bless, cure wounds, sanctuary",
"attack_bonus": 0
}]
would read something like
"special_abilities": [
{
"name": "Spellcasting",
"desc": {
"spellcasting_level":1,
"spellcasting_ability":"wisdom",
"spellcasting_dc":12,
"spellcasting_attack_modifier":4,
"spellcasting_school":"cleric",
"spells":{
"cantrips": [ "light", "sacred flame", "thaumaturgy" ],
"1st":[ "bless", "cure wounds", "sanctuary" ]
},
"spell_slots":{
"1st":3
}
}
}
]
I'd love input/thoughts on structure, key names, etc above.
This would probably be an all or nothing script as it would need to reindex associations as well.
Alternatively, we could set ids to not be sequential numbers. Instead have them be something random. Something akin to a UUID comes to mind. This would avoid needing to reindex ever again. But there needs to be a standard way to generate a new id.
@ogregoire @Alex-frazer Thoughts?
Hi!
Just found your 5e API and Database. Great piece of work! And also it is great to hear you have it opened to the world. But this repo cannot be legally forked/copied/reused unless you include license file in it.
Can you include such file? GitHub provides pre-generated files to help out.
If I reuse or share this lib, I would like to know how should I refer to you properly :)
Yesterday I wanted to clean up the language file, which I did. But I noticed that in the SRD, a big line strikes through the script column of the "deep speech" language. This basically means that there is no script.
However the file https://github.com/adrpadua/5e-database/blob/master/5e-SRD-Languages.json currently contains the actual value "none". There is no indicator that there is no script: the script currently has the value "none". In my view, this is incorrect.
There are usually two alternatives to this:
null
. This way all the fields are set, but the actual value is set to null, and not "none". I personally like it less than the first alternative, but it keeps the consistency with the other files and reduce the work to provide.So in short, we have three options:
Keep as is, having the field set to a dummy value
{
"index": 12,
"name": "Deep Speech",
"type": "Exotic",
"typical_speakers": ["Aboleths", "Cloakers"],
"script": "none",
"url": "http://www.dnd5eapi.co/api/languages/12"
}
Remove the field, opening the door to inconsistency.
{
"index": 12,
"name": "Deep Speech",
"type": "Exotic",
"typical_speakers": ["Aboleths", "Cloakers"],
"url": "http://www.dnd5eapi.co/api/languages/12"
}
Change "none"
to null
so that the key is present, but the value effectively shows that there is no value.
{
"index": 12,
"name": "Deep Speech",
"type": "Exotic",
"typical_speakers": ["Aboleths", "Cloakers"],
"script": null,
"url": "http://www.dnd5eapi.co/api/languages/12"
}
In the future, it might be good to tend towards 2 for everything, but it might require too much work at once. So I strongly suggest that null
is accepted for the time being.
see commit 8dacafd
Trying to keep things above board, there is some data in the database that does not follow OGL/SRD standards for D&D 5e. I've only found one example but there might be others as well.
Example: https://github.com/adrpadua/5e-database/blob/master/5e-SRD-Subraces.json#L227-L261
Reference: https://media.wizards.com/2016/downloads/SRD-OGL_V1.1.pdf
I saw this other SRD repo has a json list of magic items included in the SRD.
Has there been any investigation to adding these to 5e-database?
This id is inconsistent (returns null). Took from http://www.dnd5eapi.co/api/races/5
{
url: "http://www.dnd5eapi.co/api/traits/36",
name: "Damage Resistance (Dragonborn)"
}
EDIT: After a further lookup it seems to be this url: http://www.dnd5eapi.co/api/traits/18
The files currently contain a mixture of ASCII and Unicode punctuation. For example, in 5e-SRD-Spells.json
the usages can’t
and can't
both appear. The escaped string \"Attack that creature,\"
appears in Dominate Beast, but the Unicode double quotation marks are used with “Attack that creature,”
in Dominate Monster.
The Unicode punctuation probably came from copying and pasting from the SRD PDF which was produced in Word from WOTC, whereas the ASCII versions have come from manual edits.
I'd like to propose a PR that would standardize the use of Unicode in the project as follows:
Replace all Unicode single right quotation marks with ASCII apostrophe
e.g. doesn’t
becomes doesn't
The reasoning for changing these is that the ASCII apostrophe is the standard for typing English words, and the visual difference is small. Also, JetBrains IDEs do not recognize the Unicode apostrophe, making simple words like aren’t
fail spell checking.
Use Unicode left and right double quotation marks for all embedded quotes
e.g. \"Attack\"
becomes “Attack”
The reasoning for changing this is that the Unicode marks are already prevalent from the official SRD, and they are not required to be escaped in JSON. There is a significant visual difference between the two, and as D&D is a largely text-based game, it gives a more booklike appearance to the output.
The downside is that most keyboards do not include the Unicode version, but I think the visual tradeoff is worth it.
In 5e-SRD-Classes.json the Monk's skill proficiencies have the wrong name (e.g. Stealth
instead of Skill: Stealth
)
Correct names should be "Skill: X", as seen here.
For the Half-Elf, on page 6, the SRD states:
Ability Score Increase.
Your Charisma score increases by 2, and two other ability scores of your choice increase by 1.
The part about "two other ability scores of your choice increase by 1" isn't present in the database.
In looking through some of the recently closed issues, the database files have been updated, but when accesses the jsons through the urls, the changes are not reflected.
#32 still missing Legendary Actions from http://www.dnd5eapi.co/api/monsters/24
#48 is still incorrect in all equipment.
#11 is still missing Charisma score. http://www.dnd5eapi.co/api/monsters/1
This would allow this database to more easily be used with other projects and not be tied directly to the API.
We use this database for lookup functions programmed into our d&d 5e discord bot, which can be found here: https://github.com/RubenJ01/rewrite. We have also pushed a fair amount of updates to the database with several corrections. We were wondering if we could set up a webhook with this repository so we can see when something changes on our discord server. Thanks in advance!
Classes, Features, Spells, StartingEquipment and Test all have URL's missing the www prefix.
Hey all, just found this lovely project and want to contribute! Is there a process for making a user, pass for myself or are we all on one super admin user? If so can you point me to where those creds are stored? Thanks!
I was trying to request a few traits through the api, but noticed they were subraces instead.
Hey, love this repo!
I play DnD in Ukraine, and we use Russian as our primary language for the parties, so I would love to have this API available in different languages.
Maybe creating folders like en
, ru
and just storing the different json
files there would be a good option?
I am ready to contribute, just don't want to deploy my own API :)
5e-SRD-Races.json
Some of the Racial Traits for the different races have the incorrect url associated with the name in the Traits section.
EX:
Elf Traits
traits": [ { "url": "http://www.dnd5eapi.co/api/traits/5", "name": "Darkvision (Elf)"
Darkvision is http://www.dnd5eapi.co/api/traits/1
Here is what currently present for the Starting equipment of a Ranger.
{ "index": 8, "class": { "url": "http://www.dnd5eapi.co/api/classes/8", "name": "Ranger" }, "starting_equipment": [{ "item": { "url": "http://www.dnd5eapi.co/api/equipment/36", "name": "Longbow"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/54", "name": "Arrow"}, "quantity": 20}], "choices_to_make": 3, "choice_1": [{ "choose": 1, "type": "equipment", "from": [{ "item": { "url": "http://www.dnd5eapi.co/api/equipment/43", "name": "Scale Mail"}, "quantity": 1}] }, { "choose": 1, "type": "equipment", "from": [{ "item": { "url": "http://www.dnd5eapi.co/api/equipment/28", "name": "Shortsword"}, "quantity": 1}] }], "choice_2": [{ "choose": 1, "type": "equipment", "from": [{ "item": { "url": "http://www.dnd5eapi.co/api/equipment/156", "name": "Dungeoneer's Pack"}, "quantity": 2}] }, { "choose": 2, "type": "equipment", "from": [{ "item": { "url": "http://www.dnd5eapi.co/api/equipment/1", "name": "Club"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/2", "name": "Dagger"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/3", "name": "Greatclub"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/4", "name": "Handaxe"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/5", "name": "Javelin"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/6", "name": "Light hammer"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/7", "name": "Mace"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/8", "name": "Quarterstaff"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/9", "name": "Sickle"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/10", "name": "Spear"}, "quantity": 1}] }], "choice_3": [{ "choose": 1, "type": "equipment", "from": [{ "item": { "url": "http://www.dnd5eapi.co/api/equipment/156", "name": "Dungeoneer's Pack"}, "quantity": 1}] }, { "choose": 1, "type": "equipment", "from": [{ "item": { "url": "http://www.dnd5eapi.co/api/equipment/158", "name": "Explorer's Pack"}, "quantity": 1}] }], "url": "http://www.dnd5eapi.co/api/startingequipment/8" }
This doesn't match the official PHB, or make sense between the choices.
It should really be:
{ "index": 8, "class": { "url": "http://www.dnd5eapi.co/api/classes/8", "name": "Ranger" }, "starting_equipment": [{ "item": { "url": "http://www.dnd5eapi.co/api/equipment/36", "name": "Longbow"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/54", "name": "Arrow"}, "quantity": 20}], "choices_to_make": 3, "choice_1": [{ "choose": 1, "type": "equipment", "from": [{ "item": { "url": "http://www.dnd5eapi.co/api/equipment/43", "name": "Scale Mail"}, "quantity": 1}] }, { "choose": 1, "type": "equipment", "from": [{ "item": { "url": "http://www.dnd5eapi.co/api/equipment/39", "name": "Leather Armor"}, "quantity": 1}] }], "choice_2": [{ "choose": 1, "type": "equipment", "from": [{ "item": { "url": "http://www.dnd5eapi.co/api/equipment/28", "name": "Shortsword"}, "quantity": 2}] }, { "choose": 2, "type": "equipment", "from": [{ "item": { "url": "http://www.dnd5eapi.co/api/equipment/1", "name": "Club"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/2", "name": "Dagger"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/3", "name": "Greatclub"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/4", "name": "Handaxe"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/5", "name": "Javelin"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/6", "name": "Light hammer"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/7", "name": "Mace"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/8", "name": "Quarterstaff"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/9", "name": "Sickle"}, "quantity": 1}, { "item": { "url": "http://www.dnd5eapi.co/api/equipment/10", "name": "Spear"}, "quantity": 1}] }], "choice_3": [{ "choose": 1, "type": "equipment", "from": [{ "item": { "url": "http://www.dnd5eapi.co/api/equipment/156", "name": "Dungeoneer's Pack"}, "quantity": 1}] }, { "choose": 1, "type": "equipment", "from": [{ "item": { "url": "http://www.dnd5eapi.co/api/equipment/158", "name": "Explorer's Pack"}, "quantity": 1}] }], "url": "http://www.dnd5eapi.co/api/startingequipment/8" }
The subclass of Druid called the Circle of the Moon
is missing
Howdy - first of all, THANK YOU for putting the work into this project - currently need to fetch/parse the data on a project I started in order to learn React/Redux and this is super convenient!
Issue: The url
property values for some of the Classes resources do not seem to be valid endpoints. I have not confirmed for all endpoints but at least whats needed in my case, none of the url
values in class_levels
for a Character Class are valid.
For instance, say I retrieved the data for a "Fighter" class using http://www.dnd5eapi.co/api/classes/fighter
(Side note: http://www.dnd5eapi.co/api/classes/Fighter is also not valid), the relevant part of the returned data is:
{ ... "class_levels": { "url": "http://www.dnd5eapi.co/api/classes/Fighter/levels", "class": "Fighter" }, ... }
If I make a request to the resource at http://www.dnd5eapi.co/api/classes/Fighter/levels
from the fetched class_levels
data to get the next batch, nothing is returned.
However, if I request http://www.dnd5eapi.co/api/classes/fighter/levels
(Notice the lowercased path), data is successfully retrieved. So it seems that since the parent class path has to be be consistent within the resource url in order to work.
Since I am using retrieved data to make the next request, the workaround I am currently using is passing the url to a utility function to ensure lower case.
This is one of several issues that should be opened to incorporate expanded offerings from XGE.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.