Sign In / RegisterX

Sign In

Username or Email


Remember Me

Forgot password?


Username - Choose carefully. This is visable to other users and cannot be changed.



Verify Password

By clicking submit I agree to the
IOKungFoo Terms and Privacy.

What is IOKungFoo?

IOKungFoo is a coding challenge where you write the kungfoo() function to transform input to output. In the process you refine your coding skills using only the fundamentals of JavaScript. Through hard work your kungfoo() will become strong.

Can I interact with other users?

Once you solve a challenge you can see other user's solutions, learn from them, and let other users know if their kungfoo() is strong. Logged in users can also create new challenges and submit them to be included in IOKungFoo.

How is IOKungFoo different?

IOKungFoo assumes coding is fun all by itself so there are no space ships or monsters to slay with your code. IOKungFoo also assumes you have already taken a coding course in school so there are only a handful challenges with help. If you have other questions you will have to use Google. IOKungFoo tries to be a bit like coding in the real world but without the overhead.

Is IOKungFoo for me?

IOKungFoo is for you if you:
  • think coding is fun;
  • have already taken an intro coding coarse;
  • don’t think coding needs to be a video game;
  • just want to write code without any overhead;
  • want to challenge yourself and learn from others.

How do I get started?

Start by clicking on Open->n00b. The n00b challenges will teach you how IOKungFoo works. You can do this without creating an account but you will not be able to save your progress or view other user's solutions.

How is difficulty determined?

The following are difficulty guidelines. Depending on your background, you may find some easy challenges harder than some medium challenges etc.

  • JavaScript Fundamentals
  • Nested Loops
  • Arrays
  • Objects (Associative Array)
  • Strings
  • Simple State Tracking (temporary variables)
  • Grade 11 Math
  • Complex Iteration
  • Simple Recursion
  • Complex State Tracking (Map, Stack, etc..)
  • 1st/2nd Year Calculus, Probability, Combinatorics
  • Trees and Graphs
  • Complex Recursion
  • Higher Level Math

How do I create a new challenge?

Creating a new challenge is a 3 step process:

  1. Define - Click Create in the top title bar. This will display the new challenge form. If you have completed some IOKungFoo challenges then the fields will look familiar to you.
  2. Solve - Once the form is complete, click Solve. Now you need to solve your challenge. This step ensures the test cases work and creates a reference solution. If you need to edit your challenge you can click Create at the bottom.
  3. Submit - Once your solution works you can Submit your challenge for review by the IOKungFoo administrators. If your challenge is accepted then it will appear in the public To Do list of challenges.

At any time in the create process you can save your work and open it later from Open->Creating.

What does IOKungFoo mean?

English definitions of Kung Fu generally refer to unarmed Chinese martial arts. Like Kung Fu, IOKungFoo is unarmed coding. Only basic JavaScript is available, no libraries, such as JQuery, can be used. Kung Fu also means a skill achieved through hard work, which also applies to coding.

Foo is a deliberate misspelling of Fu. Computer scientists use foo() as a standard function name. The IOKungFoo standard function name is kungfoo().

IO stands for Input/Output, one of the most basic functions of a computer. Every kungfoo() function receives the variable input and returns the variable output.

Putting all this together you get the definition of IOKungFoo at the top of this page.

Why does IOKungFoo use JavaScript?

There is a huge number of language choices out there but if you ever work on a web app, which most coders will do at some point, then you will likely need to write some JavaScript. Like it or hate it, JavaScript is everywhere. That’s the simple reason IOKungFoo uses JavaScript. Opinions may differ. ;)

Other FAQ

I have a JavaScript question, where's the help? Have you tried Google?

IOKungFoo says a function is not defined, why? You are probably trying to use a library like JQuery or Bootstrap which are not available in IOKungFoo. Also, the JavaScript eval() function is not available.

Why can't I add comments to other people's solutions? If you can't say it with code, is it really worth saying?

I found a spelling mistake, who do I tell? We already know about that one so you don't need to tell us.

Why does IOKungFoo not follow standard X, Y, or Z? We like to use our own standard, it's like no standard we know.

Why does this entire site use the Courier font? Courier is cool. We use Courier now.

How do I contact IOKungFoo? Comments and questions can be sent to or contact us on our facebook page.


Growing up, my favorite video game was C. - Doug Bakewell