Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
f56aaaf
Add temporary crates for refactoring
sij411 Jul 29, 2026
8f3f20f
Add new architecture applied crates
sij411 Jul 30, 2026
6ecc7c7
Move actor related features to actor.rs
sij411 Jul 30, 2026
f6283b2
Change function name
sij411 Jul 30, 2026
6eecb47
Add actor key pair primitives to reference core
sij411 Jul 31, 2026
8f4f8b0
Add WebFinger endpoint to reference server runtime
sij411 Jul 31, 2026
5e92f43
Add Follow handling to reference server runtime
sij411 Jul 31, 2026
1a461d3
Add server storage capability to reference core
sij411 Aug 1, 2026
91195ee
Add signed networking to reference server runtime
sij411 Aug 1, 2026
c23e283
Block deprecated IPv6 site-local destinations
sij411 Aug 1, 2026
d216b1f
Add follower removal storage capability
sij411 Aug 1, 2026
15571e5
Add pure Undo Follow transition
sij411 Aug 1, 2026
d8a6a3d
Handle Undo Follow activities in reference inbox
sij411 Aug 2, 2026
69ec638
Add shared inbox dispatch to reference runtime
sij411 Aug 2, 2026
a91b0bf
Expose followers collection in reference runtime
sij411 Aug 2, 2026
ea671ae
Add outbound Follow orchestration
sij411 Aug 2, 2026
7a9fc88
Confirm accepted outbound Follow relationships
sij411 Aug 2, 2026
3ea2b88
Add local Note creation and typed persistence
sij411 Aug 2, 2026
c888e69
Deliver Create activities to Note recipients
sij411 Aug 2, 2026
6789e07
Expose persisted public Notes
sij411 Aug 2, 2026
ad26128
Validate WebFinger against the configured handle host
sij411 Aug 2, 2026
c4aaed3
Verify signatures against the selected inbox endpoint
sij411 Aug 2, 2026
879aeb0
Make HTTP signatures optional in the reference core
sij411 Aug 2, 2026
17aa654
Use compact follower delivery targets
sij411 Aug 2, 2026
81b6fea
Add SQLite storage to the reference server
sij411 Aug 2, 2026
5b67083
Provision persistent actor signing keys
sij411 Aug 2, 2026
5d9521e
Migrate the single-user server to the reference runtime
sij411 Aug 2, 2026
2446f3e
Port migration coverage into the reference crate test suites
sij411 Aug 2, 2026
056c2cd
Promote the reference architecture to Feder's public crates
sij411 Aug 2, 2026
96866ad
Merge pull request #43 from sij411/feat/experiment/architecture
sij411 Aug 3, 2026
c53c89a
Ignore unsupported nested inbox activities
sij411 Aug 7, 2026
9518b40
Retry development publication
sij411 Aug 8, 2026
5ec2cfc
Address release-blocking federation review feedback
sij411 Aug 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,20 +75,23 @@ execution. The intended crate roles are:

- `feder-vocab`: Type-safe representations of Activity Vocabulary objects,
such as actors, notes, and activities.
- `feder-core`: The portable ActivityPub protocol engine, responsible for
protocol decisions and state transitions.
- Runtime crates: Platform-specific execution layers for networking, storage,
clocks, timers, async runtimes, and operating system or hardware
integration.
- `feder-core`: Portable ActivityPub protocol decisions and capability traits.
It derives transient outcomes from facts supplied by its caller and does
not retain protocol state.
- `feder-server`: The standard operating system runtime for HTTP networking,
SQLite storage, actor resolution, request verification, and activity
delivery.
- Future runtime crates: Platform-specific implementations for other async
runtimes, operating systems, or hardware environments.

When contributing to `feder-core`, avoid adding direct dependencies on HTTP
clients or servers, databases, filesystems, async runtimes, system clocks, or
platform-specific crates. Runtime crates may use those dependencies when
appropriate, but those choices should not leak into the portable core.

Core behaviour should generally be tested by feeding an input into the core and
asserting the returned actions. Core tests should not require real networking,
storage, or async execution.
Core behaviour should generally be tested by feeding stored facts and protocol
input into a core function and asserting the returned transient outcome. Core
tests should not require real networking, storage, or async execution.

### Git pre-commit hook

Expand Down
103 changes: 82 additions & 21 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
members = [
"crates/feder-core",
"crates/feder-vocab",
"crates/feder-runtime-server",
"crates/feder-server",
"examples/single-user-server",
]
resolver = "3"
Expand All @@ -20,7 +20,7 @@ repository = "https://github.com/fedify-dev/feder"
# Use `mise run bump-execute <version>` instead of editing these by hand.
base64 = { version = "0.22.1", default-features = false, features = ["alloc"] }
feder-core = { version = "0.1.0", path = "crates/feder-core" }
feder-runtime-server = { version = "0.1.0", path = "crates/feder-runtime-server" }
feder-server = { version = "0.1.0", path = "crates/feder-server" }
feder-vocab = { version = "0.1.0", path = "crates/feder-vocab" }
iri-string = { version = "0.7.12", default-features = false, features = ["alloc", "serde"] }
rand_chacha = { version = "0.3.1", default-features = false }
Expand Down
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,11 @@ software so different parts can run on machines with very different resources.
Approach
--------

Feder separates ActivityPub protocol logic from platform execution. The core
should contain federation behavior such as inbox/outbox state, delivery
decisions, and protocol-level rules. Runtimes provide platform-specific pieces
such as networking, storage, clocks, scheduling, and execution.
Feder separates ActivityPub protocol decisions from platform execution.
`feder-core` derives transient protocol outcomes from application-provided
facts without retaining state. `feder-server` supplies a standard operating
system runtime with HTTP networking, SQLite storage, actor resolution, request
verification, and activity delivery.

The first target is a Linux proof of concept for a small single-user
ActivityPub server. Future runtimes may explore more constrained environments.
Expand Down
10 changes: 6 additions & 4 deletions crates/feder-core/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "feder-core"
description = "Portable ActivityPub core logic for Feder."
description = "Portable ActivityPub protocol decisions and capability traits for Feder."
version.workspace = true
edition.workspace = true
authors.workspace = true
Expand All @@ -17,8 +17,10 @@ feder-vocab.workspace = true
rsa = { workspace = true, optional = true }
zeroize = { workspace = true, optional = true }

[dev-dependencies]
rand_chacha.workspace = true

[lints]
workspace = true

[[test]]
name = "key"
path = "tests/key.rs"
required-features = ["http-signatures"]
Loading