GithubHelp home page GithubHelp logo

flaresolverr / flaresolverrsharp Goto Github PK

View Code? Open in Web Editor NEW
167.0 167.0 32.0 69 KB

FlareSolverr .Net / Proxy server to bypass Cloudflare protection

License: MIT License

C# 100.00%
api chrome chromium cloudflare csharp netcore proxy puppeteer

flaresolverrsharp's Introduction

FlareSolverr

Latest release Docker Pulls GitHub issues GitHub pull requests Donate PayPal Donate Bitcoin Donate Ethereum

FlareSolverr is a proxy server to bypass Cloudflare and DDoS-GUARD protection.

How it works

FlareSolverr starts a proxy server, and it waits for user requests in an idle state using few resources. When some request arrives, it uses Selenium with the undetected-chromedriver to create a web browser (Chrome). It opens the URL with user parameters and waits until the Cloudflare challenge is solved (or timeout). The HTML code and the cookies are sent back to the user, and those cookies can be used to bypass Cloudflare using other HTTP clients.

NOTE: Web browsers consume a lot of memory. If you are running FlareSolverr on a machine with few RAM, do not make many requests at once. With each request a new browser is launched.

It is also possible to use a permanent session. However, if you use sessions, you should make sure to close them as soon as you are done using them.

Installation

Docker

It is recommended to install using a Docker container because the project depends on an external browser that is already included within the image.

Docker images are available in:

Supported architectures are:

Architecture Tag
x86 linux/386
x86-64 linux/amd64
ARM32 linux/arm/v7
ARM64 linux/arm64

We provide a docker-compose.yml configuration file. Clone this repository and execute docker-compose up -d (Compose V1) or docker compose up -d (Compose V2) to start the container.

If you prefer the docker cli execute the following command.

docker run -d \
  --name=flaresolverr \
  -p 8191:8191 \
  -e LOG_LEVEL=info \
  --restart unless-stopped \
  ghcr.io/flaresolverr/flaresolverr:latest

If your host OS is Debian, make sure libseccomp2 version is 2.5.x. You can check the version with sudo apt-cache policy libseccomp2 and update the package with sudo apt install libseccomp2=2.5.1-1~bpo10+1 or sudo apt install libseccomp2=2.5.1-1+deb11u1. Remember to restart the Docker daemon and the container after the update.

Precompiled binaries

Warning Precompiled binaries are only available for x64 architecture. For other architectures see Docker images.

This is the recommended way for Windows users.

  • Download the FlareSolverr executable from the release's page. It is available for Windows x64 and Linux x64.
  • Execute FlareSolverr binary. In the environment variables section you can find how to change the configuration.

From source code

Warning Installing from source code only works for x64 architecture. For other architectures see Docker images.

  • Install Python 3.11.
  • Install Chrome (all OS) or Chromium (just Linux, it doesn't work in Windows) web browser.
  • (Only in Linux) Install Xvfb package.
  • (Only in macOS) Install XQuartz package.
  • Clone this repository and open a shell in that path.
  • Run pip install -r requirements.txt command to install FlareSolverr dependencies.
  • Run python src/flaresolverr.py command to start FlareSolverr.

From source code (FreeBSD/TrueNAS CORE)

  • Run pkg install chromium python39 py39-pip xorg-vfbserver command to install the required dependencies.
  • Clone this repository and open a shell in that path.
  • Run python3.9 -m pip install -r requirements.txt command to install FlareSolverr dependencies.
  • Run python3.9 src/flaresolverr.py command to start FlareSolverr.

Systemd service

We provide an example Systemd unit file flaresolverr.service as reference. You have to modify the file to suit your needs: paths, user and environment variables.

Usage

Example Bash request:

curl -L -X POST 'http://localhost:8191/v1' \
-H 'Content-Type: application/json' \
--data-raw '{
  "cmd": "request.get",
  "url": "http://www.google.com/",
  "maxTimeout": 60000
}'

Example Python request:

import requests

url = "http://localhost:8191/v1"
headers = {"Content-Type": "application/json"}
data = {
    "cmd": "request.get",
    "url": "http://www.google.com/",
    "maxTimeout": 60000
}
response = requests.post(url, headers=headers, json=data)
print(response.text)

Example PowerShell request:

$body = @{
    cmd = "request.get"
    url = "http://www.google.com/"
    maxTimeout = 60000
} | ConvertTo-Json

irm -UseBasicParsing 'http://localhost:8191/v1' -Headers @{"Content-Type"="application/json"} -Method Post -Body $body

Commands

+ sessions.create

This will launch a new browser instance which will retain cookies until you destroy it with sessions.destroy. This comes in handy, so you don't have to keep solving challenges over and over and you won't need to keep sending cookies for the browser to use.

This also speeds up the requests since it won't have to launch a new browser instance for every request.

Parameter Notes
session Optional. The session ID that you want to be assigned to the instance. If isn't set a random UUID will be assigned.
proxy Optional, default disabled. Eg: "proxy": {"url": "http://127.0.0.1:8888"}. You must include the proxy schema in the URL: http://, socks4:// or socks5://. Authorization (username/password) is supported. Eg: "proxy": {"url": "http://127.0.0.1:8888", "username": "testuser", "password": "testpass"}

+ sessions.list

Returns a list of all the active sessions. More for debugging if you are curious to see how many sessions are running. You should always make sure to properly close each session when you are done using them as too many may slow your computer down.

Example response:

{
  "sessions": [
    "session_id_1",
    "session_id_2",
    "session_id_3..."
  ]
}

+ sessions.destroy

This will properly shutdown a browser instance and remove all files associated with it to free up resources for a new session. When you no longer need to use a session you should make sure to close it.

Parameter Notes
session The session ID that you want to be destroyed.

+ request.get

Parameter Notes
url Mandatory
session Optional. Will send the request from and existing browser instance. If one is not sent it will create a temporary instance that will be destroyed immediately after the request is completed.
session_ttl_minutes Optional. FlareSolverr will automatically rotate expired sessions based on the TTL provided in minutes.
maxTimeout Optional, default value 60000. Max timeout to solve the challenge in milliseconds.
cookies Optional. Will be used by the headless browser. Eg: "cookies": [{"name": "cookie1", "value": "value1"}, {"name": "cookie2", "value": "value2"}].
returnOnlyCookies Optional, default false. Only returns the cookies. Response data, headers and other parts of the response are removed.
proxy Optional, default disabled. Eg: "proxy": {"url": "http://127.0.0.1:8888"}. You must include the proxy schema in the URL: http://, socks4:// or socks5://. Authorization (username/password) is not supported. (When the session parameter is set, the proxy is ignored; a session specific proxy can be set in sessions.create.)

Warning If you want to use Cloudflare clearance cookie in your scripts, make sure you use the FlareSolverr User-Agent too. If they don't match you will see the challenge.

Example response from running the curl above:

{
    "solution": {
        "url": "https://www.google.com/?gws_rd=ssl",
        "status": 200,
        "headers": {
            "status": "200",
            "date": "Thu, 16 Jul 2020 04:15:49 GMT",
            "expires": "-1",
            "cache-control": "private, max-age=0",
            "content-type": "text/html; charset=UTF-8",
            "strict-transport-security": "max-age=31536000",
            "p3p": "CP=\"This is not a P3P policy! See g.co/p3phelp for more info.\"",
            "content-encoding": "br",
            "server": "gws",
            "content-length": "61587",
            "x-xss-protection": "0",
            "x-frame-options": "SAMEORIGIN",
            "set-cookie": "1P_JAR=2020-07-16-04; expires=Sat..."
        },
        "response":"<!DOCTYPE html>...",
        "cookies": [
            {
                "name": "NID",
                "value": "204=QE3Ocq15XalczqjuDy52HeseG3zAZuJzID3R57...",
                "domain": ".google.com",
                "path": "/",
                "expires": 1610684149.307722,
                "size": 178,
                "httpOnly": true,
                "secure": true,
                "session": false,
                "sameSite": "None"
            },
            {
                "name": "1P_JAR",
                "value": "2020-07-16-04",
                "domain": ".google.com",
                "path": "/",
                "expires": 1597464949.307626,
                "size": 19,
                "httpOnly": false,
                "secure": true,
                "session": false,
                "sameSite": "None"
            }
        ],
        "userAgent": "Windows NT 10.0; Win64; x64) AppleWebKit/5..."
    },
    "status": "ok",
    "message": "",
    "startTimestamp": 1594872947467,
    "endTimestamp": 1594872949617,
    "version": "1.0.0"
}

+ request.post

This is the same as request.get but it takes one more param:

Parameter Notes
postData Must be a string with application/x-www-form-urlencoded. Eg: a=b&c=d

Environment variables

Name Default Notes
LOG_LEVEL info Verbosity of the logging. Use LOG_LEVEL=debug for more information.
LOG_HTML false Only for debugging. If true all HTML that passes through the proxy will be logged to the console in debug level.
CAPTCHA_SOLVER none Captcha solving method. It is used when a captcha is encountered. See the Captcha Solvers section.
TZ UTC Timezone used in the logs and the web browser. Example: TZ=Europe/London.
LANG none Language used in the web browser. Example: LANG=en_GB.
HEADLESS true Only for debugging. To run the web browser in headless mode or visible.
BROWSER_TIMEOUT 40000 If you are experiencing errors/timeouts because your system is slow, you can try to increase this value. Remember to increase the maxTimeout parameter too.
TEST_URL https://www.google.com FlareSolverr makes a request on start to make sure the web browser is working. You can change that URL if it is blocked in your country.
PORT 8191 Listening port. You don't need to change this if you are running on Docker.
HOST 0.0.0.0 Listening interface. You don't need to change this if you are running on Docker.
PROMETHEUS_ENABLED false Enable Prometheus exporter. See the Prometheus section below.
PROMETHEUS_PORT 8192 Listening port for Prometheus exporter. See the Prometheus section below.

Environment variables are set differently depending on the operating system. Some examples:

  • Docker: Take a look at the Docker section in this document. Environment variables can be set in the docker-compose.yml file or in the Docker CLI command.
  • Linux: Run export LOG_LEVEL=debug and then run flaresolverr in the same shell.
  • Windows: Open cmd.exe, run set LOG_LEVEL=debug and then run flaresolverr.exe in the same shell.

Prometheus exporter

The Prometheus exporter for FlareSolverr is disabled by default. It can be enabled with the environment variable PROMETHEUS_ENABLED. If you are using Docker make sure you expose the PROMETHEUS_PORT.

Example metrics:

# HELP flaresolverr_request_total Total requests with result
# TYPE flaresolverr_request_total counter
flaresolverr_request_total{domain="nowsecure.nl",result="solved"} 1.0
# HELP flaresolverr_request_created Total requests with result
# TYPE flaresolverr_request_created gauge
flaresolverr_request_created{domain="nowsecure.nl",result="solved"} 1.690141657157109e+09
# HELP flaresolverr_request_duration Request duration in seconds
# TYPE flaresolverr_request_duration histogram
flaresolverr_request_duration_bucket{domain="nowsecure.nl",le="0.0"} 0.0
flaresolverr_request_duration_bucket{domain="nowsecure.nl",le="10.0"} 1.0
flaresolverr_request_duration_bucket{domain="nowsecure.nl",le="25.0"} 1.0
flaresolverr_request_duration_bucket{domain="nowsecure.nl",le="50.0"} 1.0
flaresolverr_request_duration_bucket{domain="nowsecure.nl",le="+Inf"} 1.0
flaresolverr_request_duration_count{domain="nowsecure.nl"} 1.0
flaresolverr_request_duration_sum{domain="nowsecure.nl"} 5.858
# HELP flaresolverr_request_duration_created Request duration in seconds
# TYPE flaresolverr_request_duration_created gauge
flaresolverr_request_duration_created{domain="nowsecure.nl"} 1.6901416571570296e+09

Captcha Solvers

Warning At this time none of the captcha solvers work. You can check the status in the open issues. Any help is welcome.

Sometimes CloudFlare not only gives mathematical computations and browser tests, sometimes they also require the user to solve a captcha. If this is the case, FlareSolverr will return the error Captcha detected but no automatic solver is configured.

FlareSolverr can be customized to solve the CAPTCHA automatically by setting the environment variable CAPTCHA_SOLVER to the file name of one of the adapters inside the /captcha directory.

Related projects

flaresolverrsharp's People

Contributors

abeloin avatar fface32 avatar highfredo avatar ilike2burnthing avatar ivanjx avatar mistermcduck avatar mynameisbogdan avatar ngosang 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  avatar  avatar

flaresolverrsharp's Issues

Help needed: Correct way to use FlareSolverrSharp with .net 6/7 dependency injection

Hi,

I'm currently trying to use FlareSolverrSharp in one of my applications. Microsoft recommends to use a IHttpClientFactory for dependency injection. This library doesn't seem compatible with that. I always get this error:
System.InvalidOperationException: The 'InnerHandler' property must be null. 'DelegatingHandler' instances provided to 'HttpMessageHandlerBuilder' must not be reused or cached. Handler: 'FlareSolverrSharp.ClearanceHandler'

Is it possible to use it like I'm currently trying to do?

ddos-guard for purr-hollands, MuziekFabriek and Film-Paleis no longer being detected

The other ddos-guard for EbookParadijs is still being detected but Puur-Hollands, MuziekFabriek and Film-Paleis no longer works

Error on 20220311170740 for Puur-Hollands.txtJackett.Common.ExceptionWithConfigData: Login failed: No form found on https://www.puur-hollands.org/login.php using form selector form[action="takelogin.php"]
   at Jackett.Common.Indexers.CardigannIndexer.DoLogin() in D:\a\1\s\src\Jackett.Common\Indexers\CardigannIndexer.cs:line 577
   at Jackett.Common.Indexers.CardigannIndexer.PerformQuery(TorznabQuery query) in D:\a\1\s\src\Jackett.Common\Indexers\CardigannIndexer.cs:line 1504




 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DDoS protection | Puur-Hollands.org</title>
<style type="text/css">
    .main_t {height: 100%; width: 100%; border: 0px solid black;}
    .main_t td {text-align: center;}
    .main_t td.info {height: 100%; text-align: center; vertical-align: top; padding-top: 5em;}
	
    .sign { color: #ccc; margin-top: 5em;}
    .sign a { color: #ccc; }
</style>
<script>
function get_current_url() {
    document.write(window.location.href);
    return null;
}
</script>
</head>
<body>
    <table class="main_t">
        <tr>
            <td class="info">
                <h1>DDoS protection actief voor ip <a href="/blacklists/2407:7000:9bc1:4100:f17c:ed10:6b08:f37c" target="_new">2407:7000:9bc1:4100:f17c:ed10:6b08:f37c</a></h1>
                <p>Duurt het laden erg lang, klik op de link om door te gaan.</p>
                <a href=''><script>get_current_url();</script></a>


                <p>U word automatisch doorgestuurd na de juiste pagina over 3 seconds.</p>
                <div id="js_info">
                    <p>Zorg dat u Cookies en JavaScript heeft ingeschakeld, anders kunt u niet aanmelden.</p>
                </div>
            </td>
        </tr>
        <tr>
            <td class="sign"><span style="color: #49C73B;">
                   DDoS protection by </span><span style="color: #49C73B;">Puur-Hollands</span><span style="color: #349EBF;">.org</span><br />

        <noscript>Please enable Javascript to see the requested page.</noscript>
            </td>
        </tr>
    </table>
    <script type="text/javascript">
        document.getElementById('js_info').style.display = 'none';
        var date = new Date();

        days = '180';
        date.setTime(date.getTime() + (days * 24*60*60*1000));

        document.cookie = 'ct_anti_ddos_key' + "=" + escape('db56d634f6beab33862a96fb9cf53f84') + "; expires = " + date.toGMTString() + "; path=/";
        setTimeout(function(){
           window.location.reload(1);
        }, 3000);
    </script>
</body>
</html>

no idea why.
[edit] 3rd edit. as time goes by the other sites are also switching to the newly changed ddos-guard and jackett's flaresolverr is failing to handle them.

httpclient timeout

i keep getting:

FlareSolverrSharp.Exceptions.FlareSolverrException: Exception: System.Threading.Tasks.TaskCanceledException: The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing.

on my raspberry pi but in my logs i can see the flaresolverr is able to solve the request:

REQ-6 Challenge solved
REQ-6 Response in 253.771 s

IAFD: FlareSolverrException: The cookies provided by FlareSolverr are not valid

Hello,

I'm currently running FlareSolverr and FlaresolverrSharp v2.0 released a few days ago. I am able to successfully run the Sample program (FlaresolverrSharp.Sample), but when I try to use the program with another cloudflare-protected URL I receive
FlareSolverrException: The cookies provided by FlareSolverr are not valid

On Flaresolverr's side, it appears that it cannot detect cloudflare:

2021-10-23T16:17:38-04:00 INFO REQ-2 Incoming request => POST /v1 body: {"maxTimeout":60000,"cmd":"request.get","url":"http://www.iafd.com/results.asp?searchtype=comprehensive&searchstring=Stoya"}
2021-10-23T16:17:44-04:00 INFO REQ-2 Cloudflare not detected
2021-10-23T16:17:46-04:00 INFO REQ-2 Response in 8.416 s

The response message from Flaresolverr does have the correct HTML, so it appears Flaresolverr isn't running into the same problem the .NET webclient is.

On FlaresolverrSharp's side it does detect a cloudflare response and forwards the request to Flaresolverr. It receives the correct response, and even moves what appear to be cloudflare cookies across to the subsequent request (e.g. the __cf_bm cookie), but the .NET web request still returns the typical 403 Forbidden cloudflare response.

If you want to reproduce the issue, try changing the URL in the sample program to:

public static string ProtectedUrl = "http://www.iafd.com/results.asp?searchtype=comprehensive&searchstring=Stoya";

I could use Flaresolverr as a proxy for every request, but it would be nice if the captured cookies worked in a normal request.

Thanks for any assistance you can give

Proxy error

Hi,

First of all thanks for this awesome project ๐Ÿ‘

I'm trying to access Cloudfare protected website through FlareSolverrSharp, here the error on FlareSolverr.exe : NS_ERROR_PROXY_CONNECTION_REFUSED

image

Ask me if any other information is needed, in advance thank you !

ClearanceHandler overwrite Cookies

Hi!

Following the issue Jackett/Jackett#14511 I found that this function

private void InjectSetCookieHeader(HttpResponseMessage response, FlareSolverrResponse flareSolverrResponse)
is overwriting the all cookies obtained here
response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false);

So when you get the response, it is no longer valid since it is for another different session.

For the specific case of Jackett, the following is happening:

  1. Make a request to http://wolfmax4k.com/, but cloudflare protection pop up
  2. Make a request to flaresolverr to solve the challenge
  3. Make another request to http://wolfmax4k.com/ but with only the cloudflare cookies, without the other cookies obtained in step 2
  4. Now, it injects the rest of the cookies in the step 2, but the result of step 3 is no longer valid, since the token obtained is for another session, not this one.

Possible solutions:

Edit:
More info about InjectCookies function,
I dont know what "cookieExcess" is for, but I find it strange the value -98... This causes perfectly valid cookies to expire.

Captura de pantalla 2024-03-08 140847

How to use proxy with FlareSolverr?

Hello, I use FlareSolverr on Windows 10 with FlareSolverSharp and this solution works well for my IP address.
How can I use a proxy with FlareSolverSharp?
When I use the example from the readme file, flaresolver uses my IP address instead of the ProxyURL

var handler = new ClearanceHandler("http://localhost:8191/")
{
    MaxTimeout = 60000,
    ProxyUrl = "http://127.0.0.1:8888" //I need to change the proxy IP to something else
};

var client = new HttpClient(handler);
var content = await client.GetStringAsync("https://uam.hitmehard.fun/HIT");
Console.WriteLine(content);

Wrong configuration - unit tests failed

Hi,

I have installed FlareSolverr service using docker on my computer.
I ran the unit tests in ClearanceHandlerTests to check if everything works fine, but the tests are failed.

image

Could you please help me to fix this issue?

not working with docker-compose domain

i have a docker-compose file like this:

    app-proxy:
        image: flaresolverr/flaresolverr:v2.2.4
        restart: always

    app:
        image: app:latest
        restart: always
        environment:
            FLARESOLVERR_ENDPOINT: "http://app-proxy:8191"

the above config does not work and keeps giving me invalid cookie error. the config below works just fine.

    app-proxy:
        image: flaresolverr/flaresolverr:v2.2.4
        restart: always
        ports:
            - 127.0.0.1:8191:8191/tcp

    app:
        image: app:latest
        restart: always
        network_mode: "host" # To access proxy.
        environment:
            FLARESOLVERR_ENDPOINT: "http://127.0.0.1:8191"

is it possible to make it work with the 1st config? thanks.

Solves problem but throws FlareSolverrException

https://www.tibia.com/community/?subtopic=characters&name=Dummy can be solved but FlareSolverrException is thrown.

The code in ClearanceHandler.cs is:

// Change the cookies in the original request with the cookies provided by FlareSolverr
InjectCookies(request, flareSolverrResponse);
response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false);

// Detect if there is a challenge in the response
if (ChallengeDetector.IsClearanceRequired(response))
    throw new FlareSolverrException("The cookies provided by FlareSolverr are not valid");

There is no cookie in flareSolverrResponse.Solution.Cookies

new title to detect for flaresolverr recaptcha

http://tracker.fenyarnyek.com/ can generates the following recaptcha challenge page

<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
        <title>Bot Verification</title>
        <script>
            function onSubmit() {
                document.getElementById('lsrecaptcha-form').submit();
            }

            var onloadCallback = function() {
                var cont = grecaptcha.render('recaptchadiv', {
                    'sitekey': '6LewU34UAAAAAHvXqFOcQlm8z1MP1xpGAZCYEeZY',
                    'callback': onSubmit,

                });
                grecaptcha.execute(cont);
            };
        </script>
        <style>
            body {
                height: 100%;
            }

            .panel {
                padding: 30px;
                max-width: 425px;
                margin: 10% auto;
                box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.2);
            }

            .title {
                font-size: 1.5em;
                font-weight: 100;
                margin-top: 10px;
                text-align: center;
            }

            .recaptcha-center {
                margin-top: 35px;
                margin-bottom: 20px;
                margin-left: 13%;
                margin-right: 13%;
                display: block;
            }
        </style>
    </head>
    <body>
        <div class="panel">
            <h3 class="title">Verifying that you are not a robot...</h3>
            <form id="lsrecaptcha-form" method="POST" action="/.lsrecap/recaptcha?">
                <div id="recaptchadiv" class="recaptcha-center"></div>
            </form>
        </div>
        <script src="https://www.recaptcha.net/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
    </body>
</html>

For China mainland users

I've found the project which supports the .net is great, as I set up it in my env in China, google is not reachable in China mainland normally, and the program shows checks as below, is it possible to skip the checking/testing or if it is required, thanks.
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.