CINXE.COM
Downloads
<!-- remove the white space after footer--> <!DOCTYPE html> <html class="h-100" lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content=""> <meta name="author" content=""> <title>Downloads</title> <!-- Bootswatch theme for Bootstrap --> <link href="/css/bootstrap.min.css" rel="stylesheet"> <!-- for glyphicons --> <link href="/css/bootstrap-social.css" rel="stylesheet"> <link href="/css/bootstrap-social-telegram.css" rel="stylesheet"> <script defer src="/js/lib/fontawesome/solid.min.js"></script> <script defer src="/js/lib/fontawesome/regular.min.js"></script> <script defer src="/js/lib/fontawesome/brands.min.js"></script> <script defer src="/js/lib/fontawesome/fontawesome.min.js"></script> <!-- Ubuntu fonts from google --> <link href="https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,400;0,500;0,700;1,400&display=swap" rel="stylesheet"> <script type="text/javascript" src="/js/lib/TypeHelpers.min.js"></script> <!-- Algolia search begin --> <script src="https://cdn.jsdelivr.net/npm/algoliasearch@4.20.0/dist/algoliasearch-lite.umd.js" integrity="sha256-DABVk+hYj0mdUzo+7ViJC6cwLahQIejFvC+my2M/wfM=" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/instantsearch.js@4.60.0/dist/instantsearch.production.min.js" integrity="sha256-9242vN47QUX50UG5Gf5XDO1YREWCEJRyXHofh5fsl24=" crossorigin="anonymous"></script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.css@8.1.0/themes/satellite-min.css" integrity="sha256-p/rGN4RGy6EDumyxF9t7LKxWGg6/MZfGhJM/asKkqvA=" crossorigin="anonymous"> <!-- Algolia search end --> <link rel="stylesheet" href="/css/main.css"> <!-- syntax highlighting CSS --> <link rel="stylesheet" href="/css/syntax.css"> <link rel="icon" href="/favicon.png?v=2" type="image/png"/> <link rel="alternate" type="application/rss+xml" title="Rspamd news" href="/feed.xml"> <script> (function(i, s, o, g, r, a, m) { i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function() { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); ga('create', 'UA-5492966-5', 'auto'); ga('send', 'pageview'); </script> <script type="module" src="/js/search.js"></script> <!-- Begin Jekyll SEO tag v2.8.0 --> <title>Downloads | Rspamd - rapid spam filtering system.</title> <meta name="generator" content="Jekyll v4.3.2" /> <meta property="og:title" content="Downloads" /> <meta property="og:locale" content="en_US" /> <meta name="description" content="Rspamd is an advanced spam filtering system and email processing framework that allows evaluation of messages by a number of rules including regular expressions, statistical analysis and custom services such as URL black lists." /> <meta property="og:description" content="Rspamd is an advanced spam filtering system and email processing framework that allows evaluation of messages by a number of rules including regular expressions, statistical analysis and custom services such as URL black lists." /> <link rel="canonical" href="https://rspamd.com/downloads.html" /> <meta property="og:url" content="https://rspamd.com/downloads.html" /> <meta property="og:site_name" content="Rspamd - rapid spam filtering system." /> <meta property="og:type" content="website" /> <meta name="twitter:card" content="summary" /> <meta property="twitter:title" content="Downloads" /> <meta name="twitter:site" content="@rspamd" /> <script type="application/ld+json"> {"@context":"https://schema.org","@type":"WebPage","description":"Rspamd is an advanced spam filtering system and email processing framework that allows evaluation of messages by a number of rules including regular expressions, statistical analysis and custom services such as URL black lists.","headline":"Downloads","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://rspamd.com/img/rspamd_logo_black.png"}},"url":"https://rspamd.com/downloads.html"}</script> <!-- End Jekyll SEO tag --> </head> <body class="d-flex flex-column h-100" data-bs-spy="scroll" data-bs-target="#navbar-spy"> <!-- Navigation --> <nav class="navbar navbar-expand-xl bg-primary fixed-top py-0" role="navigation"> <div class="r-nav-container container-fluid"> <a class="navbar-brand d-flex align-items-center justify-content-center m-0 px-0 py-1" href="/"> <img class="h-100" src="/img/rspamd_logo_navbar.png"> </a> <form class="ais-InstantSearch px-3"> <div id="searchbox"></div> </form> <!--toggle button for xs-size--> <button type="button" class="navbar-toggler collapsed" data-bs-toggle="collapse" data-bs-target="#navbar"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <div id="navbar" class="navbar-collapse collapse navbar-nav-scroll"> <ul class="nav navbar-nav ms-auto"> <li class="nav-item"> <a class="nav-link d-flex align-items-center" href="/downloads.html">Downloads <i class="fa-solid fa-lg fa-download"></i></a> </li> <li class="nav-item dropdown dropdown-doc position-static"> <a href="#" class="nav-link d-flex align-items-center dropdown-toggle" data-bs-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Documentation <span class="caret"></span></a> <ul class="dropdown-menu w-100 mt-0 p-4 border-top rounded-0"> <li class="d-table-row"> <a class="dropdown-item text-nowrap fw-bold px-3" href="/doc/index.html"> Documentation index <small><i class="fa-solid fa-chevron-right"></i></small> </a> </li> <li>Installation and Administration <ul> <li><a class="dropdown-item" href="/doc/tutorials/quickstart.html">Quick start</a></li> <li><a class="dropdown-item" href="/doc/faq.html">FAQ</a></li> <li><a class="dropdown-item" href="/doc/tutorials/integration.html">MTA integration</a></li> <li><a class="dropdown-item" href="/doc/tutorials/migration.html">Upgrading notes</a></li> <li><a class="dropdown-item" href="/webui/">Rspamd WebUI</a></li> <li><a class="dropdown-item" href="/doc/other/gtube_patterns.html">GTUBE-like test patterns</a></li> <li><a class="dropdown-item" href="/doc/tutorials/migrate_sa.html">Migrating from SA</a></li> <li><a class="dropdown-item" href="/doc/tutorials/site_contributing.html">Contributing to rspamd.com website</a></li> <li><a class="dropdown-item" href="/doc/configuration/redis.html">Using Redis in Rspamd</a></li> <li><a class="dropdown-item" href="/doc/tutorials/redis_replication.html">Replication in Redis</a></li> <li><a class="dropdown-item" href="/doc/tutorials/scanning_outbound.html">How to scan outbound emails</a></li> <li><a class="dropdown-item" href="/doc/tutorials/stunnel_setup.html">Setup stunnel to protect Redis</a></li> </ul> </li> <li>Configuration guide <ul> <li><a class="dropdown-item" href="/doc/configuration/">Configuration structure <small><i class="fa-solid fa-chevron-right"></i></small></a> <ul style="padding-left: 30px; list-style-type: circle;"> <li><a class="dropdown-item" href="/doc/configuration/settings.html">Users settings description</a></li> <li><a class="dropdown-item" href="/doc/configuration/options.html">Top-level options</a></li> <li><a class="dropdown-item" href="/doc/configuration/logging.html">Logging setup</a></li> <li><a class="dropdown-item" href="/doc/configuration/metrics.html">Metrics, actions and symbols</a></li> <li><a class="dropdown-item" href="/doc/configuration/composites.html">Composite symbols</a></li> <li><a class="dropdown-item" href="/doc/configuration/statistic.html">Statistical module</a></li> <li><a class="dropdown-item" href="/doc/configuration/selectors.html">Using selectors</a></li> </ul> </li> <li><a class="dropdown-item" href="/doc/modules/">Modules documentation</a></li> <li><a class="dropdown-item" href="/doc/workers/">Workers documentation</a></li> <li><a class="dropdown-item" href="/doc/other/rspamadm.html">Rspamadm utilities</a></li> <li><a class="dropdown-item" href="/doc/other/usage_policy.html">Rspamd data usage policies</a></li> <li><a class="dropdown-item" href="/doc/configuration/upstream.html">Upstreams article</a></li> </ul> </li> <li>Developers documentation <ul> <li><a class="dropdown-item" href="/doc/lua/">Lua API reference</a></li> <li><a class="dropdown-item" href="/doc/developers/examples.html">Lua rules examples</a></li> <li><a class="dropdown-item" href="/doc/developers/writing_rules.html">Writing Rspamd rules</a></li> <li><a class="dropdown-item" href="/doc/tutorials/fuzzy_storage.html">Creating your fuzzy storage</a></li> <li><a class="dropdown-item" href="/doc/developers/architecture.html">Architecture information</a></li> <li><a class="dropdown-item" href="/doc/developers/protocol.html">Protocol documentation</a></li> </ul> </li> <li>External resources <ul> <li><a class="dropdown-item" href="https://thomas-leister.de/en/mailserver-debian-stretch/">Own mail server based on Dovecot, Postfix, MySQL, Rspamd and Debian Stretch</a></li> <li><a class="dropdown-item" href="https://web.archive.org/web/20240914211825/www.c0ffee.net/blog/mail-server-guide">Mail self-hosting on FreeBSD using Postfix, Dovecot, Rspamd, and LDAP</a></li> <li><a class="dropdown-item" href="http://www.0xf8.org/2018/05/an-alternative-introduction-to-rspamd-configuration-introduction/">An alternative introduction to rspamd configuration</a></li> </ul> </li> </ul> </li> <li class="nav-item"> <a class="nav-link d-flex align-items-center" href="/blog/">News</a> </li> <li class="nav-item"> <a class="nav-link d-flex align-items-center" href="/doc/other/usage_policy.html">Usage policies</a> </li> <li class="nav-item dropdown"> <a href="#" class="nav-link d-flex align-items-center dropdown-toggle" id="services-dropdown" data-bs-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Extra services<span class="caret"></span></a> <div class="dropdown-menu" aria-labelledby="services-dropdown"> <h6 class="dropdown-header">Services we offer</h6> <button class="dropdown-item" type="button"> <a href="/commercial.html">Commercial support</a> </button> <button class="dropdown-item" type="button"> <a href="https://shop.rspamd.com">Buy Rspamd Premium</a> </button> </div> </li> <li class="nav-item"> <a class="nav-link d-flex align-items-center" href="/support.html">Community</a> </li> <li class="nav-item"> <a class="nav-link d-flex align-items-center" href="https://bl.rspamd.com/" target="_blank">List removal</a> </li> <li class="nav-item"> <a class="nav-link d-flex align-items-center" href="https://github.com/rspamd/rspamd" target="_blank"><i class="fa-brands fa-lg fa-github" aria-hidden="true"></i> GitHub</a> </li> </ul> <ul class="nav navbar-nav ms-auto"> <li class="nav-item"> <a class="nav-link d-flex align-items-center" href="https://github.com/rspamd/rspamd.com/edit/master/downloads.md" target="_blank" data-bs-toggle="tooltip" data-bs-title="Edit the current page and create a pull request on GitHub"> <i class="fa-solid fa-lg fa-pencil"></i> Edit</a> </li> <li class="nav-item"> <form class="donate nav-link d-flex align-items-center pe-1" action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank"> <input type="hidden" name="cmd" value="_s-xclick"> <input type="hidden" name="hosted_button_id" value="32NL9H6JS6K9C"> <input type="hidden" name="currency_code" value="GBP"> <input type="hidden" name="no_shipping" value="1"> <button type="submit" class="btn btn-primary">Donate</button> </form> </li> </ul> </div> </div> </nav> <div class="flex-shrink-0"> <nav class="jumbotron fixed-top ais-hits"> <div class="ais-InstantSearch"> <div id="pagination"></div> <div id="hits"></div> </div> </nav> <style> .r-docs-nav { width: 300px; position: fixed; top: var(--navbar-height); padding-top: var(--r-docs-nav-padding-top); overflow: auto; max-height: calc(100vh - var(--navbar-height)); margin-left: -2px; padding-left: 2px; padding-bottom: 30px; } .r-docs-nav a { color: black; } .r-docs-nav a.active-link { font-weight: bold; color: #de4700; } .r-docs-nav a:not(.active-link) > del { opacity: 0.4; } .r-docs-subnav ul { list-style: none; padding-left: 15px; } .r-docs-subnav > ul { display: none; } .r-docs-subnav ul a { line-height: 1.6; } .r-docs-subnav.active-subnav::before { content: ''; position: absolute; top: -1px; bottom: -1px; left: 0; width: 2px; background-color: #de4700; } .r-docs-subnav.active-subnav > ul { display: block; } .r-docs-subnav.active-subnav > a { font-weight: bold; } .r-docs-content { margin-left: 300px; } .r-docs-content h1, .r-docs-content h2, .r-docs-content h3, .r-docs-content h4 { padding-top: calc(var(--navbar-height) + var(--r-docs-nav-padding-top)); margin-top: calc(14px - var(--navbar-height)); } @media screen and (max-width: 767px) { .r-docs-nav { width: 100%; position: static; max-height: unset; overflow: visible; padding-bottom: 0; } .r-docs-content { margin-left: 0; } } </style> <div class="r-docs-container"> <div class="r-docs-nav px-4"> <ul class="list-group list-group-flush"> <li class="r-docs-subnav list-group-item"> <a href="/doc/about/">About Rspamd</a> <ul> <li><a href="/doc/about/comparison.html">Comparison</a></li> <li><a href="/doc/about/features.html">Features</a></li> <li><a href="/doc/about/performance.html">Performance</a></li> <li><a href="/doc/about/media.html">Videos about Rspamd</a></li> </ul> </li> <li class="r-docs-subnav list-group-item"> <a href="/doc/tutorials/">Tutorials and Guides</a> <ul> <li><a href="/doc/tutorials/site_contributing.html">Contributing to website</a></li> <li><a href="/doc/tutorials/feedback_from_users_with_IMAPSieve.html">Getting feedback from users with IMAPSieve</a></li> <li><a href="/doc/tutorials/migrate_sa.html">Migrating from SpamAssassin</a></li> <li><a href="/doc/tutorials/integration.html">MTA integration</a></li> <li><a href="/doc/tutorials/redis_replication.html">Multi-instance Redis replication</a></li> <li><a href="/doc/tutorials/quickstart.html">Quick start</a></li> <li><a href="/doc/tutorials/scanning_outbound.html">Scanning outbound mail</a></li> <li><a href="/doc/tutorials/stunnel_setup.html">Setup stunnel to protect Redis</a></li> <li><a href="/doc/tutorials/migration.html">Upgrading</a></li> <li><a href="/doc/tutorials/fuzzy_storage.html">Usage of fuzzy hashes</a></li> <li><a href="/doc/tutorials/fuzzy_storage.ru.html">袠褋锌芯谢褜蟹芯胁邪薪懈械 fuzzy 褏械褕械泄</a></li> </ul> </li> <li class="r-docs-subnav list-group-item"> <a href="/doc/faq.html">FAQ</a> </li> <li class="r-docs-subnav list-group-item"> <a href="/doc/configuration/">Rspamd configuration</a> <ul> <li><a href="/doc/configuration/metrics.html">Actions and scores</a></li> <li><a href="/doc/configuration/options.html">Common options</a></li> <li><a href="/doc/configuration/composites.html">Composite symbols</a></li> <li><a href="/doc/configuration/logging.html">Logging settings</a></li> <li><a href="/doc/configuration/redis.html">Redis configuration</a></li> <li><a href="/doc/configuration/maps.html">Rspamd maps</a></li> <li><a href="/doc/configuration/selectors.html">Selectors</a></li> <li><a href="/doc/configuration/statistic.html">Statistics settings</a></li> <li><a href="/doc/configuration/ucl.html">Universal configuration language (UCL)</a></li> <li><a href="/doc/configuration/upstream.html">Upstreams configuration</a></li> <li><a href="/doc/configuration/settings.html">User settings</a></li> </ul> </li> <li class="r-docs-subnav list-group-item"> <a href="/doc/modules/">Modules documentation</a> <ul> <li><a href="/doc/modules/antivirus.html"><strong>Antivirus module</strong></a></li> <li><a href="/doc/modules/arc.html">ARC module</a></li> <li><a href="/doc/modules/asn.html">ASN module</a></li> <li><a href="/doc/modules/bayes_expiry.html">Bayes expiry module</a></li> <li><a href="/doc/modules/chartable.html">Chartable module</a></li> <li><a href="/doc/modules/clickhouse.html"><strong>Clickhouse module</strong></a></li> <li><a href="/doc/modules/dcc.html">DCC module</a></li> <li><a href="/doc/modules/dkim.html">DKIM module</a></li> <li><a href="/doc/modules/dkim_signing.html">DKIM signing module</a></li> <li><a href="/doc/modules/dmarc.html">DMARC module</a></li> <li><a href="/doc/modules/elastic.html">Elasticsearch module</a></li> <li><a href="/doc/modules/emails.html"><del>Emails module</del></a></li> <li><a href="/doc/modules/external_relay.html">External Relay module</a></li> <li><a href="/doc/modules/external_services.html"><strong>External Services module</strong></a></li> <li><a href="/doc/modules/force_actions.html"><strong>Force Actions module</strong></a></li> <li><a href="/doc/modules/fuzzy_check.html">Fuzzy check module</a></li> <li><a href="/doc/modules/gpt.html">GPT Plugin</a></li> <li><a href="/doc/modules/greylisting.html">Greylisting module</a></li> <li><a href="/doc/modules/hfilter.html">Hfilter module</a></li> <li><a href="/doc/modules/ip_score.html"><del>IP Score module</del></a></li> <li><a href="/doc/modules/known_senders.html">known_senders module</a></li> <li><a href="/doc/modules/maillist.html">Mailing lists module</a></li> <li><a href="/doc/modules/metadata_exporter.html">Metadata exporter</a></li> <li><a href="/doc/modules/metric_exporter.html">Metric exporter</a></li> <li><a href="/doc/modules/mid.html">MID module</a></li> <li><a href="/doc/modules/milter_headers.html"><strong>Milter headers module</strong></a></li> <li><a href="/doc/modules/mime_types.html">Mime types modules</a></li> <li><a href="/doc/modules/multimap.html"><strong>Multimap module</strong></a></li> <li><a href="/doc/modules/mx_check.html">MX Check module</a></li> <li><a href="/doc/modules/neural.html">Neural network module</a></li> <li><a href="/doc/modules/once_received.html">Once received module</a></li> <li><a href="/doc/modules/phishing.html">Phishing module</a></li> <li><a href="/doc/modules/ratelimit.html"><strong>Ratelimit module</strong></a></li> <li><a href="/doc/modules/rbl.html"><strong>RBL module</strong></a></li> <li><a href="/doc/modules/history_redis.html">Redis history module</a></li> <li><a href="/doc/modules/regexp.html"><strong>Regexp module</strong></a></li> <li><a href="/doc/modules/replies.html">Replies module</a></li> <li><a href="/doc/modules/reputation.html">Reputation module</a></li> <li><a href="/doc/modules/rspamd_update.html">Rspamd update module</a></li> <li><a href="/doc/modules/spamassassin.html">SpamAssassin rules module</a></li> <li><a href="/doc/modules/spamtrap.html">Spamtrap module</a></li> <li><a href="/doc/modules/spf.html">SPF module</a></li> <li><a href="/doc/modules/surbl.html"><del>SURBL module</del></a></li> <li><a href="/doc/modules/trie.html"><del>Trie module</del></a></li> <li><a href="/doc/modules/url_redirector.html">URL redirector module</a></li> <li><a href="/doc/modules/whitelist.html">Whitelist module</a></li> </ul> </li> <li class="r-docs-subnav list-group-item"> <a href="/doc/workers/">Workers documentation</a> <ul> <li><a href="/doc/workers/controller.html">Controller worker</a></li> <li><a href="/doc/workers/fuzzy_storage.html">Fuzzy storage worker</a></li> <li><a href="/doc/workers/normal.html">Normal worker (scanner)</a></li> <li><a href="/doc/workers/rspamd_proxy.html">Proxy worker</a></li> </ul> </li> <li class="r-docs-subnav list-group-item"> <a href="#">Developers documentation</a> <ul> <li><a href="/doc/developers/sync_async.html">Coroutines and async calls</a></li> <li><a href="/doc/developers/examples.html">Lua rules examples</a></li> <li><a href="/doc/developers/architecture.html">Rspamd architecture</a></li> <li><a href="/doc/developers/protocol.html">Rspamd protocol</a></li> <li><a href="/doc/developers/writing_rules.html">Writing Rspamd rules</a></li> <li><a href="/doc/developers/writing_tests.html">Writing tests for Rspamd</a></li> </ul> </li> <li class="r-docs-subnav list-group-item"> <a href="/doc/lua/">Lua API reference</a> <ul> <li> <a href="#">Rspamd Lua C API</a> <ul> <li><a href="/doc/lua/rspamd_task.html">Task module</a></li> <li><a href="/doc/lua/rspamd_mimepart.html">Message parts module</a></li> <li><a href="/doc/lua/rspamd_config.html">Configuration module</a></li> <li><a href="/doc/lua/rspamd_html.html">Html module</a></li> <li><a href="/doc/lua/rspamd_map.html">Maps module</a></li> <li><a href="/doc/lua/ucl.html">UCL module</a></li> <li><a href="/doc/lua/rspamd_regexp.html">Regexp module</a></li> <li><a href="/doc/lua/rspamd_ip.html">IP module</a></li> <li><a href="/doc/lua/rspamd_http.html">HTTP module</a></li> <li><a href="/doc/lua/rspamd_trie.html">Trie module</a></li> <li><a href="/doc/lua/rspamd_resolver.html">DNS module</a></li> <li><a href="/doc/lua/rspamd_expression.html">Expression module</a></li> <li><a href="/doc/lua/rspamd_redis.html">Redis module</a></li> <li><a href="/doc/lua/rspamd_upstream.html">Upstream module</a></li> <li><a href="/doc/lua/rspamd_logger.html">Logger module</a></li> <li><a href="/doc/lua/rspamd_cryptobox.html">Cryptobox module</a></li> <li><a href="/doc/lua/rspamd_url.html">URL module</a></li> <li><a href="/doc/lua/rspamd_tcp.html">TCP client module</a></li> <li><a href="/doc/lua/rspamd_udp.html">UDP client module</a></li> <li><a href="/doc/lua/rspamd_mempool.html">Memory pool module</a></li> <li><a href="/doc/lua/rspamd_util.html">Utilities module</a></li> <li><a href="/doc/lua/rspamd_text.html">Rspamd text module</a></li> </ul> </li> <li> <a href="#">Rspamd Plain Lua API</a> <ul> <li><a href="/doc/lua/lua_redis.html">Redis module</a></li> <li><a href="/doc/lua/lua_util.html">Utilities module</a></li> <li><a href="/doc/lua/lua_maps.html">Maps module</a></li> <li><a href="/doc/lua/lua_selectors.html">Selectors module</a></li> <li><a href="/doc/lua/lua_clickhouse.html">Clickhouse module</a></li> </ul> </li> </ul> </li> <li class="r-docs-subnav list-group-item"> <a href="#">Other topics</a> <ul> <li><a href="/doc/other/gtube_patterns.html">GTUBE-like test patterns</a></li> <li><a href="/doc/other/rspamadm.html">Rspamadm command</a></li> <li><a href="/doc/other/usage_policy.html">Services acceptable use policy</a></li> </ul> </li> <li class="r-docs-subnav list-group-item"> <a href="#">External resources</a> <ul> <li><a href="https://thomas-leister.de/en/mailserver-debian-stretch/" target="_blank">Dovecot, Postfix, MySQL, Rspamd on Debian 9 Stretch</a></li> <li><a href="http://www.0xf8.org/2018/05/an-alternative-introduction-to-rspamd-configuration-introduction/" target="_blank">Alternative introduction</a></li> <li><a href="https://web.archive.org/web/20240914211825/www.c0ffee.net/blog/mail-server-guide" target="_blank">Postfix, Dovecot, Rspamd, and LDAP on FreeBSD</a></li> <li><a href="https://github.com/vedetta-com/caesonia" target="_blank">OpenBSD Email Service relying on Rspamd</a></li> </ul> </li> </ul> </div> <div class="r-docs-content linkify-headers px-4"> <h1 id="rspamd-packages">Rspamd packages</h1> <!-- Tab navigation --> <div class="col-12 px-3"> <ul class="nav nav-tabs nav-justified" role="tablist"> <li class="nav-item" role="presentation"> <a class="nav-link active" aria-controls="system1" role="tab" data-bs-toggle="tab" data-bs-target="#system1"><img src="img/docker.png" width="20" /><span class="myHidden-sm"> Docker</span></a> </li> <li class="nav-item" role="presentation"> <a class="nav-link" aria-controls="system2" role="tab" data-bs-toggle="tab" data-bs-target="#system2"><img src="img/redhat.png" width="20" /><span class="myHidden-sm"> RHEL</span></a> </li> <li class="nav-item" role="presentation"> <a class="nav-link" aria-controls="system3" role="tab" data-bs-toggle="tab" data-bs-target="#system3"><img src="img/Ubuntu.png" width="20" /><span class="myHidden-sm"> Debian/Ubuntu</span></a> </li> <li class="nav-item" role="presentation"> <a class="nav-link" aria-controls="system4" role="tab" data-bs-toggle="tab" data-bs-target="#system4"><img src="img/linux.png" width="20" /><span class="myHidden-sm"> Other Linux</span></a> </li> <li class="nav-item" role="presentation"> <a class="nav-link" aria-controls="system5" role="tab" data-bs-toggle="tab" data-bs-target="#system5"><img src="img/freebsd.png" width="20" /><span class="myHidden-sm"> BSD</span></a> </li> <li class="nav-item" role="presentation"> <a class="nav-link" aria-controls="system6" role="tab" data-bs-toggle="tab" data-bs-target="#system6"><img src="img/octocat.png" width="20" /><span class="myHidden-sm"> Build rspamd</span></a> </li> </ul> <!-- Tab - pane content --> <div class="tab-content p-4 border-bottom"> <div role="tabpanel" class="tab-pane fade show active" id="system1"> <h2 id="docker">Docker</h2> <div> <p>An official docker image is available at <a href="https://hub.docker.com/r/rspamd/rspamd">rspamd/rspamd on Dockerhub</a>, sources are <a href="https://github.com/rspamd/rspamd-docker">on GitHub</a>. It is a recommendable way to run Rspamd.</p> <p>In this build upstream config files are installed in <code class="language-plaintext highlighter-rouge">/usr/share/rspamd/config</code> allowing <code class="language-plaintext highlighter-rouge">/etc/rspamd</code> to contain only local configuration.</p> <p>This build provides a <a href="https://fasttext.cc/docs/en/language-identification.html">language identification model</a> to enable language detection using <code class="language-plaintext highlighter-rouge">fasttext</code>, distributed under <a href="https://creativecommons.org/licenses/by-sa/3.0/">version 3.0 of the Creative Commons Attribution-Share-Alike License</a>.</p> <p>Volumes or bind mounts should be used for the <code class="language-plaintext highlighter-rouge">/var/lib/rspamd</code> directory and optionally for <code class="language-plaintext highlighter-rouge">/etc/rspamd</code>. If bind mounts are used, the <code class="language-plaintext highlighter-rouge">/var/lib/rspamd</code> directory should be writable by <code class="language-plaintext highlighter-rouge">11333:11333</code> on the host machine.</p> <p>The root directory may be set read-only for added security at cost of being less tactile for the administrator.</p> <p>Basic usage:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker run -v rspamd_dbdir:/var/lib/rspamd -v rspamd_confdir:/etc/rspamd -ti rspamd/rspamd </code></pre></div> </div> <p>A <a href="https://github.com/rspamd/rspamd-docker/tree/main/examples/compose">Docker compose example</a> is available in the source repo.</p> </div> </div> <div role="tabpanel" class="tab-pane fade" id="system2"> <h2 id="rhel-alike-distributions">RHEL-alike distributions</h2> <div> <p>Packages are available for RHEL-compatible distributions such as Oracle Linux, AlmaLinux, Rocky Linux and CentOS. Currently versions 8 through 9 are supported.</p> <p>Please note that these packages <strong>require</strong> <a href="https://fedoraproject.org/wiki/EPEL">EPEL</a> to be installed on your system as many dependencies are missing from the base repositories. You can learn how to install EPEL from their site: <a href="https://fedoraproject.org/wiki/EPEL">https://fedoraproject.org/wiki/EPEL</a>. Please bear in mind, that you might also need debug symbols package for Rspamd to be able to fill bug reports about possible crashes. Debug symbols are placed in <code class="language-plaintext highlighter-rouge">rspamd-debug</code> package and could be safely installed even in the production environment.</p> <p>To install rspamd repo, please download the corresponding repository file and the signing key (both repo and all packages are signed with my GPG key). You could use the following commands to install rspamd <a class="text-decoration-none text-reset" href="#stableSys1">stable<sup>1</sup></a> RPM repository:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>source /etc/os-release export EL_VERSION=`echo -n $PLATFORM_ID | sed "s/.*el//"` curl https://rspamd.com/rpm-stable/centos-${EL_VERSION}/rspamd.repo > /etc/yum.repos.d/rspamd.repo dnf install rspamd </code></pre></div> </div> <p>For <a class="text-decoration-none text-reset" href="#experimentalSys1">experimental<sup>2</sup></a> branch packages, download <code class="language-plaintext highlighter-rouge">rpm-experimental</code> repofile as following:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>source /etc/os-release export EL_VERSION=`echo -n $PLATFORM_ID | sed "s/.*el//"` curl https://rspamd.com/rpm/centos-${EL_VERSION}/rspamd-experimental.repo > /etc/yum.repos.d/rspamd.repo dnf install rspamd </code></pre></div> </div> <p>For <a class="text-decoration-none text-reset" href="#asanSys1">asan<sup>2</sup></a> packages, install <code class="language-plaintext highlighter-rouge">rspamd-asan</code>.</p> </div> <hr /> <p class="myFootnote" id="stableSys1">1. Use STABLE branch of packages: those packages are the official rspamd releases which are recommended for production usage.</p> <p class="myFootnote" id="experimentalSys1">2. Use EXPERIMENTAL branch of packages: these packages are less stable and they are generated frequently from the current development branch. Experimental packages usually have more features but might be SOMETIMES broken in some points (nevertheless, bugs are usually quickly fixed after detection).</p> <p class="myFootnote" id="asanSys1">3. Use ASAN branch of packages: these are packages (both stable and experimental) designed to debug Rspamd issues, especially core files, using advanced debugging tools. Use these packages if you encounter an issue in Rspamd and you want it to be fixed.</p> </div> <div role="tabpanel" class="tab-pane fade" id="system3"> <h2 id="debian-and-ubuntu-linux">Debian and Ubuntu Linux</h2> <div> <p>Rspamd supports the following .deb based distributives:</p> <ul> <li><strong>Debian bookworm</strong> (since 3.5)</li> <li><strong>Debian bullseye</strong></li> <li><strong>Ubuntu focal</strong> (since 2.5)</li> <li><strong>Ubuntu jammy</strong> (since 3.3)</li> <li><strong>Ubuntu noble</strong> (since 3.9)</li> </ul> <p>To install the rspamd <a class="text-decoration-none text-reset" href="#stableSys2">stable<sup>1</sup></a> apt repository, please use the following commands:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#apt update # if running a minimal system</span> <span class="c">#apt-get install sudo # if running a minimal system</span> <span class="nb">sudo </span>apt-get <span class="nb">install</span> <span class="nt">-y</span> lsb-release wget gpg <span class="c"># for install</span> <span class="nv">CODENAME</span><span class="o">=</span><span class="sb">`</span>lsb_release <span class="nt">-c</span> <span class="nt">-s</span><span class="sb">`</span> <span class="nb">sudo mkdir</span> <span class="nt">-p</span> /etc/apt/keyrings wget <span class="nt">-O-</span> https://rspamd.com/apt-stable/gpg.key | gpg <span class="nt">--dearmor</span> | <span class="nb">sudo tee</span> /etc/apt/keyrings/rspamd.gpg <span class="o">></span> /dev/null <span class="nb">echo</span> <span class="s2">"deb [signed-by=/etc/apt/keyrings/rspamd.gpg] http://rspamd.com/apt-stable/ </span><span class="nv">$CODENAME</span><span class="s2"> main"</span> | <span class="nb">sudo tee</span> /etc/apt/sources.list.d/rspamd.list <span class="nb">echo</span> <span class="s2">"deb-src [signed-by=/etc/apt/keyrings/rspamd.gpg] http://rspamd.com/apt-stable/ </span><span class="nv">$CODENAME</span><span class="s2"> main"</span> | <span class="nb">sudo tee</span> <span class="nt">-a</span> /etc/apt/sources.list.d/rspamd.list <span class="nb">sudo </span>apt-get update <span class="nb">sudo </span>apt-get <span class="nt">--no-install-recommends</span> <span class="nb">install </span>rspamd </code></pre></div> </div> <p>For <a href="https://www.hyperscan.io/">Hyperscan</a> and <a href="https://luajit.org">LuaJIT</a> information see the <a href="https://rspamd.com/doc/faq.html">FAQ</a>.</p> <p>For <a class="text-decoration-none text-reset" href="#experimentalSys2">experimental<sup>2</sup></a> branch replace <code class="language-plaintext highlighter-rouge">apt-stable</code> with just <code class="language-plaintext highlighter-rouge">apt</code>:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#apt update # if running a minimal system</span> <span class="c">#apt-get install sudo # if running a minimal system</span> <span class="nb">sudo </span>apt-get <span class="nb">install</span> <span class="nt">-y</span> lsb-release wget gpg <span class="c"># for install</span> <span class="nv">CODENAME</span><span class="o">=</span><span class="sb">`</span>lsb_release <span class="nt">-c</span> <span class="nt">-s</span><span class="sb">`</span> <span class="nb">sudo mkdir</span> <span class="nt">-p</span> /etc/apt/keyrings wget <span class="nt">-O-</span> https://rspamd.com/apt-stable/gpg.key | gpg <span class="nt">--dearmor</span> | <span class="nb">sudo tee</span> /etc/apt/keyrings/rspamd.gpg <span class="o">></span> /dev/null <span class="nb">echo</span> <span class="s2">"deb [signed-by=/etc/apt/keyrings/rspamd.gpg] http://rspamd.com/apt/ </span><span class="nv">$CODENAME</span><span class="s2"> main"</span> | <span class="nb">sudo tee</span> /etc/apt/sources.list.d/rspamd.list <span class="nb">echo</span> <span class="s2">"deb-src [signed-by=/etc/apt/keyrings/rspamd.gpg] http://rspamd.com/apt/ </span><span class="nv">$CODENAME</span><span class="s2"> main"</span> | <span class="nb">sudo tee</span> <span class="nt">-a</span> /etc/apt/sources.list.d/rspamd.list <span class="nb">sudo </span>apt-get update <span class="nb">sudo </span>apt-get <span class="nt">--no-install-recommends</span> <span class="nb">install </span>rspamd </code></pre></div> </div> <p>For <a class="text-decoration-none text-reset" href="#asanSys2">ASAN<sup>2</sup></a> branch install <code class="language-plaintext highlighter-rouge">rspamd-asan</code> package instead of <code class="language-plaintext highlighter-rouge">rspamd</code> (since 3.5).</p> <p>Please bear in mind, that you might also need debug symbols package for Rspamd to be able to fill bug reports about possible crashes. Debug symbols are placed in <code class="language-plaintext highlighter-rouge">rspamd-dbg</code> (or <code class="language-plaintext highlighter-rouge">rspamd-asan-dbg</code>) package and could be safely installed even in the production environment. Check <a href="/doc/tutorials/quickstart.html#rspamd-installation">the quick start document</a> for further steps.</p> <h3 id="packages-support-policy">Packages support policy</h3> <p>Check <a href="/packages_support_policy.html">the support policy document</a> to clarify what OS versions are supported by Rspamd packages.</p> <h3 id="debian-standard-repos-notes">Debian <code class="language-plaintext highlighter-rouge">standard</code> repos notes</h3> <p>Please <strong>DO NOT</strong> use those packages, as they are likely outdated and are not supported by Rspamd project in any way (so any associated issue will likely be closed automatically). If you decide to use those packages then please address any issues to the Debian package maintainers.</p> </div> <hr /> <p class="myFootnote" id="stableSys2">1. Use STABLE branch of packages: those packages are the official rspamd releases which are recommended for production usage.</p> <p class="myFootnote" id="experimentalSys2">2. Use EXPERIMENTAL branch of packages: these packages are less stable and they are generated frequently from the current development branch. Experimental packages usually have more features but might be SOMETIMES broken in some points (nevertheless, bugs are usually quickly fixed after detection).</p> <p class="myFootnote" id="asanSys2">3. Use ASAN branch of packages: these are packages (both stable and experimental) designed to debug Rspamd issues, especially core files, using advanced debugging tools. Use these packages if you encounter an issue in Rspamd and you want it to be fixed.</p> </div> <div role="tabpanel" class="tab-pane fade" id="system4"> <h2 id="other-linux">Other Linux</h2> <div> <p>Rspamd is also available on the following Linux distributions:</p> <ul> <li><strong>Alpine Linux</strong></li> <li><strong>Arch Linux</strong></li> <li><strong>Gentoo Linux</strong></li> <li><strong>OpenSUSE</strong></li> </ul> <h3 id="alpine-linux">Alpine Linux</h3> <p>Rspamd is available in the <a href="https://pkgs.alpinelinux.org/package/edge/community/x86_64/rspamd">community repository</a></p> <h3 id="arch-linux">Arch Linux</h3> <p>Rspamd is available in the <a href="https://archlinux.org/packages/extra/x86_64/rspamd/">community repository</a></p> <h3 id="gentoo-linux">Gentoo Linux</h3> <p>Ebuilds for Gentoo Linux users are available in the main <a href="https://packages.gentoo.org/packages/mail-filter/rspamd">Gentoo Portage repository</a>.</p> <h3 id="opensuse">OpenSUSE</h3> <p>Packages for OpenSUSE Leap & Tumbleweed are available on <a href="https://build.opensuse.org/package/show/server:mail/rspamd">OBS</a>.</p> </div> </div> <div role="tabpanel" class="tab-pane fade" id="system5"> <h2 id="bsd-systems">BSD systems</h2> <div> <p>Rspamd has been ported to the following BSD like operating systems:</p> <ul> <li><strong>FreeBSD</strong></li> <li><strong>NetBSD</strong></li> <li><strong>OpenBSD</strong></li> <li><strong>macOS</strong> (using MacPorts)</li> </ul> <p>FreeBSD users can install Rspamd from <a href="https://www.freshports.org/mail/rspamd/">ports</a> or use the experimental line of packages by <a href="https://www.freshports.org/mail/rspamd-devel/">rspamd-devel</a> port.</p> <p>Users of NetBSD (and other systems with pkgsrc) can use <a href="https://pkgsrc.se/mail/rspamd">pkgsrc</a>.</p> <p>OpenBSD users can use <a href="https://openports.pl/path/mail/rspamd">ports</a>.</p> <p>macOS users can install from <a href="https://ports.macports.org/port/rspamd">MacPorts</a>:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo port install rspamd sudo port load rspamd </code></pre></div> </div> </div> </div> <div role="tabpanel" class="tab-pane fade" id="system6"> <h2 id="build-rspamd-from-the-sources">Build rspamd from the sources</h2> <div> <p>If there are no packages for your system or you want custom build options you can also build rspamd from the source code. To do that grab the source from <a href="https://github.com/rspamd/rspamd">GitHub</a> using <code class="language-plaintext highlighter-rouge">git</code>:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone --recursive https://github.com/rspamd/rspamd.git </code></pre></div> </div> <h3 id="build-requirements">Build requirements</h3> <p>Rspamd requires several 3-rd party software to build and run:</p> <ul> <li><a href="https://www.openssl.org/">openssl</a> - cryptography and SSL/TLS Toolkit</li> <li><a href="https://developer.gnome.org/glib/">glib2</a> - common purposes library</li> <li><a href="https://www.colm.net/open-source/ragel/">ragel</a> - state machine compiler.</li> <li><a href="https://luajit.org/">LuaJIT</a> - jit compiler for <a href="https://www.lua.org/">lua</a> programming language. Plain Lua should work as well.</li> <li><a href="https://cmake.org/">cmake</a> - build system used to configure rspamd</li> <li><a href="https://sqlite.org/">sqlite3</a> - embedded database used to store some data by rspamd</li> <li><a href="https://www.darwinsys.com/file/">libmagic</a> - common library for detecting file types</li> <li><a href="https://icu.unicode.org/">libicu</a> - unicode library</li> <li><a href="https://www.pcre.org/">PCRE</a> - regular expressions library</li> <li><a href="https://www.hyperscan.io">Hyperscan</a>/<a href="https://github.com/VectorCamp/vectorscan">Vectorscan</a> - optional regexp performance boost library</li> <li><a href="https://zlib.net/">zlib</a> - compression library</li> </ul> <p>You can either install them from sources or (recommended) install using package manager of your system.</p> <p>It is also highly recommended to use <a href="https://redis.io">Redis</a> as it can be used by many Rspamd modules to improve their filtering quality (some modules will be turned off completely without Redis).</p> <p>It is also recommended to build Rspamd with Hyperscan (x86_64 only) or Vectorscan (aarch64/ppc64le) and Jemalloc to improve performance.</p> <h3 id="build-process">Build process</h3> <p>To build rspamd we recommend to create a separate build directory:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir rspamd.build cd rspamd.build cmake ../rspamd -DENABLE_HYPERSCAN=ON -DENABLE_LUAJIT=ON -DCMAKE_BUILD_TYPE=RelWithDebuginfo make sudo make install </code></pre></div> </div> <p>On unsupported Debian-alike or RPM-based systems you might use in-repo fixtures to build a package.</p> <p>An example for <a href="https://debian.org/">Debian</a>-like systems.</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>export RSPAMD_VERSION=3.7.3 # set this to desired Rspamd version git clone -b ${RSPAMD_VERSION} https://github.com/rspamd/rspamd.git cd rspamd sed -i s/\(.*\)/\(${RSPAMD_VERSION}\)/ debian/changelog sed -i s/quilt/native/ debian/source/format sudo apt install devscripts mk-build-deps sudo bash -c "dpkg -i rspamd-build-deps_${RSPAMD_VERSION}_*.deb && apt install -f -y" debuild -us -uc sudo "dpkg -i ../rspamd_${RSPAMD_VERSION}_*.deb" </code></pre></div> </div> </div> </div> </div> </div> <a class="button-fixed-bottom position-fixed rounded-circle bottom-0 end-0 m-4 z-2" href="#top"> <i class="fa-solid fa-lg fa-arrow-up position-absolute translate-middle"></i> </a> </div> </div> </div> <!-- Site footer --> <footer class="row-footer footer mt-auto px-3 py-2 z-0"> <div class="row"> <!-- Social buttons --> <div class="col d-inline-flex"> <a class="btn btn-xs btn-social-icon me-1 btn-primary" target="_blank" href="https://lists.rspamd.com/" data-bs-toggle="tooltip" data-bs-title="Mailing lists"><i class="fa-solid fa-envelope my-auto"></i></a> <a class="btn btn-xs btn-social-icon me-1 btn-reddit" target="_blank" href="ircs://irc.oftc.net/rspamd" data-bs-toggle="tooltip" data-bs-title="#rspamd on OFTC"> <p style="font-size:80%">IRC</p> </a> <a class="btn btn-xs btn-social-icon me-1 btn-telegram" target="_blank" href="https://t.me/rspamd" data-bs-toggle="tooltip" data-bs-title="Telegram"><i class="fa-solid fa-paper-plane my-auto"></i></a> <a class="btn btn-xs btn-social-icon me-1 btn-telegram" target="_blank" href="https://t.me/rspamd_ru" data-bs-toggle="tooltip" data-bs-title="Telegram RU"> <span class="fa-layers fa-fw my-auto"> <i class="fa-solid fa-paper-plane"></i> <i class="fa-solid fa-star fa-flip-vertical" style="color: red" data-fa-transform="shrink-13 left-4"></i> <i class="fa-solid fa-star fa-flip-vertical" style="color: red" data-fa-transform="shrink-13 right-4 down-4"></i> </span> </a> <a class="btn btn-xs btn-social-icon me-1 btn-github" target="_blank" href="https://github.com/rspamd/rspamd/discussions" data-bs-toggle="tooltip" data-bs-title="GitHub Discussions"><i class="fa-brands fa-github my-auto"></i></a> </div> <div class="col-auto d-inline-flex"> <a class="btn btn-xs btn-social-icon me-1 btn-primary" target="_blank" href="/sitemap.html" data-bs-toggle="tooltip" data-bs-title="Site map"><i class="fa-solid fa-folder-tree my-auto"></i></a> </div> <div class="col d-inline-flex"> </div> </div> </footer> <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script> <script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS_SVG' async></script> <script> /* global TypeHelpers */ (() => { "use strict"; function anchorForId(id) { const anchor = document.createElement("a"); anchor.className = "header-link"; anchor.href = "#" + id; anchor.innerHTML = "<i class=\"fa-solid fa-link\"></i>"; return anchor; } function linkifyAnchors(level, containingElement) { const headers = containingElement.getElementsByTagName("h" + level); for (let h = 0; h < headers.length; h++) { const header = headers[h]; if (typeof header.id !== "undefined" && header.id !== "") { header.appendChild(anchorForId(header.id)); } } } TypeHelpers.insertClasses(); $(document).ready(() => { const [contentBlock] = $(".linkify-headers"); if (contentBlock) { for (let level = 2; level <= 6; level++) { linkifyAnchors(level, contentBlock); } } // Open tab containing anchor from external link const targetAnchor = $(window.location.hash); const tabId = targetAnchor.closest(".tab-pane").attr("id"); if (typeof tabId !== "undefined") $('[data-bs-target="#' + tabId + '"]').tab("show"); // Initialize tooltips $('[data-bs-toggle="tooltip"]').tooltip(); // Stop video on closing tab panels $(".video-tab").on("hide.bs.tab", () => { const iframe = ".video-pane.active iframe"; $(iframe).attr("src", $(iframe).attr("src")); }); }); })(); </script> <script> $(document).ready(() => { "use strict"; // Hide/show "back-to-top" floating action button const fab = $("a.button-fixed-bottom"); if ($("html").scrollTop() > 20) fab.show(); $(window).scroll(() => { if ($(this).scrollTop() > 20) { fab.fadeIn(); } else { fab.fadeOut(); } }); $(".r-docs-subnav").on("click", (e) => { if (!$(e.currentTarget).hasClass("active-subnav")) { $(".r-docs-subnav.active-subnav").removeClass("active-subnav"); $(e.currentTarget).addClass("active-subnav"); } }); $('.r-docs-nav a[href$="' + window.location.pathname + '"]').addClass("active-link") .closest(".r-docs-subnav").addClass("active-subnav"); const path = "downloads.md"; $("h1").append('<a target="_blank" href="https://github.com/rspamd/rspamd.com/edit/master/' + path + '" class="edit-btn btn btn-lg text-decoration-none text-reset ms-4"><i class="fa-solid fa-pencil"></i> Edit Page</a>'); }); </script> </body> </html>