Giter VIP home page Giter VIP logo

topola-viewer's Introduction

Topola Genealogy Viewer

Node.js CI

View your genealogy data using an interactive chart.

Website: https://pewu.github.io/topola-viewer

screenshot

Features

  • Hourglass chart
  • All relatives chart
  • Click on a person to focus
  • Open standard GEDCOM files you can export from any genealogy application
  • Load from URL (just point to a GEDCOM file on the Web)
  • Privacy – your files do not leave your computer
  • Print the whole genealogy tree
  • Export to PDF, PNG, SVG
  • Side panel with details
  • Configuration options
  • Permalinks when loading from URL
  • Cool transition animations

Changelog

Examples

Here is an example from the Web:

If you have data in a genealogy database, you can export your data in GEDCOM format and load it using the "Load from file" menu.

Integrations

Topola Genealogy Viewer is being integrated into more and more Web and desktop applications. Here are the current integrations:

Gramps

To view your Gramps data in Topola Genealogy Viewer, install Interactive Family Tree plugin from the Gramps plugin manager. The plugin will add a Tools->Analysis and Exploration->Interactive Family Tree menu item to Gramps.

Source code: https://github.com/gramps-project/addons-source/tree/master/Topola

Webtrees

Embed Topola Genealogy Viewer in your Webtrees installation with the Topola interactive tree addon.

Source code: https://github.com/PeWu/topola-webtrees

WikiTree

You can browse the WikiTree genealogy tree using Topola Genealogy Viewer. On a WikiTree profile page go to the Family Tree & Tools tab and click the Dynamic Tree by Topola link.

Example: Stephen Hawking

Topola Genealogy Viewer is hosted on apps.wikitree.com to benefit from the ability of being logged in to the WikiTree API.

Running locally

npm install
npm start

Self-hosting

You can host Topola Genealogy Viewer on your own server. There are no specific requirements for the hosting server. There is no code that is executed on the server side. The server only hosts the application files and whole application runs in the browser.

You can build Topola Genealogy Viewer from source code or take a ready-to-deploy package.

Bulid your own

Here are the commands to build the application:

git clone https://github.com/PeWu/topola-viewer.git
cd topola-viewer
npm install
npm run build

Now, take the contents of the build/ folder and host it on your own server.

Use an existing package

Download the following file, unpack it and upload the contents to your server: https://github.com/PeWu/topola-viewer/archive/refs/heads/gh-pages.zip

These are the exact files that are hosted on GitHub pages.

Build for your own data only

You can run Topola Viewer in a "single tree mode" that displays only the GEDCOM you specify. Specify the URL to a GEDCOM file in the REACT_APP_STATIC_URL environment variable when building and running the application.

Run locally with the specified data URL:

REACT_APP_STATIC_URL=https://example.org/sample.ged npm start

Build with the specified data URL:

REACT_APP_STATIC_URL=https://example.org/sample.ged npm run build

The build/ folder will contain files that can be hosted on a Web server.

Alternative build

The topola-webpack tool can build a Topola Genealogy Viewer package bundled together with a GEDCOM file.

Additional options

handleCors

Add &handleCors=false to the URL to avoid using the CORS proxy

embedded

Add &embedded=true to the URL. This option removes the options to open a different file. It is an option that was intended to be used when Topola Genealogy Viewer is in an iframe.

topola-viewer's People

Contributors

adamgross42 avatar albertoriella avatar czifumasa avatar dependabot[bot] avatar gettingthingsdone avatar kentgrigo avatar olivierberten avatar pewu avatar pushkk 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

topola-viewer's Issues

Compiling Topola-viewer

Hi, I tried to compile the project and was not succesfull, so I started new topic in discussion.
Can you pls help?

'All relatives' often fails

Hello,
First off, thank you very much for this great visualisation tool. It's almost exactly what I need :)

Unfortunately, there are some glitches in it, such as when selecting 'All relatives'. Surprisingly it always does work for some nodes (persons in the tree), but for most of them - it does not.

Exception #1

relatives-chart.js:202 Uncaught TypeError: Cannot read property 'width' of undefined
at relatives-chart.js:202
at h.each (each.js:13)
at t.layOutAncestorDescendants (relatives-chart.js:170)
at t.render (relatives-chart.js:257)
at t.render (simple-api.js:66)
at t.value (chart.tsx:153)
at t.value (chart.tsx:218)
at qa (react-dom.production.min.js:4980)
at Wa (react-dom.production.min.js:5123)
at react-dom.production.min.js:5975
(anonymous) @ relatives-chart.js:202
each @ each.js:13
t.layOutAncestorDescendants @ relatives-chart.js:170
t.render @ relatives-chart.js:257
t.render @ simple-api.js:66
value @ chart.tsx:153
value @ chart.tsx:218
qa @ react-dom.production.min.js:4980
Wa @ react-dom.production.min.js:5123
(anonymous) @ react-dom.production.min.js:5975
e.unstable_runWithPriority @ scheduler.production.min.js:274
Ps @ react-dom.production.min.js:5974
Ts @ react-dom.production.min.js:5958
Cs @ react-dom.production.min.js:5925
Is @ react-dom.production.min.js:6020
On @ react-dom.production.min.js:1737

Exception #2

react-dom.production.min.js:4408 TypeError: Cannot read property 'width' of undefined
at relatives-chart.js:202
at h.each (each.js:13)
at t.layOutAncestorDescendants (relatives-chart.js:170)
at t.render (relatives-chart.js:257)
at t.render (simple-api.js:66)
at t.value (chart.tsx:153)
at t.value (chart.tsx:218)
at qa (react-dom.production.min.js:4980)
at Wa (react-dom.production.min.js:5123)
at react-dom.production.min.js:5975

Browser: Chromium Wersja 76.0.3809.132 (Oficjalna wersja) Arch Linux (64-bitowa)

The GEDCOM I used: https://drive.google.com/open?id=1oroSZAhNPa5DkeVdbDcQt_I-uj08pZNa

Steps to reproduce:

  1. Open the file linked.
  2. Switch to 'Show all relatives'.

Interestingly - if you select 'Ignacy Wylęga' node, then the show All relatives option works fine.

request: family photo instead of person photos

Hi

If a person has a photo, the Topola viewer shows it right next to the person name:

John Doe | photo

In addition, I can add a photo to a family. Then, it would be nice to choose which photos to show: either the photos of the persons of the family (the current implementation):

John Doe | photo1 | Jane Doe | photo2

OR only one family photo, e.g.

John Doe | family_photo | Jane Doe

Thanks a lot for consideration and thanks for this great viewer!
Chris

show multiple person names

Hi

I am quite new to the whole gramps-gedcom-topola topic, so please excuse if this is a stupid question or/and this is the wrong place for it.

In gramps 5.1.2 I start the topola-viewer by clicking Tools -> Analysis and Exploration -> Interactive Family Tree. The family tree is displayed correctly and looks great. However, only one name of a person is shown. I was wondering if there is the possibility to show multiple names of a person?

For example, a person may have an Alternative name next to the Preferred name (using gramps naming here). It would be very nice if, for example, the birth name (Type: Birth Name) of a person would be displayed next to the name taken after marriage (Type: Married Name).

Thanks a lot for any help,
Chris

Make it work on mobile phones

The current experience is suboptimal.
Minimal changes needed:

  • Change menu to be a popup menu instead of listing options on the top bar
  • Make it possible to zoom in/out using the pinch gesture
  • Make the right details panel showable (maybe an icon on the top bar?)

Tree geometry is too sensitive to long strings

My gedcom files contain large locations strings which produce huge node boxes like this:
location

It would help to shorten long strings for nodes and show the full string only in the right detail window.

Security issue

topola-viewer is forcing me to put my gedcom files on a public accessible web space. For example this works for me ("https://myserver.net/" is password protected):

https://myserver.net/topola/#/view?indi=I0019&url=http://myserver.net/data.ged

These one will fail with "Failed to load file" or "NetworkError when attempting to fetch resource.":

https://myserver.net/topola/#/view?indi=I0019&url=https://myserver.net/data.ged

https://myserver.net/topola/#/view?indi=I0019&url=http://local.net/data.ged

"http://local.net/" is free accessible to local hosts, but not from the internet due to a firewall.

The motivation for my request is that I'd like to send links to my relatives, but I do not want to make the gedcom data publicly available.

request: photo above/below names

Hi

It would be nice to choose whether to display photos below/left/above/right of the person infos.

Thanks a lot for this nice viewer!
Chris

Pass gedcom url as parameter

If the topola viewer is embedded in another webpage, is there any way that the url of a gedcom could be passed when calling the topola webpage rather than the user entering it manually? I am not a programmer so not up to installing your code using npm.

I admired the forerunner of this visualiser in GenealogyJ and this is even better.

Localization to other language

Can you localize Topola to other language?
I use Gramps (with date format 30.12.2019 and person name format "Surname (Notpatronymic) Given Patronymic") and see non-localization date in graph - "30 Dec 2019".
In Russian language this date must be "30.12.2019" or "30 Дек 2019".
And I see person's names in other format, not my.

P.S. I see topola-viewer/src/translations/pl.json file, but it not have month names. I can translate this file to ru.json and send to you.
Additionally Gramps plugin must send to your server:

  1. Language code (as example "ru"),
  2. Date format,
  3. Name format.

Gramps plugin: https://github.com/PushKK/addons-source/tree/master/Topola
It's my test fork.

P.P.S. My PR #22

Show partner's ancestors also with multiple marriages

Example: clicking Maria Bach shows Johann Sebastian Bach's ancestors while clicking on him won't show neither Maria Bach's nor Anna Magdalena Wilcke's ancestors.

By the way, it would be useful to have a sign somewhere on a person's box showing there's more family to them when it's not displayed.

Load from URL results in "Forbidden"

Hi,

somehow load from URL stopped working. The URL is accessible and the file exists. It worked fine. Now it shows an error message "Forbidden"

Also the examples in the README show the same error.

Regards

Feature request: display full-size picture

It would be great if there was a way to open the picture of each person in a (zoomable and panable) light-box or in a new tab.

Currently the pictures are available under this type of link: http://127.0.0.1:8156/file/2c0b5981ff404c033cfd991495ff1cf8.JPG which could be exposed somewhere in the interface either as a link or as a clickable picture. As the picture is already being displayed, it could simply be made clickable by wrapping it in a ... tag. To avoid reordering the family tree by clicking on a person, maybe this could be done by displaying a little 🔗 chain symbol when hovering over the picture, which when clicked will then open the picture without triggering a reordering.

Backoffice

What if we built a backoffice?
The web app could easily implement some crud functionality.

And we could change the data source. We could load with a JSON file or, we could load using a database.

Duplicating / Triplicating people on the tree

Dear PeWu

as you know I really love Topola viewer! However, working on my big family tree in Gramps, I notice that Topola viewer duplicates / triplicates people if both spouses have ancestors from the same family. So, instead to just draw another line from parents to the female spouse, it duplicates all the descendants below the female and below male spouse. If you have such thing occurs twice in the family, it triplicates the descendants and the tree becomes very messy and not very clear. Also it widens the hole tree because of the repetition of the same people.

Hope this can be fixed! Many thanks!
Best
Ivan

'Download as PDF' fails for larger trees

Exception

jspdf.min.js:3306 Uncaught (in promise) Error: Supplied Data is not a valid base64-String jsPDF.convertStringToImageData
at Object.t.convertStringToImageData (jspdf.min.js:3306)
at Object.t.addImage (jspdf.min.js:3263)
at t. (chart.tsx:292)
at c (runtime.js:45)
at Generator._invoke (runtime.js:264)
at Generator.t. [as next] (runtime.js:98)
at r (asyncToGenerator.js:3)
at s (asyncToGenerator.js:25)

Browser: Chromium Wersja 76.0.3809.132 (Oficjalna wersja) Arch Linux (64-bitowa)

Search issue

There is a problem with search: after typing some characters the results list disappears.
This only happens for some people.

I attach a video that shows the problem.

searching_issue_new.mp4

Tree not showing correctly

Hi everyone,

great project, I love the simplicity and sleekness :)
I just started making my own tree, and luckily both parents of my wife and me had a lot of data on hand, so in no time I built a large tree. But loading it in Topola is not working properly, one entire branch is not displaying.
My GEDCOM:
REMOVED FOR PRIVACY REASONS

Problem is that when selecting person I0206 his parents (I0307 and I0448) are not shown.
Any ideas what is causing this?
I am using Gramps and I have tried repairing tree and re-exporting, but problem persists. Gramps is showing everything just fine.

Thanks in advance.

Compatibility with webtrees 2.x

Hi. Any indication when your excellent module will be compatible with webtrees 2.x? Webtrees 1.x is now end of life.

Regards, JC

How to set up the first person

How to set up the first person of the tree?
It automatically starts with indi=I0000 or indi=I0001
But when the indi=I0000 has no relatives, then an ordinary user can not change to any other person in the tree.

An user does not know, that he need to ADD the &indi=I0002 to the URL.

npm install failure

Sorry, I don't know NPM very well, but running into this when trying to bootstrap a copy of topoloa-viewer on my server. This is on an Ubuntu 18.04 LTS system. apt_get install npm and then a git clone from today. Here is the error I'm seeing :

43274 verbose addNameRange registry:https://registry.npmjs.org/@types%2fparse-json not in flight; fetching
43275 verbose stack Error: Missing required argument #1
43275 verbose stack     at andLogAndFinish (/usr/share/npm/lib/fetch-package-metadata.js:31:3)
43275 verbose stack     at fetchPackageMetadata (/usr/share/npm/lib/fetch-package-metadata.js:51:22)
43275 verbose stack     at resolveWithNewModule (/usr/share/npm/lib/install/deps.js:456:12)
43275 verbose stack     at /usr/share/npm/lib/install/deps.js:457:7
43275 verbose stack     at /usr/share/npm/node_modules/iferr/index.js:13:50
43275 verbose stack     at /usr/share/npm/lib/fetch-package-metadata.js:37:12
43275 verbose stack     at addRequestedAndFinish (/usr/share/npm/lib/fetch-package-metadata.js:82:5)
43275 verbose stack     at returnAndAddMetadata (/usr/share/npm/lib/fetch-package-metadata.js:117:7)
43275 verbose stack     at pickVersionFromRegistryDocument (/usr/share/npm/lib/fetch-package-metadata.js:134:20)
43275 verbose stack     at /usr/share/npm/node_modules/iferr/index.js:13:50
43276 verbose cwd /home/warped/src/topola-viewer
43277 error Linux 4.15.0-88-generic
43278 error argv "/usr/bin/node" "/usr/bin/npm" "install"
43279 error node v8.10.0
43280 error npm  v3.5.2
43281 error code EMISSINGARG
43282 error typeerror Error: Missing required argument #1
43282 error typeerror     at andLogAndFinish (/usr/share/npm/lib/fetch-package-metadata.js:31:3)
43282 error typeerror     at fetchPackageMetadata (/usr/share/npm/lib/fetch-package-metadata.js:51:22)
43282 error typeerror     at resolveWithNewModule (/usr/share/npm/lib/install/deps.js:456:12)
43282 error typeerror     at /usr/share/npm/lib/install/deps.js:457:7
43282 error typeerror     at /usr/share/npm/node_modules/iferr/index.js:13:50
43282 error typeerror     at /usr/share/npm/lib/fetch-package-metadata.js:37:12
43282 error typeerror     at addRequestedAndFinish (/usr/share/npm/lib/fetch-package-metadata.js:82:5)
43282 error typeerror     at returnAndAddMetadata (/usr/share/npm/lib/fetch-package-metadata.js:117:7)
43282 error typeerror     at pickVersionFromRegistryDocument (/usr/share/npm/lib/fetch-package-metadata.js:134:20)
43282 error typeerror     at /usr/share/npm/node_modules/iferr/index.js:13:50
43283 error typeerror This is an error with npm itself. Please report this error at:
43283 error typeerror     <http://github.com/npm/npm/issues>
43284 verbose exit [ 1, true ]

Any ideas?
Thanks,
-m

Date issue after last update

Hi

I have noticed that after last update the date shows differently then before. Only few days ago it was DD MMMM YYYY (10 Oct 1574) and now out of the sudden it is showing MMMM, DD YYYY (Oct, 10. 1574). I am using topola via Gramps 5.1.3. and I didn't change anything in settings.

Also I noticed that topola after last update started to automatically add "19" in year field if I have only two digits. For example I have only "14" so first two digits of the year of birth. Now, topola-viewer automatically added "19" and it shows "1914" instead on "14" (as in 15 century).

Additionally, I noticed that dates of birth and death are not aligned if one of the two is missing. This is especially visible with spouses. So if male has both dates and female only date of death then the birth day of male will be in the same line with the date of death of female. I believe that the same dates should be in the same line and not mixed up.

Hope that this can be fixed. I really love topola-viewer!
Thanks!
Best
Ivan

PDF export truncated right-most section

I love your stuff and use it all the time.

The issue does not always happen for all my trees. I have some (all from the same GED file) that have this problem.
The screen output is fine. It is just the PDF export the one having the issue.
I can attach some samples.

Thanks

Enrique Waizel

Branching and recombining isn't shown correctly

If a family tree contains married first cousins, the viewer doesn't want to display this, showing the grandparents twice, as if they are separate couples with the same name. Can it combine them together instead of duplicating them?

Instead of

AB  AB
|    |
CD   EF
 |  |
  GH

It should be more like

  AB
 |  |
CD   EF
 |  |
  GH

One language - one file

Topola use two files for all language strings.
As example "pl.json" have full strings for variables from "date-format.ts":

` ...

"date.abt": "około",
"date.cal": "wyliczone",
"date.est": "oszacowane",
"date.between": "między {from} a {to}",
"date.after": "po {from}",
"date.before": "przed {to}",
...`

In date-format.ts - short strings:

` ...

[
'pl',
new Map([
['cal', 'wyl.'],
['abt', 'ok.'],
['est', 'szac.'],
['before', 'przed'],
['after', 'po'],
]),
],`

Can you join all language strings in one file?
It's can be easy way for add new language.

Pictures / thumbnails do not display as expected in Interactive Family Tree

First of all, thanks a lot for this wonderful Gramps plugin I've just discovered, the visualization is great !

I'd like to report what I suspect to be a small bug, or at least something that could be easily enhanced : pictures that show are the raw media files, not the cropped thumbnails created through the Gramps media interface (which are stored inside the gramps 'thumb/' directory). I've used the same picture in Gramps in order to create thumbnails for several people that appear in this given pic, It would be very nice to get the thumbnails for each of them in the tree view as well !

Does not properly handle inter-family marriages

In my family tree two of my ancestors were cousins that were married and had children together.

In gramps, this is represented as follows:
image

However, this visualizer creates two separate trees
image

Essentially, it creates two instances of the same tree.

Obviously not the end of the world, but it would certainly be less confusing if it could handle this edge case more gracefully.

Picture display bug when using Gramps Interactive Family Tree plugin

First of all, thanks a lot for this wonderful Gramps plugin I've just discovered, the visualization is great !

I'd like to report what I suspect to be small bugs, or at least something that could be easily enhanced :

  • when pictures used as medias in Gramps have a '.jpeg' extension, instead of ',jpg', they aren't displayed in the viz (I saw that '.tif' pictures didn't show as well, but maybe this is to be expected ?)
  • pictures that show are the raw media files, not the cropped thumbnails created through the Gramps media interface (which are stored inside the gramps 'thumb/' directory). I've used the same picture in Gramps in order to create thumbnails for several people that appear in this given pic, It would be very nice to get the thumbnails for each of them in the tree view as well !

P.S. This is totally unrelated, but whenever I launch the interactive tree, I land on a person that I think used to be my 'home person' in Gramps, but is not anymore. Do you know if there any cached data that could lead to this behavior ?

Can't log in with my WikiTree ID

Hi- I'm trying to use the topola-viewer with my WikiTree. When I select 'Select WikiTree ID' and enter mine (Pierce-15699), I get this message: "Failed to load file- Cannot convert undefined or null to object." It's not browser specific- I have the same problem with Firefox and Chrome. Am using a Mac. Would appreciate any help. thanks! Joe Pierce, [email protected]

Rendering the complete family tree

I am looking for a way to render the complete family tree of my project. It contains about 200 people. At the moment the ancestors of one person are rendered - depending on which person has been selected. Is there a ways to unhide both branches e.g. the ancestor branch of the mother and the ancestor branch of the father?

I would also be comfortable to modify the source code temporarily if you could point me to the relevant code part.

Gramps / Interactive Family Tree / net::ERR_BLOCKED_BY_CLIENT

I am trying to visualize my Gramps project via the plugin by launching the "Interactive Family Tree" in order to render images. Showing images seems not to be possible when launching the viewer locally as a standalone application.

I do not understand if the launched website should be able to load the data and images just by itself or whether I have to do something. I read in the related issues that CORS is important but that is addressed in the URL. I also read about serving the *.ged file from a public web server. I tried that, too - which resulted in different errors. It would be great if someone could clarify how exactly the Gramps plugin is supposed to work. Thank you!

How to reproduce

  1. Start Gramps 5.1.2
  2. Select Tools / Analysis and Exploration / Interactive Family tree...
  3. The default browser (Brave) opens the following website:
    https://pewu.github.io/topola-viewer/#/view?utm_source=gramps&handleCors=false&standalone=false&url=http://127.0.0.1:8156/
    

Observed behavior

  • The website renders without content, only Failed to load file. Failed to fetch.
    image

  • The browser console outputs:

    Error with Permissions-Policy header: Unrecognized feature: 'interest-cohort'.
    pewu.github.io/:1 GET https://www.googletagmanager.com/gtag/js?id=UA-334534-14 net::ERR_BLOCKED_BY_CLIENT
    load_data.ts:70 GET http://127.0.0.1:8156/ net::ERR_BLOCKED_BY_CLIENT
    

Expected behavior

  • The website renders the family tree with pictures.

Related

Colors by gender instead of by generation

From the WikiTree Apps mailing group by Aleš:

Add different colors for gender. Preferably the ones wikitree uses. It will provide much more info than current coloring by generation. each generation is already in one line. And since male/female do swap, it is even more important to know who is the father/mother. Also the gender of the children can be easily determined by color

request: plot families always from oldest to youngest

Hi

Person P1 and person P2 have child C1. The P1+P2 family divorces. Then, person P1 and person P3 get child C2. Now I want to plot the P1+C1 and P1+P3+C2 families.

The Topola viewer shows the P1+P3+C2 family LEFT of the P1+C1 family, although the P1+P3+C2 family is younger in terms of the 1) existence and 2) age of the child compared to the P1+P2 family.

Would it be possible to place the P1+P3+C2 family RIGHT of the P1+C1 family?

Thank you very much for the nice viewer!
Chris

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.