Senegal presidency winner Bassirou Faye says he is a ‘break’ from establishment
Senegal presidency winner Bassirou Faye says he is a ‘break’ from establishment
Read this story aloud
Listen to the clean text version of this article
Ready
6 min listen
Audio reading is not supported on this browser.
Faye vowed to “fight corruption at every level” rebuild institutions and tackle the cost of living crisis
Anti-establishment candidate Bassirou Diomaye Faye said Monday that Senegal’s people had chosen to “break” with the current political system as he was set to become the youngest president in the country’s history.
Faye’s main rival from the governing coalition, Amadou Ba, has already conceded the race, triggering a political earthquake in the West African nation.
It marked a stunning victory for the 44-year-old Faye, who was only freed from prison 10 days before Sunday’s election, whose results are not yet official.
More To Read
- Belgium complete stunning comeback to knock out Senegal after historic World Cup collapse
- Iran draw sends Senegal into last 32 as Africa secures seven knockout spots
- Senegal overcome Tanzania on penalties to reclaim U17 AFCON crown
- Africa at the World Cup: 10 teams, local coaches and tactical depth usher in new era
- 2,000‑year‑old iron workshop in Senegal sheds new light on the past
- Senegal’s Sonko–Faye ruling alliance has split: Will political turmoil follow?
He described himself in his first public address since Ba conceded as “the choice of a break” from the establishment.
One of his main priorities as president will be “national reconciliation” following three years of unrest and a political crisis, Faye said.
Faye also vowed to “fight corruption at every level” rebuild institutions and tackle the cost of living crisis.
Latest Stories
- Nairobi restaurant gunpoint robbery renews calls for tougher security measures
- 𝐄𝐚𝐬𝐭𝐥𝐞𝐢𝐠𝐡 𝐕𝐨𝐢𝐜𝐞 𝐚𝐭 𝐍𝐢𝐧𝐞 – Machakos Mitumba Market gutted in night fire, traders count millions in losses
- Saba Saba organisers notify police of planned peaceful demonstration to Parliament
- Taita Taveta County unveils cooperative fund to boost rural access to credit
It is the first time in 12 presidential votes held under universal suffrage since Senegal gained independence from France in 1960 that an opposition candidate has won in the first round of voting.
Ba, 62, recognised Faye’s win and rang him to offer his congratulations.
Outgoing president Macky Sall, who did not stand after wins in 2012 and 2019, also congratulated him, hailing “a victory for Senegalese democracy”.
‘Hungry for change’
Faye has promised left-wing pan-Africanism and to renegotiate gas and oil contracts, with Senegal due to start production on recently discovered oil and gas reserves later this year.
The opposition candidate has never held a nationally elected position before.
The United States echoed Sall in hailing a triumph of democracy in Senegal.
“The commitment of the Senegalese people to the democratic process is part of the foundation of our deep friendship and strong bilateral ties,” State Department spokesman Matthew Miller told reporters.
French President Emmanuel Macron congratulated Faye on his victory and said he looked forward to working with him.
El Hadji Mamadou Mbaye, a political science lecturer and researcher at the University of Saint-Louis, told AFP that “people are hungry for change when you see what is happening in this country in terms of corruption, non-respect of the law”.
The person who most embodied the longed-for change was Ousmane Sonko, Mbaye added, referring to the firebrand opposition figurehead who was barred from running in the election but endorsed Faye as his replacement.
Faye had appeared clearly ahead of former prime minister Ba, according to provisional results from individual polling stations published by local media and on social networks.
Official results are expected before the end of the week. An absolute majority was required for a first-round win.
Supporters of opposition presidential candidate Bassirou Diomaye Faye and opposition leader Ousmane Sonko cheer during their final campaign rally at the Caroline Faye Stadium in Mbour, on March 22, 2024. (Photo: JOHN WESSELS/AFP via Getty Images)
Newspaper front pages had already congratulated Faye. “Happy Birthday Mister President,” said the Walf Quotidien, referring to Monday being Faye’s birthday.
Hundreds of jubilant Faye supporters had gathered at his campaign headquarters in the capital Dakar late on Sunday.
“It’s a total revolution. Everything is going to change. Behaviourally, socially and financially, everything is going to change,” Coumba Diallo, a singer known as Queen Biz, enthused.
At least 10 of the 17 presidential candidates earlier on Monday had congratulated Faye in light of provisional results published by the media.
No major incidents were reported during the vote despite three years of bouts of unrest and a last-minute postponement of the election.
Deep change
Faye was released from prison on March 14 under a rapidly passed amnesty law, together with Sonko.
He was jailed last year on charges linked to a standoff between Sonko and the state. Sonko was barred from running in the presidential race due to a defamation conviction.
The anti-establishment candidate has pledged to restore national “sovereignty” and distribute wealth more equitably.
He has also promised to renegotiate mining, gas and oil contracts signed with foreign companies.
Other Topics To Read
“I want to say to the international community, to our bilateral and multilateral partners, that Senegal… will remain… a sure and reliable ally to all partners who commit to a virtuous, respectful and mutually productive cooperation with us,” Faye said on Monday.
Postponement
Senegal was originally due to vote on February 25, but an 11th-hour postponement by Sall triggered the worst political crisis in decades and violence that left four dead.
Around 7.3 million of Senegal’s 18 million population were eligible to vote.
It is Senegal’s third democratic handover from one elected leader to another since independence.
Advertisement
Hundreds of observers from civil society, the African Union, the ECOWAS regional group and the European Union were on hand.
After weeks of confusion, Senegal’s top constitutional body overruled Sall’s attempt to delay the vote until December and forced him to reset the date to March 24, resulting in a rushed campaign that clashed with the Muslim fasting month of Ramadan.
Sall’s legacy includes mass arrests, persistent poverty, 20 per cent unemployment and thousands of migrants setting off on the perilous voyage to Europe each year.
Several episodes of unrest triggered partly by the stand-off between Sonko and the state have seen dozens killed and hundreds arrested since 2021.
Top Stories Today
- Saba Saba organisers notify police of peaceful march to Parliament
- Nairobi insecurity fears rise after gunmen rob Westlands restaurant
- 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
`;
}
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
Machakos Mitumba Market traders suffer heavy losses after midnight fireNews
|Lucy Mumbi
|10 hours ago
Saba Saba organisers notify police of planned peaceful demonstration to ParliamentNews
|Rachael Mutabasi
|33 minutes ago
Government releases Sh4 billion to settle NHIF hospital claimsHealth
|Lucy Mumbi
|7 hours ago
𝐄𝐚𝐬𝐭𝐥𝐞𝐢𝐠𝐡 𝐕𝐨𝐢𝐜𝐞 𝐚𝐭 𝐍𝐢𝐧𝐞 – Machakos Mitumba Market gutted in night fire, traders count millions in lossesVideos
|Zawadi Charity
|21 minutes ago
Government extends security operation in Marsabit, declares multiple areas dangerous for 30 more daysNorthern Kenya
|Lucy Mumbi
|12 hours ago
Rising political violence draws condemnation from Mombasa religious leadersCoast
|Farhiya Hussein
|7 hours ago
Six killed as matatu, trailer collide head-on along Nakuru-Eldoret highwayNews
|Rachael Mutabasi
|1 day ago
Quiet revolution behind foldable smartphones and why they’re making a comebackTechnology
|Margaret Wanjiru
|11 hours ago
A Super El Niño is coming: Five hard‑won lessons the world can learn from AfricaClimate Change
|The Conversation
|3 hours ago
Kiharu MP Ndindi Nyoro announces exit from UDAPolitics
|Lucy Mumbi
|6 hours ago