.. This file is part of Invenio. Copyright (C) 2018 CERN. Invenio is free software; you can redistribute it and/or modify it under the terms of the MIT License; see LICENSE file for more details. .. _bundles: Bundles ======= Invenio is a highly modular framework with many modules that provide various different functionality. We are packing related modules into bundles which is released together at the same time. Each module has a separate documentation which you can find linked below. Base bundle ----------- The base bundle contains all modules related to the generic web application. This includes the Flask/Celery application factories, configuration management, I18N, logging, database management, assets/theme management, mail handling and administration interface. Included modules: - `invenio-admin `_ - Administration interface for Invenio based on Flask-Admin. - `invenio-app `_ - Flask, WSGI, Celery and CLI applications for Invenio including security-related headers and rate limiting. - `invenio-assets `_ - Static files management and Webpack integration for Invenio. - `invenio-base `_ - Flask application factories implementing the application loading patterns with entry points in Invenio. - `invenio-cache `_ - Caching module for Invenio, supporting Redis and Memcached as backends. - `invenio-celery `_ - Task discovery and default configuration of Celery for Invenio. - `invenio-config `_ - Configuration loading pattern responsible for loading configuration from Python modules, instance folder and environment variables. - `invenio-db `_ - Database connection management for Invenio. - `invenio-formatter `_ - Jinja template engine utilities for Invenio. - `invenio-i18n `_ - I18N utilities like user locale detection, message catalog merging and views for language change. - `invenio-logging `_ - Configuration of logging to both console, files and log aggregation engines like `sentry.io `_ - `invenio-mail `_ - Mail sending for Invenio using Flask-Mail. - `invenio-rest `_ - REST API utilities including Cross Origin Resource Sharing (CORS) and Content Negotiation versioning support. - `invenio-theme `_ - Jinja templates implementing a basic theme for Invenio as well as menus and breadcrumbs support. - `docker-invenio `_ - Docker base images based on CentOS 7 for Invenio. - `pytest-invenio `_ - Testing utilities for Invenio modules and applications. Auth bundle ----------- The auth bundle contains all modules related to account and access management, user profiles, session management and OAuth (provider and client) Included modules: - `invenio-access `_ - Role Based Access Control (RBAC) with object level permissions. - `invenio-accounts `_ - User/role management, registration, password recovery, email verification, session theft protection, strong cryptographic hashing of passwords, hash migration, session activity tracking and CSRF protection of REST API via JSON Web Tokens. - `invenio-oauth2server `_ - OAuth 2.0 Provider for REST API authentication via access tokens. - `invenio-oauthclient `_ - User identity management and support for login via ORCID, GitHub, Google or other OAuth providers. - `invenio-userprofiles `_ - User profiles for integration into registration forms. The modules relies heavily on a suite of open source community projects: - `flask-security `_ - `flask-login `_ - `flask-principal `_ - `flask-oauthlib `_ - `passlib `_ Metadata bundle --------------- The metadata bundle contains all modules related to records and metadata management including e.g. records storage, persistent identifier management, search engine indexing, an OAI-PMH server and REST APIs for records. Included modules: - `invenio-indexer `_ - Highly scalable record bulk indexing. - `invenio-jsonschemas `_ - JSONSchema registry for Invenio. - `invenio-oaiserver `_ - OAI-PMH server implementation for Invenio. - `invenio-pidstore `_ - Management, registration and resolution of persistent identifiers including e.g DOIs. - `invenio-records `_ - JSON document storage with revision history and JSONSchema validation. - `invenio-records-rest `_ - REST APIs for search and CRUD operations on records and persistent identifiers. - `invenio-records-ui `_ - User interface for displaying records. - `invenio-search `_ - Elasticsearch integration module for Invenio. - `invenio-search-js `_ - AngularJS search application for displaying records from the REST API. - `invenio-search-ui `_ - User interface for searching records. Files bundle ------------ The files bundle contains all modules related to files management, an object storage REST API, storage backends, file previewers, IIIF image APIs and an integration layer between files and records. Included modules: - `invenio-files-rest `_ - Object storage REST API for Invenio with many supported backend storage protocols and file integrity checking. - `invenio-iiif `_ - International Image Interoperability Framework (IIIF) server for making thumbnails and zooming images. - `invenio-previewer `_ - Previewer for Markdown, JSON/XML, CSV, PDF, JPEG, PNG, TIFF, GIF and ZIP files. - `invenio-records-files `_ - Integration layer between object storage and records. Statistics bundle (beta) ------------------------ .. note:: This bundle is in beta. The modules are being used in production systems but are still missing some minor changes as well as documentation. The statistics bundle contains all modules related to counting statistics such as file downloads, record views or any other type of events. It supports the COUNTER Code of Practice as well as Making Data Count Code of Practice including e.g. double-click detection. Included modules: - `invenio-stats `_ - Event collection, processing and aggregation in time-based indicies in Elasticsearch. - `invenio-queues `_ - Event queue management module. - `counter-robots `_ - Module providing the list of robots according to the COUNTER Code of Practice. Deposit bundle (alpha) ---------------------- .. note:: This bundle is in alpha. The modules are being used in production systems but are very likely subject to change and are missing documentation. Included modules: - `invenio-deposit `_ - REST API for managing deposit of records into Invenio with support for in progress editing of records. - `invenio-files-js `_ - AngularJS application for uploading files to Invenio via streaming the binary files in an HTTP request. - `invenio-records-js `_ - AngularJS application for interacting with the deposit REST API and rendering forms based on angular schema forms. - `invenio-sipstore `_ - Submission Information Package (SIP) store with bagit support. Invenio modules (alpha) ----------------------- .. note:: These modules are in alpha. The modules are being used in production systems but are most likely subject to changes and are missing documentation. In addition to above bundles, we have a number of other individual modules which are all being used in production systems, but which are likely subject to change prior to final release and in most cases are missing documentation. - `invenio-accounts-rest `_ - REST APIs for account management. - `invenio-charts-js `_ - AngularJS application for producing charts. - `invenio-csl-js `_ - AngularJS application for rendering citation strings via the records REST API and the CSL REST API. - `invenio-csl-rest `_ - REST API for retrieving Citation Style Language (CSL) style files. - `invenio-github `_ - GitHub integration with automatic archiving of new releases in Invenio. - `invenio-openaire `_ - Integration with OpenAIRE, including support for harvesting Open Funder Regsitry and the OpenAIRE grants database, as well as REST APIs for funders and grants. - `invenio-opendefinition `_ - REST API for licenses from OpenDefinition and SPDX. - `invenio-pages `_ - Static pages module for Invenio. - `invenio-pidrelations `_ - Persistent identifier relations management to support e.g. DOI versioning. - `invenio-previewer-ispy `_ - ISPY previewer. - `invenio-query-parser `_ - Invenio v1 compatible query parser for Invenio v3. Note the module is GPL licensed due to a GPL-licensed dependency. - `invenio-s3 `_ - Support for the S3 storage protocol in Invenio. - `invenio-saml `_ - SAML support for Invenio. - `invenio-sequencegenerator `_ - Module for minting and tracking multiple sequences for e.g. report numbers, journals etc. - `invenio-sse `_ - Server-Sent Events (SSE) integration in Invenio. - `invenio-webhooks `_ - REST API for receiving and processing webhook calls from third-party services. - `invenio-xrootd `_ - Support for the storage protocol XRootD in Invenio. - `react-searchkit `_ - Modular React library for implementing search interfaces on top of Invenio, Elasticsearch or other search APIs. Replacement for Invenio-Search-JS. Utility libraries ----------------- Above Invenio modules dependent on a number of smaller utility libraries we have developed to take care of e.g. identifier normalization, DataCite/Dublin Core metadata generation, testing and citation formatting. - `citeproc-py-styles `_ - Citation Style Language (CSL) style files packaged as a Python module - `datacite `_ - Python library for generating DataCite XML from Python dictionaries and registering DOIs with the DataCite DOI registration service. - `dcxml `_ - Python library for generating Dublin Core XML from Python dictionaries. - `dictdiffer `_ - Python library for diffing/patching/merging JSON documents. - `dojson `_ - JSON to JSON rule-based transformation library. - `flask-breadcrumbs `_ - Flask extension for managing breadcrumbs in web applications. - `flask-celeryext `_ - Celery integration for Flask. - `flask-iiif `_ - IIIF server for Flask. - `flask-menu `_ - Menu generation support for Flask. - `flask-sitemap `_ - Sitemaps XML generation for Flask. - `flask-webpack `_ - Webpack integration for Flask. - `idutils `_ - Persistent identifier validation, identification and normalization. - `jsonresolver `_ - JSONRef resolver with support for local plugins. - `pynpm `_ - NPM integration for Python. - `pywebpack `_ - Webpack integration library for Python. - `requirements-builder `_ - Python CLI tool for testing multiple versions of different Python libraries in you continuous integration system. - `xrootdpyfs `_ - PyFilesystem plugin adding XRootD support. Scaffolding ----------- Following modules provide templates for getting started with Invenio: - `cookiecutter-invenio-instance `_ - Template for new Invenio instances. - `cookiecutter-invenio-datamodel `_ - Template for new data models. - `cookiecutter-invenio-module `_ - Template for a reusable Invenio module. Notes on license ---------------- Invenio is undergoing a change of license from GPLv2 to MIT License in most cases. Thus, you may especially for alpha and beta modules see that the license is still GPL v2 in the source code. This will be changed to MIT License for all repositories before being finally released. The only module we are currently aware of that can not be converted is Invenio-Query-Parser, which has a dependency on a GPL-licensed library. Invenio-Query-Parser is however not needed by most installations, as it only provides an Invenio v1.x compatible query parser.