A modern, elegant content management system designed for developers and content creators who value simplicity and power.
A lightweight, file-based CMS built with vanilla JavaScript and LiteNode that generates blazing-fast static sites.
[!NOTE]
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.
Create a new project
npx create-aether-cms my-cms-site
cd my-cms-site
Install dependencies
npm install
Start the development server
npm start
Access the admin dashboard
Open http://localhost:8080/aether
in your browser
admin
/ admin
aether/
├── content/ # Content storage
│ ├── data/ # Posts, pages, and settings
│ │ ├── posts/ # Blog posts (.md files)
│ │ ├── pages/ # Static pages (.md files)
│ │ └── custom/ # Custom pages (.md files)
│ ├── themes/ # Theme files
│ │ └── default/ # Default theme
│ └── uploads/ # Media files
├── core/ # Core CMS functionality
│ ├── api/ # REST API endpoints
│ ├── lib/ # Core libraries
│ ├── routes/ # Frontend routes
│ └── admin/ # Admin interface
└── assets/ # Static assets
Aether uses a flexible theme system with template hierarchy:
themes/theme-name/custom/page-name.html
themes/theme-name/templates/post.html
themes/theme-name/templates/content.html
themes/theme-name/templates/layout.html
theme-name/
├── theme.json # Theme metadata
├── assets/ # CSS, JS, images
│ ├── css/
│ └── js/
├── templates/ # Core templates
│ ├── layout.html # Base layout
│ ├── post.html # Single post
│ ├── page.html # Single page
│ └── taxonomy.html # Categories/tags
├── partials/ # Reusable components
└── custom/ # Custom page templates
Posts are stored in content/data/posts/
as Markdown files:
---
id: "1234567890"
title: "My Blog Post"
slug: "my-blog-post"
status: "published"
author: "admin"
category: "Technology"
tags: ["javascript", "cms"]
createdAt: "2024-01-15T10:00:00.000Z"
---
# My Blog Post
This is the content of my blog post written in Markdown.
Custom Pages support nested hierarchies:
---
id: "1234567891"
title: "API Documentation"
slug: "api-docs"
pageType: "custom"
parentPage: "documentation"
status: "published"
---
# API Documentation
Documentation content here...
Generate a static version of your site:
# Generate with default settings
npm run build
# Custom output directory
npm run build -- --output dist
# Custom base URL
npm run build -- --base-url https://yourdomain.com
# Disable clean URLs
npm run build -- --no-clean-urls
--output, -o
- Output directory (default: _site
)--base-url, -b
- Base URL for the site--no-clean-urls
- Use .html
extensions instead of clean URLsAether includes a hook system for extensibility:
// Add a filter to modify posts
hookSystem.addFilter("api_posts", (posts, req) => {
// Modify posts data
return posts.filter((post) => post.featured)
})
// Add an action after post creation
hookSystem.addAction("post_created", (post) => {
console.log(`New post created: ${post.title}`)
})
Create a .env
file:
PORT=8080
NODE_ENV=development
GET /api/posts
- List postsPOST /api/posts
- Create postPUT /api/posts/:id
- Update postDELETE /api/posts/:id
- Delete postGET /api/media
- List media filesPOST /api/media/upload
- Upload fileDELETE /api/media/:id
- Delete fileGET /api/themes
- List themesPOST /api/themes/switch/:name
- Switch themePOST /api/themes/upload
- Upload thememy-awesome-post.md
)about.md
, contact.md
)npm run build
_site
folder to any static host — here are a few common choices:
NODE_ENV=production
NODE_ENV=production
PORT=3000
This project is licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later) - see the LICENSE file for details.
It also uses third-party packages, primarily licensed under the MIT License and retrieved via npm.
Each dependency retains its own license, which can be found in the respective package folders under node_modules/
after installation.
Hi there! 👋
Aether 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.
Please 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.
If 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!
git checkout -b feature/amazing-feature
)git commit -m 'Add amazing feature'
)git push origin feature/amazing-feature
)If you see something off or just need to reach out, feel free to contact me via the Q&A category or by opening a new discussion in the Reports category.
This helps keep our Issues focused on bugs and features.
Thanks for being a good human 💙
— LebCit
Aether CMS - Content in Motion. Powered by simplicity.