1
0
Fork 0
mirror of https://github.com/Nutomic/ibis.git synced 2024-11-25 07:11:09 +00:00
A federated online encyclopedia
Find a file
2024-11-11 16:02:48 +01:00
.github Add funding.yml with liberapay profile 2024-03-14 14:33:21 +01:00
assets Add favicon 2024-11-11 11:52:59 +01:00
config Use cargo-leptos, make server-side rendering work 2024-10-28 15:47:45 +01:00
migrations Fix tests 2024-11-11 16:02:48 +01:00
scripts Fix release build 2024-10-29 09:29:46 +01:00
src Fix tests 2024-11-11 16:02:48 +01:00
tests Fix tests 2024-11-11 16:02:48 +01:00
.gitignore Use tailwind + daisyui for css 2024-10-16 14:19:31 +02:00
.leptosfmt.toml use default tab spaces 2024-04-02 11:53:29 +02:00
.rustfmt.toml Use nightly cargo fmt for better imports formatting 2024-03-05 16:38:07 +01:00
.woodpecker.yml Check for unused deps 2024-10-31 11:12:16 +01:00
Cargo.lock Synchronize linked instances 2024-11-11 14:46:52 +01:00
Cargo.toml Fix tests 2024-11-11 16:02:48 +01:00
config.toml Use include_str! to allow deployment as single binary 2024-02-28 18:31:46 +01:00
diesel.toml Fix tests 2024-11-11 16:02:48 +01:00
LICENSE add agpl license 2023-11-15 01:38:16 +01:00
package.json Remove unnecessary tailwind forms 2024-11-07 13:08:14 +01:00
pnpm-lock.yaml Remove unnecessary tailwind forms 2024-11-07 13:08:14 +01:00
README.md Add logo (fixes #19) 2024-11-11 10:30:19 +01:00
tailwind.config.js Remove unnecessary tailwind forms 2024-11-07 13:08:14 +01:00

GitHub tag (latest SemVer) Build Status License

About Ibis

Ibis is a federated online encyclopedia similar to Wikipedia. Users can read, create and edit articles seamlessly across instances. It uses the Activitypub protocol to connect users across different websites, similar to Mastodon or Lemmy. This ensures that there is no single point of control which may be used for global censorship. Instead each Ibis instance is independent and controlled by its admin. Admins can decide which rules to enforce, which content to allow and which instances to connect with. Users who are unhappy with the rules can easily setup their own Ibis instance with their own rules.

The project uses the same technology as Lemmy and benefits from lessons learned during its development. It is currently in a proof of concept stage. Core features are already working, including creation and editing of articles, full federation and a basic frontend. You can see it in action on ibis.wiki. However more work is needed to get the project ready for production use, to add features like moderation tools, user account management, media support, article discussions and better web design. Contributions are welcome!

Read the Project Announcement for more information.

Community

Discuss with other Ibis users on Matrix or Lemmy:

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. 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 Edits 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:

License

AGPL