Skip to content
HSF 2026 POSTER-06 (Shadow)

HONG KONG, APRIL 24 – 26 2026

HARBOURSIDE SWING FEST

3 night
8 hours
HSF - Website Assets
150 dancers

LIVE MUSIC

Hong Kong boasts a deep and skilled Jazz music scene. We’re happy to feature local artists doing what they do best. Reliving the Jazz era with skill and panache.

Nate Wong Website

We’re happy to welcome back Nate Wong as our music director for the weekend. With deep ties to Hong Kong local music scene and plenty of experience as one of the major leaders of Hong Kong Jazz. We’re in good hands with Nate Wong. 

Perhaps more importantly, he knows what will get the dancers moving. He’s been a long time friend of Rhythm Studio and a featured musicians for the last two editing of HSF. 

Stay tuned for more info about our Live Music and Featured DJs for HSF26. 

Get ready to dance the weekend away at HSF with an unforgettable, high-energy music lineup! We are bringing you three nights of incredible swinging tunes, starting with a trio of fantastic DJs spinning rare grooves and hidden gems on Friday night. On Saturday, experience the vibrant live sounds of Nate Wong and Friends as they gather Hong Kong’s finest jazz talent, and close out the weekend on Sunday with a raw, collaborative jazz jam celebrating the deep connection between dancers and musicians. From spinning records to spectacular live jazz, we have exactly what you need to keep your feet moving all night long.

TEACHERS

We’re inviting 4 amazing teachers to come to Hong Kong to Share their skills and thoughts about Swing Dancing. 

Sylvain Marion
Sing Adamas

EVENT DETAILS

Theme-Based Learning

We believe that learning happens best when you are inspired. Our festival classes are theme-based rather than level-based, giving you the freedom to explore specific concepts alongside dancers of various experiences.

  • Who is this for? These classes are open to all dancers who are comfortable with Swingouts and basic Charleston.

  • How to join: Specific class themes (to be announced) may require advance registration. We will email all pass holders with details and sign-up instructions closer to the event.

Workshop Pic
Comp Pic

This weekend, we’re serving up three unique competition formats—because one size fits no one. Expect a perfectly balanced mix of chaos and charm across Rookie, Wildcard M&M, and Strictly divisions. Designed to spark your competitive spirit without killing your vibe. Details dropping soon—try to contain your excitement.

The rumors are true — we’ve locked in our weekend venues.
Friday and Saturday? Studio 9 Ballroom. You already know the place — high ceilings, smooth floors, and exactly the kind of space that makes your triple steps feel cinematic. We’ve danced here before, and honestly, we couldn’t stay away.
Sunday, we’re back at our home base: DANCETRINITY. It’s got the best sprung floor in Hong Kong. Don’t bother arguing — we’ve tested them all.

Both venues are located around the Sheung Wan area on Hong Kong Island.

UPDATE: SUNDAY VENUE IS CHANGED TO STUDIO 9 

Venues

DANCE IN A DAY

An introductory session will teach you the fundamentals of social dancing in a fun, welcoming environment. You’ll learn essential steps and partnering basics that will have you feeling confident and ready to hit the dance floor. By the end of class, you’ll be prepared to dance the night away at our Harbourside Swing Fest Saturday Night Social, featuring live music that brings the authentic swing era to life.

Don’t miss out our on next update

EMAIL

var rm_pre_data = {"ajax_url":"https://harboursideswingfest.com/wp-admin/admin-ajax.php", "rm_nonce_field":"41c56f0412"};jQuery.fn.bindFirst = function(name, fn) { // bind as you normally would // don't want to miss out on any jQuery magic this.on(name, fn); var events = this.data('events') || jQuery._data(this[0], 'events'); var handlers = events[name]; // take out the handler we just inserted from the end var handler = handlers.splice(handlers.length - 1)[0]; // move it at the beginning handlers.splice(0, 0, handler); }; //Rainmaker var Rainmaker = function() {} Rainmaker.prototype = { init : function(form){ // var that = form; if(jQuery(form).closest('.rainmaker_form').length < 1) return; if(jQuery(form).closest('.rainmaker_form').hasClass('rm_init_done') ) return; if(jQuery(form).find('.rm_required_field, .ig_form_required_field').length < 1){ jQuery(form).append('
'); } jQuery(form).closest('.rainmaker_form').addClass(jQuery(form).closest('.rainmaker_form').data('type') || ''); jQuery(form).bindFirst('submit', function(e){ window.rainmaker.addLead(e, jQuery(e.target)); }); // submit Event jQuery(form).closest('.rainmaker_form').addClass('rm_init_done'); }, addLead : function(e, form, icg_msg){ var form = form || undefined; if(typeof(form) !== 'undefined'){ if(jQuery(form).closest('.rainmaker_form').length 0; if(!jQuery(fm_parent).hasClass('rm_custom') || (!jQuery(form).attr('action') && !mc4wpform) ){ e.preventDefault(); } if(jQuery(form).find('.rm_required_field').val() || jQuery(form).find('.ig_form_required_field').val()){ jQuery(fm_parent).find('.rm-loader').hide(); form.slideUp("slow"); jQuery(fm_parent).find('div.rm_form_message').show(); return; } var formData = {}; var formData = window.rainmaker.prepareFormData(e, form, icg_msg, formData); action = rm_pre_data.ajax_url + '?action=rm_rainmaker_add_lead'; jQuery(form).trigger( 'add_lead.rm', [formData] ); jQuery.ajax({ type: 'POST', url: action, data: formData, dataType: 'json', success: function(response){ if(response && typeof response.error !== 'undefined' && response.error !== ""){ jQuery(fm_parent).find('.rm-loader').hide(); jQuery(fm_parent).find('div.rm_form_error_message').text(response.error).show(); jQuery(window).trigger('error.rm', [form, response]); } else if(response && typeof response.success !== 'undefined'){ jQuery(form)[0].reset(); jQuery(form).trigger('success.rm', [form, response]); jQuery(fm_parent).find('.rm-loader').hide(); //TODO :: Later Move this in success callback form_message = jQuery(fm_parent).next('div.rm_form_message').html(); if( typeof form_message !== 'undefined' && form_message.trim() !== ''){ jQuery(fm_parent).slideUp("slow"); jQuery(fm_parent).next('div.rm_form_message').show(); // jQuery(fm_parent).next().next('div.rm_form_error_message').hide(); } //TODO :: Later Move this in success callback var redirection_url = response.redirection_url || ''; redirection_url = redirection_url.trim(); if (typeof(redirection_url) === 'string' && redirection_url != '') { if (!/^https?:\/\//i.test(redirection_url) ) { redirection_url = "http://"+redirection_url; } setTimeout(function(){ window.location.href = redirection_url; }, 200); } }else{ jQuery(fm_parent).find('.rm-loader').hide(); } }, error: function(err){ jQuery(fm_parent).find('.rm-loader').hide(); console.log(err); }, }); } }, prepareFormData: function (e, form, icg_msg, formData){ jQuery.each((jQuery(form).serializeArray() || {}), function(i, field){ formData['rmfpx_'+ field.name] = field.value; }); formData['rmfpx_added'] = true; formData['rmfpx_rm_nonce_field'] = rm_pre_data.rm_nonce_field; formData['rmfpx_rm_form-id'] = jQuery(form.closest('.rainmaker_form')).data('form-id'); // Send Icegram Data To Rainmaker if(typeof icegram !== 'undefined'){ formData['rmfpx_ig_mode'] = icegram.mode; formData['rmfpx_ig_remote_url'] = window.location.href; if(typeof icg_msg === 'undefined'){ var msg_id = (jQuery(form.closest('[id^=icegram_message_]') || {}).attr('id') || '').split('_').pop() || 0 ; icg_msg = icegram.get_message_by_id(msg_id) || {}; } if(typeof icg_msg.data !== 'undefined'){ formData['rmfpx_ig_message_id'] = icg_msg.data.id; formData['rmfpx_ig_campaign_id'] = icg_msg.data.campaign_id; } } return formData; }, }; if(typeof window.rainmaker === 'undefined'){ window.rainmaker = new Rainmaker(); } jQuery(document).ready(function(){ jQuery('.rainmaker_form form').each(function(i, v){ window.rainmaker.init(v); }); }); // Start : For Icegram Compatibility jQuery( window ).on( "init.icegram", function(e, ig) { // Find and init all RM forms within Icegram messages/divs if(typeof ig !== 'undefined' && typeof ig.messages !== 'undefined' ){ jQuery.each(ig.messages, function(i, msg){ var forms = jQuery(msg.el).find('.rainmaker_form form'); forms.each(function(i, form){ if(!jQuery(form).hasClass('rm_init_done')){ window.rainmaker.init(form); jQuery(form).addClass('rm_init_done'); } }); }); } }); // init.icegram //Handle CTA function(s) after successful submission of form jQuery( window ).off('success.rm'); jQuery( window ).on('success.rm', function(e, form, response) { if( typeof icegram !== 'undefined'){ var msg_id = ((jQuery(e.target).closest('[id^=icegram_message_]') || {}).attr('id') || '').split('_').pop() || 0 ; var msg = icegram.get_message_by_id(msg_id) || undefined; if(typeof msg !== 'undefined'){ //TODO:: test this for contact form. // if(msg.data.cta === 'form_via_ajax' && msg.el.find('.rm_subscription').length > 0){ if(msg.data.cta === 'form_via_ajax' && msg.el.find('.rm_subscription, .rm_contact').length > 0){ // TODO::test this , causing duplicate messages msg.el.trigger('form_success.ig_cta', [msg]); } else if(msg.data.cta === 'form' || !msg.data.cta){ if(msg.data.use_form == undefined){ msg.data.response_text = ''; } response_text = '
'+ (msg.data.response_text || msg.el.find('.rm_form_message').html() || '') +'
'; msg.el.find('.ig_form_container, .ig_message, .ig_headline').hide(); var appendTo = msg.el.filter('.ig_container'); if(jQuery.inArray(msg.data.type, ['interstitial', 'messenger']) !== -1){ appendTo = msg.el.find('.ig_message'); appendTo.show(); msg.el.find('.ig_headline').text('').show(); }else if(msg.data.type === 'tab'){ //TODO :: hide is not working appendTo = msg.el.find('.ig_data'); msg.el.find('.ig_headline').show(); } try{ appendTo.append(response_text); }catch(err){ console.log(err); } } } } }); //success.rm // addLead on IG-CTA form submit event jQuery(window).off('form_submit.ig_cta'); jQuery(window).on('form_submit.ig_cta', window.rainmaker.addLead);

INSTAGRAM