{"id":20418255,"url":"https://github.com/askonomm/shapecms","last_synced_at":"2026-04-15T15:38:37.844Z","repository":{"id":188020724,"uuid":"677524672","full_name":"askonomm/shapecms","owner":"askonomm","description":"A composable content management system for bespoke websites.","archived":false,"fork":false,"pushed_at":"2023-08-21T14:18:37.000Z","size":84,"stargazers_count":1,"open_issues_count":7,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-24T08:58:43.202Z","etag":null,"topics":["cmf","cms","flask","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/askonomm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-11T19:56:15.000Z","updated_at":"2023-08-13T14:36:23.000Z","dependencies_parsed_at":"2024-10-06T20:50:38.936Z","dependency_job_id":"51e2ba34-548a-4ac6-9078-de646b956ba5","html_url":"https://github.com/askonomm/shapecms","commit_stats":null,"previous_names":["askonomm/shapecms"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/askonomm%2Fshapecms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/askonomm%2Fshapecms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/askonomm%2Fshapecms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/askonomm%2Fshapecms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/askonomm","download_url":"https://codeload.github.com/askonomm/shapecms/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241960886,"owners_count":20049344,"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","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":["cmf","cms","flask","python"],"created_at":"2024-11-15T06:30:49.367Z","updated_at":"2026-04-15T15:38:37.783Z","avatar_url":"https://github.com/askonomm.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Shape CMS\n\nShape CMS is a composable content management system that plugs into your Python project giving you full freedom in building sites. \nIt comes with an admin panel that builds itself based on the data models you create while leaving everything else up to you.\n\nShape CMS leverages the Flask framework under-the-hood, so you also get the full power of Flask when building apps with Shape CMS.\n\n**Note:** There's no stable release yet, so documentation is subject to change, and I would not recommend running it in production.\n\n## Installation\n\n```shell\npip install shapecms\n```\n\n## Example app\n\nA minimal example looks like this:\n\n```python\nfrom shapecms import ShapeCMS, PageView\n\n\nclass HomeView(PageView):\n    def get(self):\n        return \"Hello, world.\"\n\n\napp = ShapeCMS(\n    import_name=__name__,\n    connection_uri=\"sqlite:///demo.db\",\n    shapes=[],\n    views={\"/\": HomeView}\n)\n\n\ndef create_app():\n    instance = app.start()\n    instance.secret_key = \"super-secret-key\"\n\n    return instance\n```\n\nThe admin panel is automatically available at the `/admin` path. If it's your first time going to the admin panel, it will guide you through a set-up process. \n\nNote however that until you add any Content Shapes the admin panel will be empty as it will have no info on how to construct itself.\n\n## Adding Content Shapes\n\nAn example Content Shape looks like this:\n\n```python\nfrom flask import Request\nfrom shapecms.fields.text import TextField\nfrom shapecms.shape import Shape\n\ndef blog_post(request: Request) -\u003e Shape:\n    return Shape(\n        identifier=\"post\",\n        name=\"Blog Posts\",\n        singular_name=\"Blog Post\",\n        admin_list_view_fields=[\"title\"],\n        fields=[\n            TextField(\n                identifier=\"title\", name=\"Post Title\", placeholder=\"Untitled ...\"\n            ),\n            TextField(\n                identifier=\"slug\",\n                name=\"URL\",\n                prefix=\"{url}blog/\".format(url=request.host_url),\n            ),\n        ],\n    )\n```\n\nPass all your content shapes into the `shapes` array when initializing ShapeCMS as references, and you're all set.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faskonomm%2Fshapecms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faskonomm%2Fshapecms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faskonomm%2Fshapecms/lists"}