.github | ||
assets | ||
config | ||
migrations | ||
scripts | ||
src | ||
tests | ||
.gitignore | ||
.leptosfmt.toml | ||
.rustfmt.toml | ||
.woodpecker.yml | ||
build.rs | ||
Cargo.lock | ||
Cargo.toml | ||
config.toml | ||
diesel.toml | ||
LICENSE | ||
package.json | ||
pnpm-lock.yaml | ||
README.md | ||
tailwind.config.js |
About Ibis
Ibis is a federated encyclopedia which uses the ActivityPub protocol, just like Mastodon or Lemmy. Users can read and edit articles seamlessly across different instances. Federation ensures that articles get mirrored across many servers, and can be read even if the original instance goes down. The software is written in Rust and uses the cutting-edge Leptos framework based on Webassembly. Ibis is fully open source under the AGPL license, to make future enshittification impossible.
Do you want to start a wiki for a TV series, a videogame, about politics, religion or scientific research? Then Ibis is for you! Setup an instance on your server, it only requires a single binary with PostgreSQL and Nginx. Then you can start editing on the topic of your choice, and connect to other Ibis instances for different topics. Within your own instance you are king, and can decide which articles, which edits and which federation connections are allowed. For more details read the Usage Instructions.
Contributions are more than welcome, especially for the frontend.
Community
Discuss with other Ibis users on Matrix or Lemmy:
Useful links
Name
The Ibis is a bird which is related to the Egyptian god of knowledge and science.
Development
First install PostgreSQL and setup the development database:
psql -c "CREATE USER ibis WITH PASSWORD 'ibis' SUPERUSER;" -U postgres
psql -c "CREATE DATABASE ibis WITH OWNER ibis;" -U postgres
You need to install cargo, pnpm and cargo-leptos. Use pnpm install
to get Javascript dependencies. You need to enable the wasm target for Rust using rustup target add wasm32-unknown-unknown
. Then run cargo leptos watch
which automatically rebuilds the project after changes. Open the site at localhost:3000. You can login with user ibis
and password ibis
.
By default the frontend runs on port 3000, which can be changed with env var TRUNK_SERVE_PORT
. The backend port is 8081 and can be changed with IBIS_BACKEND_PORT
.
Federation
Main objects in terms of federation are the Instance
and Article
. Each article belongs to a single origin instance, the one where it was originally created. Articles have a collection of Edit
s a custom ActivityPub type containing a diff. The text of any article can be built by starting from empty string and applying all associated edits in order. Instances can synchronize their articles with each other, and follow each other to receive updates about articles. Edits are done with diffs which are generated on the backend, and allow for conflict resolution similar to git. Editing also works over federation. In this case an activity Update/Edit
is sent to the origin instance. If the diff applies cleanly, the origin instance sends the new text in an Update/Article
activity to its followers. In case there is a conflict, a Reject
activity is sent back, the editor needs to resolve and resubmit the edit.
Donate
Developing a project like this takes a significant amount of work. You can help funding it with donations:
- Liberapay
- Bitcoin:
bc1q6mqlqc84q2h55jkkjvex4kc6h9h534rj87rv2l
- Monero:
84xnACZv82UNTEGNkttLTH8sCeV9Cdr8dHMJSNP6V2hEJW7C17S9xQTUCghwG8TePrRD9wfiPRWcwYvSTHUNoyJ4AXnQYLD