Go to file
udonge 14d5b0823a Dead board 2023-02-25 11:12:09 +00:00
captcha server: length limits 2022-05-01 20:01:41 -03:00
cmd/feditext server: send emails on new posts and reports 2023-02-22 19:09:41 -04:00
config meta: v0.1.2 2023-02-22 19:31:06 -04:00
crypto *: assorted changes 2022-07-15 09:57:43 -03:00
database meta: v0.1.2 2023-02-22 19:31:06 -04:00
doc server: send emails on new posts and reports 2023-02-22 19:09:41 -04:00
fedi fedi: remove use of the deprecated io/ioutil 2022-11-09 21:18:16 -04:00
routes server: send emails on new posts and reports 2023-02-22 19:09:41 -04:00
static Add tomorrow and system theme 2023-02-25 11:12:09 +00:00
util server: send emails on new posts and reports 2023-02-22 19:09:41 -04:00
views Dead board 2023-02-25 11:12:09 +00:00
.dockerignore meta: docker 2022-06-02 17:49:11 -03:00
.gitignore hook: correct a failed copy and paste 2022-11-09 21:51:24 -04:00
DONATE.md meta: DONATE.md 2022-07-11 16:52:08 -03:00
Dockerfile meta: docker 2022-06-02 17:49:11 -03:00
LICENSE meta: agpl v3 2022-04-30 12:52:07 -03:00
Makefile meta: v0.1.2 2023-02-22 19:31:06 -04:00
README.md meta: update readme 2022-08-01 10:46:50 -03:00
go.mod *: update dependencies 2023-02-22 19:09:41 -04:00
go.sum *: update dependencies 2023-02-22 19:09:41 -04:00
logo.png meta: really awful logo but it's there 2022-06-30 14:57:44 -03:00
pprof.go frontend: rework some things 2022-05-26 18:39:02 -03:00
server.go Use X-Real-IP header for IP address 2023-02-25 11:12:09 +00:00


logo feditext

A textboard for the fediverse FChannel and itself.

This project aims to federate with existing FChannel instances and itself, while maintaining a strictly text-only interface.


Federation is a work in progress, and by no means stable nor good. Between FChannel and Feditext, federation has been battle tested and works more or less. However, do not expect any federation between the outer Fediverse.


Feditext's goals are simple and to the point:

  • Sane moderation
    • FChannel says it won't keep IPs, we will, optionally. Not keeping them is good for privacy but not good when you have bad actors, and it's surprising that FChannel hasn't had any (yet, or that I know of). Or at least intentionally.
    • If you're running a Tor instance, you can choose to not keep IPs. You should because they will all probably be anyway.
    • Public moderation log. It's a little broken right now but it's there. Can also be turned off.
  • Textboard first, ActivityPub later
    • Feditext relies on numeric IDs internally to do its bookkeeping. Where possible, ActivityPub is simply put on top of the core engine, possibly making it extremely easy to just rip it out if you wish to just use the textboard part.
  • Implemented in a simple and good fashion where possible.
    • The code attempts to be clean and simple to understand, however in places it needs comments or just needs work in general.
    • Database is kept simple, and while there's a list of functions you need to implement, a port to another DBMS is more than doable in an afternoon.


  • Attachments and previews
    • It's a textboard. Our ActivityPub implementation doesn't even have anywhere to hold these, and neither does my disk.
  • Proper ActivityPub support
    • While work was done to try to make it not choke on some data it takes in, Feditext will not be 100% compliant until FChannel is.

This list is bound to grow and shrink given time.


  • Go 1.18+

If you build with SQLite3:

  • a C compiler
  • SQLite3 itself and its headers


Feditext can be built easily using the included Makefile:

  • build builds a release build; this strips out some data that is necessary for debugging, but it's also several megabytes smaller.
  • dev builds a developer build; debugging information is left intact.
  • run runs a developer build.
  • dist creates a tarball from the release build for easy deployment. Created out of convenience for me.

Less important targets:

  • check runs tests. There are none working right now, I neglected to update the database tests.
  • tidy tidies up everything, runs gofmt and goimports if they're there.

The following variables will be useful to you:

  • The standard GO* variables if you're cross compiling (you probably aren't)
  • TAGS builds with certain features included or excluded; sqlite3 is the default value.
    • Always have a database in here, if you don't your build will be entirely useless.

Once you've built Feditext, copy doc/config.example to ./feditext.config and read the whole thing. From there, you should be good to run Feditext with a simple ./feditext or make run.

Feditext is extremely limited in what you can do from the CLI, but you can:

  • load different configuration files with -config ...
  • create a user with create
    • See ./feditext create -help for more information

Or, if you just want to start it, run it with no arguments.