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 842cb26945 Remove image 2026-06-03 21:07:46 +01:00
.github
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
defaultwelcome
deploy
emoji
fonts Back to truetype 2026-05-12 14:07:25 +01:00
gemini/EN
img
manual Mention custom disinformation domain list 2026-05-29 20:43:35 +01:00
nomadnet/EN
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
.woodpecker.yml
2grams.txt
CONTRIBUTING.md
CONTRIBUTORS.md
Dockerfile
INSTALL.md Separate install document 2026-06-03 19:01:03 +01:00
LICENSE
MAINTENANCE-TERMS.md
Makefile
README.md Centre image 2026-06-03 21:04:27 +01:00
README_architecture.md
README_coding_style.md
README_commandline.md
README_customizations.md
README_desktop_client.md Remove image 2026-06-03 21:07:46 +01:00
README_goals.md Goals list 2026-04-22 19:57:49 +01:00
README_keyboard_navigation.md
README_roadmap.md
__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
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
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
daemon_get_links.py
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
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
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
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
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
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
discord.py Check that type is a string 2026-05-05 17:40:22 +01:00
doap.jsonld
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
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
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
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
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
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
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
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
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