GithubHelp home page GithubHelp logo

guard's Introduction

Guard

Gem Version Build Status Code Climate Test Coverage Inline docs Reviewed by Hound

Guard Icon

Guard automates various tasks by running custom rules whenever file or directories are modified.

It's frequently used by software developers, web designers, writers and other specialists to avoid mundane, repetitive actions and commands such as "relaunching" tools after changing source files or configurations.

Common use cases include: an IDE replacement, web development tools, designing "smart" and "responsive" build systems/workflows, automating various project tasks and installing/monitoring various system services.

For a full categorized list of known Guard plugins, look here: https://github.com/guard/guard/wiki/Guard-Plugins

If you have any questions about Guard or want to share some information with the Guard community, please go to one of the following places:

Before you file an issue, make sure you have read the known issues and file an issue sections that contains some important information.

Features

  • File system changes handled by our awesome Listen gem.
  • Support for visual system notifications.
  • Huge eco-system with more than 300 Guard plugins.
  • Tested against the latest Ruby 2.4.x, 2.5.x, 2.6.x, JRuby & Rubinius. See .travis-ci.yml for the exact versions.

Screencast

Two nice screencasts are available to help you get started:

Installation

The simplest way to install Guard is to use Bundler.

Add Guard (and any other dependencies) to a Gemfile in your project’s root:

group :development do
  gem 'guard'
end

then install it by running Bundler:

$ bundle

Generate an empty Guardfile with:

$ bundle exec guard init

Run Guard through Bundler with:

$ bundle exec guard

If you are on Mac OS X and have problems with either Guard not reacting to file changes or Pry behaving strange, then you should add proper Readline support to Ruby on macOS.

Avoiding gem/dependency problems

It's important that you always run Guard through Bundler to avoid errors.

If you're getting sick of typing bundle exec all the time, try one of the following:

  • (Recommended) Running bundle binstub guard will create bin/guard in your project, which means running bin/guard (tab completion will save you a key stroke or two) will have the exact same result as bundle exec guard.

  • Or, you can alias be="bundle exec" in your .bashrc or similar and the execute only be guard. Protip: It will work for all comands executed in bundle exec context!

  • Or, for RubyGems >= 2.2.0 (at least, though the more recent the better), simply set the RUBYGEMS_GEMDEPS environment variable to - (for autodetecting the Gemfile in the current or parent directories) or set it to the path of your Gemfile.

(To upgrade RubyGems from RVM, use the rvm rubygems command).

NOTE: this Rubygems feature is still under development still lacks many features of bundler

Add Guard plugins

Guard is now ready to use and you should add some Guard plugins for your specific use. Start exploring the many Guard plugins available by browsing the Guard organization on GitHub or by searching for guard- on RubyGems.

When you have found a Guard plugin of your interest, add it to your Gemfile:

group :development do
  gem '<guard-plugin-name>'
end

See the init section of the Guard usage below to see how to install the supplied plugin template that you can install and to suit your needs.

Usage

Guard is run from the command line. Please open your terminal and go to your project work directory.

Look here for a full list of Guard commands

Start

Just launch Guard inside your Ruby or Rails project with:

$ bundle exec guard

Guard will look for a Guardfile or guardfile.rb in your current directory. If it does not find one, it will look in your $HOME directory for a .Guardfile.

Please look here to see all the command line options for Guard

Interactions

Please read how to interact with Guard on the console and which signals Guard accepts

Guardfile DSL

For details on extending your Guardfile look at Guardfile examples or look at a list of commands Guardfile-DSL / Configuring-Guard

Issues

Before reporting a problem, please read how to File an issue.

Development / Contributing

See the Contributing Guide.

Releasing

Prerequisites

  • You must have commit rights to the GitHub repository.
  • You must have push rights for rubygems.org.

How to release

  1. Determine which would be the correct next version number according to semver.
  2. Update the version in ./lib/guard/version.rb.
  3. Commit the version in a single commit, the message should be "Bump VERSION to X.Y.Z".
  4. Push and open a pull request.
  5. Once CI is green, merge the pull request.
  6. Pull the changes locally and run bundle exec rake release:full; this will tag, push to GitHub, publish to rubygems.org, and publish the release notes .

Author

Thibaud Guillaume-Gentil (@thibaudgg)

Core Team

Contributors

https://github.com/guard/guard/graphs/contributors

guard's People

Contributors

alandipert avatar amiel avatar anithri avatar cablegram avatar capythebeara avatar docwhat avatar e2 avatar earlonrails avatar edthamm avatar hawx avatar johnbintz avatar joshbuddy avatar kiela avatar limeyd avatar maher4ever avatar matthijsgroen avatar mislav avatar mrloop avatar netzpirat avatar nickmabry avatar niklas avatar olleolleolle avatar pskocik avatar rrrene avatar rymai avatar stereobooster avatar thibaudgg avatar timmfin avatar uk-ar avatar yannlugrin 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

guard's Issues

Guard works under ree, but not under 1.9.2

I'm not sure if this is an issue w/ Guard or my rvm install, but in my rails 3 1.9.2 project, I get this:

guard

/Volumes/spinner/jeffdeville/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:900:in report_activate_error': Could not find RubyGem bundler (>= 0) (Gem::LoadError) from /Volumes/spinner/jeffdeville/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:248:inactivate'
from /Volumes/spinner/jeffdeville/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:1276:in gem' from /Volumes/spinner/jeffdeville/.rvm/gems/ruby-1.9.2-p180/bin/bundle:18:in

'

but if I instead use:
rvm use ree; guard

things work.

Is this a known compatibility issue, or might there be something wrong w/ my 1.9.2 gems? (0.3.0 is definitely installed, and the bin is evidently found)

Guard not detecting changes

Hi, I'm not sure if this is just me not seeing something obvious, but I can't make guard detect changes in any of my coffeescript files. Strangely enough, when I first installed it yesterday, it worked. But then for some reasons it stopped detecting changes.

Here's my Guardfile:

guard 'coffeescript', :input => 'spec/coffeescripts', :output => 'spec/javascripts'

I'm using macosx. I tried v. 0.3 and v 0.3.2, both with rb-fsevent and without. All coffee files have a .coffee extension and are in the spec/coffeescripts directory. spec/javascripts directory exists, but nothing appears there when I change my .coffee files.

Pausing with Guard?

Is there a way to toggle guard on/off without stoping and restarting?

It'd be helpful if I could disable it, because I press save every couple seconds and I want to run it after I've saved the changes I know should be tested or whatever.

Any ideas? Some keyboard shortcut to pause, then another to resume would be awesome.

Running guards in parallel

In the latest Railscasts episode I ran into the issue that LiveReload changes were not shown until after the specs run. Moving them first helps solve this problem, but if you're making changes quickly the tests will still be running and you won't see the changes.

I would love it if there was some way to specify a guard to run in a separate thread so it won't interfere with other guards. This can also address issue #19 where changes to files are not detected while a guard is running. IIRC other similar tools such as autotest detect changes while the tests are running, why can't guard? It's frustrating to have to re-save a file for Guard to pick up on a change because it happened to be running before.

Update: Maybe this can be combined with the groups feature (issue #26), because often you want some guards to run in sequence (cucumber with rspec) but some in parallel. Placing guards in a group could make it run in sequence.

Hooks / callbacks

Is there any interest in providing a hook or callback mechanism for Guard? For example, if I wanted to benchmark a Guard, I could create an external gem to hook into various internal Guard events.

def run_on_change
  hook :run_on_change_start
  # other code
  hook :run_on_change_end
end

Guard should allow to run all guards on start

If I base my development environment on guard, I might want to copy some files or compile some coffeescripts or sass files during the build.
In this case, when someone clones the repository, it should it ctrl-\ to rebuild everything, which is quite uncommon.

Maybe a "--run-on-start", or "-s" flag in the guard command might solve this problem.

Thanks for the good work!

Custom Guard: Invalid Guard File - help please

Hi there. I'm writing a custom guard plugin (it's also my first ever gem, so I'm a proper newbie), and I'm having real problems with it.

I'm trying to write a guard that will watch a folder for markdown documents and then use kramdown to convert them to html.

I've followed the example on the Guard home page for writing my own guard, and also checked out some of the other guards listed in the wiki. The simplest one there seems to be Guard-Shell. i can't for the life of me see what I've done wrong, and I'm at the point where I'm thinking this may be a bug in the examples or the version of guard I'm using (0.3.4) which is why I'm posting here.

Please excuse me if this isn't a bug, in which case I guess I should be posting on SO or something. But I'd really appreciate a pointer.

The error I'm getting:

   ERROR: Could not find load find gem 'guard-krammer' or find class Guard::krammer
   ERROR: Invalid Guardfile, original error is:
   undefined method `new' for nil:NilClass

My project repo: guard-krammer

Errors with Bundler on custom path

Hi there,

if I have a Gemfile like this one:

source "http://rubygems.org"
gem "rb-fsevent"
gem "growl"
gem "guard"
gem "guard-compass"

and I try to do "bundle install --path .bundle", this is the result:

There was a LoadError while evaluating guard-compass.gemspec:
  no such file to load -- guard from
  [..]/.bundle/ruby/1.8/bundler/gems/guard-compass-7a8a0bc1ad54/guard-compass.gemspec:3

What's the matter? I do not have the knowledge do make any further investigation, sorry about that :)

Guard sometimes quit when a file is deleted

Hi,

Guard was running and I ran a task that delete some files, then Guard ended-up because it couldn't find the deleted file anymore (as I understand it).

Following is the dump of the error stack which lead to the crash:

/Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:52:in `mtime': No such file or directory - /Users/remy/path_to_a_deleted_file (Errno::ENOENT)
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:52:in `recent_file?'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:43:in `block in modified_files'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:43:in `select'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:43:in `modified_files'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:35:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/interactor.rb:7:in `block in init_signal_traps'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:32:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:32:in `eof?'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:32:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/interactor.rb:7:in `block in init_signal_traps'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:32:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:32:in `eof?'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:32:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:44:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:22:in `block in start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `call'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:37:in `watch_change'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/listener.rb:22:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard.rb:32:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/lib/guard/cli.rb:11:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/thor-0.14.3/lib/thor/task.rb:22:in `run'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/thor-0.14.3/lib/thor/invocation.rb:118:in `invoke_task'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/thor-0.14.3/lib/thor.rb:246:in `dispatch'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/thor-0.14.3/lib/thor/base.rb:389:in `start'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/gems/guard-0.1.0.beta.1/bin/guard:6:in `<top (required)>'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/bin/guard:19:in `load'
    from /Users/remy/.rvm/gems/ruby-1.9.2-p0/bin/guard:19:in `<main>'

Option to Run Ctrl-\ at start

When I first start the project, and none of my files are compiled, I have to run ctrl-\ to initialize. Guard could really use a command line option that allows this to kick off automatically when it starts.

Or maybe an option I can set in the Guardfile.

This would be really, really helpful

Don't trigger events if the file hasn't changed

Muscle memory sometimes has me saving files that I haven't actually modified. Having to wait for guard to do its thing can be a bit annoying in this scenario. That said, I know it can also be useful to force certain things to happen just by saving a file. What do others think?

guard-hydra

Not yet sure how tough this would be but guard-hydra would be of some use as projects get larger.
Hopefully this ticket will collect insights and suggestions towards Guard::Hydra

Guard::Hydra automatically run your features/spec/tests through/via Hydra

File change not detected

I have a strange problem and I cannot say if it is a bug in rb-fsevent, Guard or even if it is just me being stupid.

I have the following setup http://gist.github.com/673967 to automatically generate JavaScript from CoffeeScript with guard-coffeescript and refresh the Jasmine BDD spec browser with guard-livereload.

I have a file

app/coffeescript/math.coffee

that is being edited. Guard-coffeescript gets notified that the file has been changed and write the updated JavaScript content to

public/javascripts/compiled/math.js

However guard-livereload will NOT refresh the browser. The watcher is fine, when I manually touch the file

touch public/javascripts/compiled/math.js

the browser gets reloaded. I even tried it with an additional call to FileUtils.touch() after the file has been written, but Guard doesn't notify the other plugins that this file has been changed.

As a workaround I implemented a method notify: http://github.com/netzpirat/guard-coffeescript/blob/master/lib/guard/coffeescript.rb

Is there something I don't understand with fs-event and Guard, or is this a bug?

guard init work in presence of gem-open and open_gem gems

guard init command can be confused in presence of gem-open gem

at least, on my mri-1.9.2-p136, it is consistently confused

story

Given I have gem installed "guard-rspec"
  And I have gem installed "gem-open"
When I run command "guard init rspec"
Then I should see "feel free to edit it"

Actually, I see a stack

~/src/ruby/dojo $ gem install gem-open
Fetching: gem-open-0.1.3.gem (100%)
Successfully installed gem-open-0.1.3
1 gem installed
Installing RDoc documentation for gem-open-0.1.3...
~/src/ruby/dojo $ guard init rspec
Writing new Guardfile to /Users/thenrio/src/ruby/dojo/Guardfile
ERROR:  While executing gem ... (OptionParser::InvalidOption)
    invalid option: --latest
/Users/thenrio/.rvm/gems/ruby-1.9.2-p136/gems/guard-0.3.0/lib/guard/guard.rb:15:in `read': No such file or directory - /lib/guard/rspec/templates/Guardfile (Errno::ENOENT)
    from /Users/thenrio/.rvm/gems/ruby-1.9.2-p136/gems/guard-0.3.0/lib/guard/guard.rb:15:in `init'
    from /Users/thenrio/.rvm/gems/ruby-1.9.2-p136/gems/guard-0.3.0/lib/guard/cli.rb:35:in `init'
    from /Users/thenrio/.rvm/gems/ruby-1.9.2-p136/gems/thor-0.14.6/lib/thor/task.rb:22:in `run'
    from /Users/thenrio/.rvm/gems/ruby-1.9.2-p136/gems/thor-0.14.6/lib/thor/invocation.rb:118:in `invoke_task'
    from /Users/thenrio/.rvm/gems/ruby-1.9.2-p136/gems/thor-0.14.6/lib/thor.rb:263:in `dispatch'
    from /Users/thenrio/.rvm/gems/ruby-1.9.2-p136/gems/thor-0.14.6/lib/thor/base.rb:389:in `start'
    from /Users/thenrio/.rvm/gems/ruby-1.9.2-p136/gems/guard-0.3.0/bin/guard:6:in `<top (required)>'
    from /Users/thenrio/.rvm/gems/ruby-1.9.2-p136/bin/guard:19:in `load'
    from /Users/thenrio/.rvm/gems/ruby-1.9.2-p136/bin/guard:19:in `<main>'

options for resolution

It might be difficult to know what gem is providing the open command for gem ...

When both 'gem-open' and 'open_gem' are installed then 'gem-open' is winning on my computer, still both claim to provide the open command...

Couldn't gem api directly be used, rather than relying on a third gem (gem-open or open_gem) ?

Conflict with rails 3

I was trying to install guard-rspec in my rails3 app, it blows with

Fetching source index for http://rubygems.org/
Bundler could not find compatible versions for gem "thor":
  In Gemfile:
    guard-rspec depends on
      thor (~> 0.14.2)

    rails (= 3.0.0) depends on
      thor (0.14.0)

And find out that this dependency is added with guard.
So, posting this here? How can I resolve it???

Eventually exits with SystemStackError

It looks like your fix to #5 introduced another bug. After a day or two of leaving guard running, it exited with the following exception:

/Users/stouset/.rvm/gems/ruby-1.9.2-p0@patterns2/bin/guard:19: stack level too deep (SystemStackError)

Not an issue, but should be a warning?

So tonight I was running some tests and wasn't paying attention that I had 2 guard's running (same dir/same guardfile). IMHO, an error should be thrown if it detects another guard running? Maybe if its running in the same directory, or the same Guard file (since people could probably have different projects running multiple guards).

Guard aborted when using guard-ego with guard-spork.

I think Guard.get_guard_class returned wrong class (e.g. Guard::Spork::Runner), when loaded nested class.

I met with this problem, when using guard-ego with guard-spork and guard-livereload.

In Guard.get_guard_class, it chose some classes name started with Guard::{Name}.
So, when loaded Guard::Spork::Runner and Guard::Spork, maybe it return Guard::Spork::Runner.
Then it raise an exception, because Guard::Spork::Runner#initialize can't accept two arguments.

I tried fix this problem.

How do you think?

Guard crashes on `git rebase`

Looks like it's caused by rb-inotify, I'm not sure should report this to guard or rb-inotify but think guard should handle this.

/home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/rb-inotify-0.8.4/lib/rb-inotify/notifier.rb:183:in `open': No such file or directory - /home/rainux/devel/yet_another_project/.git/rebase-apply (Errno::ENOENT)
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/rb-inotify-0.8.4/lib/rb-inotify/notifier.rb:183:in `entries'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/rb-inotify-0.8.4/lib/rb-inotify/notifier.rb:183:in `watch'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/rb-inotify-0.8.4/lib/rb-inotify/notifier.rb:193:in `watch'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/rb-inotify-0.8.4/lib/rb-inotify/watcher.rb:41:in `[]'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/rb-inotify-0.8.4/lib/rb-inotify/watcher.rb:41:in `callback!'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/rb-inotify-0.8.4/lib/rb-inotify/event.rb:128:in `callback!'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/rb-inotify-0.8.4/lib/rb-inotify/notifier.rb:220:in `process'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/rb-inotify-0.8.4/lib/rb-inotify/notifier.rb:220:in `each'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/rb-inotify-0.8.4/lib/rb-inotify/notifier.rb:220:in `process'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/guard-0.3.1/lib/guard/listeners/linux.rb:59:in `watch_change'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/guard-0.3.1/lib/guard/listeners/linux.rb:15:in `start'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/guard-0.3.1/lib/guard.rb:43:in `start'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/guard-0.3.1/lib/guard/cli.rb:15:in `start'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/thor-0.14.6/lib/thor/task.rb:22:in `send'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/thor-0.14.6/lib/thor/task.rb:22:in `run'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/thor-0.14.6/lib/thor/invocation.rb:118:in `invoke_task'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/thor-0.14.6/lib/thor.rb:263:in `dispatch'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/thor-0.14.6/lib/thor/base.rb:389:in `start'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/gems/guard-0.3.1/bin/guard:6
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/bin/guard:19:in `load'
        from /home/rainux/.rvm/gems/ree-1.8.7-2011.03/bin/guard:19

can't debug

Unlike using spork, i can't run debugger while using guard.
This is a must while using rspec and cucumber tests.

Please add support for ruby-debug and ruby-debug19.

Fails to run on windows

Getting the following error when running in windows:

←[0mUsing polling (Please help us to support your system better than that.)←[0m
C:/Ruby192/lib/ruby/gems/1.9.1/gems/guard-0.2.2/lib/guard/interactor.rb:6:in `trap': unsupported signal SIGQUIT (ArgumentError)
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/guard-0.2.2/lib/guard/interactor.rb:6:in `init_signal_traps'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/guard-0.2.2/lib/guard.rb:24:in `start'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/guard-0.2.2/lib/guard/cli.rb:12:in `start'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/thor-0.14.6/lib/thor/task.rb:22:in `run'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/thor-0.14.6/lib/thor/invocation.rb:118:in `invoke_task'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/thor-0.14.6/lib/thor.rb:263:in `dispatch'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/thor-0.14.6/lib/thor/base.rb:389:in `start'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/guard-0.2.2/bin/guard:6:in `<top (required)>'
        from C:/Ruby192/bin/guard:19:in `load'
        from C:/Ruby192/bin/guard:19:in `<main>'

New options for run_all/reload guard method

Discussed with YannLugrin, three new options should be added for run_all/reload guard method and could be specify per guard. Options are:

  • each => "5.minutes" (run the method each X minutes/seconds)
  • at_start => true/false (run the method when starting guard, false by default)
  • disabled => true/false (avoid to run the method when signal sent, false by default)

Example:

guard 'rspec', :run_all => { :at_start => true } do ...

What do you think about that?

Guard exits after running run_on_change

I'm creating a guard to run qunit tests, using Pusherapp to push messages to the browser.

For some reason guard exits after running my run_on_change method. My guard looks like this:

require 'guard'
require 'guard/guard'
require 'pusher'

module Guard
  class Qunit < Guard

   def initialize(watchers=[], options={})
    super
      Pusher.app_id = options[:app_id]
      Pusher.key = options[:key]
      Pusher.secret = options[:secret]
    end

    def run_on_change(paths=[])
      Pusher['guard-qunit'].trigger!('change', :paths => paths) unless paths.empty?
      true
    end
  end
end

Pusher's trigger method returns true, and I can see that the pusher service is receiving the paths correctly, but after a change occurs guard is exiting. If I replace the call to Pusher and just print out the paths Guard doesn't exit.

guard-cucumber is unusable

The bugs in guard-cucumber make it essentially unusable for Rails projects. Once a feature starts failing, that feature will never succeed until guard is restarted. On top of that, it seems to get stuck in a loop where it never resets the count of failing/successful/total/pending features and keeps adding them to the count every run. For example, if you had two features, the next run it would say four, then six, then eight, etc.

kicker-like command line API

Kicker allows me to do stuff like this:

kicker -e "./rebuild" my_dir

Alas, it doesn't work outside of Mac OS X. It would be nice to have such API in guard. I'm aware of existence of guard-shell, but I would like to have handy command line API for that.

Regex matcher examples should have a '$' at the end

I was trying to figure out why every time that I began editing any file guard would be triggered for that file before I saved the file. I finally figured out that it was because editors like vim keep a "*.swp" version of the file and that swp file is modified as a user edits a file. Therefore, if you add a '$' to the end of those regex examples, at the end of the file extension, this clears up problems for vim users and other editors that may use similar temporary files.

debugger does not launch with guard 4.2

I updated guard from 3.4 to 4.2, and found that debugger no longer appeared in terminal when I ran Rspec or Cucumber within Textmate. Note that debugger would run from the Guard. But after the update, the debugger would appear in Terminal, and then a "Terminated" message appeared and Guard quit.

About notify

Hi guys,

What are your plan about UI and notification interface?

For me they are just two different UI. Can we think about having just one messaging system gateway and then Guard decide whether it should handle them?

I think a great parallel would be the way a logger behave.

For example, every message should be of a certain 'kind' like neutral(:work_in_progress, :info, :debug), negative(:error, :failure) or positive(:success).

Each UI may choose what it want to display (open door to user configuration as well). For example, the console might want to display everything where notification UI will only display positive and negative categories. The story behind the sub-categories is to give a UI the opportunity of styling its output given those categories. We can imagine that each plug-in or UI might be able to add sub-categories. Each sub-categories might be assigned a level as well for a UI to display every neutral message up to level '2' for example.

Another great thing if we can consider logs are a subset of the messaging system is that we will be able to capture logs to display them in our UI in a standard way.

class ReportCategory
  + status # :negative, positive, :neutral
  + name # whatever name of the category
  + level # int
end

report_center.add_ui(GrowlNotificationUI.new)
report_center.add_ui(CmdLineUI.new)
report_center.add_category(ReportCategory.new(:success, :kind => :positive, :level => 0))

Then you could log with a nice syntax from any guard instance

report.success "all test passed", "The 15 tests of my_test_file.rb turn the light to green"

What do you think?

Cheers,
Olivier

ui.rb rescue error

Ruby 1.9
pik installed
win32console gem NOT installed

When running guard init and continuous loop occurs where line 45 of ui.rb tests for color_enabled? and fails. This results in the rescue on line 58 being called which attempts to display an info message and then returns false. At this point, from the windows command line, the error message is not displayed and the code continues to loop back to line 45 and then 58 until all the pagefile memory is consumed and guard crashes.

Once win32console is installed everything works fine. Would it be possible to completely exit guard and display the gem dependency error message?

Weird command: Ctrl-\

The run_all command (Ctrl-\) don't work well on non-US keyboard layouts. I can't even trigger it on Swedish keyboard without hacking ZSH key bindings - which itself is overkill for most potential users of Guard I believe. Could we add a better keyboard alias?

Wrong template path

guard init rspec
Writing new Guardfile to /Users/tomc/devel/oolink/Backend/Guardfile
ERROR: Could not find gem 'guard-rspec' in the current Gemfile.
/Library/Ruby/Gems/1.8/gems/guard-0.1.1/lib/guard/guard.rb:15:in `read': No such file or directory - /lib/guard/rspec/templates/Guardfile (Errno::ENOENT)
from /Library/Ruby/Gems/1.8/gems/guard-0.1.1/lib/guard/guard.rb:15:in `init'
from /Library/Ruby/Gems/1.8/gems/guard-0.1.1/lib/guard/cli.rb:33:in `init'
from /Library/Ruby/Gems/1.8/gems/thor-0.14.3/lib/thor/task.rb:22:in `send'
from /Library/Ruby/Gems/1.8/gems/thor-0.14.3/lib/thor/task.rb:22:in `run'
from /Library/Ruby/Gems/1.8/gems/thor-0.14.3/lib/thor/invocation.rb:118:in `invoke_task'
from /Library/Ruby/Gems/1.8/gems/thor-0.14.3/lib/thor.rb:246:in `dispatch'
from /Library/Ruby/Gems/1.8/gems/thor-0.14.3/lib/thor/base.rb:389:in `start'
from /Library/Ruby/Gems/1.8/gems/guard-0.1.1/bin/guard:6
from /usr/bin/guard:19:in `load'
from /usr/bin/guard:19

but guard-rspec is installed, and the Guardfile is in /Library/Ruby/Gems/1.8/gems/guard-rspec-0.1.3/lib/guard/rspec/templates/Guardfile. It's a rails2 app and there is no Gemfile.

Can't watch files starting with "."

See pull request 80 for a failing spec (verified to fail with 1.8.6 and 1.9.2 on Mac).
Not yet sure how to fix this. Thought I'd submit the failing spec to verify it's not just my system, and see if anyone else has an idea.

Provide option to use absolute paths

I'm writing a gem called guard-bot which watched incoming directories for new .bot files, and then passes the file to a Bot object who will read the file, parse it for commands, and optionally write out a results file.

I'm using that in a project called Alfred who's job it will be to watch a dropbox folder for incoming messages and uses those messages to move files from a large back-end library to a folder in dropbox.

The whole idea is that I have many more media files than I have space in Dropbox, so Alfred will act as a librarian of sorts, and provide a way to search the media library for files, and then put those files into Dropbox. So the next time I'm out of town and want to watch something I've got on my library server, I can.

But it seems that guard always uses a relative path starting at the directory the Guardfile is in. So I'd like a way to indicate that I instead want it to use absolute pathnames, or possibly set a PARENTDIR folder that it will use instead of the Guardfile path when setting up watchers.

Guard dependencies

It would be nice to be able to have earlier guards prevent later ones from firing for a given file change. For example, if a Javascript file doesn't pass JSHint, I don't want my asset-compiler to run.

no way to turn growl off?

Is that right? I don't want to use it, but don't see a way to disable the UI.info call telling me to install it.

Invalid ANSI escape code in Guard::UI

Guard::UI.reset_line prints an ESC without further arguments ("\e ") which is, afaik, an invalid escape sequence. This results in literals ESC symbols (showing 001B) when using Guard (in zsh oder bash under Ubuntu here). I'm not sure what the intention behind "\e " is, so I'm not sure whether it should be removed or replaced with something else.

GEdit / INotify / Linux fix

Gedit saves files in an uncommon way. They write a temporary files and then move to overwrite the original filename.

Guard on linux right now are only watching for modify and create events, so, modifying a file from gedit is never detected because the final event is a IN_MOVE_TO. So, adding :moved_to in the worker.watch of listener/linux.rb:47 fix this problem.

I dont know if this has a drawback, but if not, it would be nice to have in the next release :)

Thank you!

How do you handle heterogenous development environments?

Hi all

Since guard needs some OS specific gems in Gemfile we are running constantly into conflicts between developers using linux and developers using Mac OS. My somewath naive approach to circumvent the problem was adding this to the Gemfile:

group :development, :test do

....
  gem 'guard-rspec'

  if RUBY_PLATFORM =~ /-*darwin.*/
    gem 'growl'
  end
  if RUBY_PLATFORM =~ /-*linux.*/
    gem 'libnotify'
  end

Sadly this breaks cross-plattform deployment, since growl will be mentioned in Gemfile.lock and our Servers are running Linux. Would be interesting to see how you handle this at your sites!

Thanks

Watch without a guard

Guard needs at least a single 'guard' declaration in Guardfile to work. It should just work with a single generic watch also, like so:

watch(/\.txt/) do |path|
   `markdown #{path}`
end

Guard hanging from time to time under linux

From time to time guard hangs under linux; it doesn't see any file changes and the ^C and ^Z signals (INTR and STOP IIRC) are not caught. Inspecting the running process with strace shows that guard is hanging in a select loop (with rb-inotify enabled) or in sched_yield (without rb-inotify). I can only get guard to terminate with a SIGKILL.

This happens both with and without rb-inotify enabled.

Running guard 0.4.2 under ruby 1.9.2-p180 in a bundle environment (bundler 1.0.15) under linux 2.6.38.

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.