Site is an Application Data Platform, allowing the deployment of Application Programming Interfaces to serve state to applications.
Site offers the following:
-
Bitemporal data storage (via XTDB)
-
User authentication (including OpenID)
-
Support for OpenAPI and GraphQL programmable APIs, with an embedded powerful language.
-
A built-in OAuth2 Authorization Server for issuing access tokens
-
Excellent conformance with standards (HTTP, OAuth2, OpenID) to maximise interoperability and minimize lock-in
On top of these features, Site has strong support for data governance. Every state of the database is accessible at any point in time. Every change to the database is auditable, so you can find out who made which change to the data, and when.
Site fully implements the OAuth2 Authorization Framework. Site assumes the roles of a Resource Server and Authorization Server.
Site can be adopted as part of an Internal Developer Platform (IDP).
Site 2.0 is not yet ready for evaluation outside of JUXT, and is in the process of maturing. We are developing 'in the open', please treat this repository in that spirit.
The previous 1.0 generation of Site is maintained at https://github.com/juxt/site.
-
You want to get started on a project quickly, and there are requirements for the project to serve data securely over an API.
-
You are building an Internal Developer Platform (IDP) and want to provide a solution to your developers to help them speed their development of APIs.
-
You have a dataset that you want to make available to consumers/customers via a secure OAuth2-compliant API, but don’t want to build a system from scratch.
In these cases, JUXT can provide expert guidance, consulting and development resources, if required. Contact [email protected] to schedule an appointment.
Run the tests with make test
if you have make installed, or if not, with clojure -M:test -m kaocha.runner test
.
Site is a standards-compliant web server, fulfilling the roles of an OAuth2 resource server and authorization server.
- resource server
The server hosting the protected resources, capable of accepting and responding to protected resource requests using access tokens.
Resources are documents which represent a resource’s identity (URI), configuration and current state (which might be some data, image or other media). Site stores resources in a database.
A resource request is a standard web request to a URI (as part of an API, such as OpenAPI) or GraphQL request.
Requests contain an access-token, acquired from an authorization server:
- authorization server
The server issuing access tokens to the client after successfully authenticating the resource owner and obtaining authorization.
Currently, the only supported database is JUXT’s immutable XTDB database. XTDB is a good fit for Site, since many of its features (such as document ids and references) map cleanly onto web concepts (such as URIs and links).
Current development is still focussed on the technical feature set, as required to conform to the relevant standards and provide good interoperability.
Some types of resource, such as 'operations', may contain Site 'programs' that are executed when required. All resources are stored in the database, including all program code.
Currently, the only available programming language is SCI.
Contact [email protected] if you would like help, we can provide professional consulting services for Site and/or XTDB.
The MIT License (MIT)
Copyright © 2020-2023 JUXT LTD.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.