Code Monkey home page Code Monkey logo

vim-snippets's Introduction

snipMate & UltiSnip Snippets

Build Status

This repository contains snippets files for various programming languages.

It is community-maintained and many people have contributed snippet files and other improvements already.

Contents

  • snippets/*: snippets using snipMate format
  • UltiSnips/*: snippets using UltiSnips format

Snippet engines supporting vim-snippets

There are different forks of snippet engines which allow the user to insert snippets by typing the name of a snippet hitting the expansion mapping.

There tries to be a more comprehensive list (which still is incomplete) here: http://vim-wiki.mawercer.de/wiki/topic/text-snippets-skeletons-templates.html

UltiSnips has additional features such as high speed, nesting snippets, expanding snippets in snippets and offers powerful transformations on text in snippets (like visual selections or placeholder texts).

Which one to use? If you have python give SirVer/ultisnips a try because its fast and has the most features.

If you have VimL only (vim without python support) your best option is using garbas/vim-snipmate and cope with the minor bugs found in the engine.

If you use Neovim and prefer Lua plugins, L3MON4D3/LuaSnip is the best option.

Q: Should snipMate be deprecated in favour of UltiSnips?

A: No, because snipMate is VimL, and UltiSnips requires Python. Some people want to use snippets without having to install Vim with Python support. Yes - this sucks.

One solution would be: Use snippets if they are good enough, but allow overriding them in UltiSnips. This would avoid most duplication while still serving most users. AFAIK there is a nested-placeholder branch for snipMate too. snipMate is still improved by Adnan Zafar. So maybe time is not ready to make a final decision yet.

github issue/discussion

Vendor Snippets

Additional library and framework snippets are available for UltiSnips users in the UltiSnips/ directory. These files are removed from the default language namespaces to prevent them from all being loaded automatically. If there is a separate library, framework, or package you would like to support open a pull request!

Additional snippets can be added to the current buffer with the :UltiSnipsAddFiletypes command followed by the snippet name without the "snippets" ending. For example, to add the JavaScript Jasmine snippets, run: :UltiSnipsAddFiletypes javascript-jasmine. To have this snippet loaded everytime a JavaScript file is opened or created you can add the command to your -.vim/ftplugin/javascript.vim file. Another way is to add autocmd FileType js UltiSnipsAddFiletypes javascript-jasmine in your .vimrc.

For more see the UltiSnips docs (:help UltiSnips).

Installation

First be aware that there are many options, see "Snippet engines" above. Second be aware than there are tons of plugin managers which is why Marc Weber thinks that it doesn't make sense to repeat the same repetitive information everywhere.

The recommended way to install these snippets is by using vim-addon-manager. Marc Weber wrote it for exactly this reason, it supports simple dependency management. E.g. all you need is this line in your .vimrc:

" assuming you want to use snipmate snippet engine
ActivateAddons vim-snippets snipmate

vim-pi Is the place to discuss plugin managers and repository resources.

For snipMate installation instructions, please see snipmate@garbas.

Pull requests adding installation instructions for Pathogen, Bundle, git clone, etc. are welcome and much appreciated.

Getting help

If you still have trouble getting this to work, please create a GitHub issue.

Things to consider when contributing

Some snippets are useful for almost all languages, so let's try to have the same triggers for them:

if : if without else
ife: if $1 else $2
eif : else if ($1) { .. }
el  : else ..
wh  : while (cond) ...

Don't add useless placeholder default texts like:

if (${1:condition}){
  ${0:some code here}
}

instead use:

if (${1}){
  ${0:${VISUAL}}
}

Exception: Functions which are used less often, such as Vim's matchall(), matchstr() functions which case hints may be helpful to remember order. In the VimL case get vim-dev plugin which has function completion

Thus for conditions (while, if ..) and block bodies just use ${N} - Thanks

When the snippet can be used to wrap existing code leverage ${VISUAL}

Open questions: What about one line if ee then .. else .. vs if \n .. then \n ... \n else \n .. ? Which additional policies to add? Discuss at: #230

folding markers: Until further work is done on vim-snipmate, please don't add folding markers into snippets. vim-snipmate has some comments about how to patch all snippets on the fly adding those.

Currently all snippets from UltiSnips have been put into /UltiSnips - some work on merging should be done (dropping duplicates etc). Also see engines section above.

Since UltiSnips supports both UltiSnip and vim-snipmate snippets, when contributing fixes/new snippets, please prefer adding vim-snipmate snippets.

Related repositories

We also encourage people to maintain sets of snippets for particular use cases so that all users can benefit from them. People can list their snippet repositories here:

Installation using VAM: https://github.com/MarcWeber/vim-addon-manager

Future ideas and examples

overview snippet engines If you have ideas you can add them to that list of "snippet engine features by example".

Historical notes

vim-snipmate was originally started by Michael Sanders who has now unfortunately abandoned the project. Rok Garbas is now maintaining a fork of the project in hopes of improving the existing code base.

Versions / dialects / ..

There are some issues, such as newer language versions may require other snippets than older. If this exists we currently recommend doing this:

  • add snippets/ruby.snippets (common snippets)
  • add snippets/ruby-1.8.snippets (1.8 only)
  • add snippets/ruby-1.9.snippets (1.9 only)

then configure https://github.com/garbas/vim-snipmate this way:

let g:snipMate = {}
let g:snipMate.scope_aliases = {}
let g:snipMate.scope_aliases['ruby'] = 'ruby,ruby-rails,ruby-1.9'

If it happens that you work on a project requiring ruby-1.8 snippets instead, consider using vim-addon-local-vimrc and override the filetypes.

Well - of course it may not make sense to create a new file for each ruby-library-version triplet. Sometimes postfixing a name such as

migrate_lib_20_down
migrate_lib_20_up

will do it then if syntax has changed.

Language maintainers

No one can really be proficient in all programming languages. If you would like to maintain snippets for a language, please get in touch.

Notes: People are interested in snippets - and their interest may wane again. This list is kept up-to-date on a best effort basis.

License

Just as the original snipMate plugin, all the snippets are licensed under the terms of the MIT license.

vim-snippets's People

Contributors

abroder avatar amarakon avatar ashfinal avatar aster89 avatar carlitux avatar cinocode avatar cirosantilli avatar codeinabox avatar craigp avatar cristobaltapia avatar dsiw avatar filospateam avatar heiderich avatar honza avatar idbrii avatar igorgee avatar iurifq avatar jdavis avatar jorgesumle avatar josephan avatar juanpabloaj avatar kjssad avatar lpil avatar manchikha avatar marcweber avatar mengzhuo avatar michaelthessel avatar sirver avatar switch87 avatar taq 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vim-snippets's Issues

htmldjango '{' snippet creating newline

Maybe this is intended behaviour, but I've noticed that when using the { context variable snippet a newline is inserted after the completed tag. This is particularly annoying when using the snippet inside an inline tag, like:

<h1>{</h1>

You end up with:

<h1>{{ }}
</h1>

Thanks.

.

Nevermind.

Problems with ruby snippets and UltiSnips

I installed the MarcWeber/ultisnips vim plugin and added this config to my vimrc:

let g:UltiSnips = {}
"let g:UltiSnips.always_use_first_snippet = 1
let g:UltiSnips.snipmate_ft_filter = {
     \ 'default' : {'filetypes': ["FILETYPE", "_"] },
     \ 'html'    : {'filetypes': ["html", "javascript", "_"] },
     \ 'cpp'    : {'filetypes': [] },
     \ }

Of course the plugin honza/vim-snippets is also added.

Then if I type cla for one of these ruby snippets, I get an error message and a scratch buffer opens with the following content:

Following is the full stack trace:
Traceback (most recent call last):
  File "/home/dsiw/.dotfiles/vim.symlink/bundle/ultisnips/py-code/UltiSnips/__init__.py", line 26, in wrapper
    return f(self, *args, **kwds)
  File "/home/dsiw/.dotfiles/vim.symlink/bundle/ultisnips/py-code/UltiSnips/__init__.py", line 605, in expand
    rv = self._try_expand()
  File "/home/dsiw/.dotfiles/vim.symlink/bundle/ultisnips/py-code/UltiSnips/__init__.py", line 1010, in _try_expand
    self._do_snippet(snippet, before, after)
  File "/home/dsiw/.dotfiles/vim.symlink/bundle/ultisnips/py-code/UltiSnips/__init__.py", line 964, in _do_snippet
    si = snippet.launch(text_before, self._visual_content, None, start, end)
  File "/home/dsiw/.dotfiles/vim.symlink/bundle/ultisnips/py-code/UltiSnips/__init__.py", line 454, in launch
    last_re = self._last_re, globals = self._globals)
  File "/home/dsiw/.dotfiles/vim.symlink/bundle/ultisnips/py-code/UltiSnips/text_objects/_snippet_instance.py", line 34, in __init__
    self.update_textobjects()
  File "/home/dsiw/.dotfiles/vim.symlink/bundle/ultisnips/py-code/UltiSnips/text_objects/_snippet_instance.py", line 70, in update_textobjects
    if obj._update(done, not_done):
  File "/home/dsiw/.dotfiles/vim.symlink/bundle/ultisnips/py-code/UltiSnips/text_objects/_viml_code.py", line 15, in _update
    self.overwrite(_vim.eval(self._code))
  File "/home/dsiw/.dotfiles/vim.symlink/bundle/ultisnips/py-code/UltiSnips/_vim.py", line 107, in eval
    rv = vim.eval(as_vimencoding(s))
vim.error: invalid expression

What can I do to fix this? Thank's!

Adding description to snippets

I am using UltiSnips with YouCompleteMe and I like the description of the snippets very much. Many of the default UltiSnips snippets in this repository do not have a description. It is desirable to add these and send pull requests? Are there any guidelines to contributing?

Markdown Codeblock Ultisnips Snippet

Hi there!

For those writing a lot of markdown documentation, the original codeblock takes a lot of time to write...

For snipmate, there is a good snippet doing that:

snippet bt-codeblock-short
    ```
    ${0:code_snippet}
    ```

But there is not alternative for Ultisnips. I tried to write my own but I'm having some issues on how to escape the "```"... It seems like the backslash isn't helping.

I tried the following:

\```    # not working but did not expect it to work
\`\`\`  # not working either...

With the second one, I get the following error:

SnippetSyntaxError: Invalid line '\\`\\`\\`' in snippets/pandoc.snippets:3

I might be doing something wrong...

Which snippets repos(this or UltiSnip) should I pull if I use UltiSnip?

I just forward my mail with Honza to HERE


Hi, Honza

I'm one of snippets contributors, Meng Zhuo, I had change my snippet engine into UltiSnip and using vim-snippets in the same time.
However, I found there is a snippets repos in UltiSnip, too.
I'm confused about what if I want to contribute some snippets which repo should I pull to.
Or, Which one of you guys is upstream of these snippets?

Best Regards,
Meng Zhuo

How about add an editorconfig snippet?

Hi, I want to add an snippet for .editorconfig like this:

snippet ec
    ; http://editorconfig.org

    root = true

    [*]
    indent_style = ${1:space_or_tab}
    indent_size = ${2:indent_size}
    end_of_line = lf
    charset = utf-8
    trim_trailing_whitespace = true
    insert_final_newline = true

But I don't know how to add snippets for this type of file, as I put the snippet to a editorconfig.snippets file just doesn't work. I can put to global \_.snippets, but I'm not sure if it's suitable. Any suggestions?

overriding `ld` warning in python.snippets

Warning: $HOME/.vim/bundle/vim-snippets/snippets/python.snippets:172 is overriding ld from $HOME/.vim/bundle/vim-snippets/snippets/python.snippets:82
Press ENTER or type command to continue

Request to remove or rename the python snippet '.'

Hello,

I imagine a lot of other python users have the following problem:

The dot "." snippet conflicts with tab completion functionality. I see this as a problem only because I use a "self." statement much less frequently than I use a not-self "." statement, and I imagine that a lot of python users would feel the same.

For example:

current:
    .<<TAB>> ---> self.
    import os.<<TAB>>  --->  import osself.

desired:  
    import os.<<TAB>>  ---> import os.<<shows the tab completion menu>>

On a grander level, really nice functionality might be for SnipMate to allow us to disable just one snippet. But to my knowledge, that's not currently an option.

Currently, it does take a bit of leg work to remove this snippet manually. Do you think it might be possible to remove or rename that snippet from the python snippets file in this repo?

Python, fix "with" snippet

The last line in the "with" snippet in Python should be removed.

snippet with
    with ${1:expr} as ${2:var}:
        ${3:# code...}
        ${3:# code...}

c++ snippets?

Would it be possible to separate C from C++ snippets? I'd like, as an example, to have for (i = 0 ...) in C code, and (with the same snippet name) for (int i = 0...) in C++.

I would be able to commit my own c++ snippets, but I couldn't figure out where the filetype checking happens.

Duplicated snippet name in ruby.snippets

Hi,

I've got warnings when I opened a ruby file.

Warning messages are following.
Warning: /Users/xxxx/.vim/bundle/snipmate-snippets/snippets/ruby.snippets:
904: duplicated snippet name `mac`
Please delete this snippet name before.
Warning: /Users/xxxx/.vim/bundle/snipmate-snippets/snippets/ruby.snippets:
906: duplicated snippet name `mrc`
Please delete this snippet name before.

Regards,

python snippet and things that start with 'm'

Is it my setup or is there something amiss when you try to name, say, a function starting with the letter 'm'?

For example:

def -> def fname():....

press 'm' (cursor on fname) and you get the admonishment:

E481: No range allowed

any other letter seems to work ok (though I admit I haven't tried them all.)

Why the assert_difference count is A Class from $1

snippet asd
    assert_difference "${1:Model}.${2:count}", $1 do
        ${3}
    end

usually, the snippet may like this

assert_difference "Model.count", 1, do
  # bla bla
end

So I think it should be

snippet asd
    assert_difference "${1:Model}.${2:count}", ${3:1} do
        ${4}
    end

Error with specific snippet

When trying to use the "m" snippet for objc:

Error detected while processing function snipMate#TriggerSnippet:
line 45:
E486: Pattern not found: \VM%#

and then it looks like:

+ (id)method
{
   return nil;
}m

Which is actually the "M" snippet, with an m on the end.

one line vs multilen if .. then ... else

Again, use post-processing snippets to provide extra snippets having everything "joined"?
eg "If" instead of "if" ? We could add tags to snippets to find out which snippets to provide "joined lines" versions of.

div. and .

When I use

 div. 

I get

 divclass=""

. snippet is "overwrite" div. snippet, any idea to solved this issue? both snippets are usefull

Scope not recognized?

I freshly installed this plugin, together with garbas/vim-snipmate. I opened a PHP file and checked by typing
:set filetype=<TAB>
that it would autocomplete to php, so I assume vim recognized the filetype correctly.

But when I try using a snipped, for instance with
for<TAB>
I need to choose between php default and javascript default. Why? Did I forget anything to setup?

Stray ">>>" at end of ruby.snippets

I don't want to fork it because of such a minor thing:

ruby.snippets:

...
snippet cfor
<% content_for :${1:head} do %>
  ${2}
<% end %>
>>>>>>> d46588cad4f48f1fe6f0e80c06b87f9b78792422

Thanks,
Frank

Snippets stopped working after updating them

I installed vim-snippets via Vundle. At first everything worked fine. Then I forked the repo and replaced the snippets with my own and now it stopped working. I tried to revert back but it didn't do the trick. I think it's some kind of conflict with the SuperTab plugin, but I'm not sure..

Multiple identical snippets in Ruby

Is it really ok to have multiple 'bt' snippets in ruby.snippets?

snippet bt
    belongs_to :${1:association}

snippet bt
    be_true

snippet bf
    before_filter :${1:method}

snippet bf
    be_false

I'm getting this error when I use spf13:

Warning: /meh/.vim/bundle/snipmate-snippets/snippets/ruby.snippets:939 is overriding `bt` from /meh/.vim/bundle/snipmate-snippets/snippets/ruby.snippet
s:582

c++ import guard / how to capitalize the file name

Hey,

This is not really an issue, but maybe you can help me anyway.

I want to write an import guard for C++. So far it looks something like this:

snippet guard
    #ifndef ${1:`substitute(expand('%:t'), '\.', '_', 'g')`}
    #define $1

    #endif /* $1 */

What I get:

#ifndef filename_h
#define filename_h

#endif /* filename_h */

But what I want:

#ifndef FILENAME_H
#define FILENAME_H

#endif /* FILENAME_H */

So how can I capitalize the filename?

CoffeeScript snippets not working

The CoffeeScript snippets don't seem to be working.

I've tried renaming the file to .js.coffee and .coffee, and setting the filetype to both coffee and coffeescript.

The JavaScript snippets work as expected (with a .js extension)

python '.' snippet interferes with tabcompletion, editing, etc

In the python.snippets file, there is a '.' snippet that causes me a lot of frustration.

snippet .
    self. 

However, I find that, instead of it being helpful with writing code more quickly, it tends to only show up when I don't want it to. (for example, when trying to access a submodule and use a different tab completion program, etc).

Plus, because it's a punctuation mark, it's harder to realize the reason 'self' has just popped on to the screen is because of this snippet.

Expected behavior:

bs4. press , get a set of completion suggestions for functions within beautifulsoup

Actual behavior:

bs4. press -> bs4self.

I suggest a simple replacement:

snippet s.
    self. 

(after this I'll submit a small patch to this effect).

And if you want the original behavior back, anyone can make a python.snippets file in their own snippet folder with the original back in. For the new users (and old users), this will enable them to actually use a number of tab completion scripts in vim, etc. Especially those who find out about snipmate through sontek's dotfiles.

shitty trailing spaces in some ruby snippets

There are shitty trailing spaces in snippets defindex, defcreate etc.
I have already tired clear it. What we can do with this? Delete this crazy blank line in snippet?

if I use snippet from new line without spaces everything ok. But when i use it from 2spaces indentation there are trailing spaces. As usual we use this snippets with 2 space indentation, and it is very annoying

example ok

def create
  @model_class_name = ModelClassName.new(params[:model_class_name])

  respond_to do |format|
    if @model_class_name.save
      flash[:notice] = 'ModelClassName was successfully created.'
      format.html { redirect_to(@model_class_name) }
      format.xml  { render :xml => @model_class_name, :status => :created, :location => @model_class_name }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @model_class_name.errors, :status => :unprocessable_entity }
    end
  end
end

example when spaces

class ApplicationController < ActionController::Base
  def create
    @model_class_name = ModelClassName.new(params[:model_class_name])
~~     <- this is 2 trailing spaces
    respond_to do |format|
      if @model_class_name.save
        flash[:notice] = 'ModelClassName was successfully created.'
        format.html { redirect_to(@model_class_name) }
        format.xml  { render :xml => @model_class_name, :status => :created, :location => @model_class_name }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @model_class_name.errors, :status => :unprocessable_entity }
      end
    end
  end
end

Incorrect highlighting after autocompletion with C-N or C-P

Incorrect highlighting (visual-mode selecting) after autocompletion with C-N or C-P. To reproduce the issue, do the following:

  • create a php file.
  • paste this text: `
  • type foreach and hit the Tab
  • variable will be highlighted, type foo and press C-P. foobar will be substituted.
  • press Tab
  • oops. incorrect highlight (s $va instead of value)

// code comment blocks in snippets

A lot of the snippets have // code or /* code */ as part of their place holders. Every time you don't follow the tab order exactly you end up having an unnecessary comment you need to delete. I think it makes more sense to have place holders there which don't have any content. I.e. ${1} instead of ${1:/* code */}. I was wondering if other people think this makes sense too. I would volunteer to change this if people are interested.

How can I make vim-snippets work?

After I install vim-snippets in the vundle way and start vim, vim reports the following errors:
Errors occur when processing the FileType command "*":
E121:Undefined variable: snippets_dir
E116:Invalid arguments for function GetSnippets.

How can I remove these errors and make vim-snippets work?

Duplicate css snippets for less files

I don't know if this is the right approach, but on my local machine I duplicated the css snippet file and renamed it less, now it works like a charm in my less files

Should I fork and change it with a pull request? or should I do this another way?

Name of repository is wrong

This repository now contains UltiSnips and snipMate snippets - I think it should be renamed to either Ultisnips (as all of them are supported by ultisnips and not all by snipmate) or simply snippets.

Volunteer to maintain Falcon snippets

I'd like to volunteer as the maintainer of the Falcon snippets. I wrote the original set currently in the repo. I'm also technically a falcon developer (I have commit access, but I don't use it much ๐Ÿ˜ž) and I maintain the vim files for falcon as well. So hopefully that makes me qualified for the job.

How to cope with UltiSnips and snipmate issues?

Historically UltiSnips (depending on Vim with Python) introduced UltiSnippets and Snipmate introduced "snippets" files. Today UltiSnips can read both, but snipmate cannot. UltiSnips has "advanced" features which are useful in some cases such as "nested snippets" and special triggers - Marc Weber never felt need for special triggers in snipmate because it historically had snippet completion while triggering - and passing arguments to snippets by trigger can be emulated by input() which requires hitting one additional time. Thus which features are worth having or not depends heavily on the judgment of the user.

The big question now is: How should vim-snippets cope with it? Nice habits to keep in mind:

  • prevent duplication (do it once)
  • please users as much as possible

The most simple strategy could be:

  • Put simple snippets in .snippets files
  • If you have complex advanced alternatives think use UltiSnips files
    judgment of this idea:
  • least snippet duplication
  • it serves everybody as much as possible, duplicates can be "ignored" by telling engines to use first hit and making sure engines read the .snippet files first
  • UltiSnips users have to open and look at two files

This is Marc Weber's favorite solution for now. One example following this is "html_minimal" example.

Please use this issue to discuss alternative solutions emphasizing on why they are better/worse than what I'm proposing above (which is already documented in the README).

If you're fine with the proposal only reply if it looks like the thread comes to a different solution. I'd suggest waiting for about 4 weeks for people to put their opinions.
There is no hurry.

I commented here that I added those comments to the README:
#355

The first PR following this suggestion appeared shortly after:
#362

There is an additional issue: Snippet engines support multiple files anyway: Should there be a simple command which allows finding the file defining a snippet? A simple grep all snippet files being used would be enough probably (eg using grepadd or such). That would be trivial to implement.

Snippets for licenses

In python.snippets there is a snippet for gpl. Since this is not python related, it should propably be moved to a global snippets file. Moreover, it would be very convenient, if all the major open source licenses could be added.

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.