Giter Site home page Giter Site logo

git-changelog's Introduction

git-changelog logo

NPM Version Build Status Test Coverage Code Climate Discord chat

A git changelog based on ANGULAR JS commit standards (but adaptable to your needs). NPM page

Works as a CLI option or grunt plugin

Example output


Breaking changes and updates

v2.0.0

Included commit_template option, allows to customize commit outputs.

You can use the following commit properties:

  • commit.subject
  • commit.body
  • commit.link
  • commit.hash
  • commit.breaks
  • commit.type
  • commit.component
  • closes: String containing the issues closed
  • link: Link to the commit
  • commit.author

V1.0.0

Since version 1.0.0 git-changelog has included the .changelogrc specification and has discontinued the next options:

  • grep_commits option has been removed in favour of the .changelogrc options
  • repo_url fixed as parameter
  • branch_name changed to branch

v1.1.0

  • version_name instead of version

.changelogrc specification

The .changelogrc file contains the "standard commit guideliness" that you and your team are following.

This specification is used to grep the commits on your log, it contains a valid JSON that will tell git-changelog which sections to include on the changelog.

{
    "app_name": "Git Changelog",
    "logo": "https://github.com/rafinskipg/git-changelog/raw/master/images/git-changelog-logo.png",
    "intro": "Git changelog is a utility tool for generating changelogs. It is free and opensource. :)",
    "branch" : "",
    "repo_url": "",
    "version_name" : "v1.0.0",
    "file": "CHANGELOG.md",
    "template": "myCustomTemplate.md",
    "commit_template": "myCommitTemplate.md"
    "sections": [
        {
            "title": "Bug Fixes",
            "grep": "^fix"
        },
        {
            "title": "Features",
            "grep": "^feat"
        },
        {
            "title": "Documentation",
            "grep": "^docs"
        },
        {
            "title": "Breaking changes",
            "grep": "BREAKING"
        },
        {
            "title": "Refactor",
            "grep": "^refactor"
        },
        {
            "title": "Style",
            "grep": "^style"
        },
        {
            "title": "Test",
            "grep": "^test"
        },
        {
            "title": "Chore",
            "grep": "^chore"
        },
        {
            "title": "Branchs merged",
            "grep": "^Merge branch"
        },
        {
            "title" : "Pull requests merged",
            "grep": "^Merge pull request"
        }
    ]
}

Options | Defaults

  • branch : The name of the branch. Defaults to
  • repo_url : The url of the project. For issues and commits links. Defaults to git config --get remote.origin.url
  • provider : Optional field, the provider is calculated from the repo_url, but can also be passed as config parameter. Values available: gitlab, github, bitbucket.
  • version_name: The version name of the project.
  • file: The name of the file that will be generated. Defaults to CHANGELOG.md, leave empty for console stream
  • template: The template for generating the changelog. It defaults to the one inside this project (/templates/template.md)
  • commit_template: The template for printing each of the commits of the project. It defaults to the one inside this project (/templates/commit_template.md)
  • app_name : The name of the project. Defaults to My App - Changelog
  • intro : The introduction text on the header of the changelog. Defaults to null
  • logo : A logo URL to be included in the header of the changelog. Defaults to null
  • changelogrc : Relative path indicating the location of the .changelogrc file, defaults to current dir.
  • tag: You can select from which tag to generate the log, it defaults to the last one. Set it to false for log since the beginning of the project
  • debug: Debug mode, false by default
  • sections: Group the commit by sections. The sections included by default are the ones that are on the previous example of .changelogrc file.

The "git_changelog" task

Grunt Task

Getting Started

This plugin requires Grunt 1.0.0

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install git-changelog --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('git-changelog');

In your project's Gruntfile, add a section named git_changelog to the data object passed into grunt.initConfig().

grunt.initConfig({
  git_changelog: {
    minimal: {
      options: {
        file: 'MyChangelog.md',
        app_name : 'Git changelog',
        changelogrc : '/files/.changelogrc',
        logo : 'https://github.com/rafinskipg/git-changelog/raw/master/images/git-changelog-logo.png',
        intro : 'Git changelog is a utility tool for generating changelogs. It is free and opensource. :)'
      }
    },
    extended: {
      options: {
        app_name : 'Git changelog extended',
        file : 'EXTENDEDCHANGELOG.md',
        version_name : 'squeezy potatoe',
        sections : [
          {
            "title": "Test commits",
            "grep": "^test"
          },
          {
            "title": "New Awesome Features!",
            "grep": "^feat"
          }
        ],
        debug: true,
        tag : false //False for commits since the beggining
      }
    },
    fromCertainTag: {
      options: {
        repo_url: 'https://github.com/rafinskipg/git-changelog',
        app_name : 'My project name',
        file : 'tags/certainTag.md',
        tag : 'v0.0.1'
      }
    },
    customTemplate: {
      options: {
        app_name : 'Custom Template',
        intro: 'This changelog is generated with a custom template',
        file: 'output/customTemplate.md',
        template: 'templates/template_two.md',
        logo : 'https://github.com/rafinskipg/git-changelog/raw/master/images/git-changelog-logo.png',
        version_name : 'squeezy potatoe',
        tag: 'v0.0.1',
        debug: true
      }
    }
  }
})

Command Line

Install it globally

npm install -g git-changelog

See commands

git-changelog -h

Use it directly with the common options

 Usage: git-changelog [options]

  Options:
    -V, --version                               output the version number
    -e, --extended                              Extended log
    -n, --version_name [version_name]           Name of the version
    -a, --app_name [app_name]                   Name [app_name]
    -b, --branch [branch]                       Branch name [branch]
    -f, --file [file]                           File [file]
    -tpl, --template [template]                 Template [template]
    -ctpl, --commit_template [commit_template]  Commit Template [commit_template]
    -r, --repo_url [repo_url]                   Repo url [repo_url]
    -l, --logo [logo]                           Logo path [logo]
    -i, --intro [intro]                         intro text [intro]
    -t, --tag [tag]                             Since tag [tag]
    -rc, --changelogrc [changelogrc]            .changelogrc relative path [changelogrc]
    -g, --grep [grep]                           Grep commits for [grep]
    -d, --debug                                 Debugger
    -p, --provider [provider]                   Provider: gitlab, github, bitbucket (Optional)
    -h, --help                                  output usage information


For example:

git-changelog -t false -a "My nice application"

Git Commit Guidelines - Source : "Angular JS"

We have very precise rules over how our git commit messages can be formatted. This leads to more readable messages that are easy to follow when looking through the project history. But also, we use the git commit messages to generate the AngularJS change log.

Commit Message Format

Each commit message consists of a header, a body and a footer. The header has a special format that includes a type, a scope and a subject:

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

Any line of the commit message cannot be longer 100 characters! This allows the message to be easier to read on github as well as in various git tools.

Example commit messages

git commit -m "docs(readme): Add documentation for explaining the commit message"
git commit -m "refactor: Change other things"

Closing issues :

git commit -m "fix(git_changelog_generate): pass tag if it exists to gitReadLog
Previously if a tag was found the script would try to find commits
between undefined..HEAD. By passing the tag, it now finds tags between
tag..HEAD.

Closes #5."

Example types

You may define your own types refering to the .changelogrc specification

Must be one of the following:

  • feat: A new feature
  • fix: A bug fix
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
  • refactor: A code change that neither fixes a bug or adds a feature
  • test: Adding missing tests
  • chore: Changes to the build process or auxiliary tools and libraries such as documentation generation

Scope

The scope could be anything specifying place of the commit change. For example $location, $browser, $compile, $rootScope, ngHref, ngClick, ngView, etc...

Subject

The subject contains succinct description of the change:

  • use the imperative, present tense: "change" not "changed" nor "changes"
  • don't capitalize first letter
  • no dot (.) at the end

###Body Just as in the subject, use the imperative, present tense: "change" not "changed" nor "changes" The body should include the motivation for the change and contrast this with previous behavior.

###Footer The footer should contain any information about Breaking Changes and is also the place to reference GitHub issues that this commit Closes.

A detailed explanation can be found in this [document][commit-message-format]. [commit-message-format]: https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#

Tagging your project

In order to have you project versions correctly displayed on your changelog, try to use this commit message format:

chore(release): v1.4.0 codename(jaracimrman-existence)

In order to do that, you can use git annotated tags:

git tag -a v1.4.0 -m 'chore(release): v1.4.0 codename(jaracimrman-existence)'

If you are publishing NPM modules you can let NPM do that for you:

npm version patch -m "chore(release): %s codename(furious-stallman)"

Release History

v2.0.0

  • Introduced Commit Template

v1.0.0

  • Support for .changelogrc

Contributors

Add your name here by contributing to this project

git-changelog's People

Contributors

colegleason avatar dependabot[bot] avatar fabn avatar glebcha avatar jodybrewster avatar kerimdzhanov avatar nadrane avatar olamothe avatar pmiossec avatar rafinskipg avatar seivan avatar sjors avatar xcambar 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

git-changelog's Issues

Grunt git_changelog doesn't work

I am trying to use this plugin but doesn't work.
Every time I try to run task git_changelog the console show me log Warning: Task "git_changelog" not found. Use --force to continue

Incorrect url being generated for the commit id (HELP WANTED)

I have my config as such ( removing some internal stuff)

    git_changelog: {
            release_notes: {
                options: {
                    file: 'RELEASE_NOTES.md',
                    app_name: 'TEST',
                    repo_url: 'https://<internal git lab host>/<group>/<test>',
                    grep_commits: '^fix|^feat|^docs|^refactor|^chore|^style|^test|BREAKING'
                }
            }
        }

and when I generate the change log the link to the commit gets formatted as such
https://///commits/426fc8efaea3b245f7ca07532e9edee644f3fe42

For some reason it has 'commits' instead of 'commit' which messes up the link

Multiple Sections in single commit

Hi,
I have following commit message

BREAKING: String.As has been changed to BaseUrl to better describe it feature: T.String for Encode and Typed for Decode

It isn't added to changelog, is there something missing or i am doing wrong? Is there something there for multiple sections data in single commit just like this one?

Thanks

v0.2.0

Lists of tasks needed :

  • Group commits by tag when generating from the beggining of time
  • Add a breaking changes section to our readme when the 0.2.0 is released
  • Add our own changelog once we generate next versions
  • Create our own .changelogrc file for our project
  • Change log colors
  • Clean readme
  • Logo in changelogs

Sorry, you've not configured an origin remote or passed a `repo_url` config value

i've got this config:

{
    "app_name": "processo",
    "logo": "https://github.com/rafinskipg/git-changelog/raw/master/images/git-changelog-logo.png",
    "intro": "Projeto de controle",
    "branch" : "master",
    "repo_url": "git@xxxxxx:xxxxxx/processo.git",
    "version" : "v1.0.0",
    "file": "CHANGELOG.md",
    "sections": [
        {
            "title": "Correções de Bug",
            "grep": "(\[FIX\])|correção/i"
        },
        {
            "title": "Features",
            "grep": "\[FEATURE\]"
        },
        {
            "title": "Erro 500",
            "grep": "\[500\]"
        },
        {
            "title": "Refactoração",
            "grep": "\[REFACTOR\]"
        },
        {
            "title": "Test",
            "grep": "\[TEST\]"
        },
    ]
}

i use this command:

git changelog -r [email protected]:xxxxxxx/processo.git

and i get this output:

Executing git changelog:
  - With URL [email protected]:xxxxxxx/processo.git
Found changelog rc
Sorry, you've not configured an origin remote or passed a `repo_url` config value

what am i doing wrong?

Getting undefined as base commit

Running "git_changelog:minimal" (git_changelog) task
THemaster
Reading git log since changelog-start
Executing :  git log develop --grep="^fix|^feat|^docs|BREAKING" -E --format=%H%n%s%n%b%n==END== undefined..HEAD
Parsed 0 commits
Generating changelog to CHANGELOG.md (  )

Running "git_changelog:extended" (git_changelog) task
THemaster
Reading git log since changelog-start
Executing :  git log develop --grep="^fix|^feat|^docs|^refactor|^chore|BREAKING" -E --format=%H%n%s%n%b%n==END== undefined..HEAD
Parsed 0 commits
Generating changelog to CHANGELOG.md (  )

Version does not default to tag name

I removed the version from the rc to that it uses the last tag but it doesn't.

version: The version of the project. Defaults to , DEPRECATED will default to the tag name

Is the defaulting deprectated or is version deprecated?

Found changelog rc
  - The APP name is <name>Changelog
  - The output file is CHANGELOG.md
Reading git log since #205
Generating changelog to CHANGELOG.md (  )
Finished generating log Yai!

New features

  • Deploy changelog in a browser
  • Provide throught a link access to the details of commit to the remote repository

Change Options

Change the task options to:

{
 sections: [
     {
        name: 'Features', //title of the section
        grep: '^feat',   //grep the commits that start with "feat"
       commitLInks : true //link descriptions to commit url.
    },
   {
      name: 'Documentation',
      grep: '^docs'
    }
  ],
  ignoreTags: false, //Parse since the beggining of the repository, instead of the last tag.
  file: 'changelogs/CHANGELOG.md,  //Output

},

Where:

File can be

 file: {
   'dir' : 'changelogs/'
   'name': 'CHANGELOG.%version%.%date%.md' //Allowing template with some values
}

New wanted features - WIP

Hey,
I've added git-changelog to a project and though it works very well, I was quite surprised to see that the default (and only, afaict) behaviour is to overwrite the CHANGELOG.

Did I miss an option? Are there any plans in 0.2 to change that behaviour?

FWIW, I've had to do the following to have it append:

  • Copy the current Changelog to a temp file
  • generate the new changelog
  • Remove header from the new
  • Remove footer from the new
  • Append the temp file (aka, previous changelog)

Create changelogs from non-downloaded repositories

Git does not provide the functionality of retrieving the history from a repository you have not downloaded.
In order to have the feature of logging remote repositories without being in a repo folder some code has to be written.
I think in terms of functionality it should do something like this:

Whenever a user types -r REPO_URL on a folder that it's not a git repo:
Create a folder called .tmp (in the git-changelog directory?)
Go into that folder and clone the remote repo
Do the git log in that repo
Remove the folder .tmp after some time.
This will be time expensive.. but i think its a cool feature

Make git-changelog available for webpack or gulp?

Is there a plan to do this i the future? Since I am not using grunt at all, the command line option is likely the only one. Though it would be nice to have it built into the build system though. How hard is it? I would love to help. Though, need to learn to use this in command line first, ha.

or there is easier way to integrate into those two hot ones?

Refactor code to improve testability

@rafinskipg, I completely agree with issues #16 and #18. We definitely need to increase test coverage and usingsinon would be a great addition to the test suite.

That said, as-is the existing code-base is somewhat difficult to test. Before you proceed with 0.2.0 I suggest the following:

  • decouple tests from the git_changelog grunt task, replace with fixtures so test input is predictable
  • refactor code to improve testability
  • add a coverage tool to determine how much of test code is being tested (I suggest istanbul)
  • as suggested by #16, add tests to increase coverage
  • as suggested by #18, use sinon to stub and spy on calls to external functions

Additionally, I would:

  • add node 0.12.x to travis-ci configuration
  • add badge to README to show the status of the current build (from travis)
  • add badge to README to show the test coverage of the current build (using either coveralls or code climate)
  • improve readability
  • reduce method complexity

I'll be more than happy to assist with a PR.

Grouped by tag for the full history (HELP WANTED)

Is it possible to have sections grouped by tags from the beginning of the log history? currently enabling tags will only show changes till the last tag but I want to have the changes grouped by those tags.

CLI option

Was thinking it would be great if you could run this straight from the terminal as a cli also. That way you could do a global install, set up a few config options and simply call it from the command line. It might read the repo package.json file to retrieve the url and name so you don't have to pass that along.

Unable to generate changelog

I am testing out the cli version of this tool with the following log

commit 5cbf787a298973464145b35b330b869bf8dd28a3
Author: angelblade27
Date:   Tue Jan 5 12:40:34 2016 -0800

    chore(package.json): Release v0.3.12


commit d67631933436705d857c3a8873af414a5149fb39
Merge: 3a4f3c6 21d6373
Author: angelblade27
Date:   Tue Jan 5 19:51:14 2016 +0000

    Merge branch 'validate-msg' into 'master'

    fix(validate-commit-msg.js): Fix character length validation against short description

    # Description
    Validation against the commit msg for character count consider the entire commit message rather than just the short description this changes breaks the commit message into different parts and validates against the short description

 commit 3a4f3c64b848e27dafc489aa27a879766107fa4f


commit 4233745b45e000f55a054f76ad1a74e8aaccb4af
Author: angelblade27
Date:   Tue Jan 5 10:43:09 2016 -0800

    style(push-hook): Fix done outputs

however when i run the changelog it doesnt parse anything

git-changelog -d -t v.0.3.11
Executing git changelog:
Debug enabled
  - Generating log since tag v.0.3.11
  - The APP name is My app - Changelog
  - The output file is CHANGELOG.md
Reading git log since v.0.3.11
Executing :  git log  --grep="^fix|^feat|^docs|BREAKING" -E --format=%H%n%s%n%b%n==END== v.0.3.11..HEAD
Parsed 0 commits
Generating changelog to CHANGELOG.md (  )
Finished generating log Yai!

It looks like it parsed nothing.
1.) What am I doing wrong?
2.) Will it parse the merge requests?

Document tag behavior

how does this work when you have tags? It seems to try to grab a tag from way back.

Use the repo_url

At the momment the repo_url is only used for the issues / commits link.
The git commands only work in the actuall git project.

Add sinon for better tests

Right now the new tests doesn't ensure that the functionality is working, instead they ensure certain paths of the code are used, make use of sinon for ensuring certain functions are called. Stub and compare if provided params are ok.

Output not formatting new lines correctly

Two little formatting issues that are closely related.

  1. When outputting a series of commits that fall under the same feature the sub list displays inline rather than giving each new item a new line.
  2. Commits under a type list are also not displaying correctly on their own new line. I suspect that this may be related/flowing on from the previous issue.

See the below example that was generated from a demo repo I setup.

Example 1 Output: Start

Chore

  • $scope:
    • add some object setting - add some additional dependency - add basic service- docs: add changelog- maintain: add initial project root index

Example 1 Output: End

I'm assuming the above should look more like:

Example 2 Output: Start

Chore

  • $scope:
    • add some object setting
    • add some additional dependency
    • add basic service
  • docs: add changelog
  • maintain: add initial project root index

Example 2 Output: End

What branch is the git log generated in comparing to?

Lets for example if I am in a feature branch, I generated the change log... in compare with a choose branch and only show changes in diff between those two specific branches. How can I do that? I did not see a way I can do it yet.

Any guidance on this?

Thanks!!!

pull-requests and merge commits

How are people dealing with the automatically generated commit messages? I get 'warning incorrect commit messages' for these.

ex:

'Merge pull request #5 from ...'

'Merge branch 'feature A'

Avoid launching CLI option on certain cases

When you are using the grunt task, it launches also the cli option

This is because the bin is defined on the package.json

"bin": {
    "git-changelog": "tasks/command.js"
  },

This causes that it executes it 2 times..

Is this still active?

Just downloaded and gave this a try and it works pretty good. However, I've noticed there's a few unanswered issues and I'm wondering if this is because you're no longer maintaining this project. If not are you using another tool to achieve this? I'd be keen to know as I've tried a few unsuccessfully.

Thanks.

Add more tests

Ensure that the options works as described.

For that it has been created a msg that is getting constructed through the changelog.generate method, then it can be parsed on the tests to ensure that certain conditions have been met.

describe('Params tests', function() {
    it('should read log since beggining if tag is false', function(done) {

      var options = _.cloneDeep(defaults);

      options.tag = false;
      options.name = 'my name';

      ch.generate(options)
        .then(function(opts){
          expect(opts.msg).to.be.a('string');
          expect(opts.msg.indexOf('since beggining')).to.not.equal(-1);
          done();
        })
        .catch(function(err){
          console.log('error', err);
        })
    });
  });

How to read tag that created in the new line?

For example for a single commit message I have

feat(ad): make new ad
some note here
reg(ad): need a walk through

so in the 3rd line, there will be a reg tag, but even I added in the changelogrc, it seems still not get recognized.

How can I make it recognizable even its not at the beginning of the commit message?

Not possible to overwrite defaults

Here's my configuration:

grunt.config('git_changelog', {
    minimal : {
      options: {
        app_name : grunt.file.readJSON('project-config.json').git_changelog.app_name,
        debug: true,
        file : "../CHANGELOG.md"
      }
    }
  });

When run:
Executing git changelog:

  • The APP name is My app - Changelog
  • The output file is CHANGELOG.md

Running "git_changelog:minimal" (git_changelog) task
Error generating changelog [TypeError: Cannot call method 'indexOf' of undefined]
Error generating changelog [TypeError: Cannot call method 'indexOf' of undefined]

Show warnings by default

E.g. Invalid changelogrc file is pretty crucial; I didn't realise this was the issue until I ran with --debug.

Alternatively some warnings could be upgraded to errors.

Group Commits by tag

As specified in the readme , finish the enhancement of grouping commits by tag

ENOENT error when calling changelog.generate()

Found that .writeChangelog() (which is called by .generate() does not wait for the open event on its stream parameter. When stream is set to stdout by .generate() its no big deal. If the file passed to fs.createWriteStream() already exists it's also not an issue. However, if the file doesn't exists then writing to the stream may sporadically fail with an ENOENT error.

I propose refactoring .writeChangelog() into an asynchronous method (so that it can wait for the open event) that returns a promise to .generate().

Will add this fix to PR #20.

Create a Grunt Plugin

I want this project to be a grunt plugin, available to be installed with npm

I want the gruntfile to allow configuration for:

  • Repository url
  • ? export format ?

template.md

Hi,
Sample template misses space between version no. which causes it to not display it with proper heading.

git-changelog

Closed-source options

Sorry to be the evil-one, but I would like to use this tool to generate change logs for a closed-source project. To do this, I need

  • An option to turn off the github commit links, as our readers won't have access to the repo.
  • An option to override the salute message.

I'm happy to write the pull request for this, but I would like some advice on how to pass options object through to the relevant parts of the code, as I'm new to the require style of programming used in this project.

Change the use of version option

Version option should only be used if :

  • There is no tag name / there is no tag

If a tag is provided, use this format:

v0.2.0 - Version Name (Date)

Note that version would be 'Version Name'

Roadmap

For v1

  • avoid using Angular commit standards and allow any configuration through .changelogrc

Remove Grunt from peerDependencies

Considering that the module works like a charm without grunt, would you mind removing grunt from the peerDependencies in the package.json ? It prevents using shrinkwrap as we don't use grunt at all. What do you think ?

Custom logo

Generate changelogs with custom logo embebed

options: {
    file: 'MyChangelog.md',
    logo: './images/logo.png',
    app_name : 'Git changelog'
}

Adding this markup to the file

<a name="">Version 0.2.0</a>

<img width="300px" src="http://upload.wikimedia.org/wikipedia/commons/4/4a/Logo_2013_Google.png" />

__Git changelog__

_a project by Google Corp_


#  v0.2.0 (2015-04-21)


## Bug Fixes

That will generate a similar output to this:

changeloglogo

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.