Git Product home page Git Product logo

behathtmlformatterplugin's Introduction

BehatHtmlFormatterPlugin

Behat 3 extension for generating HTML reports from your test results.

Latest Stable Version Total Downloads Latest Unstable Version License

Twig report

Twig Screenshot

Behat 2 report

Behat2 Screenshot

How?

  • The tool can be installed easily with composer.
  • Defining the formatter in the behat.yml file
  • Modifying the settings in the behat.ymlfile

Installation

Prerequisites

This extension requires:

  • PHP 5.3.x or higher
  • Behat 3.x or higher

Through composer

The easiest way to keep your suite updated is to use Composer:

Install with composer:

$ composer require --dev emuse/behat-html-formatter

Install using composer.json

Add BehatHtmlFormatterPlugin to the list of dependencies inside your composer.json.

{
    "require": {
        "behat/behat": "3.*@stable",
        "emuse/behat-html-formatter": "0.1.*",
    },
    "minimum-stability": "dev",
    "config": {
        "bin-dir": "bin/"
    }
}

Then simply install it with composer:

$ composer install --dev --prefer-dist

You can read more about Composer on its official webpage.

Basic usage

Activate the extension by specifying its class in your behat.yml:

# behat.yml
default:
  suites:
    default:
       contexts:
          - emuse\BehatHTMLFormatter\Context\ScreenshotContext:
               screenshotDir: build/html/behat/assets/screenshots
    ... # All your awesome suites come here
  formatters:
    html:
      output_path: %paths.base%/build/html/behat

  extensions:
    emuse\BehatHTMLFormatter\BehatHTMLFormatterExtension:
      name: html
      renderer: Twig,Behat2
      file_name: index
      print_args: true
      print_outp: true
      loop_break: true

Command line options

Add the following to your behat command to print a report:

behat --format html --out MYDIRECTORY

Setting the format to html will output the various reports that you configure below (Behat2, Twig, Minimal, etc.)

You also need to specify the output directory for the reports as MYDIRECTORY.

Configuration

Formatter configuration

  • output_path - The location where Behat will save the HTML reports. Use %paths.base% to build the full path.

Extension configuration

  • renderer - The engine that Behat will use for rendering, thus the types of report format Behat should output (multiple report formats are allowed, separate them by commas). Allowed values are:
  • Behat2 for generating HTML reports like they were generated in Behat 2.
  • Twig A new and more modern format based on Twig.
  • Minimal An ultra minimal HTML output.
  • file_name - (Optional) Behat will use a fixed filename and overwrite the same file after each build. By default, Behat will create a new HTML file using a random name ("renderer name"_"date hour").
  • print_args - (Optional) If set to true, Behat will add all arguments for each step to the report. (E.g. Tables).
  • print_outp - (Optional) If set to true, Behat will add the output of each step to the report. (E.g. Exceptions).
  • loop_break - (Optional) If set to true, Behat will add a separating break line after each execution when printing Scenario Outlines.

Screenshot

The facility exists to embed a screenshot into test failures.

Currently png is the only supported image format.

In order to embed a screenshot, you will need to take a screenshot using your favourite webdriver and store it in the following filepath format:

results/html/assets/screenshots/{{feature_name}}/{{scenario_name}}.png

The feature_name and scenario_name variables will need to be the relevant item names without spaces.

Below is an example of FeatureContext methods which will produce an image file in the above format:

        /**
         * @BeforeScenario
         *
         * @param BeforeScenarioScope $scope
         *
         */
        public function setUpTestEnvironment($scope)
        {
            $this->currentScenario = $scope->getScenario();
        }

        /**
         * @AfterStep
         *
         * @param AfterStepScope $scope
         */
        public function afterStep($scope)
        {
            //if test has failed, and is not an api test, get screenshot
            if(!$scope->getTestResult()->isPassed())
            {
                //create filename string

               $featureFolder = preg_replace('/\W/', '', $scope->getFeature()->getTitle());
                  
                              $scenarioName = $this->currentScenario->getTitle();
                              $fileName = preg_replace('/\W/', '', $scenarioName) . '.png';

                //create screenshots directory if it doesn't exist
                if (!file_exists('results/html/assets/screenshots/' . $featureFolder)) {
                    mkdir('results/html/assets/screenshots/' . $featureFolder);
                }

                //take screenshot and save as the previously defined filename
                $this->driver->takeScreenshot('results/html/assets/screenshots/' . $featureFolder . '/' . $fileName);
                // For Selenium2 Driver you can use:
                // file_put_contents('results/html/assets/screenshots/' . $featureFolder . '/' . $fileName, $this->getSession()->getDriver()->getScreenshot());
            }
        }

Note that the currentScenario variable will need to be at class level and generated in the @BeforeScenario method as Behat does not currently support obtaining the current Scenario in the @AfterStep method, where the screenshot is generated

Issue Submission

When you need additional support or you discover something strange, feel free to Create a new issue.

License and Authors

Authors: https://github.com/dutchiexl/BehatHtmlFormatterPlugin/contributors

behathtmlformatterplugin's People

Contributors

ajgarlag avatar artberri avatar bersman avatar boukeversteegh avatar bramdriesen avatar cckakhandki avatar ck-developer avatar donkidd avatar dutchiexl avatar estheban avatar evgenas avatar exussum12 avatar haehnchen avatar ich123 avatar jivoy1988 avatar kuczek avatar kwisatz avatar lchenay avatar legovaer avatar lmrafael avatar lopezs avatar pawel-grzona avatar ptmkenny avatar purhur avatar rdotter avatar rjb-dev avatar throup avatar tikolakin 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar

behathtmlformatterplugin's Issues

Rendering issues when a large number of items are present

When a large amount of features/scenarios/steps are present in a report, the rendering of the page starts showing strange behaviour.

It looks as though the page is rendering, but then a lot of the information is lost, and everything collapses in a weird order.

I've attached a couple of example screenshots.

screenshot from 2015-10-28 12 20 41
screenshot from 2015-10-28 12 21 08

I18N for HTML-Output

As I set my language to "de"

default:
  translation:
    locale: de
  extensions:
    Behat\MinkExtension:
      sessions:
        default:
          goutte: ~
    emuse\BehatHTMLFormatter\BehatHTMLFormatterExtension:
      name: html
      renderer: Twig
  formatters:
    html:
      output_path:
        %paths.base%/var/behat
  autoload:
    '': %paths.base%/tests/features/bootstrap
  suites:
    wordpress:
      paths: [ %paths.base%/tests/features ]
      contexts: [ WordPressContext ]

the behat output with other formatter is German (de). But the words "Feature", "Scenario" are still english in the HTML-Output. As there is still no HTML-Ouput for Behat3 and yours look very good, please fix this :)

Cheers!

Add embed screen to report

Hi guys, I wanted add screenshot to report and add your code (The facility exists to embed a screenshot into test failures.). And I have some questions to you:
What about takeScreenshot() method? I didn't find this method in your source, if it's should be my method? how I can add already exists screenshot to your Twig report?

Embedding into the E-Mail is not working

I was able to get this really great project here running.

But I do not really need it on a hard drive. I want to embed the genereated stuff into the E-Mail that is send when the Test are crashing.

So is the currently possible. Or is this project only for watching on a local machine, just to have a nice view on all the different tests?

But all the other things work great! I just need it in the E-Mail.

Not all Features are in report

Hi guys,

Behat 3.0.15
Php unit 4.8.3
Tests executes from bamboo unix on slave Windows 7.
After nightly build I have report with not all feature in it.
In report at the bottom I do not see thouse circlus like you have on screen shots but only the text:

3 features failed of 14 features. 4 scenarios failed of 36 scenarios,35 steps failed of 1479 and then below description for thouse 6 features I see in the body.If you need I can send tar file. Also attached the screenshot and my yml file below.

Clicks on buttons all passed failed do nothing.
log

default:
    autoload:
         '': %paths.base%/features/bootstrap
    suites:
        test:
            paths:
                - %paths.base%/features
            contexts:
                - HorseProfileContext
            filters:
                tags: @fakeData,@realData,@brokenTest,@disabledTest
    formatters:
        html:
          output_path: %paths.base%/build/html/behat

    extensions:
        emuse\BehatHTMLFormatter\BehatHTMLFormatterExtension:
            name: html
            renderer: Twig,Behat2
            file_name: Index
            print_args: true
            print_outp: true
            loop_break: true

Aditional remark: When I run one feature on my local pc(php storm added reporter through composer in storm) report is ok.

Feature request: include echo/print messages in the report

Hello,

Cool stuff, but I'm missing a small feature: I have cases when I log some messages to console (using print command) and these messages are not included in the .html report (I can see them in the regular "pretty" report).

For example, when a step fails, I take a screenshot and log the path and name:

Screenshot at: D:\blabla\screenshots\2015-05-12_17-36-22_55520fe6d2a17.png

If this line would be included in the html report, maybe I could go further and change it to match a < img > tag which would actually directly display the image in the report. Am I asking too much? :)

I have only one month of experience with Behat, so I'm not capable of extending your code by myself.
If you have other suggestions, please let me know.

Thank you.

Scenario Example name in Twig report

Hi there
in report we have only Scenario outline name and Scenario Example Name not available,
Is it any way to get Scenario Example name in report under Scenario?

example

Make screenshot on failure

Hi there
I've noticed that we already have implementation of making screenshot on failure
But it seems not working pretty well or easy
Is it possible to have not only screenshot for each feature but rather each steps that failed?
So, for ex. a feature has a few scenarios some of them are success and some failed and we'd able to view what exactly was on the page when steps couldn't pass.
btw. thanks guys for this very useful feature

Fatal error on Behat2Renderer

The error above occurs because the method call inside a empty function
I using php 5.4
PHP Fatal error: Can't use method return value in write context in /home/dbseller/.composer/vendor/emuse/behat-html-formatter/src/Renderer/Behat2Renderer.php on line 333

Get Browser info in report

Hi there
Is it any way to get browser name in report where test was executed ?
or any additional information for example from test code

Is there any config that can be made so that report can be seen while execution and also after unexpected stop of execution

Hi !

I am using emuse and I like the way it reports. Just had following query related to emuse

1.During execution in any case if a fatal error /session kill occurs, whole test execution is stopped. During this condition If I try to view the report it will be blank. Is there any config that I could see the report even on failure conditions
2. Is there any config that can be made so that report can be seen while execution?

Please let me know if we can.

Thanks in advance!

-Mahesh

Adding the saving of screenshots and HTML dumps

Hello,

I have a proposition of a new feature to add :

  • Generate a screenshot and a dump of the HTML code of the page when a scenario fails, and save them into a directory that will be defined by the user
  • Give access from the HTML report to these files with links (Twig, Behat 2)

Also, this generating would be optional and could be deactivated.
It would be also possible, if the user wants it, to generate these files after each steps even if there is no error (to keep a trace of each step of the scenario, could be useful when tests are running with a headless browser like phantomJS)

Do you think adding this feature is a good idea or it is misappropriate regarding the purpose of the plugin ?

I have a little portion of code that actually work with Selenium 2 driver (and so PhantomJS), I think it could be possible to adapt it.

New template - WP

Hi @dutchiexl , would you accept another template?

I have made this one with another extension of mine:
https://rawgit.com/fonsecas72/show/master/index.html
I like your implementation and I'm willing to improve it if you are interested. I would like to add:

  • add option to chose a template - this is mandatory;
  • background knowledge - It seems that your template replicates the background in each scenario which does not help with visualization. My extension creates a special case for scenarios with background and I can replicate that logic here;
  • percentage of passing, failing, skipped, pending for suites and scenarios - It seems that you don't have this logic implemented yet.

You don't need to commit this new template if don't want to. It is enough to me to have this features implemented.
Perhaps later we can gather our efforts in creating a better template using both templates?

Add information on installation to README

Now that more and more people are starting to use this extension, it might be useful to add some information on the README file about installing this extension. I know, this seems to be straight forward but I'd expect a lot of issues coming in with questions on how to install this extension!

Another suggestion might be using Read the docs. But that might be a bit overkill yet.

console output disappears

Hello,
When I'm using some basic configuration:

default:

extensions:
     emuse\BehatHTMLFormatter\BehatHTMLFormatterExtension:
          name: html
          renderer: Twig,Behat2
          file_name: Index
          print_args: true
          print_outp: true
          loop_break: true

formatters:
    html:
      output_path: %paths.base%/build/html/behat

The console output disappears, but html generation works fine!

Did I miss something ?

Issue with html when both Twig, Behat2 given as renderer

Hi,

I had configured the emuse within .yml file as below:
emuse\BehatHTMLFormatter\BehatHTMLFormatterExtension:
name: html
renderer: Twig,Behat2
print_outp: true
file_name: index
print_args: true
loop_break: true

I used both format because whenever there is a fatal error or something Twig does not give any result. Behat2 gives result till where it was executed

Issue:
When result was generated in html format it had both format within but when TWIG results were it did not show any tests.

Can anybody please let me know how to resolve this?

Fatal error on behat launch

Hi,

I get the following error when I launch my tests suite :
PHP Fatal error: Call to undefined method Behat\Gherkin\Node\StepNode::getKeyword()

Don't know what to do ?

Btw, this extension is a great idea

Different filenames for every test

Hi,
The plugin is great and Im using it regularly for generating reports. I have only one question.
Is it possible to avoid the overwriting of the base file ? My goal is to have different html file for every test or at least for every test suite. Can you give me some directions how to approach this ?

Regards

AfterSuiteTested vs AfterSuiteAborted

In throwing an exception within my Behat Step definition, I correctly fail a given behat test. However, before the command returns, I get the following:

Recoverable fatal error: Argument 1 passed to emuse\BehatHTMLFormatter\Formatter\BehatHTMLFormatter::onAfterSuiteTested() must be an instance of Behat\Testwork\EventDispatcher\Event\AfterSuiteTested, instance of Behat\Testwork\EventDispatcher\Event\AfterSuiteAborted given in emuse\BehatHTMLFormatter\Formatter\BehatHTMLFormatter->onAfterSuiteTested() (line 474 of [excluded]/vendor/emuse/behat-html-formatter/src/Formatter/BehatHTMLFormatter.php).

I was able to resolve this issue (and a subsequent one) by changing

public function onAfterSuiteTested(AfterSuiteTested $event)
and
public function onAfterExercise(AfterExerciseCompleted $event)

to

public function onAfterSuiteTested(\Behat\Testwork\EventDispatcher\Event\SuiteTested $event)
and
public function onAfterExercise(\Behat\Testwork\EventDispatcher\Event\ExerciseCompleted $event)

Is there a reason you're using the specific classes rather than the interfaces here?

Tag new release with latest changes

Could you please tag a release with the latest changes?
The last release was in 2015 and old code is automatically loaded when follow setup instruction.
Many improvements and bug fixes are in the master branch only now, so you have to load it directly from repo now:

  "require-dev": {
    "emuse/behat-html-formatter": "dev-master@dev"
  },
  "repositories": [
    {
        "url": "https://github.com/dutchiexl/BehatHtmlFormatterPlugin.git",
        "type": "git"
    }
  ]

Add the exception on feature detail view.

When opening the detail view of a feature, the failed steps should be able to display the exception in an intuitive way.

The steps allready have the exception in their class when rendered, but are not yet rendered in the HTML.

Separator between scenarios in scenario outline

It would be good if there is a separator or some kind of markup between several "sub"scenarios in an scenario outline.
Right now it looks like they are all one big scenario with repeated Given - When - Then steps.

behat is unaware of the installed plugin

Hi, I installed plugin as instructed on the readme document. and I can see it's installed in the directory: vendor/emuse/behat-html-formatter/

And here is my yml file:

default:
    extensions:
        Behat\MinkExtension\ServiceContainer\MinkExtension:
            show_cmd: /usr/bin/google-chrome %s
            show_auto: true
            selenium2:
                browser: chrome
                wd_host: http://127.0.0.1:4444/wd/hub
    suites:
        cock_pit:
            paths:    [ %paths.base%/features/cock_pit]
            contexts: [ Ubiflow\CockPit\FeatureContext ]
    formatters:
        html:
            output_path: %paths.base%/results/html
    extensions:
        emuse\BehatHTMLFormatter\BehatHTMLFormatterExtension:
            name: html
            renderer: Twig,Behat2
            file_name: Index
            print_args: true
            print_outp: true
            loop_break: true

When I execute the test, I got this error:

 [Behat\Testwork\Output\Exception\FormatterNotFoundException]        
  `html` formatter is not found or has not been properly registered. 

It seems behat is unable to link the formatter with the plugin. Any idea where I did wrong?

Thanks!

Version TAG and License

@dutchiexl, you have been doing a great job with the formatter plugin.
Could you create a version tag - stable - and define a license for this project?
Thanks! 😄

On Windows renderer option is not recognized

On Windows renderer option is not recognized.
YML config contains:
formatters:
html:
output_path: %paths.base%/../reports/
pretty:
output_path: %paths.base%/../reports/pretty.txt
extensions:
emuse\BehatHTMLFormatter\BehatHTMLFormatterExtension:
name: html
renderer: Behat2

The Invalid Configuration Exception is thrown as follows:
[Symfony\Component\Config\Definition\Exception\InvalidConfigurationException]
Unrecognized option "renderer" under "testwork.emusehtml"

translate

I will like use your html export in different language.

Is it posible enable doing translate version?

I mean for example:
1 features ( 1 fail )
9 scenarios ( 8 success 1 fail )
77 steps ( 76 success 1 fail )
[+] all [-] all
Suite :
Feature:
Scenario:
Scenario Outline:
Feature has failed Scenarios passed : 88.89%, Scenarios failed : 11.11%
1 features failed of 1 features
1 scenarios failed of 9 scenarios
1 steps failed of 77
Failed: 1
Passed: 76

Fatal error when starting a behat test

Hi guys,
Recently I get an error when I run behat tests. Message is
PHP Fatal error: Class 'emuse\BehatHTMLFormatter\Renderer\behat2Renderer' not found in /home/grzegorzdobiecki/projekty/nse-learning-services-client/vendors_behat/emuse/behat-html-formatter/src/Renderer/BaseRenderer.php on line 44
I found class Behat2Renderer (capital B) in vendors.
HEAD is at
commit f3bcf07
Author: Neal Vanmeert [email protected]
Date: Fri Mar 20 14:20:21 2015 +0100

But I notice that is worked when HEAD was at commit 801cc56

Support the --out / -o flag for the report output.

Behat has a flag --out or -o to specify where report output should be saved:

 --out (-o)            Write format output to a file/directory instead of
                       STDOUT (output_path). You can also provide different
                       outputs to multiple formats. (multiple values allowed)

It took me a little while to find the current output path (hard-coded to {$PROJECTROOT}/vendor/emuse/behat-html-formatter/reports/test_report.html). It is probably worth adding a note to the readme file to explain this until the extension can support user-defined paths.

Hello, I have issue with this plugin

I add this to my behat.yml :
formatters:
html:
output_path: %paths.base%/
extensions:
emuse\BehatHTMLFormatter\BehatHTMLFormatterExtension:
name: html
renderer: Twig
file_name: Index
print_args: true
print_outp: true
loop_break: true

And behat show error : [Behat\Testwork\Output\Exception\FormatterNotFoundException]

html formatter is not found or has not been properly registered. Registered formatters: junit, progress, pretty.
Can anybody help me?

reference on packagist

hi,
I hope it's a good place for that, but reference on packagist is not updated. Now it says "reference: c9a0be3" which is more than 30 commits ago. So now to get the latest version I need to write in composer.json "emuse/behat-html-formatter": "dev-master#3e372584755b81bfcd6e0611eb644ccb7cda4efe". Is there a chance to update reference on packagist?
Cheers

Report not loading charts

Hey there,
the generated report doesn't seems to be rendered with the correct path to the ChartJs (and the style.css as well).

The path where it looks for the js and css is: %path_to_generated_report%/assets/

Is it happening with anyone else or is just me doing something wrong on the configuration?

Scenario Outline is everytime opened

When i add to my something.feature Scenario Outline
(for example this )
Scenario Outline: Overeni prihlaseni - platne username a password
When I fill in "frm-signInForm-username" with ""
When I fill in "frm-signInForm-password" with ""
When I check "frm-signInForm-remember"
And I press "Přihlásit"
Then I should not see "Neplatná kombinace uživatelského jména a hesla."
And I should see "Přihlášen uživatel: "
And I should see "Zvolte si prosím přislušný modul v menu výše."
And the "title" element should contain "ERP | Uloženka"
And I should be on "/"
And I should not see "504 Gateway Time-out"
And I should not see "chyba 404"
And I should not see "error 500"
And the "title" element should not contain "Server Error"
Then I need screenshot
And I follow "Odhlásit"

My output html have everytime opened this Scenario Outline:
bug-scenario-outline

Can you doing some repair?

Table nodes are not displayed on reports

When using Tables (TableNode) in a test the values are not displayed in the reports.

Example

Scenario: There should be 6 services and each streams value should be integers
        Given .... Tracker Page
        When I select Time Period "Lifetime"
        Then I can only select two services at any given time
        And services should be
            | service     |
            | fdgsfgsdfg     |
            | sdfgsdfgdfg |
            | sfdgsdfgsd |
        And region should be
            | region   |
            | Americas |
            | Europe   |
        And each streams value should be an integer number uk formatted

behatreporttablesmissing

Can this be fixed?

screenshot picture linked in html output

I use 3 ways, how doing screenshot.

First is after passed scenario - function takeScreenShotAfterSuccessScenario(afterScenarioScope $scope)
second is for fail step - public function takeScreenShotAfterFailedStep(afterStepScope $scope)
third is for situation, when i need doing screenshot - function i_need_screenshot()
my FeatureContext.php is here:
FeatureContext.zip

What i need:
I will like in html output after passed scenario, or after fail step, or after when i use Then I need scrrenshot show link bottom from actual line in html.
scrrenshot-html

I mean, this is useful function.... Can somebody doing this upgrade?

Get Scenario Title

Hi!
I have question about getting scenario name in report

Step by step explenation my case

  1. I set scenario title in my FeatureContext

    public function setUpTestEnvironment($scope)
    {
    $this->currentScenarioTitle = $scope->getScenario()->getTitle;
    }

  2. When i getTitle durint test execution i get something like this:
    | some| test| parameter| parameter1|

  3. This string is from my Scenario Example table
    Scenario Outline: Open page anf validate something
    Given I am on page
    When New page is displayed
    Then I should see
    Examples:
    | header1| header2| header3| header4|
    | some| test| parameter| parameter1|

4.After test execution when i try get scenario name using getName in \vendor\emuse\behat-html-formatter\src\Classes\Scenario.php
i get only Scenario Title, in my case it is "Open page anf validate something"
but i need title from Example table like this "| some| test| parameter| parameter1|"

Could you please explain how to get it?

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.