Code Monkey home page Code Monkey logo

nativescript-printer's Introduction

NativeScript Printer plugin

Build Status NPM version Downloads Twitter Follow

Think about the environment before printing!

Installation

From the command prompt go to your app's root folder and execute:

tns plugin add nativescript-printer

Demo app

Want to dive in quickly? Check out the demo! Otherwise, continue reading.

Run the demo app from the root of the project: npm run demo.ios or npm run demo.android.

Android screenshots

    

iOS screenshots

    

API

isSupported

Not all devices support printing, so it makes sense to check the device capabilties beforehand.

TypeScript
// require the plugin
import {Printer} from "nativescript-printer";

// instantiate the plugin
let printer = new Printer();

printer.isSupported().then((supported) => {
  alert(supported ? "Yep!" : "Nope :'(");
}, (error) => {
  alert("Error: " + error);
});

printImage

TypeScript
// let's load an image that we can print. In this case from a local folder.
let fs = require("file-system");
let appPath = fs.knownFolders.currentApp().path;
let imgPath = appPath + "/res/printer.png";
let imgSrc = new ImageSource();
imgSrc.loadFromFile(imgPath);

printer.printImage({
  imageSrc: imgSrc
}).then((success) => {
  alert(success ? "Printed!" : "Not printed");
}, (error) => {
  alert("Error: " + error);
});

printPDF

TypeScript
import { knownFolders } from "tns-core-modules/file-system/file-system";

printer.printPDF({
  pdfPath: knownFolders.currentApp().path + "/pdf-test.pdf"
}).then((success) => {
  alert(success ? "Printed!" : "Not printed");
}, (error) => {
  alert("Error: " + error);
});

printScreen

Prints the current screen contents. Anything off screen will not be printed.

TypeScript
printer.printScreen().then((success) => {
  alert(success ? "Printed!" : "Not printed");
}, (error) => {
  alert("Error: " + error);
});

You can also print a specific portion of the screen, which also enables you to print views that are larger than the viewport. This is an example of a non-Angular NativeScript app:

Note If the view is either of the following depending on the size of it's contents it would break into multiple pages.

Label | TextView | HtmlView | WebView

  <StackLayout id="printMe">
    <Label text="Print me :)" />
  </StackLayout>

  <Button text="Print" tap="{{ print }}" />
  public print(args) {
    printer.printScreen({
      view: args.object.page.getViewById("printMe")
    });
  }

nativescript-printer's People

Contributors

bobvann avatar eddyverbruggen avatar methompson avatar triniwiz 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

Watchers

 avatar  avatar  avatar  avatar  avatar

nativescript-printer's Issues

Printing Error on IOS

Hi,

Using printer.printScreen() on ios emulator throw an error :

Error: TypeError: null is not an object (evaluating 'view.ios.frame').

Thanks

Cannot read property 'getApplicationContext' of undefined

ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'getApplicationContext' of undefined
JS: TypeError: Cannot read property 'getApplicationContext' of undefined
JS: at new Printer (file: node_modules/nativescript-printer/printer.android.js:8:33)
JS: at new HomeComponent (file: src/app/home/home.component.ts:53:24)
JS: at createClass (file: node_modules/@angular/core/fesm5/core.js:21158:0)
JS: at createDirectiveInstance (file: node_modules/@angular/core/fesm5/core.js:21027:0)
JS: at createViewNodes (file: node_modules/@angular/core/fesm5/core.js:29387:0)
JS: at createRootView (file: node_modules/@angular/core/fesm5/core.js:29301:0)
JS: at callWithDebugContext (file: node_modules/@angular/core/fesm5/core.js:30309:0)
JS: at Object.debugCreateRootView [as createRootView] (file: node_modules/@angular/core/fesm5/core.js:29819:0)
JS: at ComponentFactory_.push.../node_modules/@angular/core/fesm5/core.js.ComponentFactory_.create

Weird results on Android

@EddyVerbruggen I have adapted your plugin to, instead of printing, take screenshots of my app.

Below the full screen (the area to be "printed", with an id="printMe", goes from the 07:21AM till the end of the map):
simulator screen shot jul 31 2017 7 11 25 pm

The result on Android is close to perfect, if the MapBox content was showing :(
screen shot 2017-07-31 at 7 14 08 pm

I found this mapbox/mapbox-gl-native#6062, which may explain why the map is not printing/rendering. Do you know how to handle this so my Android map can render properly?

Thanks!

printer was connected with bluetooth but unable to print?

i have a thermal printer (GOOJPRT 58MM Wireless Portable bluetooth Thermal Receipt Printer)
and your sample demo on android (samsung S5) . printer is successfully added by bluetooth in android device but when i try to print using Nativescript printer demo it's unable to print. (Added printer is not shown in the list).

Demo crashing on iOS11

Could you please check? I am mostly curious on the screen capture part, as Apple has changed the snapshot behavior in iOS11.

Printing a ScrollView

Does this plugin fully support printing a ScrollView or an overflown StackLayout? When I try to print a ScrollView, the page barely covers any of the element. When I try to print the StackLayout, on android it usually works and condenses everything to 1 page. But on iOS, the content height overflows and there is only 1 page. Could this occur because of image elements? Or elements without a set fixed height.

I would appreciate any help, thanks.

Build Error with NS 8.4.0

Hi
I have noticed that the plugin throughs error on the build after updating to NS 8.4.0.

ERROR in ./node_modules/nativescript-printer/printer.android.js 2:0-56
Module not found: Error: Can't resolve '@nativescript/core/utils/utils' in '/Users/app/node_modules/nativescript-printer'

I think the problem from duplicated word "utils" in the path.
Thanks

PrintPDF Android (First Page Only)

Hey.

First off, Thank You for making printing of PDF possible :)

I have testet this plugin now with a PDF with more than one page.

iOS:
Works like a charm. previews all pages, prints all pages ;)

Android:
Only previews the first page, and only prints the first page. :/

From what I can read in printer.android.js
The PDF is rendered into a single image. And only page 0.
Maybe theres something there that needs a little extra love :)

In advance. TY ;)

Can not find Module

When i try to release build , it's show this error, I'm trying to build for android device.

[19-04-29 15:37:19.227] (CLI) ERROR in node_modules/nativescript-printer/printer.common.d.ts(1,29): error TS2307: Cannot find module 'image-source'.
[19-04-29 15:37:19.227] (CLI) node_modules/nativescript-printer/printer.common.d.ts(2,22): error TS2307: Cannot find module 'ui/core/view'.

[19-04-29 15:23:45.204] Build failed. TypeScript compiler failed with exit code 1
[19-04-29 15:31:29.890] Build failed. Executing webpack failed with exit code 2.

Usage with angular, printScreen does not work without view arg

Hello, it looks like printScreen() without any view arg doesn't work in angular based projects. let view: View = frame.topmost().currentPage.content; ends up being undefined. Passing the view explicitly works but has no example. This works:

@ViewChild("foo") foo: ElementRef;
printer.printScreen({ view: this.foo.nativeElement });

I could submit a PR just updating the documentation if you'd like. If we wanted to not fix the currentPage issue, we could just note that the view arg is required when using Angular.

UIPrintInfo Access

Would be nice if we could set UIPrintInfo to prevent iOS auto orientation.

Print PDF?

Would PDF printing be a feature at some point? Or whats not on the drawingboard?

v2.0.0 crashes Android when using with a NativeScript 6.5.3 project

I added nativescript-printer to an existing 6.5.3 project and instantiation of a Printer object causes the Android application to crash.

Line 17 of printer.android.ts causes the application to crash:
this.printManager = Utils.ad.getApplicationContext().getSystemService(android.content.Context.PRINT_SERVICE);

The problem is in the import of Utils. Older versions of @nativescript/core don't have 'ad' in the definition of Utils. I'm hesitant to upgrade @nativescript/core because previous attempts at upgrading the application to NS 7 did not go well.

Changing the import to
import * as utils from '@nativescript/core/utils/utils';
and changing line 17 to
this.printManager = utils.ad.getApplicationContext().getSystemService(android.content.Context.PRINT_SERVICE);
fixes this issue.

I've made a PR to fix the issue.

JS ERROR TypeError: Object is not a constructor

Hi, I am trying to using the plugin with plain Javascript. However, writing this:

var Printer = require("nativescript-printer")
var printer = new Printer();

I am getting the following error:

***** Fatal JavaScript exception - application has been terminated. *****
Native stack trace:
1   0x10748478b NativeScript::FFICallback<NativeScript::ObjCMethodCallback>::ffiClosureCallback(ffi_cif*, void*, void**, void*)
2   0x107b2810e ffi_closure_unix64_inner
3   0x107b28a52 ffi_closure_unix64
4   0x10862d097 -[UIResponder touchesEnded:withEvent:]
5   0x10862cfcd forwardTouchMethod
6   0x10862d097 -[UIResponder touchesEnded:withEvent:]
7   0x10862cfcd forwardTouchMethod
8   0x10862d097 -[UIResponder touchesEnded:withEvent:]
9   0x1089ebbad _UIGestureEnvironmentSortAndSendDelayedTouches
10  0x1089e5a4d _UIGestureEnvironmentUpdate
11  0x1089e541f -[UIGestureEnvironment _deliverEvent:toGestureRecognizers:usingBlock:]
12  0x1089e44cb -[UIGestureEnvironment _updateGesturesForEvent:window:]
13  0x108472f14 -[UIWindow sendEvent:]
14  0x108416365 -[UIApplication sendEvent:]
15  0x108d62a1d __dispatchPreprocessedEventFromEventQueue
16  0x108d65672 __handleEventQueueInternal
17  0x10baaf101 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
18  0x10bb4ef71 __CFRunLoopDoSource0
19  0x10ba93a19 __CFRunLoopDoSources0
20  0x10ba92fff __CFRunLoopRun
21  0x10ba92889 CFRunLoopRunSpecific
22  0x10d0c29c6 GSEventRunModal
23  0x1083fa5d6 UIApplicationMain
24  0x107b288ad ffi_call_unix64
25  0x12bbaaf70
JavaScript stack trace:
1   anonymous@file:///app/flight-page.js:27:26
2   evaluate@[native code]
3   moduleEvaluation@[native code]
4   @[native code]
5   promiseReactionJob@[native code]
6   require@[native code]
7   _loop_1@file:///app/tns_modules/tns-core-modules/globals/globals.js:60:30
8   loadModule@file:///app/tns_modules/tns-core-modules/globals/globals.js:68:30
9   @file:///app/tns_modules/tns-core-modules/ui/frame/frame-common.js:82:37
10  @file:///app/tns_modules/tns-core-modules/ui/frame/frame-common.js:108:43
11  navigate@file:///app/tns_modules/tns-core-modules/ui/frame/frame-common.js:213:48
12  listViewItemTap@file:///app/flights-page.js:445:34
13  notify@file:///app/tns_modules/tns-core-modules/data/observable/observable.js:103:31
14  touchesEndedWithEvent@file:///app/tns_modules/nativescript-pro-ui/listview/listview.js:743:29
15  UIApplicationMain@[native code]
16  start@file:///app/tns_modules/tns-core-modules/application/application.js:235:26
17  anonymous@file:///app/app.js:257:22
18  evaluate@[native code]
19  moduleEvaluation@[native code]
20  @[native code]
21  promiseReactionJob@[native code]
JavaScript error:
file:///app/flight-page.js:27:26: JS ERROR TypeError: Object is not a constructor (evaluating 'new Printer()')

Any ideas on how to fix it?

Printing a view, only returns 1 page

I have tried to create both a WebView and a HTMLView, but even though the HTMLView has a height above 700, it still only shows one page.

Are those views not supported?

Demo doesn't start - No project found

I'm trying to get the demo working so I can have a go at fixing some of the bugs relating to printing under Android. I've cloned the repo on my Debian 10 machine running node 14.13.1 and I get this error;

output from the command

~/code/nativescript/nativescript-printer/src (master) % npm run demo.android

> [email protected] demo.android /home/map7/code/nativescript/nativescript-printer/src
> npm run build && cd ../demo && tns platform remove android && tns run android --justlaunch


> [email protected] build /home/map7/code/nativescript/nativescript-printer/src
> npm i && npm run tsc

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/watchpack-chokidar2/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

audited 723 packages in 6.396s

28 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities


> [email protected] tsc /home/map7/code/nativescript/nativescript-printer/src
> tsc -skipLibCheck

(node:30325) Warning: Accessing non-existent property 'cat' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
(node:30325) Warning: Accessing non-existent property 'cd' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'chmod' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'cp' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'dirs' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'pushd' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'popd' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'echo' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'tempdir' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'pwd' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'exec' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'ls' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'find' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'grep' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'head' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'ln' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'mkdir' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'rm' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'mv' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'sed' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'set' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'sort' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'tail' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'test' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'to' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'toEnd' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'touch' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'uniq' of module exports inside circular dependency
(node:30325) Warning: Accessing non-existent property 'which' of module exports inside circular dependency

Support for Node.js 14.13.1 is not verified. NativeScript CLI might not install or run properly.

No project found at or above '/home/map7/code/nativescript/nativescript-printer/demo' and neither was a --path specified.
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn
npm ERR! file sh
npm ERR! errno ENOENT
npm ERR! [email protected] demo.android: `npm run build && cd ../demo && tns platform remove android && tns run android --justlaunch`
npm ERR! spawn ENOENT
npm ERR! 
npm ERR! Failed at the [email protected] demo.android script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/map7/.npm/_logs/2020-10-12T04_22_11_653Z-debug.log

debug log output

/2020-10-12T04_28_30_595Z-debug.log
0 info it worked if it ends with ok
1 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'run', 'demo.android' ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [ 'predemo.android', 'demo.android', 'postdemo.android' ]
5 info lifecycle [email protected]~predemo.android: [email protected]
6 info lifecycle [email protected]~demo.android: [email protected]
7 verbose lifecycle [email protected]~demo.android: unsafe-perm in lifecycle true
8 verbose lifecycle [email protected]~demo.android: PATH: /usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/map7/code/nativescript/nativescript-printer/src/node_modules/.bin:/home/map7/.cask/bin:/usr/local/rbenv/shims:/usr/local/rbenv/bin:/home/map7/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/map7/bin:/usr/local/rbenv/shims:/usr/local/rbenv/bin:/home/map7/bin:/usr/local/rbenv/shims:/usr/local/rbenv/bin:/usr/share/safe-rm/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin:/usr/local/android/sdk/tools/:/usr/local/android/sdk/platform-tools/:/usr/lib/jvm/java-8-oracle/bin
9 verbose lifecycle [email protected]~demo.android: CWD: /home/map7/code/nativescript/nativescript-printer/src
10 silly lifecycle [email protected]~demo.android: Args: [
10 silly lifecycle   '-c',
10 silly lifecycle   'npm run build && cd ../demo && tns platform remove android && tns run android --justlaunch'
10 silly lifecycle ]
11 info lifecycle [email protected]~demo.android: Failed to exec demo.android script
12 verbose stack Error: [email protected] demo.android: `npm run build && cd ../demo && tns platform remove android && tns run android --justlaunch`
12 verbose stack spawn ENOENT
12 verbose stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:48:18)
12 verbose stack     at ChildProcess.emit (events.js:314:20)
12 verbose stack     at maybeClose (internal/child_process.js:1047:16)
12 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:287:5)
13 verbose pkgid [email protected]
14 verbose cwd /home/map7/code/nativescript/nativescript-printer/src
15 verbose Linux 4.19.0-10-amd64
16 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "demo.android"
17 verbose node v14.13.1
18 verbose npm  v6.14.8
19 error code ELIFECYCLE
20 error syscall spawn
21 error file sh
22 error errno ENOENT
23 error [email protected] demo.android: `npm run build && cd ../demo && tns platform remove android && tns run android --justlaunch`
23 error spawn ENOENT
24 error Failed at the [email protected] demo.android script.
24 error This is probably not a problem with npm. There is likely additional logging output above.
25 verbose exit [ 1, true ]

multiple pages problem for htmlview and webview

if i print only current page it will show preview to print. what about other data. u said depending on the content it will split into pages for print...... but its not happening

<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="onNavigatingTo" class="page">
   
    <Page.actionBar>
        <ActionBar title="My App" icon="" class="action-bar">
        <Button text="Print HtmlView" tap="{{ printHtmlView }}" class="button button-b" />
        </ActionBar>
    </Page.actionBar>

    <ScrollView>
        <HtmlView id="htmlView" html="{{htmlView + htmlView + htmlView}}" />
        </ScrollView>
</Page>

var Observable = require("data/observable");
var data = require('./data.json');

var nativescript_printer = require("nativescript-printer");// Printer plugin
// instantiate the plugin
var printer = new nativescript_printer.Printer();

function createViewModel() {
    var viewModel = new Observable.fromObject({

        htmlView: data.htmlView,

        printHtmlView: function (args) {
            var id = args.object.page.getViewById("htmlView");
            console.log(id);

            printer.printScreen({
              view: args.object.page.getViewById("htmlView"),
            }).then((success) => {
              HelloWorldModel.feedback(success);
            }, (error) => {
              alert("Error: " + error);
            });
          },

    });

    return viewModel;
}

exports.createViewModel = createViewModel;

starting trouble

i require the plugin in js. then i wrote var printer = new Printer()
it says Printer is not a constructor....
solve this error please.............

TypeError: Printer is not a constructor
File: "file:///data/data/org.nativescript.preview/files/app/views/shared/view-models/sub-product-view-model.js, line: 116, column: 18

StackTrace:
Frame: function:'SubProductListViewModel.viewModel.camera', file:'file:///data/data/org.nativescript.preview/files/app/views/shared/view-models/sub-product-view-model.js', line: 116, column: 19
Frame: function:'exports.camera', file:'file:///data/data/org.nativescript.preview/files/app/views/itemDetails/itemDetails.js', line: 30, column: 16
Frame: function:'Observable.notify', file:'file:///data/data/org.nativescript.preview/files/app/tns_modules/tns-core-modules/data/observable/observable.js', line: 110, column: 23
Frame: function:'Observable._emit', file:'file:///data/data/org.nativescript.preview/files/app/tns_modules/tns-core-modules/data/observable/observable.js', line: 127, column: 18
Frame: function:'ClickListenerImpl.onClick', file:'file:///data/data/org.nativescript.preview/files/app/tns_modules/tns-core-modules/ui/button/button.js', line: 26, column: 23

at com.tns.Runtime.callJSMethodNative(Native Method)
at com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1101)
at com.tns.Runtime.callJSMethodImpl(Runtime.java:983)
at com.tns.Runtime.callJSMethod(Runtime.java:970)
at com.tns.Runtime.callJSMethod(Runtime.java:954)
at com.tns.Runtime.callJSMethod(Runtime.java:946)
at com.tns.gen.java.lang.Object_button_19_32_ClickListenerImpl.onClick(Object_button_19_32_ClickListenerImpl.java:17)
at android.view.View.performClick(View.java:5215)
at android.view.View$PerformClick.run(View.java:21193)
at android.os.Handler.handleCallback(Handler.java:742)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5571)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)

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.