YANN MARTEL AND IAIN REID →

VIEW 2026 PROGRAM →

GREAT WRITERS

Listen to bestselling authors and emerging voices across genres.

w

PROVOCATIVE TALKS

Panels, interviews, and conversation that spark important conversations!

FOUR DAYS

October 1-4, 2026 at the Marriott Hotel in downtown Kingston.

FOR EVERYONE

Readers, writers, students and lifelong learners—there is something for everyone!

THE 2026 PROGRAM

Four days in October

Four days of story-telling and story-making for readers, writers and people who love books.

Jody Wilson-Raybould

AUTHORS

Discover the 2026 lineup of local and visiting writers.
Meet the 2026 authors

SCHEDULE

Browse the full line up of on-stage events and workshops.

2026 booklist books

BOOKLIST

Check out your summer reading list!

Become a KWF Insider

* indicates required

function getCountryUnicodeFlag(countryCode) { return countryCode.toUpperCase().replace(/./g, (char) => String.fromCodePoint(char.charCodeAt(0) + 127397)) };

// HTML sanitization function to prevent XSS function sanitizeHtml(str) { if (typeof str !== 'string') return ''; return str .replace(/&/g, '&') .replace(/, '<') .replace(/>/g, '>') .replace(/"/g, '"') .replace(/'/g, ''') .replace(/\//g, '/'); }

// URL sanitization function to prevent javascript: and data: URLs function sanitizeUrl(url) { if (typeof url !== 'string') return ''; const trimmedUrl = url.trim().toLowerCase(); if (trimmedUrl.startsWith('javascript:') || trimmedUrl.startsWith('data:') || trimmedUrl.startsWith('vbscript:')) { return '#'; } return url; }

const getBrowserLanguage = () => { if (!window?.navigator?.language?.split('-')[1]) { return window?.navigator?.language?.toUpperCase(); } return window?.navigator?.language?.split('-')[1]; };

// getBrowserLanguageCode() and getSmsProgramForCountryAndLanguage() are provided globally // by the external mc-sms-phone.js script loaded alongside this inline form script.

function getDefaultCountryProgram(defaultCountryCode, smsProgramData) { if (!smsProgramData || smsProgramData.length === 0) { return null; } var browserCountryCode = getBrowserLanguage(); var browserLangCode = getBrowserLanguageCode(); if (browserCountryCode) { var match = getSmsProgramForCountryAndLanguage(smsProgramData, browserCountryCode, browserLangCode); if (match) { return match; } } if (defaultCountryCode) { var match = getSmsProgramForCountryAndLanguage(smsProgramData, defaultCountryCode, browserLangCode); if (match) { return match; } } return smsProgramData[0]; }

function updateSmsLegalText(countryCode, fieldName) { if (!countryCode || !fieldName) { return; } var programs = window?.MC?.smsPhoneData?.programs; if (!programs || !Array.isArray(programs)) { return; } var browserLangCode = getBrowserLanguageCode(); var program = getSmsProgramForCountryAndLanguage(programs, countryCode, browserLangCode); if (!program || !program.requiredTemplate) { return; }

var smsConsentHtmlRenderingFixEnabled = true;

const legalTextElement = document.querySelector('#legal-text-' + fieldName); if (!legalTextElement) { return; }

const divRegex = new RegExp('?[div][^>]*>', 'gi'); const blockWrapperRegex = new RegExp('?(?:div|p)[^>]*>', 'gi'); const fullAnchorRegex = new RegExp('', 'g'); const anchorRegex = new RegExp('(.*?)');

const template = smsConsentHtmlRenderingFixEnabled ? program.requiredTemplate .replace(/\s*

]*>/gi, ' ') .replace(blockWrapperRegex, '') : program.requiredTemplate.replace(divRegex, '');

legalTextElement.textContent = ''; const parts = template.split(/(.*?)/g); parts.forEach(function(part) { if (!part) { return; } const anchorMatch = part.match(/(.+?)/); if (anchorMatch) { const linkElement = document.createElement('a'); linkElement.href = sanitizeUrl(anchorMatch[1]); linkElement.target = anchorMatch[2] ? sanitizeHtml(anchorMatch[2]) : '_blank'; linkElement.rel = 'noopener noreferrer'; linkElement.textContent = sanitizeHtml(anchorMatch[3]); legalTextElement.appendChild(linkElement); } else { legalTextElement.appendChild(document.createTextNode(part)); } });

}

function generateDropdownOptions(smsProgramData) { if (!smsProgramData || smsProgramData.length === 0) { return ''; }

var programs = true ? smsProgramData.filter(function(p, i, arr) { return arr.findIndex(function(q) { return q.countryCode === p.countryCode; }) === i; }) : smsProgramData;

return programs.map(program => { const flag = getCountryUnicodeFlag(program.countryCode); const countryName = getCountryName(program.countryCode); const callingCode = program.countryCallingCode || ''; // Sanitize all values to prevent XSS const sanitizedCountryCode = sanitizeHtml(program.countryCode || ''); const sanitizedCountryName = sanitizeHtml(countryName || ''); const sanitizedCallingCode = sanitizeHtml(callingCode || ''); return ''; }).join(''); }

function getCountryName(countryCode) { if (window.MC?.smsPhoneData?.smsProgramDataCountryNames && Array.isArray(window.MC.smsPhoneData.smsProgramDataCountryNames)) { for (let i = 0; i

icon-volunteer

VOLUNTEER

Be part of the festival magic. Join our amazing team of volunteers.

LEARN MORE

icon-Support

SUPPORT THE FESTIVAL

Your support helps keep the festival thriving, and accessible for all.

LEARN MORE

icon-Book Club

BookClubs

Are you in a bookclub? We want to hear from you!

LEARN MORE