Giter Club home page Giter Club logo

gmail.ps's Introduction

No Maintenance Intended

Gmail for PowerShell

A PowerShell module for managing your Gmail, with all the tools you'll need. Search, read and send emails, archive, mark as read/unread, delete emails, and manage labels.

This module is no longer maintained.

Table of contents

Install

If you have PsGet installed you can simply execute:

Install-Module Gmail.ps

Or install it manually:

git clone https://github.com/nikoblag/Gmail.ps.git
cd Gmail.ps
.\install.ps1

Features

  • Read emails
  • Search emails
  • (Update) emails: label, archive, delete, mark as read/unread/spam, star
  • Manage labels
  • Move between labels/mailboxes
  • Automatic authentication, using the Windows Credential Manager

Get help

  • List of all available commands

    Get-Command -Module Gmail.ps
  • Help for a specific command.

    Get-Help <command>

Commands

For more detailed information about a command use the help.

New-GmailSession

Opens a connection to a Gmail account using the specified credentials and creates a new session. If a generic credential is created using the Windows Credential Manager (address: Gmail.ps:default), a session is automatically created using the stored credentials each time the cmdlet is executed without a -Credential parameter.

New-GmailSession [[-Credential] <PSCredential>] [<CommonParameters>]

Parameters

Name Pipeline input Default
-Credential No Get-StoredCredential Gmail.ps:default or Get-Credential

Examples

  1. Authenticating a Gmail session using the stored credential in the Gmail.ps:default entry. If there is no credential stored a prompt for username and password will be displayed.

    $gmail = New-GmailSession
    # play with your gmail...

Remove-GmailSession

Closes the connection to Gmail and destroys the session.

Remove-GmailSession [-Session] <ImapClient> [<CommonParameters>]

Parameters

Name Pipeline input
-Session ByValue, ByPropertyName

Examples

  1. Closing an already opened connection to a Gmail account:

    $gmail | Remove-GmailSession

Invoke-GmailSession

Creates a new Gmail session and passes it to a script block. Once the block is executed, the session is automatically closed.

Invoke-GmailSession [[-Credential] <PSCredential>] [-ScriptBlock] <ScriptBlock> [<CommonParameters>]

Parameters

Name Pipeline input Default
-Credential No Get-StoredCredential Gmail.ps:default or Get-Credential
-ScriptBlock No

Examples

  1. Creates a Gmail session, returns the number of messages in the Inbox and then closes the session. The automatically created session can be accessed inside the script block via the $args variable.

    Invoke-GmailSession -ScriptBlock {
        $args | Count-Message
    }
  2. Creates a Gmail session, returns all the labels used in that account and then closes the session. The automatically created session can be accessed inside the script block via the $gmail variable.

    Invoke-GmailSession -ScriptBlock {
        param($gmail)
        $gmail | Get-Label
    }

Get-GmailSession

Returns a list of all opened Gmail sessions.

Get-GmailSession

Clear-GmailSession

Closes all opened Gmail sessions.

Clear-GmailSession

Get-Mailbox

Returns the Inbox if no parameters are specified, an existing Label or one of the default Gmail folders (All Mail, Starred, Drafts, Important, Sent Mail, Spam).

Alias: Select-Mailbox

Get-Mailbox -Session <ImapClient> [[-Name] <String>] [<CommonParameters>]

Get-Mailbox -Session <ImapClient> [-Label <String>] [<CommonParameters>]

Parameters

Name Pipeline input Default (List of possible values)
-Session ByValue, ByPropertyName
-Name ByPropertyName Inbox (All Mail, Starred, Drafts, Important, Sent Mail, Spam)
-Label ByPropertyName

Examples

  1. Get the unread messages in the inbox:

    $inbox = $gmail | Get-Mailbox
    $inbox | Get-Message -Unread
  2. Get the messages marked as Important by Gmail:

    $gmail | Get-Mailbox "Important" | Get-Message

Get-Message

Returns a (filtered) list of the messages inside a selected mailbox (see Get-Mailbox). The returned messages will have their body and attachments downloaded only if the -Prefetch parameter is specified.

Every listed message has a set of flags indicating the message's status and properties.

Flag Meaning
u Is unread
f Is fetched
i Is important
s Is starred
a Has attachment

Any flag may be unset. An unset flag is the equivalent of "is not" and is represented as a - character. --i-a means the message is not Unread, is not Fetched, is Important, is not Starred and has atleast one attachment.

Supports automatic name completion for the existing labels.

Alias: Filter-Message

Get-Message [-Session] <ImapClient>
			[[-From] <String>] [[-To] <String>]
			[[-On] <DateTime>] [[-After] <DateTime>] [[-Before] <DateTime>]
			[[-Cc] <String>] [[-Bcc] <String>]
			[[-Subject] <String>] [[-Text] <String>] [[-Body] <String>]
			[[-Label] <String[]>] [[-FileName] <String>] [[-Category] <String>]
			[-Unread ] [-Read ] [-Starred ] [-Unstarred ] [-HasAttachment ]
			[-Answered ] [-Draft ] [-Undraft ] [-Prefetch ] [<CommonParameters>]

Parameters

Name Pipeline input Default (List of possible values)
-Session ByValue, ByPropertyName
-From No
-To No
-On No
-After No
-Before No
-Cc No
-Bcc No
-Subject No
-Text No
-Body No
-Label No
-FileName No
-Category No none (Primary, Personal, Social, Promotions, Updates, Forums)
-Unread No
-Read No
-Starred No
-Unstarred No
-HasAttachment No
-Answered No
-Draft No
-Undraft No
-Prefetch No

Examples

  1. Get the unread messages in the inbox:

    $inbox = $gmail | Get-Mailbox
    $inbox | Get-Message -Unread
  2. Get the messages marked as Important by Gmail:

    $gmail | Get-Mailbox "Important" | Get-Message
  3. Filter with some criteria:

    $inbox | Get-Message -After "2011-06-01" -Before "2012-01-01"
    $inbox | Get-Message -On "2011-06-01"
    $inbox | Get-Message -From "[email protected]"
    $inbox | Get-Message -To "[email protected]"
  4. Combine flags and options:

    $inbox | Get-Message -Unread -From "[email protected]"

Update-Message

Archives, marks as spam, as read/undead and adds/removes a star from a given message.

Update-Message -Session <ImapClient> -Message <MailMessage> [-Read ] [-Star ] [-Archive ] [-Spam ] [<CommonParameters>]

Update-Message -Session <ImapClient> -Message <MailMessage> [-Read ] [-Unstar ] [-Archive ] [-Spam ] [<CommonParameters>]

Update-Message -Session <ImapClient> -Message <MailMessage> [-Unread ] [-Star ] [-Archive ] [-Spam ] [<CommonParameters>]

Update-Message -Session <ImapClient> -Message <MailMessage> [-Unread ] [-Unstar ] [-Archive ] [-Spam ] [<CommonParameters>]

Parameters

Name Pipeline input
-Session ByValue, ByPropertyName
-Message ByValue
-Read No
-Unread No
-Archive No
-Star No
-Unstar No
-Spam No

Examples

  1. Each message can be manipulated using block style. Remember that every message in a conversation/thread will come as a separate message.

    $messages = $inbox | Get-Message -Unread | Select-Object -Last 10
    foreach ($msg in $messages) {
        $msg | Update-Message -Read # you can use -Unread, -Spam, -Star, -Unstar, -Archive too
    }

Receive-Message

Fetches the whole message from the server (including the body and the attachments).

Receive-Message [-Session] <ImapClient> [-Message] <MailMessage> [<CommonParameters>]

Parameters

Name Pipeline input
-Session ByValue, ByPropertyName
-Message ByValue

Examples

  1. To read the actual body of a message you have to first fetch it from the Gmail servers:

    $msg = $inbox | Get-Message -From "[email protected]" | Receive-Message
    $msg.Body # returns the body of the message

Move-Message

Moves a message to a different mailbox or label.

Supports automatic name completion for the existing labels.

Move-Message -Session <ImapClient> -Message <MailMessage> [-Mailbox] <String> [<CommonParameters>]

Move-Message -Session <ImapClient> -Message <MailMessage> -Label <String> [<CommonParameters>]

Parameters

Name Pipeline input
-Session ByValue, ByPropertyName
-Message ByValue
-Mailbox No
-Label No

Examples

  1. Move the message to the All Mail mailbox:

    $msg | Move-Message "All Mail"
  2. Move the message to the Test label:

    $msg | Move-Message -Label "Test"

Remove-Message

Sends a message to the Gmail's Trash folder.

Remove-Message [-Session] <ImapClient> [-Message] <MailMessage> [<CommonParameters>]

Parameters

Name Pipeline input
-Session ByValue, ByPropertyName
-Message ByValue

Examples

  1. Delete all emails from X:

    $inbox | Get-Message -From "[email protected]" | Remove-Message

Measure-Message

Returns the number of messages in a mailbox (supports labels too).

Alias: Count-Message

Measure-Message [-Session] <ImapClient> [<CommonParameters>]

Parameters

Name Pipeline input
-Session ByValue, ByPropertyName

Examples

  1. Count the messages in the inbox:

    $inbox | Measure-Message
  2. Count the important messages:

    $gmail | Get-Mailbox "Important" | Measure-Message
  3. Note that Measure-Message will return the number of all messages in the selected mailbox, not the number of the returned messages (if any). To count the returned messages, use Measure-Object. For example if we have 2 unread and 98 read messages in the Important mailbox:

    # returns 100, the number of messages in `Important`
    $gmail | Get-Mailbox "Important" | Get-Message -Unread | Measure-Message
    
    # returns 2, the number of unread messages in `Important`
    $gmail | Get-Mailbox "Important" | Get-Message -Unread | Measure-Object

Get-Conversation

Returns a list of messages that are part of a conversation.

Alias: Get-Thread

Get-Conversation [-Session] <ImapClient> [-Message] <MailMessage> [-Prefetch] [<CommonParameters>]

Parameters

Name Pipeline input
-Session ByValue, ByPropertyName
-Message ByValue
-Prefetch No

Examples

  1. Search the Inbox based on the message returned by Get-Message, and return all messages that are part of that conversaton and are in the Inbox:

    $gmail | Get-Mailbox "Inbox" | Get-Message -From "[email protected]" | Get-Conversaion
  2. Search "All Mail" based on the message returned by Get-Message, and return all messages that are part of that conversaton:

    $gmail | Get-Mailbox "All Mail" | Get-Message -From "[email protected]" | Get-Conversaion

Save-Attachment

Downloads the attachments of a message to a local folder.

Save-Attachment [-Message <MailMessage>] [-Path] <String[]> [-PassThru ] [<CommonParameters>]

Save-Attachment [-Message <MailMessage>] -LiteralPath <String[]> [-PassThru ] [<CommonParameters>]

Parameters

Name Pipeline input
-Message ByValue
-Path No
-LiteralPath No
-PassThru No

Examples

  1. Save all attachments in the "Important" label to a local folder. Note that without the -Prefetch parameter, no attachments will be downloaded:

    $gmail | Get-Mailbox -Label "Important" | Get-Message -Prefetch | Save-Attachment $folder
  2. Save just the first attachment from the newest unread email:

    $msg = $inbox | Get-Message -Unread -HasAttachment | Select-Object -Last 1
    $fetchedMsg = $msg | Receive-Message # or use -Prefetch on Get-Message above
    $fetchedMsg.Attachments[0].Save($location)

Get-Label

Returns the labels applied to a message or all labels that exist.

Get-Label -Session <ImapClient> [-Message <MailMessage>] [[-Like] <String>] [-All ] [<CommonParameters>]

Parameters

Name (Alias) Pipeline input
-Session ByValue, ByPropertyName
-Message ByValue
-Like (-Name) No
-All No

Examples

  1. Get all labels applied to a message:

    $msg | Get-Label
  2. Get a list of the defined labels:

    $gmail | Get-Label
  3. Check if a label exists:

    $gmail | Get-Label -Name "SomeLabel" # returns null if the label doesn't exist

New-Label

Creates a new label.

New-Label [-Name] <String[]> -Session <ImapClient> [<CommonParameters>]

Parameters

Name Pipeline input
-Name No
-Session ByValue, ByPropertyName

Set-Label

Applies a label to a message.

Supports automatic name completion for the existing labels.

Alias: Add-Label

Set-Label -Session <ImapClient> -Message <MailMessage> [-Name] <String[]> [-Force ] [<CommonParameters>]

Parameters

Name Pipeline input
-Session ByValue, ByPropertyName
-Message ByValue
-Name No
-Force No

Examples

  1. Apply a single or multiple labels:

    $msg | Set-Label "Important"
    $msg | Set-Label "Important","Banking"
  2. The example above will raise error if one of the specified labels doesn't exist. To avoid that, label creation can be forced:

    $msg | Set-Label "Important","Banking" -Force

Remove-Label

Removes a label from a message or deletes the label from the account.

Supports automatic name completion for the existing labels.

Remove-Label [-Name] <String[]> -Session <ImapClient> [-Message <MailMessage>] [<CommonParameters>]

Parameters

Name Pipeline input
-Name No
-Session ByValue, ByPropertyName
-Message ByValue

Roadmap

  • Write tests
  • Send mail via Google's SMTP servers
  • Backup/restore all messages and labels

History

Check Release list.

Author

Third Party Libraries

Contributing

  1. Fork it.
  2. Create a branch (git checkout -b my_feature)
  3. Commit your changes (git commit -am "Added Feature")
  4. Push to the branch (git push origin my_feature)
  5. Open a Pull Request
  6. Enjoy an ice cream and wait

License

MIT License

gmail.ps's People

Contributors

nblagoev 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gmail.ps's Issues

Get-Message doesn't work without any optional parameters

Would it make sense to have sensible defaults of $imap = @('SEEN','UNSEEN') if no other parameters are specified (I assume this will return all messages)?.

I can add a PR if that's a reasonable way to go about it.

The full exception:

PS C:\Users\administrator> $Session | Get-Mailbox 'Inbox' | Get-Message
Exception calling "Search" with "1" argument(s): "xm003 BAD Could not parse command"
At C:\Users\administrator\Documents\WindowsPowerShell\Modules\Gmail.ps\Gmail.ps.psm1:344 char:5
+     $result = $Session.Search('(' + $criteria + ')');
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : Exception

Message body missing?

Import-Module ".\gmail.ps\Gmail.ps.psm1"
Add-Type -Path '.\gmail.ps\AE.Net.Mail.dll'

$userName = "[YOUREMAIL]"
$password = "[YOURPASSWORD]"
$nc = New-Object System.Net.NetworkCredential($userName, $password); 
$creds = new-object PSCredential($nc.UserName, (ConvertTo-SecureString $nc.Password -AsPlainText -Force))

Invoke-GmailSession -credential $creds -ScriptBlock {
    param($gmail)
    $msgs = $gmail | Get-Mailbox | Get-Message -unread
	foreach($msg in $msgs)
	{
		$msg.From
		$msg.Body
	}
}


I'm receiving blanks /null for $msg.Body even though there is content within the bodies in gmail.

Command Save-Attachment path not working as intended.

Hi,
I have been playing with gmail.ps these last few hours and I have been having issues with the save-attachment command. When I define a $folder = "c:/gmail/"
$gmail | Get-Mailbox -Label "Important" | Get-Message -Unread -HasAttachment -Prefetch | Save-Attachment $folder

the attachments go to the location of the ps1 script under the folder "c".
script location "c:/scripts/gmail.ps1"
location of attachments "c:/scripts/c/"
I was expecting the attachments to be located under "c:/gmail/".
Is this a bug or am I missing something?

Thanks in advance.
Johnty

Multiple ContentTypes in a single email

I'm trying to download a few particular messages, and they're coming down with a "text/plain" ContentType, basically saying to "enable HTML in your provider". If I View Original in Gmail, I see both the text/plain and text/html content (which is what I want). Am I doing something wrong, or missing something obvious? Thanks!

Exception calling "SetFlags" with "2" argument(s): "BAD Invalid Arguments: Unable to parse flag \None"

Same setup as the previous:

Invoke-GmailSession -Credential $mycreds -ScriptBlock {
param($gmail)
$inbox = $gmail | Get-Mailbox
$messages = $inbox | Get-Message | Select-Object -Last 10
foreach ($msg in $messages) {
Update-Message -Session $gmail -Message $msg -Unread
}
}

I had a look in the Gmail.ps.psm1 and tried the -star -unstar flags - these worked fine - however the -Unread did not..

Complete exception:
Exception calling "SetFlags" with "2" argument(s): "BAD Invalid Arguments: Unable to parse flag \None"
At C:\Users[user]\Documents\WindowsPowerShell\Modules\Gmail.ps\Gmail.ps.psm1:563 char:64

  •             $Session.SetFlags([AE.Net.Mail.Flags]$flags, @($Message))
    
  •                                                            ~~~~~~~~
    
    • CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    • FullyQualifiedErrorId : Exception

Can't use -On or -After in simple scripts on diff versions

I tried this on Powershell 2 and Powershell 4 on Windows Server 2008 and Windows 7 using different PCs.

This is a sample code:
$EmailUser = '[email protected]'
$EmailUser2 = '[email protected]'
$EmailSubject = "isAlive"
$pw = [System.Convert]::FromBase64String("Base64Password")
$pw = [System.Text.Encoding]::UTF8.GetString($pw)

$secpasswd = ConvertTo-SecureString $pw -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ($EmailUser, $secpasswd)
$gmail = New-GmailSession -Credential $mycreds

$inbox = $gmail | Get-Mailbox
$inbox | Get-Message -Before "2014-11-30" ## This works fine.
$inbox | Get-Message -After "2014-11-30" ## This does not work.

Using -After gives us this error:

"Exception calling "Search" with "1" argument(s): "xm003 BAD Could not parse command"
At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Gmail.ps\Gmail.ps.psm1:344 char:5

  • $result = $Session.Search('(' + $criteria + ')');
    
  • ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    • CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    • FullyQualifiedErrorId : Exception
      "

Using -On gives us this error:
GetRFC2060Date : Cannot process argument transformation on parameter 'date'. Cannot convert null to type "System.DateTime".
At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Gmail.ps\Gmail.ps.psm1:276 char:44

  •     $imap += 'ON "' + $(GetRFC2060Date $After) + '"'
    
  •                                        ~~~~~~
    
    • CategoryInfo : InvalidData: (:) [GetRFC2060Date], ParameterBindingArgumentTransformationException
    • FullyQualifiedErrorId : ParameterArgumentTransformationError,GetRFC2060Date"

Reading and displaying the content of the subject line

Maybe on the wrong place requested but I am new and dont now where to put it elswhere:

I like to read automaticly only the content (money value in $123.45 format) of the subjectline and show that info in an external counter.

Is Gmail.ps the right program for it?

If yes: Please give an example

Remove-Message Permanently deleting emails

This may very well be a setting in the gmail inbox directly, but upon using the Remove-Message command, the message does not appear in the trash 'folder', it's simply gone gone.

Any clues?

Update-Message : Parameter set cannot be resolved using the specified named parameters.

First off - very nice, lightweight, scripting opportunities - couldn't find any other way of getting the body of the mails so effortlessly.

Maybe not a bug - but I tried to find the problem other places without luck.
Pretty much using the Readme.md example I am getting the error as shown above.

script is:
$secpasswd = ConvertTo-SecureString "---" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("---", $secpasswd)

Invoke-GmailSession -Credential $mycreds -ScriptBlock {
param($gmail)
$inbox = $gmail | Get-Mailbox
$messages = $inbox | Get-Message | Select-Object -Last 10
foreach ($msg in $messages) {
$msg | Update-Message -Unread
}
}

Am I doing it wrong?

Message Body is empty.

I want to use gmail.ps to parse some of the messages in my inbox, but it doesn't seem to pull the Body. I can see pretty much every other field (Headers, From, To, etc.), so I wonder if this is part of the work-in-progress?

Thanks!

Move-Message Exception calling "MoveMessage" with "2" argument(s)

I'm getting an error calling Move-Message:

Exception calling "MoveMessage" with "2" argument(s): "NO [TRYCREATE] No folder All Mail (Failure)"

Full Code:
$gmail = New-GmailSession -Credential $Creds
$inbox = $gmail | Get-Mailbox
$msgs = $inbox | Get-Message -Read -Prefetch
$msgs[0] | Move-Message "All Mail" -Session $gmail

The All Mail folder definitely exists. I've tried the below command and it fines the folder fine:
$allMail = $gmail | Get-Mailbox "All Mail"

Exception calling "Search" with "1" argument(s): "xm003 BAD Could not parse command

"Exception calling "Search" with "1" argument(s): "xm003 BAD Could not parse command"
At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Gmail.ps\Gmail.ps.psm1:344 char:5

+ $result = $Session.Search('(' + $criteria + ')');
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : Exception
"
I have found that this happens if you use the following switches with any other parameters (
-Read** and -Unread).

This is because of an additional space after the criteria string on lines 254 & 256 of Gmail.ps\Gmail.ps.psm1

Kindly help correct these as soon as possible.
Great job.

install.ps1 issues

When I try to install your module with the install.ps1 script i get this error.

C:\Users\Gamer\Documents\GitHub\Gmail.ps [master]> .\install.ps1
Import-Module : The 'C:\Users\Gamer\Documents\WindowsPowerShell\Modules\Gmail.p
s\Gmail.ps.psd1' module cannot be imported because its manifest contains one or
more members that are not valid. The valid manifest members are ('ModuleToProc
ess', 'NestedModules', 'GUID', 'Author', 'CompanyName', 'Copyright', 'ModuleVer
sion', 'Description', 'PowerShellVersion', 'PowerShellHostName', 'PowerShellHos
tVersion', 'CLRVersion', 'DotNetFrameworkVersion', 'ProcessorArchitecture', 'Re
quiredModules', 'TypesToProcess', 'FormatsToProcess', 'ScriptsToProcess', 'Priv
ateData', 'RequiredAssemblies', 'ModuleList', 'FileList', 'FunctionsToExport',
'VariablesToExport', 'AliasesToExport', 'CmdletsToExport'). Remove the members
that are not valid ('RootModule'), then try to import the module again.
At C:\Users\Gamer\Documents\GitHub\Gmail.ps\install.ps1:65 char:18

  • Import-Module <<<<  -Name $Destination\Gmail.ps
    
    • CategoryInfo : InvalidData: (C:\Users\Gamer...s\Gmail.ps.psd1:
      String) [Import-Module], InvalidOperationException
    • FullyQualifiedErrorId : Modules_InvalidManifestMember,Microsoft.PowerShe
      ll.Commands.ImportModuleCommand

Gmail.ps is installed and ready to use

Maybe i'm doing it wrong or missing some dependencies that are not mentioned. I haven't really looked into this issue since I currently don't have much powershell knowledge.

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.