FeatherCMS / feather

Feather is a modern Swift-based content management system powered by Vapor 4.
https://feathercms.com
MIT License
597 stars 55 forks source link
api async-await blogging cms engine feather framework journalism publishing swift swift-5 swift-5-5 swift-html vapor-4 web

⚠️⚠️⚠️ Under construction ⚠️⚠️⚠️

Feather CMS is currently under construction, just a few things about the new version:

Feather CMS

Feather CMS 🪶

🪶 Feather is a modern Swift-based content management system powered by Vapor 4.

💬 Click to join the chat on Discord.

Requirements

To use Feather you'll have to install Swift 5.5 or greater.

If you need help installing Swift, you should follow the official instructions available on swift.org.

Setup & environment

Clone or download the source files using the Feather repository.

git clone https://github.com/FeatherCMS/feather.git

Change the current working directory (located under the target setting when using Xcode) to the project directory.

cd feather

Create a dotenv file ( .env or .env.development) based on your environment) and config the following values.

# the base path (absolute) of the working directory
FEATHER_WORK_DIR="/path/to/feather/" 

# Optional Feather related env variables

# the hostname (domain) of your web server, default localhost
FEATHER_HOSTNAME=feathercms.com
# the port to listen on, default 8080
FEATHER_PORT=80
# use HTTPS, default false (needs cert & key setup on the Vapor app)
FEATHER_HTTPS=true
# maximum body size for file uploads
FEATHER_MAX_BODY_SIZE=10mb
# disable file middleware, default false (if disabled you can serve files with nginx)
FEATHER_DISABLE_FILE_MIDDLEWARE=true
# disable the session auth middleware for api endpoints (recommended for production)
FEATHER_DISABLE_API_SESSION_MIDDLEWARE=true

You can run the make env command to quickly create a development environment with the curret directory as a base path.

Start the server using the swift run Feather command (alternatively you can use the make run command).

Notes about using Xcode

Configuration

The FeatherCore framework provides all the necessary API to configure your Feather application.

Database driver

By default Feather uses the SQLite driver, but it is possible to use PostgreSQL, MySQL (MariaDB) or even MongoDB as your database driver through the Fluent framework.

You should follow the instructions using the official Vapor docs to setup the right driver, but please note that the preferred drivers are PosgreSQL and SQLite for really small projects and development purposes.

File storage driver

The Liquid framework is an abstract file storage library that works with a local file storage driver, but it is also possible to use Amazon S3 as a cloud-based solution.

You can replace the default local driver with the S3 driver, which is powered by the Soto for AWS SDK.

Modules

Feather is a modular CMS system, you can add new modules as Swift package dependencies or place them under the Modules directory.

Feather gives you just a few core modules, they provide basic functionalies such as the route system, web frontend, admin interface or API layer.

The usage of other modules can be completely customized (just alter the SPM dependency & configuration file).

💡 Feel free to fork this repository and create your own configuration as per needed.

Using Feather CMS

Installation

The first time when you open your page Feather will run in install mode.

During this phase (behind the scenes):

Now you are ready to use your Feather-based website.

User guide

You can read more about how to use Feather in the wiki.

Contribution and support

🪶 Feather is an open source software and your contributions are more than welcome.

🔀 If you wish to make a change, please open a Pull Request.

🙏 Please don't hesitate to send your feedbacks, thoughts and ideas about Feather.

Address already in use error

You can use the following command to kill the process listening on the 8080 port.

lsof -i :8080 -sTCP:LISTEN |awk 'NR > 1 {print $2}'|xargs kill -15

Tip: when using Xcode, edit the scheme and add this as a pre-action script.

Credits