|
| 1 | +# Bundle of Joy (BoJ) Server |
| 2 | + |
| 3 | +Unified server capability catalogue with formally verified cartridges, distributed community hosting, and the Teranga menu system. |
| 4 | + |
| 5 | +> **AI-Assisted Install:** Just tell any AI assistant: |
| 6 | +> `Set up Bundle of Joy Server from https://github.com/hyperpolymath/boj-server` |
| 7 | +> The AI reads this repo, asks you a few questions, and handles everything. |
| 8 | +
|
| 9 | +## What is this? |
| 10 | + |
| 11 | +BoJ solves the **combinatoric explosion of developer server protocols**. Instead of hunting across dozens of MCP, LSP, DAP, and other servers, AI goes to ONE place — the Teranga menu — and orders what it needs. |
| 12 | + |
| 13 | +The server is **distributed**: community nodes volunteer compute time (like Tor/IPFS), with cryptographic hash attestation ensuring integrity. No central hosting required. |
| 14 | + |
| 15 | +## The 2D Capability Matrix |
| 16 | + |
| 17 | +Capabilities are organised as a 2D matrix: |
| 18 | + |
| 19 | +- **Columns** = protocol types (MCP, LSP, DAP, BSP, NeSy, Agentic, Fleet, gRPC, REST) |
| 20 | +- **Rows** = capability domains (Cloud, Container, Database, K8s, Git, Secrets, Queues, IaC, Observe, SSG, Proof, Fleet, NeSy) |
| 21 | +- **Cells** = cartridges (formally verified, swappable capability modules) |
| 22 | + |
| 23 | +Each cartridge follows the **three-layer stack**: |
| 24 | + |
| 25 | +| Layer | Language | Purpose | |
| 26 | +|-------|----------|---------| |
| 27 | +| **ABI** | Idris2 | Formal proofs, `%default total`, zero `believe_me` | |
| 28 | +| **FFI** | Zig | C-compatible native execution, zero runtime deps | |
| 29 | +| **Adapter** | V-lang | Triple API (REST + gRPC + GraphQL) | |
| 30 | + |
| 31 | +## The Teranga Menu |
| 32 | + |
| 33 | +The menu has three tiers: |
| 34 | + |
| 35 | +- **Teranga (Core)**: Cartridges maintained by the project |
| 36 | +- **Shield**: Privacy and security (SDP, DoQ/DoH, oDNS) |
| 37 | +- **Ayo (Community)**: Community-contributed cartridges |
| 38 | + |
| 39 | +AI agents act as the "Maître D'" — presenting the menu to users as honoured guests. |
| 40 | + |
| 41 | +See: `.machine_readable/servers/menu.a2ml` |
| 42 | + |
| 43 | +## Quick Start |
| 44 | + |
| 45 | +```bash |
| 46 | +# Clone and enter |
| 47 | +git clone https://github.com/hyperpolymath/boj-server |
| 48 | +cd boj-server |
| 49 | + |
| 50 | +# Type-check the Idris2 ABI |
| 51 | +cd src/abi && idris2 --build boj.ipkg |
| 52 | + |
| 53 | +# Build the Zig FFI |
| 54 | +cd ../../ffi/zig && zig build |
| 55 | + |
| 56 | +# Run tests |
| 57 | +cd ffi/zig && zig build test |
| 58 | +``` |
| 59 | + |
| 60 | +## Distributed Hosting (Umoja Network) |
| 61 | + |
| 62 | +BoJ servers are community-hosted: |
| 63 | + |
| 64 | +- Pull the container from the Stapeln supply chain |
| 65 | +- Run it locally (Podman, Chainguard base) |
| 66 | +- Your node appears in the Umoja network via gossip protocol |
| 67 | +- Hash attestation ensures integrity — tampered nodes are excluded from the community network but can still run locally |
| 68 | + |
| 69 | +See: `docs/FEDERATION.md` |
| 70 | + |
| 71 | +## Contributing Cartridges |
| 72 | + |
| 73 | +Build a cartridge that passes the `IsUnbreakable` proof and it goes in the Ayo menu with your name honoured. |
| 74 | + |
| 75 | +See: `docs/DEVELOPERS.md` |
| 76 | + |
| 77 | +## Cultural Terminology |
| 78 | + |
| 79 | +We use terms from Wolof (*Teranga* — hospitality), Swahili (*Umoja* — unity), and Yoruba (*Ayo* — joy) to align our architecture with global values. |
| 80 | + |
| 81 | +See: `docs/CULTURAL-RESPECT.md` |
| 82 | + |
| 83 | +## License |
| 84 | + |
| 85 | +PMPL-1.0-or-later (Palimpsest License). The license's provenance requirements (crypto signatures, emotional lineage) align directly with the hash attestation model. |
| 86 | + |
| 87 | +## Project Status |
| 88 | + |
| 89 | +**Grade A (Production)** — 18 cartridges, 307 tests passing, thread-safe FFI (mutex-hardened), panic-attack validated. See `READINESS.md` for the full CRG assessment and `.machine_readable/STATE.a2ml` for milestone progress. |
| 90 | + |
| 91 | +## A Community Project |
| 92 | + |
| 93 | +This is a community project. Nobody makes money from it. It exists because the problem (too many servers, too much fragmentation) needed solving, and the solution needed building. |
| 94 | + |
| 95 | +**What would help most right now:** |
| 96 | + |
| 97 | +- **Host a node** — Even for a few hours a week. Pull the container, let it gossip. Every node strengthens the network. See `docs/OPERATOR-QUICKSTART.md`. |
| 98 | +- **Try it out** — Use it via MCP, REST, or gRPC. Break things. Tell me what's confusing, what's missing, what doesn't work. |
| 99 | +- **Build on it** — Write a cartridge, create an extension, wire it to your own tools. The third axis is wide open. |
| 100 | +- **Give feedback** — Comments, issues, PRs, emails, carrier pigeons. All welcome. |
| 101 | + |
| 102 | +A huge thank you to anyone who takes the time to look at this. Even a quick glance and an honest opinion helps enormously. I built this to learn from it, and I learn most from other people using it. |
| 103 | + |
| 104 | +Contact: `j.d.a.jewell@open.ac.uk` | GitHub: [hyperpolymath](https://github.com/hyperpolymath) | Issues: [boj-server/issues](https://github.com/hyperpolymath/boj-server/issues) |
0 commit comments