Modern ActivityPub compliant server, designed for simplicity and accessibility. Includes calendar, news and sharing economy features to empower your federated community. We spent a year testing this for a hyper local indymedia codebase.
 
 
 
 
 
 
Go to file
bashrc e3bef8dcc3 Centre image 2026-06-03 21:03:23 +01:00
.github Copilot training opt-out 2026-03-25 12:48:22 +00:00
architecture Update architecture diagrams 2026-05-28 18:12:37 +01:00
cwlists cwlist for disinformation instances 2026-05-29 15:49:26 +01:00
data/cities
defaultcategories Update default categories 2026-03-18 13:10:05 +00:00
defaultwelcome Wanted items timeline welcome text 2024-12-21 11:09:32 +00:00
deploy nginx configuration 2026-04-22 10:27:19 +01:00
emoji
fonts Back to truetype 2026-05-12 14:07:25 +01:00
gemini/EN Change nginx config http2 2026-03-06 10:07:54 +00:00
img Add images 2026-03-16 19:22:37 +00:00
manual Mention custom disinformation domain list 2026-05-29 20:43:35 +01:00
nomadnet/EN Change nginx config http2 2026-03-06 10:07:54 +00:00
ontology
scripts c2s and s2s image attachment debug 2026-05-07 15:27:20 +01:00
specification
theme Increase mobile font size 2026-05-16 10:11:50 +01:00
translations Warn about follow requests from disinformation instances 2026-05-29 17:09:12 +01:00
website/EN Remove excess css 2026-06-03 19:10:02 +01:00
.datignore
.gitignore
.gitlab-ci.yml Update gitlab CI script 2025-10-23 12:41:17 +01:00
.woodpecker.yml
2grams.txt Use 2grams to increase statistical similarity to English language 2024-08-19 23:33:49 +01:00
CONTRIBUTING.md Singular 2026-03-16 16:25:44 +00:00
CONTRIBUTORS.md
Dockerfile
INSTALL.md Separate install document 2026-06-03 19:01:03 +01:00
LICENSE
MAINTENANCE-TERMS.md 2026 2026-01-01 11:14:10 +00:00
Makefile
README.md Centre image 2026-06-03 21:03:23 +01:00
README_architecture.md Natural analogy 2024-12-25 14:37:24 +00:00
README_coding_style.md Coding style 2026-02-08 21:51:41 +00:00
README_commandline.md Documentation for software command option 2025-01-22 12:07:08 +00:00
README_customizations.md Emoji import 2022-11-07 16:38:43 +00:00
README_desktop_client.md
README_goals.md Goals list 2026-04-22 19:57:49 +01:00
README_keyboard_navigation.md Documentation for keyboard navigation 2024-04-09 11:13:44 +01:00
README_roadmap.md format 2024-09-12 10:22:59 +01:00
__init__.py
acceptreject.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
announce.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
art.py Check that type is a string 2026-05-05 17:40:22 +01:00
auth.py Replace directory creation with functions 2026-05-02 13:17:33 +01:00
availability.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
blocking.py Extra bluesky domains 2026-05-08 17:00:04 +01:00
blog.py Add support for Loops 2026-05-07 21:17:36 +01:00
bookmarks.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
briar.py Check that type is a string 2026-05-05 17:40:22 +01:00
cache.py Replace directory checks with functions 2026-05-02 12:59:08 +01:00
caddy.example.conf
categories.py Replace directory creation with functions 2026-05-02 13:17:33 +01:00
city.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
code-of-conduct.md Wording 2025-09-08 19:05:01 +01:00
content.py Add debug for image metadata removal 2026-05-06 22:53:58 +01:00
context.py Variable types 2026-04-28 14:04:50 +01:00
conversation.py Replace directory creation with functions 2026-05-02 13:17:33 +01:00
crawlers.py More llm bots 2026-05-14 10:56:13 +01:00
cwlists.py When checking CW domains also check the domain of the original post author 2026-05-29 19:31:54 +01:00
cwtch.py Check that type is a string 2026-05-05 17:40:22 +01:00
daemon.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_get.py Language mapped preferred username 2026-05-08 10:34:31 +01:00
daemon_get_blog.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_get_buttons.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_get_buttons_announce.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_get_buttons_bookmark.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_get_buttons_like.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_get_buttons_mute.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_get_buttons_reaction.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_get_collections.py Add support for yggdrasil domains 2026-02-23 12:38:32 +00:00
daemon_get_css.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
daemon_get_exports.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
daemon_get_favicon.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
daemon_get_feeds.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_get_hashtag.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_get_images.py Debug 2026-05-07 12:14:13 +01:00
daemon_get_instance_actor.py More debug 2026-02-23 22:43:41 +00:00
daemon_get_links.py Increment version number 2026-01-02 11:36:24 +00:00
daemon_get_login.py Variable types 2026-04-28 14:04:50 +01:00
daemon_get_masto_api.py Checking domains 2026-04-24 12:12:25 +01:00
daemon_get_newswire.py Variable types 2026-04-28 14:48:16 +01:00
daemon_get_nodeinfo.py Checking domains 2026-04-24 12:12:25 +01:00
daemon_get_post.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_get_profile.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_get_pwa.py Add support for yggdrasil domains 2026-02-23 12:38:32 +00:00
daemon_get_reactions.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_get_rss.py Replace directory checks with functions 2026-05-02 12:59:08 +01:00
daemon_get_timeline.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_get_vcard.py Language mapped preferred username 2026-05-08 10:34:31 +01:00
daemon_get_webfinger.py Tidying 2026-02-26 21:50:18 +00:00
daemon_head.py Check for ipv4 address within path 2026-05-07 10:44:36 +01:00
daemon_post.py Include nickname 2026-05-08 14:40:14 +01:00
daemon_post_confirm.py Add support for yggdrasil domains 2026-02-23 12:38:32 +00:00
daemon_post_hashtags.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
daemon_post_image.py Debug for attached media 2026-05-07 15:01:25 +01:00
daemon_post_keys.py Variable types 2026-04-28 14:04:50 +01:00
daemon_post_links.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
daemon_post_login.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
daemon_post_moderator.py Replace directory checks with functions 2026-05-02 12:59:08 +01:00
daemon_post_newswire.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
daemon_post_person_options.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_post_profile.py Set the theme name 2026-05-12 11:16:40 +01:00
daemon_post_question.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
daemon_post_receive.py Check latitude and longitude 2026-05-18 19:03:02 +01:00
daemon_post_remove.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
daemon_post_search.py Add support for Loops 2026-05-07 21:17:36 +01:00
daemon_post_theme.py Add support for yggdrasil domains 2026-02-23 12:38:32 +00:00
daemon_utils.py Block domains before post is saved to the inbox 2026-05-08 13:55:50 +01:00
data.py Write only 2026-05-06 19:29:17 +01:00
default_about.md
default_dogwhistles.txt
default_tos.md Default tos prohibition on 'nudification' 2026-01-12 16:59:28 +00:00
defaultthemes.txt Thicker separator dots 2026-05-13 13:13:17 +01:00
delete.py Variable types 2026-05-14 20:27:22 +01:00
desktop_client.py Replace directory creation with functions 2026-05-02 13:17:33 +01:00
dictionary.txt Return a poisoned resonse to LLM scrapers 2024-08-17 19:29:32 +01:00
discord.py Check that type is a string 2026-05-05 17:40:22 +01:00
doap.jsonld Consistent descriptions 2024-07-23 15:19:30 +01:00
donate.py Variable types 2026-05-14 20:27:22 +01:00
enigma.py Variable types 2026-05-14 20:27:22 +01:00
epicyon-blog.css Set font weight 2026-05-12 13:36:00 +01:00
epicyon-calendar.css Set font weight 2026-05-12 13:36:00 +01:00
epicyon-follow.css Set font weight 2026-05-12 13:36:00 +01:00
epicyon-graph.css
epicyon-links.css Set font weight 2026-05-12 13:36:00 +01:00
epicyon-login.css Set font weight 2026-05-12 13:36:00 +01:00
epicyon-options.css Set font weight 2026-05-12 13:36:00 +01:00
epicyon-podcast.css Set font weight 2026-05-12 13:36:00 +01:00
epicyon-profile.css Mobile column icon width 2026-05-17 13:25:01 +01:00
epicyon-search.css Set font weight 2026-05-12 13:36:00 +01:00
epicyon-suspended.css Set font weight 2026-05-12 13:36:00 +01:00
epicyon-welcome.css Set font weight 2026-05-12 13:36:00 +01:00
epicyon.py Add debug for image metadata removal 2026-05-06 22:53:58 +01:00
feeds.py Increment version number 2026-01-02 11:36:24 +00:00
filters.py Variable types 2026-05-14 20:27:22 +01:00
fitnessFunctions.py Variable types 2026-05-14 20:27:22 +01:00
flags.py Variable types 2026-05-14 20:27:22 +01:00
follow.py Variable types 2026-05-14 20:27:22 +01:00
followerSync.py Variable types 2026-05-14 20:27:22 +01:00
followingCalendar.py Variable types 2026-05-14 20:27:22 +01:00
formats.py Variable types 2026-04-27 21:27:54 +01:00
gemini.py Variable types 2026-05-05 15:19:26 +01:00
git.py Check that type is a string 2026-05-05 17:40:22 +01:00
happening.py Variable types 2026-05-05 15:19:26 +01:00
hashtagrules.txt
httpcodes.py Function sequence 2026-05-02 14:15:44 +01:00
httpheaders.py Tidying 2026-05-07 16:07:52 +01:00
httprequests.py Increment version number 2026-01-02 11:36:24 +00:00
httpsig.py Variable types 2026-04-27 21:27:54 +01:00
i2pdomain
importFollowing.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
inbox.py Block domains before post is saved to the inbox 2026-05-08 13:55:50 +01:00
inbox_receive.py Test the whole announce for blocked domains 2026-05-08 13:16:16 +01:00
inbox_receive_undo.py Add support for Loops 2026-05-07 21:17:36 +01:00
install-desktop-client
keys.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
languages.py Check property types 2026-05-05 13:54:24 +01:00
like.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
linked_data_sig.py Increment version number 2026-01-02 11:36:24 +00:00
locations.txt
locations_nogo.txt
loops.py Add support for Loops 2026-05-07 21:17:36 +01:00
lxmf.py Check that type is a string 2026-05-05 17:40:22 +01:00
manualapprove.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
maps.py Ensure that latitude and longitude are floats 2026-05-18 18:55:46 +01:00
markdown.py Variable types 2026-05-05 15:19:26 +01:00
mastoapiv1.py Language mapped preferred username 2026-05-08 10:34:31 +01:00
mastoapiv2.py Language mapped preferred username 2026-05-08 10:34:31 +01:00
matrix.py Check that type is a string 2026-05-05 17:40:22 +01:00
media.py Image upload debug 2026-05-07 15:13:04 +01:00
metadata.py Variable types 2026-04-28 14:48:16 +01:00
migrate.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
mitm.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
music.py Check that type is a string 2026-05-05 17:40:22 +01:00
newsdaemon.py Add debug for image metadata removal 2026-05-06 22:53:58 +01:00
newswire.py Variable types 2026-05-03 14:32:48 +01:00
notifyOnPost.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
occupation.py Increment version number 2026-01-02 11:36:24 +00:00
outbox.py Add support for Loops 2026-05-07 21:17:36 +01:00
peertube.py Check that type is a string 2026-05-05 17:40:22 +01:00
person.py Language mapped preferred username 2026-05-08 10:34:31 +01:00
petnames.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
pgp.py Language mapped preferred username 2026-05-08 10:34:31 +01:00
pixelfed.py Check that type is a string 2026-05-05 17:40:22 +01:00
poison.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
posts.py More reserved nicknames 2026-05-09 11:01:52 +01:00
principles_of_small_creation.md
principlesofunity.md
pronouns.py Check that type is a string 2026-05-05 17:40:22 +01:00
pyjsonld.py Variable types 2026-05-05 15:07:45 +01:00
pyproject.toml
qrcode.py Increment version number 2026-01-02 11:36:24 +00:00
question.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
quote.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
reaction.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
reading.py Variable types 2026-05-05 15:19:26 +01:00
relationships.py Replace directory checks with functions 2026-05-02 12:59:08 +01:00
roles.py Replace directory checks with functions 2026-05-02 12:59:08 +01:00
schedule.py Add support for Loops 2026-05-07 21:17:36 +01:00
searchable.py Variable types 2026-05-05 15:07:45 +01:00
securemode.py More support for yggdrasil 2026-02-24 22:26:17 +00:00
security_audit
sendC2S.py Add debug for image metadata removal 2026-05-06 22:53:58 +01:00
session.py Variable types 2026-05-05 15:19:26 +01:00
setup.cfg
setup.py
shares.py Add debug for image metadata removal 2026-05-06 22:53:58 +01:00
siteactive.py Replace file operations with function 2026-04-29 12:25:47 +01:00
skills.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
socnet.py Increment version number 2026-01-02 11:36:24 +00:00
speaker.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
ssb.py Check that type is a string 2026-05-05 17:40:22 +01:00
static_analysis
status.py Increment version number 2026-01-02 11:36:24 +00:00
tests.py Signature and checksum 2026-05-28 18:11:23 +01:00
textmode.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
theme.py Replace directory creation with functions 2026-05-02 13:17:33 +01:00
threads.py Variable types 2026-04-28 14:04:50 +01:00
timeFunctions.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
torrent.py Variable types 2026-04-28 14:04:50 +01:00
tox.py Check that type is a string 2026-05-05 17:40:22 +01:00
unicodetext.py Variable types 2026-04-28 14:04:50 +01:00
utils.py Extra bad path 2026-05-30 12:58:07 +01:00
video.py Variable types 2026-04-28 14:04:50 +01:00
webapp_about.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
webapp_accesskeys.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
webapp_calendar.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
webapp_column_left.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
webapp_column_right.py Variable types 2026-05-05 15:19:26 +01:00
webapp_confirm.py Add support for Loops 2026-05-07 21:17:36 +01:00
webapp_conversation.py Add support for Loops 2026-05-07 21:17:36 +01:00
webapp_create_post.py Add support for Loops 2026-05-07 21:17:36 +01:00
webapp_frontscreen.py Language mapped preferred username 2026-05-08 10:34:31 +01:00
webapp_hashtagswarm.py Variable types 2026-05-05 15:19:26 +01:00
webapp_headerbuttons.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
webapp_likers.py Add support for Loops 2026-05-07 21:17:36 +01:00
webapp_login.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
webapp_manual.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
webapp_media.py Add support for Loops 2026-05-07 21:17:36 +01:00
webapp_minimalbutton.py Replace directory checks with functions 2026-05-02 12:59:08 +01:00
webapp_moderation.py Add support for Loops 2026-05-07 21:17:36 +01:00
webapp_person_options.py Show loops address on person options screen 2026-05-08 10:45:57 +01:00
webapp_podcast.py Transcript items 2026-05-20 15:10:36 +01:00
webapp_post.py Add support for Loops 2026-05-07 21:17:36 +01:00
webapp_profile.py Warn about follow requests from disinformation instances 2026-05-29 17:09:12 +01:00
webapp_pwa.py Variable types 2026-05-06 13:51:44 +01:00
webapp_question.py Variable types 2026-05-06 11:50:42 +01:00
webapp_search.py Add support for Loops 2026-05-07 21:17:36 +01:00
webapp_specification.py Variable types 2026-05-06 11:41:51 +01:00
webapp_suspended.py Variable types 2026-05-06 11:41:51 +01:00
webapp_theme_designer.py Variable types 2026-05-06 11:15:06 +01:00
webapp_timeline.py Avoid duplicate separators 2026-05-13 13:08:41 +01:00
webapp_tos.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
webapp_utils.py Language mapped preferred username 2026-05-08 10:34:31 +01:00
webapp_welcome.py Replace directory checks with functions 2026-05-02 12:59:08 +01:00
webapp_welcome_final.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
webapp_welcome_profile.py Replace file checks with functions 2026-05-02 12:34:27 +01:00
webfinger.py Check that type is a string 2026-05-05 17:40:22 +01:00
website.py Check that type is a string 2026-05-05 16:44:19 +01:00
xmpp.py Check that type is a string 2026-05-05 17:40:22 +01:00
youtube.py Check that type is a string 2026-05-05 17:40:22 +01:00

README.md

Epicyon, meaning "more than a dog". Largest of the Borophaginae which lived in North America 20-5 million years ago.

Epicyon is an ActivityPub server for people who are tired of Big Tech social media and want something simpler which they can self host on minimal hardware. Connect with friends instead of getting mired in horrible and irrelevant business models.

Key features:

  • Open standards: HTML, CSS, ActivityPub S2S and C2S, RSS, CalDAV.
  • Supports common web browsers and shell browsers.
  • Will not drain your mobile or laptop battery.
  • Customisable themes. It doesn't have to look bland.
  • Emoji reactions.
  • Geospatial hashtags.
  • Does not require much RAM, either on server or client.
  • Suitable for installation on single board computers.
  • No timeline algorithms.
  • No javascript. Progressive enhancement class A.
  • No database. Data stored as ordinary files.
  • No fashionable web frameworks. "Boring by design".
  • No blockchain or AI garbage.
  • Written in Python, with few dependencies.
  • Can also federate on Tor, i2p, and yggdrasil.
  • AGPL license, which big tech hates.

Install - User Manual - Keyboard navigation - Project Goals - Commandline interface - Customizations - Software Architecture - Code of Conduct - Principles of Unity - C2S Desktop Client - Coding Style

Matrix room: #epicyon:conduit.libreserver.org

Includes emojis designed by OpenMoji the open-source emoji and icon project. License: CC BY-SA 4.0. Blob Cat Emoji and Meowmoji were made by Nitro Blob Hub, licensed under Apache 2.0. Digital Pets emoji were made by Tomcat94 and licensed under CC0.

No AI Allowed Hand Coded Don't feed the AI Written by a human not by an AI