Listen to article
5 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.
Akonnor delighted with Gor Mahia’s tactical discipline after emphatic APR victory
Erick Kariuki
·
2 days agoRead nextOpens a fresh page.
Johanna Sandberg, EBCR Executive Director, said Rwanda’s accession to the EEN gives local companies access to a broader platform for business matchmaking, market intelligence, trade facilitation and market entry support across Europe.
Rwanda has become the first country in Sub-Saharan Africa to join the Enterprise Europe Network (EEN), a platform that connects businesses with trade, investment and market opportunities across the European Union.
The announcement was made on Thursday, July 23, during the 2026 European Business Chamber of Rwanda (EBCR) Summer Reception, which was also the relaunch of the EBCR Service Desk, bringing together government officials, the European private sector, diplomats and development partners.
Johanna Sandberg, EBCR Executive Director, said Rwanda’s accession to the EEN gives local companies access to a broader platform for business matchmaking, market intelligence, trade facilitation and market entry support across Europe.
More To Read
- Akonnor delighted with Gor Mahia’s tactical discipline after emphatic APR victory
- CECAFA boss backs Rwanda to host next three Kagame Cup editions
- Billionaire Bill Gates in Rwanda to explore health, AI progress
- AliExpress hit with record EU fine
- ‘Don’t diminish yourselves’: Kagame urges Rwandans to reject aid dependency
- 31 civil society groups urge EU to end migration cooperation with Libya over rights abuses
“The network will make it easier to facilitate trade relations with Europe and support companies seeking opportunities in European markets,” she said.
Sandberg said the relaunch of the EBCR Service Desk will further strengthen that effort by providing market intelligence, sector research, business-to-business matchmaking, trade facilitation and practical guidance for both European companies entering Rwanda and Rwandan firms looking to expand into Europe.
Sandberg said the chamber has strengthened its collaboration with government institutions as part of efforts to improve Rwanda’s business environment.
Latest Stories
- Can newly discovered soil fungus stop devastating African armyworm when chemicals have failed?
- AI food apps may be underestimating your calories by hundreds, study finds
- Court battle deepens over proposed Nairobi–Nakuru highway toll charges as KeNHA challenges COFEK suit
- Tana River, UNDP review food systems project amid food security and climate challenges
“Our role is to represent the interests of European businesses operating in Rwanda, but our mission goes beyond that. Through constructive dialogue with our partners in government, we seek to contribute ideas, experience and practical solutions that help make Rwanda an even more attractive destination for investment, entrepreneurship and innovation,” she said.
Speaking at the event, Minister of Finance and Economic Planning Yusuf Murangwa said Rwanda’s partnership with the EU had evolved into a strong economic relationship built on mutual trust and shared development ambitions.
“European businesses continue to contribute to Rwanda’s economy through investment, technology transfer, innovation, skills development and job creation, while the government remains focused on maintaining macroeconomic stability and a predictable business environment for long-term investors,” Murangwa said.
Officials during the 2026 European Business Chamber of Rwanda (EBCR) Summer Reception, which was also the relaunch of EBCR Service Desk. (Photo: New Times)
He added that the government would continue to implement reforms aimed at improving the ease of doing business, strengthening public institutions and enhancing the quality of services provided to investors.
“Our objective is to ensure that Rwanda remains one of Africa’s most competitive and attractive investment destinations. Companies in Europe are at the forefront of many industries, and we believe that with more effort on both sides, much more can be achieved together,” he said.
Murangwa encouraged European companies to explore opportunities in sectors including manufacturing, agribusiness, renewable energy, digital technologies, financial services, logistics, health and sustainable infrastructure.
Officials from the Rwanda Development Board (RDB) highlighted a growing emphasis on investor after-care and reinvestment.
Richard Kayibanda, RDB’s Chief Licensing Officer, said they had conducted 959 investor visits in 2025 and resolved 86 per cent of investor issues raised during the year. European investors contributed about $159 million in registered investments across 40 projects in 2025, he said.
The official added that the EBCR Service Desk complements RDB’s facilitation efforts by providing coordinated support throughout the investment cycle, from market entry and establishment to growth and reinvestment.
The reception also served as a farewell event for Belén Calvo Uyarra, the Ambassador of the European Union to Rwanda, as she concludes her tour of duty in the country.
Uyarra highlighted growing economic ties between Rwanda and the EU, noting that Rwandan exports to the European market had increased by more than 47 per cent during her tenure.
“The European Business Chamber of Rwanda has strengthened dialogue between the private sector and government and enhanced the service desk as an important tool to support companies seeking to invest, expand and build long-term partnerships between Rwanda and Europe,” she said.
Other Topics To Read
Top Stories Today
- KeNHA challenges COFEK suit over proposed A8 highway tolls
- New fungus discovery could transform fight against African armyworm
- Study warns AI calorie-counting apps get meal calories wrong
- Tana River, UNDP review food project to tackle hunger, climate crisis
- Boniface Mwangi wants corrupt officials sentenced to death
- Over 92 million Ethiopians cannot afford a healthy diet, UN warns
`;
}
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
More years, more illness: Why healthy ageing is becoming a global challengeHealth
|Charity Kilei
|3 hours ago
𝐄𝐚𝐬𝐭𝐥𝐞𝐢𝐠𝐡 𝐕𝐨𝐢𝐜𝐞 𝐚𝐭 𝐍𝐢𝐧𝐞 – Religious, cultural leaders warn politicians against dividing KenyansVideos
|Zawadi Charity
|2 hours ago
Sudan says 75 per cent of its health facilities resume operationsSudan
|XINHUA
|14 hours ago
CJ Koome launches justice reforms targeting digital courts, SGBV cases and election readinessNews
|Farhiya Hussein
|3 hours ago
Lawyer moves to High Court to challenges LSK’s indefinite boycott of court proceedingsNews
|Carolyne Kubwa
|4 hours ago
Ruto faces running mate dilemma as ODM demands DP slot in fresh challenge to KindikiPolitics
|Barack Oduor
|8 hours ago
KWS launches six-day operation to relocate five elephants from Mwea to reduce human-wildlife conflictNews
|Lucy Mumbi
|7 hours ago
Judge urges defence to consider plea bargain in State House guard murder trialNews
|Carolyne Kubwa
|9 hours ago
Prof John Okumu appointed substantive Kenyatta University Vice ChancellorEducation
|Lucy Mumbi
|11 hours ago
UN report reveals 79 million Ethiopians face hunger as healthy food slips out of reachEthiopia
|Abdirahman Khalif
|2 hours ago
