Skip to content
Browse files


  • Loading branch information
sindresorhus committed Sep 29, 2016
0 parents commit bf5b4d09f669c690b359b66bb7c82f4759bee6b6
Showing with 3,545 additions and 0 deletions.
  1. +8 −0 .editorconfig
  2. +2 −0 .gitattributes
  3. +1 −0 media/header-min.svg
  4. +2,506 −0 media/
  5. +959 −0 media/header.svg
  6. +69 −0
@@ -0,0 +1,8 @@
root = true

indent_style = tab
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
@@ -0,0 +1,2 @@
* text=auto
*.ai binary

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

@@ -0,0 +1,69 @@
<h1 align="center">
<img src="media/header-min.svg" alt="Ponyfill">

<h4 align="center">Like polyfill but with pony pureness</h4><br><br><br>

## Pony pureness, really?

While polyfills are naughty, ponyfills are pure, just like ponies.

## How are ponyfills better than polyfills?

A [polyfill]( is code that adds missing functionality by [monkey patching]( an API. Unfortunately, it usually globally patches built-ins, which affects all code running in the environment. This is especially problematic when a polyfill is not fully spec compliant (which in some cases is impossible), as it could cause very hard to debug bugs and inconsistencies. Or when the spec for a new feature changes and your code depends on behavior that a module somewhere else in the dependency tree polyfills differently. In general, [you should not modify API's you don't own.](

A ponyfill, in contrast, doesn't monkey patch anything, but instead exports the functionality as a normal module, so you can use it locally without affecting other code.

*tl;dr;* Polyfills are naughty as they patch native APIs, while ponyfills are pure and don't affect the environment.

### Polyfill

Number.isNaN = Number.isNaN || function (value) {
return value !== value;


### Ponyfill

module.exports = Number.isNaN || function (value) {
return value !== value;

var isNanPonyfill = require('is-nan-ponyfill');

*Only use the native API in your ponyfill (the `Number.isNaN || ` part) when the spec is stable, to ensure it doesn't have differing behavior depending on the environment.*

## Where can I find ponyfills?

[Search npm.](

## Resources

- [Ponyfill definition - Sillicon Valley Dictionary](
- [Polyfills or Ponyfills? - Pony Foo](

## License


To the extent possible under law, [Sindre Sorhus]( has waived all copyright and related or neighboring rights to this work.

Header based on work by [Mary Winkler](

0 comments on commit bf5b4d0

Please sign in to comment.
You can’t perform that action at this time.