Quickstart Guide to Brewing India Pale Ale (IPA)

This is one of the teams favourite recipes. Celebration is a classy US style IPA with lots of fresh Cascade flavour.

SN Celebration clone

Actual Og
Actual Fg
Actual ABV

India Pale Ale (IPA) Style Profile

Ingredients you will use


1.50 Kilograms of Lager/Pale Liquid Malt (LME)
2.20 Kilograms of Lager/Pale Dry Malt (DME)
3.00 Grams of Irish Moss
453.00 Grams of Crystal 80L


28 Grams of Chinook (13.00%) for 60 minutes
28 Grams of Cascade (8.00%) for 15 minutes
25 Grams of Cascade (8.00%) for 1 minutes
Dry Hop with:15 Grams of Cascade for 7 days


SF05 US Ale


US IPA is all about hops and more hops, so that's where to start playing.

Galaxy makes a great substitute for Cascade, or you could try Citra, Summer, Stella or...... there is no end.

Click the button below to make a personal copy of the recipe above and start brewing.
Start Recipe

Understanding Brewing Numbers

The numbers on left tell us a lot about the beer recipe we are about to brew:

Actual OG

This is the measured Original Gravity of the finished beer. This number indicates how much of the fermentable ingredients were disolved in the wort before fermentation.

Actual FG

This is the measured Final Gravity of the finished beer. This number indicates how much non-fermentable material remains disolved in the wort after fermentation. In taste terms you can think of this as the body i.e. whether a beer tastes thick or thin.


Alchol By Volume (ABV) is derived from the difference in the OG and FG i.e. this indicates how much sugar was consumed by the yeast and turned into alcohol.

Brewing Process

Heat some water into your brew pot (use a kettle to speed it up) to about 71C. I usually half fill my brew pot so approximately 7L.

Put the speciality grains into a grain bag and place it in the brew pot – give it a dunk and a swirl like a tea back then cover pot and, optionally, insulate it with some towels (I don't bother).

After 20 minutes remove the bag and hold it over the pot in a sieve or a colander, and pour over more 71C water to get as much flavour and colour from the grains as you can. I use 2 kettles of 1.7L.

Now bring it to the boil and start adding your hop additions. Note that recipes quote hop additions in how many minutes they will boil for, so a 60 minute addition will usually be the first addition for a 60 minute boil recipe, and a 15 minute addition will be made 15 minutes before the end. Some folks find that confusing and get it wrong by making the 60 minute addition at the end.

You can add the malt extract at any time in the boil, but be sure to boil it for sanitisation (e.g. dust on the can/package). Adding it late will reduce browning and increase hop utilisation (by lowering boil gravity), but reduces the wort temperature and stops your boil.

Remember to add the Irish Moss when you make the 15 minute hop addition.

Cool the wort in an ice bath. It's usually easier and faster to cool the wort in the pot you boiled it in, in a sink of ice just because you have a sink close your stove and you can replace the ice easily. Otherwise you can top up the fermenter with cold water now, and wait for the whole wort to cool down, in an ice bath if possible.

Pour wort into the fermenter, and add water to hit 20L

I use a garden hose to top up my wort! Just be sure to run off the stale water that's been sitting in the hose first. So far Sydney water hasn't let me down!

Record your OG using a hydrometer and update your brewday here on HopWort.
(sample pic)

Pitch yeast and ferment in a cool place, ideally at a constant 18C for this yeast in this recipe. This will reduce the amount flavours the yeast produces highlighting the hop flavours more.
FB.init({ appId : '435081376536904', // App ID /* channelURL : '../../Vendor/channel.php', // Channel File */ status : true, // check login status cookie : true, // enable cookies to allow the server to access the session oauth : true, // enable OAuth 2.0 xfbml : true // parse XFBML }); window.fbAsyncInit = function() { /************** //alert('Aysnch loading complete'); // Checks whether the user is logged in FB.getLoginStatus(function(response) { if (response.authResponse) { // logged in and connected user, someone you know alert('You are connected'); } else { // no user session available, someone you dont know alert('You are disconnected'); } }); // Replaced with the code below FB.Event.subscribe('auth.authResponseChange', function(response) { if (response.authResponse) { // the user has just logged in alert('You just logged in facebook from somewhere'); } else { // the user has just logged out alert('You just logged out from faceboook'); } }); ***************/ }; // Outside fbAsynch - this WORKS FB.Event.subscribe('auth.authResponseChange', function(response) { if (response.authResponse) { // the user has just logged in // alert('You just logged into Alans facebook from somewhere.'.concat(response.authResponse)); //console.log(response); //alert( 'Listern on '); // This always runs if(response.status=='connected'){ var fbuser= response.authResponse.userID; // because they're connected to us, log em in or auto register them! // var username=''; var name=''; var email=''; FB.api('/me', function(response) { // console.log('Good to see you, ' + response.name ); // console.log(response); name=response.name; email = response.email; username = response.username; //}); //alert( 'User is Connected:'.concat(username)); // }; $.ajax({ type: 'POST', url: '../Users/ajax_login', data: { facebook_id: fbuser, email : email, username: username, name : name, first_name : response.first_name, last_name : response.last_name } }).done(function( msg ) { //alert( 'AJAX sent: ' + msg ); if (msg.substr(0,2)=='OK'){ //alert( 'Logged you in. ' + fbuser ); $('#UserLoginForm').hide(); var welcome_message='Welcome '+ name + '. Redirect to your home page?'; var home=confirm(welcome_message); if (home===true){top.location.href = '../users/home';}; } else { //alert( 'Could not log you in. ' + msg ); }; }); }); }; } else { // the user has just logged out // alert('You just logged out from faceboook'); } }); // logs the user in the application and facebook - doesn't get executed function login(redirection){ alert( 'Clicked login 2'); FB.login(function (response) { if(response.authResponse) { // user is logged in // console.log('Welcome!'); if(redirection != null && redirection != ''){ top.location.href = redirection; } } else { // user could not log in console.log('User cancelled login or did not fully authorize.'); } }, {scope: 'email'}); } // logs the user out of the application and facebook function logout(redirection){ FB.logout(function(response) { // user is logged out // redirection if any if(redirection != null && redirection != ''){ top.location.href = redirection; } }); } // Load the SDK Asynchronously (function(d){ var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; if (d.getElementById(id)) {return;} js = d.createElement('script'); js.id = id; js.async = true; js.src = '//connect.facebook.net/en_US/all.js'; ref.parentNode.insertBefore(js, ref); }(document)); /* (function() { var e = document.createElement('script'); e.async = true; e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; document.getElementById('fb-root').appendChild(e); }()); */