The Most Beautiful CMS - A metadata-driven, zero-duplicate-code content management system
Project description
Focomy
The Most Beautiful CMS - A metadata-driven, zero-duplicate-code content management system.
Features
- Metadata-Driven: Define content types in YAML, no code changes needed
- Zero Duplicate Code: One EntityService handles all content types
- First-Class Relations: Many-to-many, many-to-one, self-referential
- Built-in SEO: JSON-LD, OGP, Twitter Cards, Sitemap, RSS/Atom feeds
- Modern Stack: FastAPI, PostgreSQL, HTMX, Editor.js
- Security First: HSTS, CSP, CSRF protection, rate limiting
Quick Start
Using pip
pip install focomy
focomy init mysite
cd mysite
focomy serve
Using Docker
git clone https://github.com/focomy/focomy.git
cd focomy
docker-compose up -d
Open http://localhost:8000/admin
Installation
Requirements
- Python 3.10+
- PostgreSQL 13+
From PyPI
pip install focomy
# With Redis support (for caching/sessions)
pip install focomy[redis]
From Source
git clone https://github.com/focomy/focomy.git
cd focomy
pip install -e .
CLI Commands
# Initialize a new site
focomy init mysite
# Start development server
focomy serve --port 8000
# Run database migrations
focomy migrate
# Validate content type definitions
focomy validate
# Check for updates
focomy update --check
# Update to latest version
focomy update
Configuration
config.yaml
site:
name: "My Site"
url: "https://example.com"
language: "ja"
security:
secret_key: "your-secret-key"
Content Types
Define in content_types/*.yaml:
name: post
label: Post
fields:
- name: title
type: string
required: true
- name: body
type: blocks
- name: status
type: select
options: [draft, published]
Deployment
Railway
Render
Docker Compose
docker-compose up -d
Documentation
License
MIT License - see LICENSE for details.
Contributing
Contributions welcome! Please read our Contributing Guide.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file focomy-0.1.0.tar.gz.
File metadata
- Download URL: focomy-0.1.0.tar.gz
- Upload date:
- Size: 271.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7144aca4f6db026c16efa049b7213b97c0e5b548ece23772e7c38e7dcd6adbc
|
|
| MD5 |
d8841d26e217e838a5acfac8d574287c
|
|
| BLAKE2b-256 |
7aaa22d37dfe31945003a7a52304e04c54f898711318a028444c3ce564334ea4
|
File details
Details for the file focomy-0.1.0-py3-none-any.whl.
File metadata
- Download URL: focomy-0.1.0-py3-none-any.whl
- Upload date:
- Size: 308.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
593d52cd92a07a517a1da0bf6d6cb8ec937f701f36ffebabb21f6036cd5feac4
|
|
| MD5 |
f26f1753114c0b40499ccf40058f39af
|
|
| BLAKE2b-256 |
0f4a7bb9a76e1d252db4e157b0a91737b86205492130c722c905a6b4d621a1ce
|