Political exile and Europe’s human rights obligations beyond borders

Credit: Jannik / Unsplash

In recent years, the concept of “transnational repression” has become central to discussions about the safety of political exiles. Freedom House has documented hundreds of cases of governments targeting dissidents abroad through intimidation, surveillance, coercion, and, in extreme instances, attempted assassination. One widely cited example is the 2018 attempted bombing of an Iranian opposition rally near Paris, which European investigators later linked to an Iranian diplomat and intelligence network. European authorities foiled the plot, and in 2021 a Belgian court convicted an Iranian diplomat for his role in the operation. For Iranian activists living in exile in Europe, relocation does not necessarily eliminate risk; it often transforms it.

This evolving reality raises a fundamental question: What are European states’ obligations when foreign governments attempt to silence political speech within their jurisdiction?

Human rights obligations and jurisdiction

The European Convention on Human Rights (ECHR) requires states to secure the rights covered by the Convention for everyone within their jurisdiction. These include the right to life, protection against inhuman or degrading treatment, and freedom of expression. The European Court of Human Rights has consistently emphasized that these rights must be “practical and effective,” not merely theoretical.

Foreign state actors threatening individuals residing in Europe trigger the host state’s positive obligations. The Court has established that authorities may be required to take preventive measures when they know, or ought to know, of a real and immediate risk to life. While previous cases have largely concerned domestic actors, their findings are equally relevant when the source of risk lies beyond the state’s borders.

Similarly, the International Covenant on Civil and Political Rights obliges states to ensure effective protection of rights within their territory and jurisdiction. Foreign intimidation that undermines free political participation inside Europe directly implicates host states’ human rights frameworks.

The Antwerp case: accountability beyond diplomacy

The 2018 attempted bombing of an Iranian opposition rally near Paris offers a concrete illustration. In 2021, a Belgian court convicted Iranian diplomat Assadollah Assadi of terrorism-related offenses, finding that he had used his diplomatic position to orchestrate the planned attack. The case marked the first conviction of an Iranian official for terrorism in Europe.

The significance of this judgment extends beyond individual criminal accountability. It demonstrated that transnational repression can be linked to state actions and structurally organized. The attempted attack was not an isolated act of private extremism but, according to the court’s findings, part of a coordinated operation.

From a human rights perspective, this case underscores the structural vulnerability of exiled communities. It reveals how foreign state actors may project coercive power into European jurisdictions, directly threatening rights protected under the ECHR.

Chilling effects and democratic integrity

Most transnational repression does not take the form of high-profile plots. Freedom House has documented patterns of harassment, digital surveillance, the coercion of relatives in the country of origin, and smear campaigns designed to intimidate diaspora activists. These practices generate what legal scholars describe as a “chilling effect,” leading individuals to self-censor out of fear.

Such indirect suppression of speech poses a structural challenge. The ECHR protects not only formal expression but also the conditions necessary for free public debate. The European Court of Human Rights has repeatedly stressed that freedom of expression is an essential foundation of a democratic society. If credible cross-border threats prevent exiled activists from safely exercising that freedom, the host state’s obligations extend beyond prosecuting perpetrators after the fact.

State responsibility and policy coherence

International law holds states accountable for their wrongful acts, wherever they take place. Ordinary criminal proceedings may be insufficient as a response to state agents engaged in coercive activities abroad.

European governments therefore face a dual responsibility: to protect individuals within their jurisdiction and to respond diplomatically and politically when foreign governments undermine that protection. Coordinated sanctions, the expulsion of implicated officials, enhanced protection for at-risk communities, and systematic documentation of transnational repression practices all have a role in a coherent human rights strategy.

The evolving concept of jurisdiction

Contemporary human rights scholarship increasingly questions strictly territorial understandings of jurisdiction. While the European Court of Human Rights has traditionally interpreted jurisdiction as primarily territorial, its rulings make clear that states must take reasonable steps to prevent foreseeable harm even when the source of that harm originates outside their territory.

Transnational repression therefore tests not only diplomatic resilience but also conceptual boundaries within human rights law. If foreign governments systematically impair the exercise of rights in Europe, host states cannot remain passive. The issue is not whether European law applies outside Europe. The real question is how European law responds to threats from foreign governments affecting the rights of people living inside Europe.

Beyond territorial safety

Exile no longer guarantees insulation from authoritarian power. Digital surveillance, diaspora monitoring, and diplomatic infrastructures enable regimes to extend influence across borders. The assumption that physical relocation ensures safety is increasingly outdated.

Europe has long presented itself as a space of refuge grounded in the rule of law. Making good on this self-image means states must recognize that threats originating abroad can materially undermine rights at home. Human rights obligations do not stop at the border—they are tested precisely when borders are crossed. The Antwerp conviction demonstrated that European courts can act decisively. Now the broader task is to ensure that such responses are part of a systematic approach.

Protecting political exiles is not only a matter of solidarity—it is central to maintaining the credibility of Europe’s human rights order.

Error Occurred While Processing Request The web site you are accessing has experienced an unexpected error.
Please contact the website administrator.


The following information is meant for the website developer for debugging purposes.
Error Occurred While Processing Request

Error Executing Database Query.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') order by start_date desc limit 4' at line 11
 
The error occurred in C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 3033
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 3013
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 3011
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 2353
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 1597
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 1393
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 1
Called from C:/websites/openglobalrights.com/wwwroot/index.cfm: line 11
Called from C:/websites/openglobalrights.com/wwwroot/index.cfm: line 1
Called from C:/websites/openglobalrights.com/wwwroot/political-exile-and-europes-human-rights-obligations-beyond-borders/index.cfm: line 1
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 3033
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 3013
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 3011
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 2353
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 1597
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 1393
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 1
Called from C:/websites/openglobalrights.com/wwwroot/index.cfm: line 11
Called from C:/websites/openglobalrights.com/wwwroot/index.cfm: line 1
Called from C:/websites/openglobalrights.com/wwwroot/political-exile-and-europes-human-rights-obligations-beyond-borders/index.cfm: line 1
3031 : <cfelseif get_related_content.recordcount eq 4>limit 0
3032 : <cfelseif get_related_content.recordcount eq 5>limit 0
3033 : <cfelseif get_related_content.recordcount gt 5>limit 0
3034 : <cfelse></cfif>
3035 : </cfquery>

SQLSTATE   42000
DATASOURCE   openglobalrights_utf
VENDORERRORCODE   1064
SQL    select distinct(c.id), c.url as c_url, c.language_id, c.page, c.start_date, c.page_title, author.name as author_name, author.url as author_url, a1.name as coauthor1_name, a1.url as coauthor1_url, a2.name as coauthor2_name, a2.url as coauthor2_url, a3.name as coauthor3_name, a3.url as coauthor3_url from content_topic ct, content c inner join author on c.author_id = author.id left join author a1 on c.coauthor1_id = a1.id left join author a2 on c.coauthor2_id = a2.id left join author a3 on c.coauthor3_id = a3.id where language_id = 1 and c.start_date <{ts '2026-04-27 00:00:00'} and c.id != 5694 and c.id = ct.content_id and author_id > 1 and ct.topic_id in () order by start_date desc limit 4
Resources:

Browser   Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Remote Address   216.73.216.112
Referrer  
Date/Time   27-Apr-26 10:21 AM
Stack Trace
at cfindex2ecfm1127481234._factor49(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:3033) at cfindex2ecfm1127481234._factor50(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:3013) at cfindex2ecfm1127481234._factor53(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:3011) at cfindex2ecfm1127481234._factor55(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:2353) at cfindex2ecfm1127481234._factor56(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:1597) at cfindex2ecfm1127481234._factor74(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:1393) at cfindex2ecfm1127481234.runPage(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:1) at cfindex2ecfm389513140._factor31(C:/websites/openglobalrights.com/wwwroot/index.cfm:11) at cfindex2ecfm389513140.runPage(C:/websites/openglobalrights.com/wwwroot/index.cfm:1) at cfindex2ecfm805378961.runPage(C:/websites/openglobalrights.com/wwwroot/political-exile-and-europes-human-rights-obligations-beyond-borders/index.cfm:1) at cfindex2ecfm1127481234._factor49(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:3033) at cfindex2ecfm1127481234._factor50(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:3013) at cfindex2ecfm1127481234._factor53(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:3011) at cfindex2ecfm1127481234._factor55(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:2353) at cfindex2ecfm1127481234._factor56(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:1597) at cfindex2ecfm1127481234._factor74(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:1393) at cfindex2ecfm1127481234.runPage(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:1) at cfindex2ecfm389513140._factor31(C:/websites/openglobalrights.com/wwwroot/index.cfm:11) at cfindex2ecfm389513140.runPage(C:/websites/openglobalrights.com/wwwroot/index.cfm:1) at cfindex2ecfm805378961.runPage(C:/websites/openglobalrights.com/wwwroot/political-exile-and-europes-human-rights-obligations-beyond-borders/index.cfm:1)

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')
order by start_date desc
limit 4' at line 11
	at sun.reflect.GeneratedConstructorAccessor16329.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:395)
	at com.mysql.jdbc.Util.getInstance(Util.java:370)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1038)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2793)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2742)
	at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:878)
	at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:986)
	at coldfusion.server.j2ee.sql.JRunStatement.execute(JRunStatement.java:359)
	at coldfusion.sql.Executive.executeQuery(Executive.java:1451)
	at coldfusion.sql.Executive.executeQuery(Executive.java:1201)
	at coldfusion.sql.Executive.executeQuery(Executive.java:1131)
	at coldfusion.sql.SqlImpl.execute(SqlImpl.java:406)
	at coldfusion.tagext.sql.QueryTag.executeQuery(QueryTag.java:1059)
	at coldfusion.tagext.sql.QueryTag.doEndTag(QueryTag.java:688)
	at cfindex2ecfm1127481234._factor49(C:\websites\openglobalrights.com\wwwroot\single\index.cfm:3033)
	at cfindex2ecfm1127481234._factor50(C:\websites\openglobalrights.com\wwwroot\single\index.cfm:3013)
	at cfindex2ecfm1127481234._factor53(C:\websites\openglobalrights.com\wwwroot\single\index.cfm:3011)
	at cfindex2ecfm1127481234._factor55(C:\websites\openglobalrights.com\wwwroot\single\index.cfm:2353)
	at cfindex2ecfm1127481234._factor56(C:\websites\openglobalrights.com\wwwroot\single\index.cfm:1597)
	at cfindex2ecfm1127481234._factor74(C:\websites\openglobalrights.com\wwwroot\single\index.cfm:1393)
	at cfindex2ecfm1127481234.runPage(C:\websites\openglobalrights.com\wwwroot\single\index.cfm:1)
	at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244)
	at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:446)
	at coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2795)
	at cfindex2ecfm389513140._factor31(C:\websites\openglobalrights.com\wwwroot\index.cfm:11)
	at cfindex2ecfm389513140.runPage(C:\websites\openglobalrights.com\wwwroot\index.cfm:1)
	at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244)
	at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:446)
	at coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2795)
	at cfindex2ecfm805378961.runPage(C:\websites\openglobalrights.com\wwwroot\political-exile-and-europes-human-rights-obligations-beyond-borders\index.cfm:1)
	at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244)
	at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:446)
	at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
	at coldfusion.filter.IpFilter.invoke(IpFilter.java:64)
	at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:451)
	at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48)
	at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
	at coldfusion.filter.PathFilter.invoke(PathFilter.java:112)
	at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94)
	at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
	at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
	at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:58)
	at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
	at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
	at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62)
	at coldfusion.CfmServlet.service(CfmServlet.java:219)
	at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
	at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:466)
	at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:197)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)