Fly Dubai makes inaugural direct flight to Mombasa, a boost to tourism
Fly Dubai makes inaugural direct flight to Mombasa, a boost to tourism
Read this story aloud
Listen to the clean text version of this article
Ready
3 min listen
Audio reading is not supported on this browser.
Excitement ripples through the Coast region of Kenya as the government’s “open skies policy” welcomes new international airlines, raising hopes for a significant surge in tourism
Excitement ripples through the Coast region of Kenya as the government’s “open skies policy” welcomes new international airlines, raising hopes for a significant surge in tourism. This policy, aimed at bolstering air connectivity, holds immense promise for the region’s vital sector, which has long grappled with limitations in direct flights.
Fly Dubai, the latest airline to be granted permission for direct flights to Mombasa, marked a historic moment with its maiden landing yesterday. Transport Minister Kipchumba Murkomen, who had approved Fly Dubai’s request last year, proudly welcomed the inaugural flight, hailing it as “a great milestone for the city of Mombasa and our country.”
Operating four services per week, Fly Dubai joins Kenya Airways and Ethiopian Airlines, which already offer direct flights from Dubai and Addis Ababa to Mombasa, respectively. These developments are seen as a game-changer for the region, paving the way for increased tourist arrivals and economic growth.
More To Read
- Kenya eyes MICE tourism to drive 5 million annual international visitors by 2028
- Governor Abdulswamad Nassir pushes for open skies policy to boost tourism, investment
- Mombasa showcases coastal heritage as Our Ocean Conference draws global visitors
- Tourism stakeholders warn Ebola misinformation is hurting travel bookings
- Panic in Maasai Mara as aircraft skids off runway after landing failure, three escape unhurt
- Ruto links land rights to development, vows to resolve Coast land disputes
“Kenya is capable of getting more than 40,000 tourists,” declared Tourism and Wildlife Minister Alfred Mutua, outlining the ministry’s ambitious plans to attract visitors. “Slowly by slowly, the number will go up. We will come up with ways to attract tourists,” he added, highlighting the crucial role improved air connectivity plays in achieving this goal.
Trasport CS Kipchumba Murkomen was among the leaders who witnessed the first Airdubai direct flight to Mombasa.
Mombasa Governor Abdulswamad Shariff Nassir expressed his gratitude to the government for implementing the open skies policy. “Something we have discussed with the Tourism Minister and the President,” he said, “we are hopeful that more than 10,000 tourists will visit in three months. They are not only coming to visit Mombasa but other coastal counties as well.”
Latest Stories
- Taita Taveta County unveils cooperative fund to boost rural access to credit
- Lilian Odira targets personal best and Diamond League final after dream victory in Eugene
- Karua, Matiang’i demand arrest and resignation of PS Fikirini over Cecil Ouma shooting
- A Super El Niño is coming: Five hard‑won lessons the world can learn from Africa
Industry stakeholders also echoed their optimism. Sam Ikwaye, Kenya Association of Hotelkeepers and Caterers (KAHC) Coast Executive, emphasized the critical need for improved connectivity, despite past government investments in infrastructure. “Direct flights will catalyze tourism investment in the region,” he predicted.
President William Ruto’s previous announcement allowing Ethiopian Airlines to operate direct flights to Mombasa twice weekly further underscores the government’s commitment to enhancing air accessibility. These initiatives are expected to generate a ripple effect, benefiting not only the tourism sector but also creating employment opportunities for local communities.
Other Topics To Read
Top Stories Today
- Karua, Matiang’i demand arrest of PS Fikirini over Cecil Ouma shooting
- Taita Taveta to launch cooperative fund to boost rural credit access
- World Champion Lilian Odira beats Keely Hodgkinson in Eugene thriller
- Coast leaders rally support for 10-point agenda, reject divisive politics
- A Super El Niño is coming: Five lessons Africa can teach the world
- Faith Kipyegon reveals hamstring injury after rare defeat in Eugene
`;
}
return “;
}
function commentActionsMarkup(comment, canComment) {
const likeLabel = comment.liked_by_me ? ‘Liked’ : ‘Like’;
const likeCount = Number(comment.like_count || 0) > 0
? “
: ”;
const likeButton = canComment && comment.status === ‘approved’
? “
: “;
const replyButton = canComment && comment.status === ‘approved’
? “
: ”;
return `
`;
}
function commentMarkup(comment, canComment, isReply = false) {
const pendingBadge = comment.status && comment.status !== ‘approved’
? “
: ”;
const edited = comment.is_edited
? “
: ”;
const repliesHtml = Array.isArray(comment.replies) && comment.replies.length
? `
`
: “;
return `
`;
}
function replyFormMarkup(commentId) {
return `
`;
}
function setNotice(widget, message, type = ‘info’) {
const notice = widget.querySelector(‘[data-role=”notice”]’);
if (!notice) return;
if (!message) {
notice.hidden = true;
notice.textContent = ”;
notice.classList.remove(‘is-error’);
return;
}
notice.hidden = false;
notice.textContent = message;
notice.classList.toggle(‘is-error’, type === ‘error’);
}
function setCount(widget, total) {
const count = widget.querySelector(‘[data-role=”count”]’);
if (!count) return;
const num = Number(total || 0);
count.textContent = num === 1 ? ‘1 comment’ : `${num} comments`;
}
function openReplyBox(widget, commentId) {
widget.querySelectorAll(‘[data-role=”reply-box”]’).forEach(box => {
box.hidden = true;
box.innerHTML = ”;
});
const targetItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (!targetItem) return;
const replyBox = targetItem.querySelector(‘[data-role=”reply-box”]’);
if (!replyBox) return;
replyBox.hidden = false;
replyBox.innerHTML = replyFormMarkup(commentId);
const textarea = replyBox.querySelector(‘textarea’);
if (textarea) textarea.focus();
}
function closeReplyBox(container) {
if (!container) return;
container.hidden = true;
container.innerHTML = ”;
}
async function initCommentsWidget(widget) {
const state = {
articleId: Number(widget.dataset.articleId),
loadUrl: widget.dataset.loadUrl,
storeUrl: widget.dataset.storeUrl,
commentsBaseUrl: widget.dataset.commentsBaseUrl,
canComment: widget.dataset.canComment === ‘1’,
page: 1,
perPage: 10,
sort: ‘newest’,
total: 0,
hasMore: false,
busy: false
};
const list = widget.querySelector(‘[data-role=”list”]’);
const loading = widget.querySelector(‘[data-role=”loading”]’);
const empty = widget.querySelector(‘[data-role=”empty”]’);
const loadMoreBtn = widget.querySelector(‘[data-role=”load-more”]’);
const sortSelect = widget.querySelector(‘[data-role=”sort”]’);
const composerForm = widget.querySelector(‘[data-role=”composer-form”]’);
async function loadComments(reset = true) {
if (state.busy) return;
state.busy = true;
setNotice(widget, ”);
loading.hidden = false;
if (reset) {
state.page = 1;
list.innerHTML = ”;
empty.hidden = true;
}
try {
const url = new URL(state.loadUrl, window.location.origin);
url.searchParams.set(‘page’, state.page);
url.searchParams.set(‘per_page’, state.perPage);
url.searchParams.set(‘sort’, state.sort);
const response = await requestJson(url.toString(), {
method: ‘GET’,
headers: {
‘Accept’: ‘application/json’,
‘X-Requested-With’: ‘XMLHttpRequest’
}
});
const items = Array.isArray(response.data) ? response.data : [];
const meta = response.meta || {};
state.total = Number(meta.total || 0);
state.hasMore = !!meta.has_more;
setCount(widget, state.total);
if (reset) {
list.innerHTML = ”;
}
if (!items.length && reset) {
empty.hidden = false;
} else {
empty.hidden = true;
list.insertAdjacentHTML(
‘beforeend’,
items.map(item => commentMarkup(item, state.canComment, false)).join(”)
);
}
loadMoreBtn.hidden = !state.hasMore;
} catch (error) {
if (!list.children.length) {
empty.hidden = false;
empty.textContent = ‘Unable to load comments right now.’;
}
setNotice(widget, error.message || ‘Unable to load comments.’, ‘error’);
} finally {
loading.hidden = true;
state.busy = false;
}
}
async function submitTopLevelComment(form) {
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘[data-role=”submit-comment”]’);
if (!textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(state.storeUrl, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
textarea.value = ”;
if (response?.data) {
list.insertAdjacentHTML(
‘afterbegin’,
commentMarkup(response.data, state.canComment, false)
);
empty.hidden = true;
if ((response.data.status || ”) === ‘approved’) {
state.total += 1;
setCount(widget, state.total);
}
}
setNotice(widget, response.message || ‘Comment posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post comment.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post comment’;
}
}
}
async function submitReply(form) {
const commentId = Number(form.dataset.commentId || 0);
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘.ev-comments__reply-submit’);
if (!commentId || !textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/reply`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
if (response?.data) {
const parentItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (parentItem) {
const repliesWrap = parentItem.querySelector(‘.ev-comments__replies’);
if (repliesWrap) {
repliesWrap.insertAdjacentHTML(
‘beforeend’,
commentMarkup(response.data, state.canComment, true)
);
}
}
}
closeReplyBox(form.closest(‘[data-role=”reply-box”]’));
setNotice(widget, response.message || ‘Reply posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post reply.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post reply’;
}
}
}
async function toggleLike(button) {
const commentId = Number(button.dataset.commentId || 0);
if (!commentId) return;
const originalHtml = button.innerHTML;
try {
button.disabled = true;
button.innerHTML = ‘Working…’;
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/like`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({})
});
const liked = !!response?.data?.liked;
const likeCount = Number(response?.data?.like_count || 0);
button.classList.toggle(‘is-liked’, liked);
button.innerHTML = `${liked ? ‘Liked’ : ‘Like’} ${likeCount > 0 ? “ : ”}`;
} catch (error) {
button.innerHTML = originalHtml;
setNotice(widget, error.message || ‘Unable to update like.’, ‘error’);
} finally {
button.disabled = false;
}
}
if (composerForm) {
composerForm.addEventListener(‘submit’, function (e) {
e.preventDefault();
submitTopLevelComment(composerForm);
});
}
if (sortSelect) {
sortSelect.addEventListener(‘change’, function () {
state.sort = this.value || ‘newest’;
loadComments(true);
});
}
if (loadMoreBtn) {
loadMoreBtn.addEventListener(‘click’, function () {
if (state.busy || !state.hasMore) return;
state.page += 1;
loadComments(false);
});
}
widget.addEventListener(‘click’, function (e) {
const likeBtn = e.target.closest(‘[data-action=”toggle-like”]’);
if (likeBtn) {
e.preventDefault();
toggleLike(likeBtn);
return;
}
const replyBtn = e.target.closest(‘[data-action=”toggle-reply”]’);
if (replyBtn) {
e.preventDefault();
openReplyBox(widget, Number(replyBtn.dataset.commentId || 0));
return;
}
const cancelReplyBtn = e.target.closest(‘[data-action=”cancel-reply”]’);
if (cancelReplyBtn) {
e.preventDefault();
closeReplyBox(cancelReplyBtn.closest(‘[data-role=”reply-box”]’));
}
});
widget.addEventListener(‘submit’, function (e) {
const replyForm = e.target.closest(‘.ev-comments__reply-form’);
if (replyForm) {
e.preventDefault();
submitReply(replyForm);
}
});
loadComments(true);
}
document.addEventListener(‘DOMContentLoaded’, function () {
document.querySelectorAll(‘.ev-comments’).forEach(initCommentsWidget);
});
})();
Trending
Eight arrested in Marsabit over Sh1.2 million SIM swap fraudNorthern Kenya
|Bashir Mbuthia
|1 day ago
Faith Kipyegon reveals hamstring injury after rare defeat as focus shifts to second half of seasonAthletics
|Erick Kariuki
|3 hours ago
Somali Embassy hosts Kenya leaders, diplomats for 66th Independence Day celebrationsSomalia
|Abdirahman Khalif
|7 hours ago
Six killed as matatu, trailer collide head-on along Nakuru-Eldoret highwayNews
|Rachael Mutabasi
|1 day ago
Court declares Ruaraka School land public, rules Sh1.5 billion payout illegalNews
|Carolyne Kubwa
|1 day ago
Mbappé fires France past Paraguay into World Cup quarter-finalsSports
|Erick Kariuki
|12 hours ago
Taita Taveta County unveils cooperative fund to boost rural access to creditCoast
|Farhiya Hussein
|18 minutes ago
Lilian Odira targets personal best and Diamond League final after dream victory in EugeneAthletics
|Erick Kariuki
|1 hour ago
Pakistan to host next round of US-Iran talks on July 11Middle-East
|XINHUA
|7 hours ago
Kenyans urged to join Saba Saba march to honour victims of alleged abductions, killingsNews
|Lucy Mumbi
|10 hours ago