We love open source at Artsy. We use a ton of it. We've also contributed to numerous projects and created many of our own projects since early 2011. We maintain a philosophy of keeping our work Open by Default.
The Artsy that you know. It is the web front-end for Artsy.net, powering hundreds of thousands of page views and bringing art to the masses at scale. Built on top of Ezel.js (and now React, too) it provides a behind the scenes look at a non-trivial node based front-end.
The React component library shared across our web applications, letting us share expertise and experience across engineering teams. Built on top of our project Palette.
Palette is a collection of primitive, product-agnostic elements that help encapsulate Artsy's look and feel at base level. It is built on top of styled-system and is shared across our React and React Native projects.
The Artsy iOS app: the Art World in Your Pocket. Hundreds of thousands of downloads. A reference for building large-scale Cocoa applications. Built as a hybrid native-web mix, now with React Native.
Artsy's React Native component library. Built on top of styled-system and Relay, it exposes React Native components as native UIViewController subclasses for use in our native codebase.
The Artsy Bidding Kiosk for live auctions. An Open Source Reactive-Swift app.
The Artsy Partner Portfolio app. A large Core-Data application, with a high test coverage for an iOS app.
Artsy Shows on your Apple TV. A small Swift app for the Apple TV.
Artsy's ecommerce orders app, powering our Buy Now and Make Offer order systems. Built in Rails with a GraphQL API.
Artsy's GraphQL API, which orchestrates API requests to our REST services and stitches in schemas from our other GraphQL services.
A boilerplate for Backbone projects that share code server/client and scale through modular architecture.
Artsy's '2013 Year in Review' page using node to generate static pages.
Artsy's '2014 Year in Review' page using node to generate static pages.
Middleware to compile browserify files on request for development purpose.
Server-side Backbone.sync adapter that caches requests using Redis.
A jQuery plugin to listen for a user entering the konami code.
Node server-side Backbone.sync adapter using super agent.
Stub a browser environment in node.js and headlessly test your client-side code.
Node module that uploads a folder of static assets to an s3 bucket with convenient defaults.
Node module to easily share data between your server-side and browserify modules.
Artsy iPhone Launch Marketing Page.
A jQuery plugin for 'locking' short content in place as the user scrolls by longer content. For example, it will lock metadata and share buttons in place as the user scrolls by a long essay or series of images.
A jQuery plugin that given a `ul` with images inside their `li`s will do some things to line them up so that everything fits inside their container nice and flush to the edges. It's like google image search but also retaining the integrity of the original images (no cropping or stretching/squishing).
API Sandbox is a jQuery plugin written in CoffeeScript that allows web apps to easily implement sandbox environments for an API explorer. The plugin includes two parts: apiSandbox, which aids in the creation of inline sandboxes for individual API paths, and APIExplorer, which is a full API explorer solution.
The Artsy Alexa (Echo) skill.
CocoaPods is the dependency manager for iOS. Artsy provides occasional sponsorship, and provides developer time for features & related projects.
CocoaDocs documents every public OSS library in CocoaPods. Artsy pays for hosting.
Network abstraction layer written in Swift. If you use Alamofire to abstract away NSURLSession, why not use something to abstract away the nitty gritty of URLs, parameters, etc?
Vertically stack views using Auto Layout, with an order specific subclass that uses view tags for ordering.
ORSimulatorKeyboardAccessor allows you to use your keyboard in the iOS simulator with a blocks based API.
DRBOperationTree is an iOS and OSX API to organize NSOperations into a tree so that each node's output becomes the input for its child nodes.
Fui stands for Find Unused Interfaces, a Ruby gem that works against an Objective-C codebase.
Display, pan and deep zoom with tiled images on iOS.
Deal with obsessive compulsive issues of programmers in Objective-C.
Expecta matchers for ios-snapshot-test-case.
Swizzle your iOS project into ASCII art.
A UICollectionViewLayout subclass for creating flow-like layouts with dynamic widths or heights.
If you're using the cool FBSnapshotTestCase to test your iOS view logic, awesome! Even better if you have continuous integration, like on Travis, to automate running those tests! Second Curtain sends your failing tests to S3,
A gem for swapping iOS simulator states. Saves all the documents, library and cache for the most recently user iOS app into the current folder with a named version. Commands are modelled after git.
A Ruby client for the Artsy API.
Shared utilities for managing and deploying OpsWorks apps at Artsy.
Garner is a practical Rack-based cache implementation for RESTful APIs with support for HTTP 304 Not Modified based on time and ETags, model and instance binding and hierarchical invalidation. To 'garner' means to gather data from various sources and to make it readily available in one place, kind-of like a cache!
Spidey provides a bare-bones framework for crawling and scraping web sites. Its goal is to keep boilerplate scraping logic out of your code. The companion gem adds MongoDB as a data store.
TinEye Pixmatch Ruby client library. Pixmatch is a general image matching engine that allows you to perform large scale image comparisons for a variety of tasks. PixMatch is delivered as a hosted Web Services API. It runs over HTTP using a REST protocol and JSON formatted responses, wrapped by this library.
A library for generating a list of licensed software from Gemspec. The overwhelming majority of 3rd party licenses require the application that uses them to reproduce the license verbatim in an artifact that is installed with the application itself. Are you currently copying individual license.txt files 'by hand' or are you including license text in your documentation with copy/paste? This project aims at improving this situation.
Combine email validation and transformations to produce canonical email addresses.
Want to restart your Rack development with rackup whilst you work? Now you can!
The rspec-rerun gem is a drop-in solution to retry (rerun) failed RSpec examples. It may be useful, for example, with finicky Capybara tests. The strategy to rerun failed specs is to output a file called `rspec.failures` that contains a list of failed examples and to feed that file back to RSpec via `-e`.
This gem is a pure Ruby implementation of the HyperLogLog algorithm for estimating cardinalities of sets observed via a stream of events. A Redis instance is used for storing the counters.
A cartesian product implementation in Ruby that doesn't materialize the product in memory.
A pure Ruby implementation of the SpaceSaver algorithm for estimating the top K elements in a data stream.
A Ruby full-text search implementation for the Mongoid ODM. MongoDB currently has no native full-text search capabilities, so this gem is a good fit for cases where you want something a little less than a full-blown indexing service like Solr. The mongoid_fulltext gem lets you do a fuzzy string search across relatively short strings, which makes it good for populating autocomplete boxes based on the display names of your Rails models but not appropriate for, say, indexing hundreds of thousands of HTML documents.
Typical as_json definitions may involve lots of database point queries and method calls. When returning collections of objects, a single call may yield hundreds of database queries that can take seconds. This library mitigates the problem by implementing a module called CachedJson. CachedJson enables returning multiple JSON formats from a single class and provides some rules for returning embedded or referenced data. It then uses a scheme where fragments of JSON are cached for a particular (class, id) pair containing only the data that doesn't involve references/embedded documents. To get the full JSON for an instance, CachedJson will combine fragments of JSON from the instance with fragments representing the JSON for its references. In the best case, when all of these fragments are cached, this falls through to a few cache lookups followed by a couple Ruby hash merges to create the JSON. Using Mongoid::CachedJson we were able to cut our JSON API average response time by about a factor of 10.
Easily maintain a collection of Tag instances with aggregate counts from your model's tags.
Short-circuit serialization of Mongoid model instances when a delayed job is called on them, or when they're passed as arguments to delayed jobs.
Easy maintenance of collections of processed data in MongoDB with the Mongoid ODM.
Create MongoDB command-lines from Mongoid configuration.
Mongoid extension that enables infinite scrolling with MongoDB.
Forgetsy is a highly scalable trending library using Forget Tagble data structures, backed by Redis.
Slice deep-zoom images for Open Sea Dragon or ARTiledImageView.
The Artsy Developer website, a Rails app that talks to the Artsy public API.
Automatically insert a text/plain part into your HTML multipart e-mails.
Integration testing with e-mail examples.
An extension to ruby representable which allows expanding properties and collections of a Representable.
Ruby Gem for producing events in Artsy's event stream.
Make your Ruby data models searchable via Elasticsearch.
A simple database of organzations. Accept multiple sources of data, flatten into one row by rank.
A Slackbot for making it easy to organize and run bug bashes.
Genome-based search and large-batch operations on artworks
Defines a Resque plugin that allows you to automatically scale up the number of workers running on Heroku and then automatically scale them down once no work is left to do.
Beat Heroku's 60s boot timeout with a proxy. Heroku will report an application crashed and log an `R10 Boot Timeout` error when a web process took longer than 60 seconds to bind to its assigned port. Setup a proxy that will start immediately, report an `up` status to Heroku, and forward requests to your application that takes more than 60 seconds to boot.
A tool to deploy web applications to Heroku.
Master the Heroku CLI from Ruby.