{"id":13598380,"url":"https://github.com/plone/guillotina","last_synced_at":"2025-08-11T11:11:07.835Z","repository":{"id":18154438,"uuid":"83574500","full_name":"plone/guillotina","owner":"plone","description":"Python AsyncIO data API to manage billions of resources","archived":false,"fork":false,"pushed_at":"2025-07-02T13:29:14.000Z","size":18112,"stargazers_count":204,"open_issues_count":61,"forks_count":51,"subscribers_count":184,"default_branch":"master","last_synced_at":"2025-07-02T14:25:05.516Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://guillotina.readthedocs.io/en/latest/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/plone.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"plone"}},"created_at":"2017-03-01T16:12:44.000Z","updated_at":"2025-06-13T08:51:16.000Z","dependencies_parsed_at":"2023-10-10T16:01:22.172Z","dependency_job_id":"54fd0cdd-a26c-4457-82b2-aab2fff35827","html_url":"https://github.com/plone/guillotina","commit_stats":{"total_commits":3058,"total_committers":58,"mean_commits":"52.724137931034484","dds":0.473839110529758,"last_synced_commit":"9085dd8b788a5f081db5d799965d39831b2d4ee2"},"previous_names":[],"tags_count":608,"template":false,"template_full_name":null,"purl":"pkg:github/plone/guillotina","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plone%2Fguillotina","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plone%2Fguillotina/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plone%2Fguillotina/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plone%2Fguillotina/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/plone","download_url":"https://codeload.github.com/plone/guillotina/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plone%2Fguillotina/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269873158,"owners_count":24488993,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-11T02:00:10.019Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T17:00:52.153Z","updated_at":"2025-08-11T11:11:07.802Z","avatar_url":"https://github.com/plone.png","language":"Python","funding_links":["https://github.com/sponsors/plone"],"categories":["Application frameworks","Web Frameworks"],"sub_categories":[],"readme":"Introduction\n============\n\n.. image:: https://img.shields.io/badge/docs-latest-brightgreen.svg?style=flat\n   :target: http://guillotina.readthedocs.io/en/latest/\n\n.. image:: https://travis-ci.org/plone/guillotina.svg?branch=master\n   :target: https://travis-ci.org/plone/guillotina\n\n.. image:: https://codecov.io/gh/plone/guillotina/branch/master/graph/badge.svg\n   :target: https://codecov.io/gh/plone/guillotina/branch/master\n   :alt: Test Coverage\n\n.. image:: https://img.shields.io/pypi/pyversions/guillotina.svg\n   :target: https://pypi.python.org/pypi/guillotina/\n   :alt: Python Versions\n\n.. image:: https://img.shields.io/pypi/v/guillotina.svg\n   :target: https://pypi.python.org/pypi/guillotina\n\n.. image:: https://img.shields.io/pypi/l/guillotina.svg\n   :target: https://pypi.python.org/pypi/guillotina/\n   :alt: License\n\n.. image:: https://badges.gitter.im/plone/guillotina.png\n   :target: https://gitter.im/plone/guillotina\n   :alt: Chat\n\n.. image:: https://img.shields.io/docker/cloud/build/plone/guillotina\n   :target: https://hub.docker.com/r/guillotina/guillotina\n   :alt: Docker Cloud Build Status\n\nPlease `read the detailed docs \u003chttp://guillotina.readthedocs.io/en/latest/\u003e`_\n\n\nThis is the working project of the next generation Guillotina server based on asyncio.\n\n\nDependencies\n------------\n\n* Python \u003e= 3.7\n* PostgreSQL \u003e= 9.6\n\n\nQuickstart\n----------\n\nWe use pip\n\n.. code-block:: shell\n\n    pip install guillotina\n\n\nRun PostgreSQL\n--------------\n\nIf you don't have a PostgreSQL server to play with, you can run one with Docker.\n\nDownload and start the Docker container by running\n\n.. code-block:: shell\n\n    make run-postgres\n\n\n\nRun the server\n--------------\n\nTo run the server\n\n.. code-block:: shell\n\n    g\n\n\nThen...\n\n.. code-block:: shell\n\n    curl http://localhost:8080\n\n\nOr, better yet, use `Postman \u003chttps://www.getpostman.com/\u003e`_ to start playing with API.\n\nYou can also navigate in your Guillotina server with its built-in web admin interface by visiting http://localhost:8080/+admin/.\n\nDeploy on Heroku\n----------------\n\nRead more `Guillotina-Heroku \u003chttps://github.com/guillotinaweb/guillotina-heroku\u003e`_.\n\n.. image:: https://www.herokucdn.com/deploy/button.svg\n   :target: https://www.heroku.com/deploy?template=https://github.com/guillotinaweb/guillotina-heroku\n\nGetting started with development\n--------------------------------\n\nUsing pip (requires Python \u003e 3.7)\n\n.. code-block:: shell\n\n    git clone git@github.com:plone/guillotina.git\n    cd guillotina\n    python3.7 -m venv .\n    ./bin/pip install -r requirements.txt\n    ./bin/pip install -r contrib-requirements.txt\n    ./bin/pip install -e '.[test]'\n    ./bin/pre-commit install\n\n\nRun tests\n---------\n\nWe're using `pytest \u003chttps://docs.pytest.org/en/latest/\u003e`_\n\n.. code-block:: shell\n\n    ./bin/pytest guillotina\n\nand for test coverage\n\n.. code-block:: shell\n\n    ./bin/pytest --cov=guillotina guillotina/\n\nWith file watcher...\n\n.. code-block:: shell\n\n    ./bin/ptw guillotina --runner=./bin/py.test\n\n\nTo run tests with cockroach db\n\n.. code-block:: shell\n\n    USE_COCKROACH=true ./bin/pytest guillotina\n\nDefault\n-------\n\nDefault root access can be done with AUTHORIZATION header : Basic root:root\n\n\nDocker\n------\n\nYou can also run Guillotina with Docker!\n\n\nFirst, run PostgreSQL\n\n.. code-block:: shell\n\n    docker run --rm \\\n        -e POSTGRES_DB=guillotina \\\n        -e POSTGRES_USER=guillotina \\\n        -p 127.0.0.1:5432:5432 \\\n        --name postgres \\\n        postgres:9.6\n\nThen, run Guillotina\n\n.. code-block:: shell\n\n    docker run --rm -it \\\n        --link=postgres -p 127.0.0.1:8080:8080 \\\n        plone/guillotina:latest \\\n        g -c '{\"databases\": [{\"db\": {\"storage\": \"postgresql\", \"dsn\": \"postgres://guillotina:@postgres/guillotina\"}}], \"root_user\": {\"password\": \"root\"}}'\n\n\nThis assumes you have a config.yaml in your current working directory\n\n\nChat\n----\n\nJoin us to talk about Guillotina at https://gitter.im/plone/guillotina\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplone%2Fguillotina","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplone%2Fguillotina","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplone%2Fguillotina/lists"}