Solid is a web native protocol to enable interoperable, read-write, collaborative, and decentralized web, truer to web's original vision.
Solid adds to existing Web standards to realise a space where individuals can maintain their autonomy, control their data and privacy, and choose applications and services to fulfil their needs.
Manas project aims to create a modular framework and ecosystem to create correct, robust storage servers adhering to Solid protocol in rust.
Manas thus models robust, definitive abstractions for many aspects of http and solid protocols in modular way, and provides them in well factored crates. This enables shared understanding of the domain, and to assemble customized server recipes.
⚠️ Note that, though much of the feature set is implemented, and architecture is relatively stable, it's test suite is constantly evolving. Many of devops bells are being integrated, and apis are being refined. Thus project is considered to be in alpha stage until it reaches at least version 0.5
For end users, Manas provides officially supported assembled servers in manas_server crate. They support following features:
- Support for Fs/S3/GCS and other object stores as backends through OpenDAL abstraction layer.
- Authentication using Solid-OIDC protocol
- Access control adhering to WAC/ACP.
- PATCH requests with n3-patch support.
- Full support for conditional requests, range requests, content-negotiation.
- Integrated solid-os databrowser frontend.
- ..etc.
It is highly recommended to read the book to understand Manas's architecture.
It provides following crates:
-
manas_http
: Provides extended functionality for handling http semantics, that integrates intohyper
ecosystem.- Provides comprehensive list of typed headers for solid ecosystem.
- Provides types for various invariants of http uris, (like absolute, normalized, etc.)
- Defines trait and implementations for http representation.
- Provides implementation of conditional requests related algorithms.
- etc.
-
manas_authentication
: Defines traits for http challenge-response based authentication schemes. Provides default implementations confirming toSolid-OIDC
. -
manas_space
: Defines traits for abstractions that together define a solid server's resource space confirming to generalized solid model -
manas_repo
: Defines trait for defining backend repositories and their services. This trait is plugging point for supporting custom backend repositories. -
mans_repo_opendal
: Provides default repository implementation on top of OpenDAL object store abstraction layer. Through OpenDAL, it supports backends such asfs
,s3-compatible
,gcs
,azblob
, etc. out of the box. While also allowing to take advantage of it's layer interface for enabling retry, tracing, etc. Through implementing OpenDAL'sAccessor
, one can plug to this repository implementation for any object-store like backends, instead of reimplementing entire repository interface. -
mans_repo_layers
: Provides few layering repo implementations, that can be layered over any repos to provide functionality like patching, validation, content-negotiation, etc. -
manas_access_control
: Defines traits for Access control systems compatible with solid storage space. Provides default implementations confirming toACP
,WAC
authorization systems. Also provides an authorization layering repo implementation, to add authorization over any inner repo. -
manas_storage
: Provides traits for aSolidStorage
, andSolidStorageService
, (a solid-protocol compatible http service over a storage). Also provides default, modular implementations of concurrent safe http method services, confirming to solid protocol. -
manas_podverse
: Provides traits (Pod
,PodSet
, andProvisionablePodSet
, etc.) and default implementations for defining, serving, provisioning solid pods and podsets. -
manas_server
: Provides default recipes of solid server. -
manas
: All inclusive crate.
Along with these main crates, Manas project provides many utility crates that help dealing with solid ecosystem.
dpop
: Rust crate for dpop protocolrdf_dynsyn
: Rust crate for dynamic rdf parsers and serializers on top of sophia.rdf_utils
: Utilities to handle rdf in rust.webid
: Rust crate for webid.- ... etc.
Rust MSRV: 1.79.0
Thanks to every contributor, who helped in making manas
possible. A not so exhaustive list in no perticular order:
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
See CONTRIBUTING.md.