Close Menu
    Facebook X (Twitter) Instagram
    • Home
    • Contact Us
    • About Us
    • Privacy Policy
    • Terms Of Service
    • Advertisement
    Monday, July 20
    Facebook X (Twitter) Instagram Pinterest Vimeo
    ABS Africa TV
    • Breaking News
    • Trending
    • Africa News
    • World News
    • Features
    • Technology
    • More
      • Sports
      • Politics
      • Culture
      • Lifestyle
      • Travel
      • Business
      • Environment
      • Legal
      • Health
      • Cameroon
      • Ambazonia
      • AfroSingles
      • Environ/Climate
      • Editorial
      • The Leak Magazine
    • Donate
    Subscription
    ABS Africa TV
    Home»Travel»Kenya-Tanzania rail link moves closer as Voi–Taveta project hits 70 per cent
    Travel

    Kenya-Tanzania rail link moves closer as Voi–Taveta project hits 70 per cent

    Martin AkumaBy Martin AkumaJuly 19, 2026No Comments9 Mins Read
    Facebook Twitter Pinterest LinkedIn Tumblr Email
    Share
    Facebook Twitter LinkedIn Pinterest Email
    Post Views: 8

    Kenya-Tanzania rail link moves closer as Voi–Taveta project hits 70 per cent

    The Voi–Taveta railway rehabilitation is 70 per cent complete, creating jobs and boosting economic activity in Taita-Taveta County. (Photo: X/Kenya Railways)

    Listen to article

    3 min listen
    Audio reading is not supported on this browser.
    Ready

    Thanks for listening. Continue with a related story, or tap the speaker icon on the next page to listen.

    Kenya Railways cautions passengers against fraudulent Madaraka Express ticket sellers

    Rachael Mutabasi

     · 

    1 week agoRead nextOpens a fresh page.

    Kenya Railways says the Voi–Taveta Meter Gauge Railway rehabilitation has reached 70 per cent of earthworks, paving the way for improved cross-border trade, passenger transport and regional connectivity with Tanzania.

    The rehabilitation of the 130-kilometre Voi–Taveta meter-gauge railway, a key rail corridor linking Kenya and Tanzania, has reached 70 per cent completion of earthworks, bringing the restoration of cross-border rail transport closer to reality.
    Kenya Railways said the project, being implemented in Taita-Taveta County, is also creating employment opportunities for local communities while boosting economic activity across the region.
    “The rehabilitation of the 130-kilometre Voi–Taveta Meter Gauge Railway Line has reached another significant milestone, with 70 per cent of the earthworks now complete, while continuing to create employment opportunities for local communities and stimulate economic activity across Taita-Taveta County,” the corporation said in a statement.

    More To Read

    • Kenya Railways cautions passengers against fraudulent Madaraka Express ticket sellers
    • High Court blocks Kenya Railways bid to evict Muthurwa estate residents
    • Probe launched after Magadi train catches fire in Kajiado
    • Voi residents urge land reclamation to protect schools, health facilities and public amenities
    • Court petition seeks removal of Kenya Railways MD amid governance, transparency concerns
    • China Road Corporation urges court to throw out bid to halt Riruta-Ngong railway project

    According to Kenya Railways, the project will restore a vital transport corridor between Kenya and Tanzania, providing a more efficient and cost-effective option for both passenger and cargo transport.
    “Upon completion, the rehabilitated railway will provide a more efficient and cost-effective transport corridor for passengers and cargo, facilitate cross-border trade with Tanzania, promote tourism, reduce the cost of doing business, and unlock new economic opportunities for communities along the corridor,” the corporation said.
    The project also includes the construction of a dry port in Voi and new railway stations at Voi, Mwatate, Bura, Maktau and Taveta.

    Latest Stories

    • ECOWAS backs Ghana’s anti-xenophobia push at AU, endorses reparatory justice agenda
    • Kindiki says political differences should not destroy national unity, urges Kenyans to reject division
    • Sh32 billion Covid relief fraud suspect flown to US as Somalia deepens law enforcement cooperation
    • 𝐄𝐚𝐬𝐭𝐥𝐞𝐢𝐠𝐡 𝐕𝐨𝐢𝐜𝐞 𝐚𝐭 𝐍𝐢𝐧𝐞 – DCI opens probe into Ol Kalou by-election violence

    Kenya Railways said Taveta Station will connect Kenya’s railway network with Tanzania, strengthening regional connectivity and supporting cross-border trade.
    “The project also includes the development of a dry port in Voi, positioning the town as a strategic logistics and trade hub. In addition, new railway stations will be constructed at Voi, Mwatate, Bura, Maktau and Taveta, with Taveta Station linking Kenya’s railway network to Tanzania and strengthening regional connectivity,” the statement said.
    The corporation said the project reflects the government’s commitment to revitalising the Meter Gauge Railway network to boost trade, attract investment and support sustainable socio-economic growth.

    Other Topics To Read

    Top Stories Today

    • Kindiki urges Kenyans to reject division and protect national unity
    • Voi–Taveta railway upgrade hits 70 per cent completion
    • ECOWAS backs Ghana’s anti-xenophobia push at AU
    • US praises Somalia after suspect in Sh32 billion Covid fraud is extradited
    • DCI investigates violence and armed goons in Ol Kalou mini-poll
    • Kenyan seafarers unite to push for jobs, welfare and maritime reforms

    `;
    }

    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

    Kenyans withdraw billions from Boma Yangu despite growth in housing savings

    Kenyans withdraw billions from Boma Yangu despite growth in housing savingsNews
    |Lucy Mumbi
    |13 hours ago
    ECOWAS backs Ghana’s anti-xenophobia push at AU, endorses reparatory justice agendaAfrica
    |Mwangi Maina
    |30 minutes ago
    DCI to probe violence and armed goons in Ol Kalou by-election, says MurkomenNews
    |Rachael Mutabasi
    |3 hours ago
    Kenya-Tanzania rail link moves closer as Voi–Taveta project hits 70 per centNews
    |Rachael Mutabasi
    |11 minutes ago
    Manhunt launched after two murder suspects escape Mombasa police custodyCoast
    |Farhiya Hussein
    |7 hours ago
    Ol Kalou violence: Amnesty Kenya wants CS Murkomen to account for police failure during pollsNews
    |Lucy Mumbi
    |8 hours ago

    Two American service members killed in Jordan amid renewed US-Iran hostilities

    Two American service members killed in Jordan amid renewed US-Iran hostilitiesWorld
    |Bashir Mbuthia
    |1 day ago
    Catholic bishops urge Kenyans to reject divisive politics ahead of 2027 pollsNews
    |Lucy Mumbi
    |6 hours ago
    Hunger deepens for displaced families in Sudan’s El ObeidSudan
    |UN News
    |15 hours ago
    Shadows of past political violence shape lives of young Africans for years: A study of nine countriesAfrica
    |The Conversation
    |2 hours ago

    Closer KenyaTanzania Link moves Rail
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Martin Akuma
    • Website

    Related Posts

    Five Institutions Honoured for Advancing Higher Education Transformation in Africa

    July 20, 2026

    China Aligns With United States, India, Japan and Many More Countries to Ignite Ethiopia’s Tourism Awakening as Addis Ababa’s Stunning Urban Transformation, Global Conferences and New Connectivity Position Africa’s Historic Capital as a Future Travel Giant

    July 20, 2026

    EXPLAINER – Why Sanchez’s Algeria visit matters after years of strained relations

    July 20, 2026
    Leave A Reply Cancel Reply

    Search
    Latest Post

    Five Institutions Honoured for Advancing Higher Education Transformation in Africa

    July 20, 2026

    SMBC Aviation Capital orders 100 Boeing 737 MAX jets at FIA

    July 20, 2026

    Africa’s ports: anchoring a resilient future

    July 20, 2026

    What is Spain’s World Cup victory actually worth to the economy?

    July 20, 2026

    Anara Impact Capital leads $1.45 million investment in Egypt’s Reme-D

    July 20, 2026

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    • Facebook
    • Twitter
    • Pinterest
    • Instagram
    • YouTube
    • TikTok
    ABS TV and ABS Network News is a leading Pan-African 24/7 broadcasting network delivering nonstop news, talk shows, lifestyle programs, and digital media content worldwide through Satellite, Streaming Platforms, and Roku TV.
     
    Based in the United States, we connect Africa to the world while empowering creators, journalists, and brands through innovative media and broadcasting services.
    Facebook X (Twitter) Pinterest WhatsApp Instagram

    Our Picks

    Five Institutions Honoured for Advancing Higher Education Transformation in Africa

    SMBC Aviation Capital orders 100 Boeing 737 MAX jets at FIA

    Africa’s ports: anchoring a resilient future

    Most Popular

    What is Spain’s World Cup victory actually worth to the economy?

    Anara Impact Capital leads $1.45 million investment in Egypt’s Reme-D

    Almost Half of Americans View SCOTUS as Political

    © 2026 Copyright. All Rights Reserved by ABSAFRICATV
    • Privacy Policy
    • Terms of Services

    Type above and press Enter to search. Press Esc to cancel.

    We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it.