GithubHelp home page GithubHelp logo

candera / shadowspawn Goto Github PK

View Code? Open in Web Editor NEW
183.0 18.0 55.0 15.47 MB

A Windows utility that mounts a shadow copy of the disk at a drive letter and then spawns an arbitrary command.

License: MIT License

C++ 67.05% C 22.42% Objective-C 10.52% Batchfile 0.01%

shadowspawn's Introduction

Status

NO LONGER SUPPORTED. It might still work - I don't know. I don't run Windows any more. Sorry! I supported it for years but hopefully there's a fork somewhere out there. If you make one and maintain it I will be happy to post a link here.

What Is ShadowSpawn?

ShadowSpawn is a tool for working with shadow copies. Shadow copies are read-only snapshots of your disk. Working with shadow copies instead of the actual files allows you to do things like work with in-use (locked) files.

ShadowSpawn works by making a shadow copy of your disk, making it available at a drive letter, then launching (spawning) another program that you specify.

Probably the most common way to use ShadowSpawn is to use Robocopy make a copy of files that are currently in use.

Installing ShadowSpawn

Most users can simply unzip the appropriate zip file from the download page. ShadowSpawn.exe can then just be run - there is no installer. However, ShadowSpawn uses the Visual C++ runtime, which may not be present on some machines. If ShadowSpawn does not work for you, run the vcredist executable available from the same download page.

Running ShadowSpawn

ShadowSpawn is a command-line tool: there is no GUI.

ShadowSpawn take three arguments:

  1. The directory that contains the files you want to snapshot.
  2. An available drive letter where the snapshot will become visible.
  3. A command to run.

Let's say that you wanted to use robocopy to copy files from the C:\foo directory to the C:\bar directory. You could do that with the following command:

shadowspawn C:\foo Q: robocopy Q:\ C:\bar /s

That would cause shadowspawn to

  1. Make a shadow copy of the C: drive.
  2. Mount the shadowed version of the C:\foo directory at Q:.
  3. Launch robocopy Q:\ C:\bar /s
  4. Wait for Robocopy to finish.
  5. Clean up the shadow copy and remove it from Q:

You can use any drive letter you want (it doesn't have to be Q:), but it does have to be a drive letter that's not currently being used for anything else.

You can run any command you want. So if you just wanted to use notepad to look at a shadow copy of C:\foo\blah.txt, you'd run

shadowspawn C:\foo Q: notepad Q:\blah.txt

Just remember that shadowspawn will remove the Q: drive as soon as the command you specify exits.

Relationship to HoboCopy

ShadowSpawn is derived from the same source code as HoboCopy and is intended to replace it. The evolution was driven by the fact that although the shadow copy part of HoboCopy works well enough, the copying part was nowhere near as robust as tools like RoboCopy. By providing a tool that just takes care of the shadow copy, ShadowSpawn allows users to work with locked and in-use files using any other tool, not just the limited copy features provided by HoboCopy.

Status

ShadowSpawn is currently at version 0.1.0, which is meant to indicate that it is an initial version. While it largely consists of fairly mature code taken from HoboCopy, there are bound to be a few issues as early adopters identify opportunities for improvement.

Reporting Bugs and Requesting Features

Please report bugs and request features using either the project issue tracking system or the project mailing list at [email protected] (website).

USAGE:

Usage:

shadowspawn [ /verbosity=LEVEL ] <src> <drive:> <command> [ <arg> ... ]

Creates a shadow copy of <src>, mounts it at <drive:> and runs <command>.

/verbosity   - Specifies how much information ShadowSpawn will emit
               during execution. Legal values are: 0 - almost no
               information will be emitted. 1 - Only error information
               will be emitted. 2 - Errors and warnings will be
               emitted. 3 - Errors, warnings, and some status
               information will be emitted. 4 - Lots of diagnostic
               information will be emitted. The default level is 2.

<src>        - The directory to shadow copy (the source directory).
<drive:>     - Where to mount the shadow copy. Must be a single letter
               followed by a colon. E.g. 'X:'. The drive letter must be
               available (i.e. nothing else mounted there).
<command>    - A command to run. ShadowSpawn will ensure that <src> is
               mounted at <drive:> before starting <command>, and will
               wait for <command> to finish before unmounting <drive:>


Exit Status:

If there is an error while processing (e.g. ShadowSpawn fails to
create the shadow copy), ShadowSpawn exits with status 1.

If there is an error in usage (i.e. the user specifies an unknown
option), ShadowSpawn exits with status 2.

If everything else executes as expected and <command> exits with
status zero, ShadowSpawn also exits with status 0.

If everything else executes as expected and <command> exits with a
nonzero status code n, ShadowSpawn exits with status n logically OR'ed
with 32768 (0x8000). For example, robocopy exits with status 1 when
one or more files are Scopied. So, when executing

  shadowspawn C:\foo X: robocopy X:\ C:\path\to\backup /mir

the exit code of ShadowSpawn would be 32769 (0x8000 | 0x1).

shadowspawn's People

Contributors

candera avatar kimwolk 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

shadowspawn's Issues

error 2 always if command ARGUMENTS use quotes (to deal with spaces)

Hi. I want to use FastCopy as a command, but ShadowSpawn always fails with error 2, unless I remove all doublequotes from the command and its arguments
example:

ShadowSpawn D:\ B: "C:\Program Files\FastCopy\FastCopy.exe" /cmd=sync /exclude="$RECYCLE.BIN;System Volume Information;RECYCLE?;*\thumbs.db" /auto_close /open_window B:\ /to="\backups\D"

This always ends with error 2, while this works:
cd /d "C:\Program Files\FastCopy"
ShadowSpawn D:\ B: "C:\Program Files\FastCopy\FastCopy.exe" /cmd=sync /exclude=$RECYCLE.BIN;RECYCLE?;*\thumbs.db /auto_close /open_window B:\ /to=\backups\D

But as you can see I had to remove all quotes and values containing spaces, which is suboptimal.
Any advice?
Regards.

Status of task schedule

I use shadowspawn as a scheduled task to backup some files from my C drive. It works properly in Windows 7 but when I migrated to Windows 8.1, it's giving me an (0x8001) error code in Task Scheduler. The log file of the robocopy process itself goes through just fine though, so my files are being copied properly but I'm not sure what that error code say. The weird thing is that this only happens sometimes and not consistent. When I try to manually run the task, sometimes it gives me a successful status.

The task just runs a batch file saved in c:\windows\system32 and the batch file includes these:

shadowspawn C:\Users\KevinMychal\AppData\Roaming\Mozilla\Firefox\Profiles\rrzrruax.default\sessionstore-backups Q: robocopy Q:\

D:\Backup\sessionstore-backups /R:5 /W:15 /COPYALL /PURGE /V /log:C:\robocopy_log.txt
shadowspawn C:\Users\KevinMychal\AppData\Roaming\Mozilla\Firefox\Profiles\rrzrruax.default\bookmarkbackups Q: robocopy Q:\ D:

\Backup\bookmarkbackups /R:5 /W:15 /COPYALL /PURGE /V /log+:C:\robocopy_log.txt
shadowspawn C:\Users\KevinMychal\Desktop Q: robocopy Q:\ D:\Backup\Desktop /R:5 /W:15 /DCOPY:DAT /COPYALL /MIR /V /log+:C:\robocopy_log.txt

What can I do to troubleshoot this further?

Still working on Server 2022

I'm here just to thank you for this utility.

It is very simple to use from the command line and is the main core for my automated virtual machines backup scripts for Virtualbox along with CloneVDI.
It is working on W10 and Server 2022. I can't say if W11 is working with it (I suppose) as I think W11 is not ready for working so I'm not touching it even with a pole. :-/
I have been using it from XP to server 2022 so it has a very long story for compatibility.
The trending of compiling things with the most recent 'items' is against my philosophy of trying to make things work with the less needed resources. The prior will make apps useless to totally working machines today. One example is W11 that will render very capable hardware useless with the arbitrary decision of FORCING every security option on my bought by my money hardware turned on. My hardware, my decision. I don't need to be babysitted.

This software is an example of things done right.

Thank you for this utility.

DosDevice not deleted when error with CreateProcess

Background

If CreateProcess fails, the application exits prior to deleting the DosDevice.

Expected Behavior

Once a DosDevice is successfully created it should be removed through all remaining paths of the code.

Run shadowspawn to just backup vhd's to USB drive without addition command

I'm sorry to bug you with this as you were so kind to respond quickly to my previous post, but I have an old 2008 SBS server running on old Hyper-V. I just want to back up the VHD during the day to a USB drive. I admit, I'm being lazy as I could probably look through to code or be creative, but since you are the author, what is the best command line to use to just backup the VHD's on the Hyper-V machine to a USB drive without running any additional commands after.

I just want the VHD's to be available on USB as normal files. Thanks again ;)

COmpatable versions of VC

Hi there, just wondering if there are any means of getting this to work with newer versions of VCRedistibutable beyond 2010? It seems to rely on msvcp100.dll assuming that's where it was compiled - is there a way to get it working with newer instances found under 2013 or 2015-22 installs at all? I believe these are MSVCP 120 and MSVCP140.

Thanks in advance.

Not working when launched from windows 7 task scheduler

Hello from Spain.
I am using for first time this great tool. The os is Windows 7 Pro.
I have a bat file that uses shadowspawn.exe to create a snapshot of my d: logical unit and mount it on letter k:. In the same command I have another bat that launches robocopy to copy some folders. Something like this:

step1.bat:
shadowspawn D:\ K: step2.bat

step2.bat
Robocopy /MIR "K:\Data" "\Server\Backup\data"
Robocopy /MIR "K:\Data2" "\Server\Backup\data2"
...

If I launch step1.bat directly doing doubleclick it works perfectly. But if I put them into a scheduled task it not works. The scheduled task is running with highest privileges and into a Admin account (the same account that is running).
Any ideas of what can be happening?

Thank you so much.

Allow creation of persistent shadow copies

Background

A user requests on this thread that ShadowSpawn have a way to create persistent shadow copies.

Acceptance Criteria

  • ShadowSpawn allows you to mount a shadow copy on a drive letter that will remain available even after shadowspawn exists.
  • ShadowSpawn provides a way to clean up drive letters so mounted.

spawn console redirect

i have shadowspawn called using createProcess and have redirected console display so that it show in cef3 html gui .

if i run robocopy alone the display shows up as expected - with display updates of robocopy being seen on the screen....
if i run shadowspawn the display updates disappears - but robocopy still runs but no display is seen - any suggestions

so after some trial an error - there is an error in shadowspawn for log files with space.
it works perfectly with robocopy /LOG:"c:\temp\name with spaces.log"

but does not work with shadowspawn if there is spaces in log file

ShadowSpawn should handle ctrl-break

Background

A user reports in this message that after using ctrl-break to terminate ShadowSpawn prematurely, the drive letter remains mounted and he's unable to recover it. It seems like ShadowSpawn isn't cleaning up after being terminated by ctrl-break.

Expected Behavior

  • ShadowSpawn should exit cleaning, and cleanup code should be run, when terminated by ctrl-c or ctrl-break.

References

  • #5: There's no way to recover a drive letter

Tech Notes

We ought to be able to handle ctrl-c, but I'm not sure there's any way to suppress a ctrl-break.

ShadowSpawn fails when robocopy uses a /log argument that includes quotes

When I include a /LOG argument with quotes ShadowSpawn gives the following error message:
Error: Command line contains mismatched quotes: C:\Users\username\Documents\Backup\ShadowSpawn-0.2.2-x64\ShadowSpawn.exe "C:\Users\username\Documents\Backup\Test folder" Q: robocopy Q: "F:\Backup (Test)" /E /COPYALL /FFT /Z /XJ /ETA /LOG:"C:\Users\username\Documents\Backup\log.txt"

In this particular example I can drop the quotes and it works (because there are no spaces in the path).

However, I would eventually like to create a log in a path that includes a space (and therefore requires quotes).

ShadowSpawn should return the command's failure exit code

Background

Currently, ShadowSpawn determines what error code to return based purely on its own error conditions. If the command it launches exits with a nonzero status, however, ShadowSpawn itself will exit with a zero status, effectively losing the failure. This is not desirable.

Acceptance Criteria

  • If ShadowSpawn itself errors, it should return its own nonzero exit status.
  • If the launched command returns a nonzero error, ShadowSpawn should exit with a distinguished nonzero exit status.
  • If everything works, ShadowSpawn should exit with a zero exit status.

robocopy reports error 123

Background

A user reports here that launching Robocopy via ShadowSpawn results in the error

D:\BAT>D:\Software\ShadowSpawn\W7x64\ShadowSpawn.exe "C:\Users\John\Documents\Outloo~1" q: robocopy q:\ D:\Backup\MEDION\My PSTs" "My.pst" /copyall /np /r:0 /w:0 
ShadowSpawn (c) 2011 Craig Andera. [email protected] 
Shadowing C:\Users\John\Documents\Outloo~1 at q: 
Launching command: robocopy q:\ "D:\Backup\MEDION\My PSTs" "My.pst" / 
copyall /np /r:0 /w:0 
--------------------------------------------------------------------------- ---- 
   ROBOCOPY     ::     Robust File Copy for Windows 
--------------------------------------------------------------------------- ---- 
  Started : Wed Jul 27 20:44:35 2011 
2011/07/27 20:44:35 ERROR 123 (0x0000007B) Getting File System Type of Source q:\ 
The filename, directory name, or volume label syntax is incorrect. 
   Source - q:\ 
     Dest : D:\Backup\MEDION\My PSTs\ 
    Files : My.pst 
  Options : /COPYALL /NP /R:0 /W:0 
--------------------------------------------------------------------------- --- 
NOTE : NTFS Security may not be copied - Source may not be NTFS. 
2011/07/27 20:44:35 ERROR 123 (0x0000007B) Accessing Source Directory 
q:\ 
The filename, directory name, or volume label syntax is incorrect. 

Since using Robocopy is the primary use case for ShadowSpawn, we need to figure out why it is failing.

Expected Behavior

When launched via ShadowSpawn, Robocopy should work the same as when launched without.

Quoted arguments not handled correctly

Background

A user reports on this thread that ShadowSpawn does not handle quoted arguments correctly, resulting in the error message Error: Device format is incorrect. Device = Files. The complete command line is as follows:

"D:\Software\ShadowSpawn\W7x64\ShadowSpawn.exe" "C:\Users\John\Documents\Outlook Files" q: robocopy q: D:\Backup\MEDION\My PSTs" "My account.pst" /copyall /np /r:0 /w:0

Expected Behavior

  • The above command should operate correctly, interpreting Q: as the device.

Options starting with - are incorrectly interpreted

A user on the mailing list (here) reports the following:

Hi,

 While attempting to use ShadowSpawn with Rsync, I discovered a bug
in the parsing of
 arguments to .

 Viz., Arguments beginning with '-' are interpreted as arguments to
ShadowSpawn itself,
 rather than arguments to . ShadowSpawn then fails the
operation, complaining
 about an unknown argument.

 This can be fixed in COptions.h, as follows:

-if (options._command.empty() && Utilities::StartsWith(arg, TEXT("/"))
|| Utilities::StartsWith(arg, TEXT("-")))

+if (options._command.empty() && (Utilities::StartsWith(arg,
TEXT("/")) || Utilities::StartsWith(arg, TEXT("-"))))

 ShadowSpawn can then be successfully used with Rsync.

Note that a patch is included.

Statically Link with the VC Runtime

Background

A user requests on this thread that we statically link with the VC runtime to reduce the need to run the redist installer on a bunch of machines.

Acceptance Criteria

  • ShadowSpawn no longer requires the VC redist to be installed first.

Tech Notes

It may be possible to statically link with the VC redist, in which case shadowspawn would become standalone. The issue with doing that is that Microsoft publishes security updates to the redist via Windows Update, and we wouldn't get those if we were statically linked. At that point, it would be on the user to download a new version that had the updated version included. Assuming that one of us notices the update and remembers to compile a new version.

Another possibility would be to do the work to remove the dependency on the VC redist. That work may be extensive in nature - no idea.

Our current priority for this issue is low. Comments, however, are welcome.

ShadowSpawn should fail right away when the source path does not exist

Motivation

Currently, if you specify a non-existent source path, ShadowSpawn will fail, but not until it has made the shadow copy. If we fail right away, the user won’t have to wait for the shadow copy to get created.

Acceptance Criteria

  • Return a specific error prior to creating a shadow copy when the source directory does not exist.

Persistent backups for bare metal recovery

I have a feature request.

Since shadow copies listed by vssadmin are accessible as block devices at .\HardiskVolumeShadowCopy# (w32 device name space) so it'll be really cool to have some something like dd loosely integrated into shadowspan for complete volume backups.

There are few variants of dd.exe out there.

πŸ‘ :)

[Defect] Not all files appear in the shadow copy

Background

While testing ShadowSpawn, we discovered that a .ost file is not appearing in the shadow copy. Other files in the same directory do appear. This is a big problem: sort of the whole reason for ShadowSpawn is to let you back up things like ost files.

Expected Behavior

  • A shadow copy should include all the files in the source directory.

Path with space

  1. Encountered Exit code 2: Path with space, i.e. C:\Users\xxx\Documents\Outlook Files
  2. Encountered Exit code 3 By default, if /verbosity= level not specified
  3. Bummer! Does not support UNC (network storage path)

Relative paths are not handled correctly

Background

In this thread a user reports error "The filename, directoryname, or volume label syntax is incorrect." when running shadowspawn is run like this:

shadowspawn .\dir q: command q:\some\path

It would appear that shadowspawn is not correctly handling relative paths.

Expected Behavior

  • ShadowSpawn should correctly relative paths relative to the current working directory.

How to free drive letter

When shadowspan fails the drive letter seems to be blocked (Error: device allready exists)

Is there a way to release / unmount that drive letter?
Maybe by killing a task?

There's no way to recover a drive letter

Background

A user reports in this message that after using ctrl-break to terminate ShadowSpawn prematurely, the drive letter remains mounted and he's unable to recover it. Rebooting should clear it up, but that's not a good answer.

Expected Behavior

  • There should be a way to recover a lost drive letter without having to reboot.

Ensure drive letter isn't mounted before attempting to use it

Background

Currently, ShadowSpawn attempts to mount the specified path at the designated drive letter regardless of whether anything is already mounted there. This could lead to the drive letter being in a weird state, or to ShadowSpawn unmapping a drive that is already mapped.

Expected Behavior

  • If the user specifies a drive letter that is already mounted, the program should exit with an error before attempting to do anything substantial.

Does this work under Windows Home?

Will this work on Windows Home systems? Does it need VSS or Hyper-V?
Is it a 32-bit or 64-bit app?
What are dependencies/requirements?

Downloads are missing (Have mercy!)

I know this is an old program, but I'm using a Windows 2008 server still. Can you link to downloads? I have tried to figure out how to compile but keep hitting dead ends with M$!!

Issue with not showing any files

The idea is to get a copy of the windows.edb file and copy it via robocopy.
As robocopy does not copy any files I created a "DIR001".cmd.
I start via Startup.cmd

Startup.cmd:

ShadowSpawn /verbosity=4 "C:\ProgramData\Microsoft\Search\Data\Applications\Windows" Q: DIR001.cmd > c:\vvh.txt 2>&1

DIR001.cmd
dir C:\ProgramData\Microsoft\Search\Data\Applications\Windows
dir Q:
echo started Q:\vvh.txt
echo started >Q:\vvh.txt

dir Q:\

OUTPUT vvh.txt
ShadowSpawn (c) 2011 Craig Andera. [email protected]

Argument 0: ShadowSpawn
Argument 1: /verbosity=4
Argument 2: C:\ProgramData\Microsoft\Search\Data\Applications\Windows
Argument 3: Q:
Argument 4: DIR001.cmd
Calling CoInitialize
.........
Calling SetBackupState
Calling PrepareForBackup
Waiting for call to PrepareForBackup to finish...
Call to PrepareForBackup finished.
Calling DoSnapshotSet
Waiting for call to DoSnapshotSet to finish...
Call to DoSnapshotSet finished.
Calling GetSnapshotProperties
Calling CalculateSourcePath
Calling DefineDosDevice to mount device.
Launching command: DIR001.cmd

I:\tools21>dir C:\ProgramData\Microsoft\Search\Data\Applications\Windows
Het volume in station C heeft geen naam.
Het volumenummer is 0ADF-2A7A

Map van C:\ProgramData\Microsoft\Search\Data\Applications\Windows

14/09/2013 21:11

.
14/09/2013 21:11 ..
17/06/2013 18:12 Config
17/06/2013 18:12 GatherLogs
14/09/2013 21:16 8.192 MSS.chk
14/09/2013 21:11 1.048.576 MSS.log
14/09/2013 21:11 1.048.576 MSS0081D.log
17/06/2013 18:12 1.048.576 MSSres00001.jrs
17/06/2013 18:12 1.048.576 MSSres00002.jrs
14/09/2013 21:11 0 MSStmp.log
17/06/2013 18:12 Projects
13/09/2013 19:22 8.454.144 tmp.edb
13/09/2013 19:22 310.444.032 Windows.edb
8 bestand(en) 323.100.672 bytes
5 map(pen) 86.148.792.320 bytes beschikbaar

I:\tools21>dir Q:\
Het volume in station Q heeft geen naam.
Het volumenummer is 0ADF-2A7A

Map van Q:\

14/09/2013 21:55

.
14/09/2013 21:55 ..
17/06/2013 18:12 Config
17/06/2013 18:12 GatherLogs
17/06/2013 18:12 Projects
0 bestand(en) 0 bytes
5 map(pen) 85.656.838.144 bytes beschikbaar

I:\tools21>echo started Q:\vvh.txt
started Q:\vvh.txt

I:\tools21>echo started 1>Q:\vvh.txt
Het medium is tegen schrijven beveiligd.

I:\tools21>dir Q:\
Het volume in station Q heeft geen naam.
Het volumenummer is 0ADF-2A7A

Map van Q:\

14/09/2013 21:55

.
14/09/2013 21:55 ..
17/06/2013 18:12 Config
17/06/2013 18:12 GatherLogs
17/06/2013 18:12 Projects
0 bestand(en) 0 bytes
5 map(pen) 85.656.838.144 bytes beschikbaar
Launched command finished with exit code: 0.
Calling DefineDosDevice to remove device.
Calling BackupComplete
Waiting for call to BackupComplete to finish...
Call to BackupComplete finished.
Shadowing successfully completed.

What am I doing wrong/is going wrong?

Vincent

Configure project to treat all warnings as errors

Motivation

It is a development best-practice to treat all compilation warnings as errors. We should do so as well.

Acceptance Criteria

Successful builds for all configurations have no errors and no warnings.

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.