{"id":13455084,"url":"https://github.com/apostrophecms/apostrophe","last_synced_at":"2025-12-16T22:00:00.873Z","repository":{"id":6851662,"uuid":"8100370","full_name":"apostrophecms/apostrophe","owner":"apostrophecms","description":"A full-featured, open-source content management framework built with Node.js that empowers organizations by combining in-context editing and headless architecture in a full-stack JS environment.","archived":false,"fork":false,"pushed_at":"2025-12-06T20:26:29.000Z","size":47158,"stargazers_count":4506,"open_issues_count":131,"forks_count":620,"subscribers_count":111,"default_branch":"main","last_synced_at":"2025-12-08T00:25:04.739Z","etag":null,"topics":["apostrophe","cms","cms-framework","jamstack","javascript","node","node-js","nodejs","website-builder"],"latest_commit_sha":null,"homepage":"https://apostrophecms.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/apostrophecms.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2013-02-08T20:04:02.000Z","updated_at":"2025-12-06T20:26:32.000Z","dependencies_parsed_at":"2023-12-20T07:24:31.494Z","dependency_job_id":"648b5fbc-53dc-4499-9e74-94762994202c","html_url":"https://github.com/apostrophecms/apostrophe","commit_stats":{"total_commits":8677,"total_committers":122,"mean_commits":71.12295081967213,"dds":0.7007030079520571,"last_synced_commit":"1038a65c85d8a3c6bb558ed329aed87e29df79c9"},"previous_names":["punkave/apostrophe"],"tags_count":1053,"template":false,"template_full_name":null,"purl":"pkg:github/apostrophecms/apostrophe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apostrophecms%2Fapostrophe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apostrophecms%2Fapostrophe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apostrophecms%2Fapostrophe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apostrophecms%2Fapostrophe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apostrophecms","download_url":"https://codeload.github.com/apostrophecms/apostrophe/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apostrophecms%2Fapostrophe/sbom","scorecard":{"id":203156,"data":{"date":"2025-08-11","repo":{"name":"github.com/apostrophecms/apostrophe","commit":"aa908c7bedaee6b14e55ea78535ed2a46ae51688"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.3,"checks":[{"name":"Code-Review","score":9,"reason":"Found 29/30 approved changesets -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/main.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/apostrophecms/apostrophe/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/apostrophecms/apostrophe/main.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/apostrophecms/apostrophe/main.yml/main?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/main.yml:40","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":9,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/apostrophecms/.github/SECURITY.md:1","Info: Found linked content: github.com/apostrophecms/.github/SECURITY.md:1","Warn: One or no descriptive hints of disclosure, vulnerability, and/or timelines in security policy","Info: Found text in security policy: github.com/apostrophecms/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 29 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-16T23:10:16.480Z","repository_id":6851662,"created_at":"2025-08-16T23:10:16.481Z","updated_at":"2025-08-16T23:10:16.481Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27772298,"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-12-16T02:00:10.477Z","response_time":57,"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":["apostrophe","cms","cms-framework","jamstack","javascript","node","node-js","nodejs","website-builder"],"created_at":"2024-07-31T08:01:01.106Z","updated_at":"2025-12-16T22:00:00.867Z","avatar_url":"https://github.com/apostrophecms.png","language":"JavaScript","readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/apostrophecms/apostrophe\"\u003e\n    \u003cimg src=\"logo.svg\" alt=\"ApostropheCMS logo\" width=\"80\" height=\"80\"\u003e\n  \u003c/a\u003e\n\n  \u003ch1\u003eApostropheCMS\u003c/h1\u003e\n\n  \u003cp\u003e\n    \u003ca aria-label=\"Join the community on Discord\" href=\"http://chat.apostrophecms.org\"\u003e\n      \u003cimg alt=\"\" src=\"https://img.shields.io/discord/517772094482677790?color=5865f2\u0026label=Join%20the%20Discord\u0026logo=discord\u0026logoColor=fff\u0026labelColor=000\u0026style=for-the-badge\u0026logoWidth=20\" /\u003e\n    \u003c/a\u003e\n    \u003ca aria-label=\"License\" href=\"https://github.com/apostrophecms/apostrophe/blob/main/LICENSE.md\"\u003e\n      \u003cimg alt=\"\" src=\"https://img.shields.io/static/v1?style=for-the-badge\u0026labelColor=000000\u0026label=License\u0026message=MIT\u0026color=3DA639\" /\u003e\n    \u003c/a\u003e\n  \u003c/p\u003e\n\n  \u003cp\u003e\n    \u003cstrong\u003eFull-stack CMS for developers and content teams\u003c/strong\u003e\u003cbr /\u003e\n    Build websites with in-context editing and headless flexibility using Node.js and MongoDB.\n    \u003cbr /\u003e\n    \u003ca href=\"https://docs.apostrophecms.org/\"\u003e\u003cstrong\u003eDocumentation »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"http://demo.apostrophecms.com\"\u003eDemo\u003c/a\u003e\n    ·\n    \u003ca href=\"https://productlane.com/edit-roadmap\"\u003eRoadmap\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/apostrophecms/apostrophe/issues/new?assignees=\u0026labels=bug,3.0\u0026template=bug_report.md\u0026title=\"\u003eReport Bug\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n## About\n\nApostropheCMS is a full-stack content management system built with Node.js and MongoDB. Content creators can edit directly on live pages without switching between admin interfaces, while developers can build with modern JavaScript or use it headlessly with any frontend framework.\n\n### Key Features\n\n- **🎯 In-Context Editing** - Content creators edit directly on the live page, seeing changes instantly\n- **⚡ Headless-Ready** - Use any frontend framework while keeping the powerful admin experience\n- **🛠️ Developer-First** - Built with Node.js and MongoDB for full-stack JavaScript development\n- **📈 Scales Beautifully** - From small sites to enterprise applications handling millions of pages\n- **🔐 Enterprise Features** - Advanced permissions, workflow management, automated translations, and more\n\n## System Requirements\n\n| Requirement | Version | Installation Notes |\n|-------------|---------|-------------------|\n| **Node.js** | 20.x+ | Use [NVM](https://github.com/nvm-sh/nvm) for version management |\n| **MongoDB** | 6.0+ | [MongoDB Atlas](https://www.mongodb.com/atlas) (cloud) or local install |\n| **npm** | 10.x+ | Included with Node.js |\n\nSee our [setup guides](https://docs.apostrophecms.org/guide/development-setup.html) for installation instructions.\n\n## Quick Start\n\nGet ApostropheCMS running locally in minutes:\n\n```bash\n# Option 1: Install CLI globally (recommended for multiple projects)\nnpm install -g @apostrophecms/cli\napos create my-website\ncd my-website\nnpm run dev\n\n# Option 2: Use npx for one-time project creation\nnpx @apostrophecms/cli create my-website\ncd my-website\nnpm run dev\n```\n\nYour new ApostropheCMS site will be available at `http://localhost:3000` with a powerful admin interface at `/login`.\n\n### Prefer to Go Headless?\n\n**Get started with Astro integration** - the easiest way to build headless sites while keeping visual editing:\n\n- **[Apollo Starter Kit (Astro)](https://apostrophecms.com/starter-kits/apollo-starter-kit-for-astro-cms)** - Production-ready foundation with beautiful design system and rich content features\n- **[Essentials Starter Kit (Astro)](git clone https://github.com/apostrophecms/starter-kit-astro-essentials)** - Minimal, clean foundation for building custom designs from scratch\n\nBoth starter kits provide headless CMS power with in-context editing, letting content creators edit directly on the live site while you build with modern frontend tools. Our Astro integration handles all the content fetching automatically—no REST API calls to write.\n\n**Desire a different frontend framework?** Use our REST APIs with React, Vue, Svelte, or any other framework:\n\n- **[REST API Documentation](https://docs.apostrophecms.org/reference/api/pieces.html)** - Complete API reference\n- **[Headless CMS Guide](https://docs.apostrophecms.org/guide/headless-cms.html)** - Integration walkthrough for any framework\n\n### Hosting \u0026 Deployment\n\nChoose [ApostropheCMS hosting](https://apostrophecms.com/hosting) for turnkey solutions with optimized performance and dedicated support, or deploy to [any platform where Node.js runs](https://docs.apostrophecms.org/guide/hosting.html).\n\n## Built With Modern Tech\n\n- **[Node.js](https://nodejs.org/)** - JavaScript runtime for server-side development\n- **[MongoDB](https://www.mongodb.com/)** - Flexible document database for content storage\n- **ESM Modules** - Native ES6 module support for modern JavaScript\n- **Vite** - Lightning-fast build tool and development server\n- **Modern JavaScript** - ES6+, async/await, and contemporary development patterns\n\n## Community \u0026 Support\n\n**Join other developers and content creators using ApostropheCMS:**\n\n- **[Discord](https://discord.com/invite/XkbRNq7)** - Get help, share projects, and connect with other users\n- **[GitHub Discussions](https://github.com/apostrophecms/apostrophe/discussions)** - Feature requests, technical discussions, and community support\n- **[Documentation](https://docs.apostrophecms.org/)** - Comprehensive guides, tutorials, and API references\n\n## Contributing\n\nWe welcome contributions from the community! Whether you're fixing bugs, adding features, or improving documentation, your help makes ApostropheCMS better for everyone.\n\n- **[Contribution Guide](https://github.com/apostrophecms/apostrophe/blob/main/CONTRIBUTING.md)** - How to contribute code, documentation, and feedback\n- **[Good First Issues](https://github.com/apostrophecms/apostrophe/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)** - Perfect starting points for new contributors\n\n\n## Pro Features\n\n**For teams and organizations requiring additional features:**\n\n- **🔐 Advanced User Management** - Granular permissions, user groups, and access controls\n- **🌍 Automated Translation** - AI-powered translation with DeepL, Google Translate, and Azure\n- **📊 Analytics \u0026 SEO** - Built-in SEO optimization and content analytics\n- **⚡ Performance Optimization** - Advanced caching, CDN integration, and performance monitoring\n- **🏢 Multisite Management** - Manage multiple sites from a single dashboard with shared resources\n- **💼 Professional Support** - Dedicated support, training, and consultation services\n\n[Explore all the pro extensions](https://apostrophecms.com/extensions?autocomplete=\u0026license=assembly\u0026license=pro) and [sign up](https://app.apostrophecms.com/login) for a Pro license in our self-service Apostrophe Workspaces, or [contact us](https://apostrophecms.com/contact-us) to learn about licensing and support options.\n\n## License\n\nApostropheCMS is open source software licensed under the [MIT License](https://github.com/apostrophecms/apostrophe/blob/main/LICENSE.md). This means you're free to use, modify, and distribute it for both personal and commercial projects.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003e\n    \u003cstrong\u003eReady to build something amazing?\u003c/strong\u003e\u003cbr\u003e\n    \u003ca href=\"https://docs.apostrophecms.org/\"\u003eGet started with our documentation\u003c/a\u003e or \u003ca href=\"https://apostrophecms.com/contact-us\"\u003etalk to our team\u003c/a\u003e\n  \u003c/p\u003e\n  \u003cp\u003e\n    \u003cem\u003eBuilt with ❤️ by the \u003ca href=\"https://apostrophecms.com\"\u003eApostropheCMS team\u003c/a\u003e\u003c/em\u003e\n  \u003c/p\u003e\n\u003c/div\u003e","funding_links":[],"categories":["Packages","JavaScript","Repository","包","目录","Apps","Content management systems","nodejs","website-builder"],"sub_categories":["Content management systems","Content management systems (CMS)","内容管理系统","Development"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapostrophecms%2Fapostrophe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapostrophecms%2Fapostrophe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapostrophecms%2Fapostrophe/lists"}