{"id":28818485,"url":"https://github.com/lebcit/aether-cms","last_synced_at":"2025-07-21T09:32:54.119Z","repository":{"id":298823707,"uuid":"997095151","full_name":"LebCit/aether-cms","owner":"LebCit","description":"A modern, elegant content management system designed for developers and content creators who value simplicity and power.","archived":false,"fork":false,"pushed_at":"2025-06-13T04:11:06.000Z","size":475,"stargazers_count":53,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-13T05:21:28.817Z","etag":null,"topics":["aether","aether-cms","backend","cms","content-authoring","content-management","developer-tools","frontend","headless","javascript","litenode","markdown","nodejs","site-builder","ssg","static-site-generator","template","themes"],"latest_commit_sha":null,"homepage":"https://aether-cms.pages.dev/","language":"JavaScript","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/LebCit.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,"zenodo":null}},"created_at":"2025-06-06T00:27:42.000Z","updated_at":"2025-06-13T04:10:21.000Z","dependencies_parsed_at":"2025-06-13T05:32:32.039Z","dependency_job_id":null,"html_url":"https://github.com/LebCit/aether-cms","commit_stats":null,"previous_names":["lebcit/aether-cms"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/LebCit/aether-cms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LebCit%2Faether-cms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LebCit%2Faether-cms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LebCit%2Faether-cms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LebCit%2Faether-cms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LebCit","download_url":"https://codeload.github.com/LebCit/aether-cms/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LebCit%2Faether-cms/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266276122,"owners_count":23903981,"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":["aether","aether-cms","backend","cms","content-authoring","content-management","developer-tools","frontend","headless","javascript","litenode","markdown","nodejs","site-builder","ssg","static-site-generator","template","themes"],"created_at":"2025-06-18T19:05:38.413Z","updated_at":"2025-07-21T09:32:54.110Z","avatar_url":"https://github.com/LebCit.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Aether CMS\n\nA lightweight, file-based CMS built with vanilla JavaScript and [LiteNode](https://github.com/LebCit/litenode) that generates blazing-fast static sites.\n\n\u003e [!NOTE]  \n\u003e If you find value in Aether or want to help it grow, your support — whether it's feedback, sharing, contributing, or funding — can make a real difference. The long-term goal is to build a sustainable open-source project that stays fast, independent, and truly community-driven. If you'd like to support Aether, giving it a star would be greatly appreciated and genuinely helpful.\n\n## ✨ Features\n\n### Content Management\n\n-   **File-based storage** - Content stored as Markdown files with YAML frontmatter\n-   **Posts \u0026 Pages** - Full support for blog posts and static pages\n-   **Categories \u0026 Tags** - Organize content with taxonomies\n-   **Custom Pages** - Create nested page hierarchies with custom templates\n-   **Rich Editor** - Built-in Markdown editor with live preview\n-   **Media Library** - Upload and manage images and documents\n\n### Theming \u0026 Customization\n\n-   **Theme System** - Theme system architecture with template hierarchy\n-   **Theme Marketplace** - Install themes directly from GitHub repository\n-   **Hook System** - Extensible plugin architecture for developers\n-   **Custom Templates** - Support for page-specific templates\n-   **Menu Management** - Global navigation menu system\n\n### Performance \u0026 SEO\n\n-   **Static Site Generation** - Generate ultra-fast static sites\n-   **SEO Optimized** - Automatic sitemap, RSS feeds, and meta tags\n-   **Clean URLs** - Beautiful, SEO-friendly URL structure\n-   **Image Optimization** - Automatic image metadata and alt text management\n\n### User Management\n\n-   **Role-based Access** - Admin and editor user roles\n-   **Secure Authentication** - Argon2 password hashing with rate limiting\n-   **Session Management** - Secure session handling\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n-   Node.js 18+\n-   npm or yarn\n\n### Installation\n\n1. **Create a new project**\n\n    ```bash\n    npx create-aether-cms my-cms-site\n    cd my-cms-site\n    ```\n\n2. **Install dependencies**\n\n    ```bash\n    npm install\n    ```\n\n3. **Start the development server**\n\n    ```bash\n    npm start\n    ```\n\n4. **Access the admin dashboard**\n   Open `http://localhost:8080/aether` in your browser\n    - Default credentials: `admin` / `admin`\n\n## 📁 Project Structure\n\n```\naether/\n├── content/            # Content storage\n│   ├── data/           # Posts, pages, and settings\n│   │   ├── posts/      # Blog posts (.md files)\n│   │   ├── pages/      # Static pages (.md files)\n│   │   └── custom/     # Custom pages (.md files)\n│   ├── themes/         # Theme files\n│   │   └── default/    # Default theme\n│   └── uploads/        # Media files\n├── core/               # Core CMS functionality\n│   ├── api/            # REST API endpoints\n│   ├── lib/            # Core libraries\n│   ├── routes/         # Frontend routes\n│   └── admin/          # Admin interface\n└── assets/             # Static assets\n```\n\n## 🎨 Themes\n\nAether uses a flexible theme system with template hierarchy:\n\n### Template Hierarchy\n\n1. **Custom templates** - `themes/theme-name/custom/page-name.html`\n2. **Content-specific** - `themes/theme-name/templates/post.html`\n3. **Generic content** - `themes/theme-name/templates/content.html`\n4. **Layout fallback** - `themes/theme-name/templates/layout.html`\n\n### Theme Structure\n\n```\ntheme-name/\n├── theme.json           # Theme metadata\n├── assets/              # CSS, JS, images\n│   ├── css/\n│   └── js/\n├── templates/           # Core templates\n│   ├── layout.html      # Base layout\n│   ├── post.html        # Single post\n│   ├── page.html        # Single page\n│   └── taxonomy.html    # Categories/tags\n├── partials/            # Reusable components\n└── custom/              # Custom page templates\n```\n\n## 📝 Content Management\n\n### Creating Content\n\n**Posts** are stored in `content/data/posts/` as Markdown files:\n\n```markdown\n---\nid: \"1234567890\"\ntitle: \"My Blog Post\"\nslug: \"my-blog-post\"\nstatus: \"published\"\nauthor: \"admin\"\ncategory: \"Technology\"\ntags: [\"javascript\", \"cms\"]\ncreatedAt: \"2024-01-15T10:00:00.000Z\"\n---\n\n# My Blog Post\n\nThis is the content of my blog post written in Markdown.\n```\n\n**Custom Pages** support nested hierarchies:\n\n```markdown\n---\nid: \"1234567891\"\ntitle: \"API Documentation\"\nslug: \"api-docs\"\npageType: \"custom\"\nparentPage: \"documentation\"\nstatus: \"published\"\n---\n\n# API Documentation\n\nDocumentation content here...\n```\n\n## 🔧 Static Site Generation\n\nGenerate a static version of your site:\n\n```bash\n# Generate with default settings\nnpm run build\n\n# Custom output directory\nnpm run build -- --output dist\n\n# Custom base URL\nnpm run build -- --base-url https://yourdomain.com\n\n# Disable clean URLs\nnpm run build -- --no-clean-urls\n```\n\n### Configuration Options\n\n-   `--output, -o` - Output directory (default: `_site`)\n-   `--base-url, -b` - Base URL for the site\n-   `--no-clean-urls` - Use `.html` extensions instead of clean URLs\n\n## 🔌 Hooks \u0026 Extensibility\n\nAether includes a hook system for extensibility:\n\n```javascript\n// Add a filter to modify posts\nhookSystem.addFilter(\"api_posts\", (posts, req) =\u003e {\n    // Modify posts data\n    return posts.filter((post) =\u003e post.featured)\n})\n\n// Add an action after post creation\nhookSystem.addAction(\"post_created\", (post) =\u003e {\n    console.log(`New post created: ${post.title}`)\n})\n```\n\n## 🛠️ Development\n\n### Environment Variables\n\nCreate a `.env` file:\n\n```env\nPORT=8080\nNODE_ENV=development\n```\n\n### API Endpoints\n\n#### Content API\n\n-   `GET /api/posts` - List posts\n-   `POST /api/posts` - Create post\n-   `PUT /api/posts/:id` - Update post\n-   `DELETE /api/posts/:id` - Delete post\n\n#### Media API\n\n-   `GET /api/media` - List media files\n-   `POST /api/media/upload` - Upload file\n-   `DELETE /api/media/:id` - Delete file\n\n#### Theme API\n\n-   `GET /api/themes` - List themes\n-   `POST /api/themes/switch/:name` - Switch theme\n-   `POST /api/themes/upload` - Upload theme\n\n### File Structure Conventions\n\n-   **Posts**: Use descriptive slugs (`my-awesome-post.md`)\n-   **Pages**: Organize by hierarchy (`about.md`, `contact.md`)\n-   **Custom Pages**: Use parent-child relationships for nesting\n\n## 🚦 Deployment\n\n### Static Deployment\n\n1. Generate static site: `npm run build`\n2. Deploy the `_site` folder to any static host — here are a few common choices:\n    - [Azure Static Web Apps](https://azure.microsoft.com/en-us/services/app-service/static/)\n    - [Cloudflare Pages](https://pages.cloudflare.com/)\n    - [GitHub Pages](https://pages.github.com/)\n    - [GitLab Pages](https://about.gitlab.com/product/pages/)\n    - [Netlify](https://www.netlify.com/)\n    - [Render](https://render.com/)\n    - [Surge](https://surge.sh/)\n    - [Vercel](https://vercel.com/)\n\n### Node.js Deployment\n\n1. Set `NODE_ENV=production`\n2. Configure reverse proxy (nginx/Apache)\n3. Use process manager (PM2, forever)\n\n### Environment Configuration\n\n```env\nNODE_ENV=production\nPORT=3000\n```\n\n## 📄 License\n\nThis project is licensed under the **[GNU General Public License v3.0 or later (GPL-3.0-or-later)](https://www.gnu.org/licenses/gpl-3.0.html)** - see the [LICENSE](LICENSE) file for details.  \nIt also uses third-party packages, primarily licensed under the **[MIT License](https://opensource.org/licenses/MIT)** and retrieved via npm.  \nEach dependency retains its own license, which can be found in the respective package folders under `node_modules/` after installation.\n\n## 🤝 Contributing\n\nHi there! 👋\nAether CMS is an open-source project maintained by one person (that's me!), and I want it to be a respectful, inclusive space for everyone.\n\nPlease be kind and constructive in all interactions — whether you're opening issues, submitting pull requests, or joining discussions. Disrespectful, abusive, or unhelpful behavior won't be tolerated.\n\nIf someone behaves inappropriately, I may block them from the project and report them to GitHub if necessary. Let's keep things friendly and welcoming for everyone!\n\n### How to Contribute\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n### Reporting Issues\n\nIf you see something off or just need to reach out, feel free to contact me via the [Q\u0026A category](https://github.com/LebCit/aether-cms/discussions/categories/q-a) or by opening a new discussion in the **[Reports category](https://github.com/LebCit/aether-cms/discussions/categories/reports).**\n\nThis helps keep our Issues focused on bugs and features.\n\nThanks for being a good human 💙  \n— LebCit\n\n## 📞 Support\n\n-   **Documentation**: [Visit Aether Docs](https://aether-cms.pages.dev/)\n-   **Issues**: [Report bugs](https://github.com/lebcit/aether-cms/issues)\n-   **Discussions**: [Community forum](https://github.com/lebcit/aether-cms/discussions)\n-   **Resources**: [Articles](https://lebcit.github.io/tag/aether-cms/)\n\n## 🎯 Roadmap\n\n-   Scheduled Publishing\n-   Search functionality - **Implemented in [v1.2.0](https://github.com/LebCit/aether-cms/releases/tag/v1.2.0)**\n-   Advanced user permissions\n-   Page caching with duration\n-   Plugin system expansion\n-   Comment system with moderation\n-   Advanced SEO tools\n-   Editor enhancements - **Implemented in [v1.1.0](https://github.com/LebCit/aether-cms/releases/tag/v1.1.0)**\n-   New themes added to the marketplace\n-   Simplify update system\n-   And that’s just the beginning…\n\n---\n\n**Aether CMS** - Content in Motion. Powered by simplicity.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flebcit%2Faether-cms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flebcit%2Faether-cms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flebcit%2Faether-cms/lists"}