Giter VIP home page Giter VIP logo

playniteextensions's People

Contributors

darklinkpower avatar jeshibu avatar jhanlon95 avatar sparrowbrain 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

Watchers

 avatar

playniteextensions's Issues

[Games Size Calculator] Failure for non-Steam games

Attempting to download the game size for a game from the Epic library fails with an error.

image

I found this error while trying to download the size for "Homeworld Remastered Collection." I was also able to reliably replicate it with games from other libraries:

  1. Find a non-Steam game missing the installation size.
  2. Check that it is actually on Steam.
  3. If so, open game details and Download Metadata > Games Size Calculator.

Abillity to tag which games in bundle were free

A lot of itch bundles have games that are free, while I like having all of my games from bundles in playnite so I know which games I own if the game is free I would rather be able to decide which ones I want in my library. The ability to add a tag to what games in the bundle are free would be really useful so they could be sorted properly

Specify platform for Launchbox metadata

Is it possible to specify a platform to the Launchbox metadata plugin?
I want to download metadata (in bulk mode) only for a specific platform (ex: Commodore Amiga)

"No Legacy Games games found" - just installed

I just installed this extension but it won't update my Playnite games list with any Legacy games even though I've followed the instructions, logged into the Legacy Games client and installed a game:

image

image

[MobyGames Metadata] (Feature Request) Consider platform when importing game data

Hi,

does the MobyGames Metadata Import extension consider the platform on importing release dates?

Some games have a long list of different release dates, depending on the platform, often there IBM-PC ports got later on it than the original release, but the extension does import the most old date regardless of platform.

Perhaps this should be an toggleable option if it should just get the oldest date or the correct one.

Sample games:
https://www.mobygames.com/game/50/zork-the-great-underground-empire/ (released on the PDP-10 in 1980, but on IBM-PC 1984)
https://www.mobygames.com/game/12111/ultima-i/ (released on Apple II in 1986, IBM-PC 1986 or 1987)
https://www.mobygames.com/game/1823/california-games/ (original release in 1987, IBM-PC release 1988)

Steam Tags Importer: Fails when trying to scrape data in English

Playnite 9.19
Steam Tags Importer 3.2

I had wondered about the plugin running on my one device but not the other. Now I found the setting that causes the problem: when I set 'tag language' to 'English' or 'don't specify', the extension crashes as seen in the screenshot. If I set it to German (my native language), I get the tags.
But I would like to have them in English to avoid confusion of the different sources.

screen

Able to sync the Wishlist?

I keep my wishlisted games within Playnite by using the Completion field to store a "Wishlist" value. It would be really nice to be able to sync the Wishlist to/from RAWG, since your addon syncs other categories, and RAWG offers Wishlist as a categorization. Is this possible?

MobyGames: Implement rate limiting

Currently the plugin doesn't implement rate limiting doesn't have the 360 requests per hour constraint, which results in requests failing after a certain number of searches. After downloading metadata for a lot of games, I noticed that most of them had obtained only partial metadata and when looking at the logs I found this:

...
05-09 16:35:20.283|INFO |MobyGamesMetadata#WebDownloader:Call to https://www.mobygames.com/search/?q=A+Building+Full+of+Cats&page=0&type=game completed in 00:00:00.5197662
05-09 16:35:20.283|INFO |MobyGamesMetadata#WebDownloader:Call to https://www.mobygames.com/search/?q=%2Fg%20A%20Building%20Full%20of%20Cats&type=game completed in 00:00:00.7714210
05-09 16:35:21.951|INFO |MobyGamesMetadata#WebDownloader:Call to https://www.mobygames.com/game/194394/a-building-full-of-cats/ completed in 00:00:00.9782239
05-09 16:35:21.951|INFO |MobyGamesMetadata#WebDownloader:Call to https://www.mobygames.com/game/194394/ completed in 00:00:01.5607065
05-09 16:35:21.953|INFO |MobyGamesMetadata#WebDownloader:Call to https://www.mobygames.com/game/194394 completed in 00:00:01.6636328
05-09 16:35:21.953|DEBUG|MobyGamesMetadata#MobyGamesMetadata:Get games/194394
05-09 16:35:22.139|DEBUG|MobyGamesMetadata#MobyGamesMetadata:Response code 429
05-09 16:35:22.452|INFO |MobyGamesMetadata#WebDownloader:Call to https://www.mobygames.com/search/?q=Grotto&page=0&type=game completed in 00:00:00.1881049
05-09 16:35:22.455|INFO |MobyGamesMetadata#WebDownloader:Call to https://www.mobygames.com/search/?q=%2Fg%20Grotto&type=game completed in 00:00:00.2957155
05-09 16:35:23.397|INFO |MobyGamesMetadata#WebDownloader:Call to https://www.mobygames.com/game/174314/grotto/ completed in 00:00:00.5855795
05-09 16:35:23.397|INFO |MobyGamesMetadata#WebDownloader:Call to https://www.mobygames.com/game/174314/ completed in 00:00:00.7797591
05-09 16:35:23.397|INFO |MobyGamesMetadata#WebDownloader:Call to https://www.mobygames.com/game/174314 completed in 00:00:00.9224531
05-09 16:35:23.397|DEBUG|MobyGamesMetadata#MobyGamesMetadata:Get games/174314
05-09 16:35:23.519|DEBUG|MobyGamesMetadata#MobyGamesMetadata:Response code 429
...

MobyGames indicates the following limits:

Right now, API requests are limited to 360 per hour (one every ten seconds). In addition, requests should be made no more frequently than one per second.

As a suggestion I recommend using this library and using a composed limiter: https://github.com/David-Desmaisons/RateLimiter#composed

An example of a simple implementation in a Playnite metadata plugin is available here: https://github.com/darklinkpower/PlayniteExtensionsCollection/blob/b1c9cfe4a4cbed4aa6581edda058ef7f77b099d3/source/Metadata/MetacriticMetadata/Services/MetacriticService.cs#L23-L57

Update: Created PR with missing API constraint in #42

Steam Tags Importer: Sticky tags

Make it so that imported tags are linked to saved Steam tag data, so that renames can persist, and so that tags can be renamed when switching languages (maybe).

  • Convert tag lists in settings to one that contains Steam tag ID and Playnite tag ID per tag. Maybe reset those just to make it easier?
  • Find a list of every Steam tag somewhere to use?
  • Button in settings to go over every tag and name it according to the now selected language?

[itch.io Bundle Tagger] Option to select bundles to tag

If a user prefers to only tag the bundles they own, they need to keep deleting the unwanted ones in library manager. It would be helpful to be able to disable them in the extension options, perhaps with a checkbox for each bundle.

As the bundles aren't done too often, hopefully this wouldn't be too much time to maintain.

Thanks.

GoG metadata is not working correctly.

Hey Hi. I'm adding only GoG games into Playnite. I notice a lot of games are not found.

Going a little deeper, I see that the games that are not found are games that are not in the GoG store Baldur's Gate: The Original Saga however it was superseded by Baldur's Gate: Enhanced Edition. I'm interested to add "Baldur's Gate: The Original Saga" not the "Enhanced Edition", if you notice from the GoGDB site in the detail tab, you have the cover and the information need it to add it in the library, which use the GoG API, but the add-ons can't find it.

Another problem I notice are games that the product type is "Package" and not "Game" aren't found either, look for instance Fallout or Pillars of Eternity: Definitive Edition

There is a workaround to fix this? beside adding the information manually. thank you

https://www.gogdb.org/moreinfo

Rawg Rating's Bar

Was wondering if it's at all possible to implement Rawg's Rating bar, so that it would show up when a game is selected, allowing us to rate from there or see the ratings (including if the user already rated it)

Legacy Games

Hello!

I have the latest version of the Legacy Games client (1.7.3) and the client won't populate apps in Playnite. I've downloaded a couple. Originally there was no "downloads" section of the user - profile segment of the app.state.json file. Now there is, but it isn't populated. ("No items found" in the title listing pane.)

Once the downloads section was added, Playnite stopped throwing an error, but now it simply won't populate, because there are no records in the file. Any thoughts on this would be greatly appreciated. Thanks!

Update: Oddly, the "downloads" element of the profile section does get removed from the json file from time to time just by clicking around the app, it seems. Refreshing the app seems to restore it, but it won't populate at all.

Launchbox database not working anymore

Since there was an update to the Launchbox database, the add-on doesn't work anymore, throwing a Failed to download metadata: Object reference not set to an instance of an object error when trying to download a game metadata.

Object Reference Not Set To An Instance of an Object

Recently, my Legacy Games library titles are no longer being detected. I tried uninstalling and reinstalling the Legacy launch -and- your plugin, but I keep getting this error when I try to refresh my Legacy library in Playnite:

Failed to get Legacy Games games: Object reference not set to an instance of an object.

I've made sure to install at least one title.

Add settings

  • Set scraper call order (DuplicateHider had a control that could probably do this too)
  • Enable/disable scrapers

RAWG plugin feature question

Is it possible to have the RAWG library/plugin only import game titles that are not already in Playnite library?

Is it also possible for RAWG library to update the data for example the "user score" or "completion status" for pre-existing games from other sources like Steam for example if the game entry exists in Playnite library?

Great job on the plugin/library for it, really enjoying it though if the above is possible would be even better.

Want PS3/PS4 cover for Steam game using Launchbox

I have Alien Isolation in Steam. Instead of Steam cover(without any overlay), I want PS3 or PS4 cover for the game (cover with Playstation 3/Playstation 4 overlay).

For this:

  1. I set Alien Isolation Platform as Playstation 3/Playstation 4
  2. The library remains as Steam
  3. I fetch cover for this game using both Launchbox.

Unfortunately, the cover that I get is Alien Isolation cover without Playstation 3/Playstation 4 overlay.

I checked in Launchbox games db, I can see Alien Isolation have Playstation 3/Playstation 4 cover. Why does Launchbox does not get the Playstation 3/Playstation 4 cover for this game? This does not happen for all games. Certain games Im able to get Playstation 3/Playstation 4 cover, while certain game I cant.

[Game Size Calculator] Incorrect size being returned

Bug Description
Checked Steelrising's size within Playnite and it's being reported as around 15GB, but when checking it within Steam's local files itself it's being reported as 67GB. Spoke to Jeshibu and he asked me to raise it as he was also experiencing the same issue

image

To Reproduce
Get the size for Steelrising, it won't match the size from Steam

Logs
playnite.log
extensions.log

Does RAWG API provide syncing into Collections, and game rankings?

Hey again, I was thinking about what other data might be available via the API from RAWG. Do you know if any of these could be integrate-able?

  1. Collections. You've already integrated syncing FROM collections, is it possible to sync TO them (Playnite into RAWG) as well? This could simply be a right-click menu option. Collections could be refreshed from the addons settings, as it is already offered.

  2. The "# Top YEAR" which shows at the top of a game listing. e.g. "#216 Top 2019" could be synced to Playnite as "2019 #216" which could allow it to be sortable within Playnite views.

Scenarios:

  • Add games from Playnite into a RAWG collection for your own GOTY picks.
  • Sort/filter games within Playnite based on the RAWG game ranking for a specific (or all) year.

Given that Playnite doesn't (yet, I hope in the future) offer custom fields, perhaps it's possible to sync one or all of these into the Categories field, or Tags, or another of the user's choice.

Just thinking out loud here, if these aren't available in the RAWG API then that's a bummer but understandable.

[rawg] Age rating from rawg!

It seems that rawg has a comprehensive database of very obscure itch.io titles, and provides a suggested age rating for them as well.

Most metadata sources omit the age rating, this would cover a big gap!

Thanks

Steam Tags Importer, itch.io Bundle Tagger: Add prefix tag for imported tags - in the future, may include ranked prefixes?

It might be handy to be able to explicitly differentiate which tags have been added from the Steam Store, in the Library Manager as well as while filtering.

A much simpler implementation might also be applied to the itch.io Bundle Tagger.

In the screenshot of the options here, the Hint text about the included/excluded tags could be moved to the bottom, or hidden in a mouseover info symbol as seen in other settings pages - that line could then be occupied by a checkbox and "Add prefix tag to added tags:" and the option to set the text of the prefix - user's choice, whether it be [Steam] or just [!] to filter those to the top of the list.

[See below the shot for my 'future' suggestion]

image


ALSO (this only applies to the Steam Tags Importer, and it may be a bridge too far, so just the above is my major request, but this may be for the future if it's possible)

If there is a way for the plugin to determine the order in which the tags are imported for each game, different prefixes might be applied for each "rank" of tag, with a user-definable range per rank (up to three ranks to keep it from being too chaotic :) )

Possibly - using my example of 10 tags -

  • 1-3 indicating Major ("[StmMajor]")
  • 4-7 indicating Minor ("[StmMinor]")
  • 8-10 indicating Trivial ("[StmTriv]")

If the plugin architecture doesn't allow for this level of detail (if it's internally just a simple list after all the tags are imported), that's totally okay. Just my first section, then :)

[Xbox Metadata] Connection closed

All connections to the https://marketplace.xbox.com/en-us/Search are closed by the remote. The URLs generated still work in a browser. Connections likely need a user-agent set.

15-07 18:18:50.704|INFO |XboxMetadata#WebDownloader:Call to https://www.microsoft.com/msstoreapiprod/api/autosuggest?market=en-us&clientId=00000000-0000-0000-0000-000000000000&sources=Microsoft-Terms,Iris-Products,DCatAll-Products&filter=+ClientType:StoreWeb&counts=5,1,5&query=Halo%204 completed in 00:00:00.0231117
15-07 18:18:52.825|INFO |XboxMetadata#WebDownloader:Call to https://marketplace.xbox.com/en-us/Search?query=Halo%204&DownloadType=Game completed in 00:00:02.1431182
15-07 18:18:55.005|ERROR|XboxMetadata#XboxMetadata:Error fetching Xbox data
System.IO.IOException: Unable to read data from the transport connection: The connection was closed.
   at System.Net.ConnectStream.EndRead(IAsyncResult asyncResult)
   at System.IO.Stream.<>c.<BeginEndReadAsync>b__43_1(Stream stream, IAsyncResult asyncResult)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncTrimPromise`1.Complete(TInstance thisRef, Func`3 endMethod, IAsyncResult asyncResult, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.IO.StreamReader.<ReadBufferAsync>d__97.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.IO.StreamReader.<ReadToEndAsyncInternal>d__62.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at PlayniteExtensions.Common.WebDownloader.<DownloadStringAsync>d__17.MoveNext() in D:\a\PlayniteExtensions\PlayniteExtensions\source\PlayniteExtensions.Common\WebDownloader.cs:line 131
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at PlayniteExtensions.Common.WebDownloader.<DownloadStringAsync>d__16.MoveNext() in D:\a\PlayniteExtensions\PlayniteExtensions\source\PlayniteExtensions.Common\WebDownloader.cs:line 66
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at XboxMetadata.Scrapers.XboxOneScraper.<GetDetailsAsync>d__7.MoveNext() in D:\a\PlayniteExtensions\PlayniteExtensions\source\XboxMetadata\Scrapers\XboxOneScraper.cs:line 25

Can Playnite sync into RAWG?

I can't seem to find any information anywhere of how to sync into RAWG other than the storefronts they offer directly. Do you think this would be possible by any measure?

[Xbox metadata] Does not return anything in search

Hello,

A couple of days ago the xbox metadata plugin does not return anything in the searches. It only sometimes returns Xbox 360 games nothing else.

I am attaching the log, since it performs the search correctly, but on the web it says that it has not found anything.

12-08 16:08:06.702|INFO |XboxMetadata#WebDownloader:Call to https://marketplace.xbox.com/en-US/Search?query=A%20Short%20Hike&DownloadType=Game completed in 00:00:02.5193322 12-08 16:08:14.822|INFO |XboxMetadata#WebDownloader:Call to https://www.microsoft.com/msstoreapiprod/api/autosuggest?market=en-US&sources=xSearch-Products&filter=+ClientType:StoreWeb&counts=20&query=A%20Short%20Hike completed in 00:00:10.6399418 12-08 16:11:22.315|DEBUG|NewsViewer#ProcessStarter:Opening URL: https://steamdb.info/app/1055540/graphs/ 12-08 16:17:11.127|DEBUG|Extras#Extras:Pushed "Vista detallada - A Plague Tale: Innocence" 12-08 16:17:11.629|DEBUG|NewsViewer#Downloader:Downloading string from https://store.steampowered.com/feeds/news/app/752590/l=spanish with method GET 12-08 16:17:11.629|DEBUG|NewsViewer#Downloader:Downloading string from https://api.steampowered.com/ISteamUserStats/GetNumberOfCurrentPlayers/v1/?appid=752590 with method GET 12-08 16:17:12.669|DEBUG|Extras#Extras:Pushed "Vista detallada - A Plague Tale: Requiem" 12-08 16:17:18.153|INFO |XboxMetadata#WebDownloader:Call to https://marketplace.xbox.com/en-US/Search?query=A%20Plague%20Tale%3A%20Requiem&DownloadType=Game completed in 00:00:02.3211963 12-08 16:17:26.472|INFO |XboxMetadata#WebDownloader:Call to https://www.microsoft.com/msstoreapiprod/api/autosuggest?market=en-US&sources=xSearch-Products&filter=+ClientType:StoreWeb&counts=20&query=A%20Plague%20Tale%20Requiem completed in 00:00:10.6403729 12-08 16:17:30.585|DEBUG|Extras#Extras:Pushed "Vista detallada - Age of Empires III: Definitive Edition" 12-08 16:17:33.470|INFO |XboxMetadata#WebDownloader:Call to https://www.microsoft.com/msstoreapiprod/api/autosuggest?market=en-US&sources=xSearch-Products&filter=+ClientType:StoreWeb&counts=20&query=Age%20of%20Empires%20III%20Definitive%20Edition completed in 00:00:00.1767513 12-08 16:17:33.730|INFO |XboxMetadata#WebDownloader:Call to https://marketplace.xbox.com/en-US/Search?query=Age%20of%20Empires%20III%3A%20Definitive%20Edition&DownloadType=Game completed in 00:00:00.4368708 12-08 16:17:41.739|INFO |XboxMetadata#WebDownloader:Call to https://marketplace.xbox.com/en-US/Search?query=Age%20of%20Empires%3A%20Definitive%20Edition&DownloadType=Game completed in 00:00:02.1146105

Import "Community Rating Count" from LaunchBox Database

If Playnite doesn't natively support for such a attribute, can we atleast somehow import this number as a different unused attribute such as "Tag" or "User Score" for example or just anything, so we can sort or filter out the games based on the "Community Rating Count"?

MobyGames: plugin downloading data from the wrong game

After automatic batch metadata download, I noticed that the obtained metadata of some games was incorrect. From using manual metadata download I noticed that even picking the correct game in the game selection dialog downloads the data from another game, for example:

Game: 64.0

image

The selection dialog correctly points to this entry on MobyGames: https://www.mobygames.com/game/86550/640/

image

But upon selecting and metadata downloading it shows that if obtained metadata from the game Carmageddon: Splat Pack: https://www.mobygames.com/game/640/carmageddon-splat-pack/

image

Unable to sync Wishlist from RAWG to Playnite

Ok I have ran some tests from our previous ticket, and am still having an issue with Wishlist items from RAWG importing to Playnite. I've recorded a video demonstrating my steps and the result. Github wont allow direct uploading, so I've uploaded to Imgur:

https://imgur.com/A0h4dXz

Notes: The video shows Honkai as an example game, which I have never added to RAWG prior, nor added to Playnite library. The Playnite filters are all clear except for the Library field being set to RAWG.

[RAWG Library] User platform support

1: Import

  • Read user_game.platforms for games to import

2: Sync

  • Store /api/platforms locally to refer to
  • Use that cached file to look up the platform IDs
  • Put those platform IDs in the PATCH API calls to https://rawg.io/api/users/current/games/[id] in platforms as an int array

3: Metadata?

  • Read user_game.platforms for games' metadata?

[Groupees] not retaining login info

Any time the Playnite client restarts, it will pops up 2 error notifications regarding the Groupees plugin:

"Failed to import games from Groupees.
Delegate to an instance method cannot have null 'this'."

and

"Error fetching Groupees games: User not authenticated"

[LaunchBox] Resize Non-Square Icons

Currently, if an icon from Launchbox isn't perfectly square, it won't line up with other square icons in Details View and the game title will either be pulled left or pushed right.

Would it be possible for the extension to vertically compress too-wide icons and horizontally compress too-tall icons, then align/center the result so the game title stays in line with others?

[Launchbox] Missing boxarts

I'm trying to download box art for my N64 games and SNES games, but only a fraction of the available artworks end up in the search results.
is the "Region" selector borked?
For example, my N64 games only receive Japanese box art.

Game Size Calculation for Non-Installed Titles occasionally stops on random games

While attempting to calculate for non-installed games, the Calculator will sometimes prematurely end on random titles.
Re-attempting to calculate will consistently end in the same manner for the same game.
Logs have no mention of any exception handling or indications of failure.
One example that consistently failed was the steam version of Amnesia: Rebirth.

[LaunchBox] Some Icons aren't Imported

The LaunchBox extension silently fails to import the icons for certain games. I think it has to do with certain characters being in the title, such as '&', since the games that are failing are the Mario & Luigi games, as well as Puzzle & Dragons Z.

Add "None" as an option within Mapping to RAWG settings

I just tested the new version 0.2 feature to Sync to RAWG. It seems to work great! However, I've noticed that if any game(s) have a null value within the Completion field (i.e. blank field), the addon skips that game during sync. Unfortunately, there is no way to know this happened, as the addon doesn't notify the user that any games were skipped after syncing is done (another good idea to implement).

I propose adding an entry in the Mapping to RAWG settings tab, to offer "None" to be mapped to the user's choice. I.e. if the game has nothing set in the field for Completion, it can still be mapped to perhaps "Not Played" within RAWG due to this added feature.

Hopefully you can see the value of this, especially in a library as large as mine (1300+ games) it would be insurmountably tedious to manually review each game's completion status before syncing it to RAWG. Thanks!

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.