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

Overview

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.3 or greater (using Linux or macOS is recommended).

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

Please note that the currently recommended Swift version is: Swift 5.4

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_AUTH_MIDDLEWARE=true

# Database related env variables

# Available database types: sqlite (default) / mysql / postgres
DB_TYPE="mysql" 
DB_HOST="127.0.0.1"
DB_USER="feather"
DB_PASS="feather"
DB_NAME="feather"
# Default port numbers: mysql - 3306 / postgres - 5432
DB_PORT=3306 

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

  • ⚠️ Warning: DO NOT USE the swift package generate-xcodeproj command, it's deprecated.
  • ⚠️ Make sure that you open the project by double clicking the Package.swift file.
  • ⚠️ Set the custom working directory for the Feather scheme to the root of the project directory.
  • ⚠️ If needed setup a post-action script to automatically shut-down previous server instances (to avoid address in use errors).
  • Build and run the project as usual and enjoy your Feather powered site.

Docker support

Feather is also available on DockerHub, you can use the following command to pull the latest version.

docker pull feathercms/feathercms:latest

You can also build your own images using docker-compose for more information check the following wiki page

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 a "system install" mode.

During this phase (behind the scenes):

  • all the required database structures will be created (database migration will run automatically).
  • Bundled resources (public files and templates) will be copied to the project folder (if needed).
  • All the necesseary models will be installed (persisted) using the configured database driver.
  • All the required assets will be uploaded to the file storage (using the configured storage driver).
  • The "root" user account will be created, you have to provide yor own credentials during this step.
  • Sample content for the blog module will be created (you can opt-out from this).
  • You'll be redirected to the welcome page.

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

User guide

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

Custom templates

You can create your very own stylesheet by overriding the files inside the Public folder.

It is also possible to create custom theme for Feather by altering the templates inside the Resources/Templates/Default folder.

⚠️ Keep in mind that these files are ignored from the git repository by default.

👻 You might want to change this behavior by updating your .gitignore file.

⭐️ If you delete a file from these folders the next time you run Feather it'll be restored automatically.

You can also add your own template directory and use that instead of the Default one, you can configure this using the Settings admin menu.

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.

Credits

You might also like...
Swift backend / server framework (Pure Swift, Supports Linux)

NetworkObjects NetworkObjects is a #PureSwift backend. This framework compiles for OS X, iOS and Linux and serves as the foundation for building power

Simple server APIs in Swift

Simple server APIs in Swift

Tiny http server engine written in Swift programming language.

What is Swifter? Tiny http server engine written in Swift programming language. Branches * stable - lands on CocoaPods and others. Supports the latest

Swift HTTP server using the pre-fork worker model

Curassow Curassow is a Swift Nest HTTP Server. It uses the pre-fork worker model and it's similar to Python's Gunicorn and Ruby's Unicorn. It exposes

💧 A server-side Swift HTTP web framework.
💧 A server-side Swift HTTP web framework.

Vapor is an HTTP web framework for Swift. It provides a beautifully expressive and easy-to-use foundation for your next website, API, or cloud project

Sinatra-like DSL for developing web apps in Swift

Swiftra Swiftra is a library that provides DSLs like Sinatra. System Requirements DEVELOPMENT-SNAPSHOT-2016-02-08-a Example See swiftra-example. impor

A minimal, fast and unopinionated web framework for Swift

![Fire Image] (http://i.imgur.com/1qR6Nl4.png) Blackfire An extremely fast Swift web framework 🔥 Getting Started If you're familiar with express.js t

HTTP Implementation for Swift on Linux and Mac OS X

Swift HTTP Server Simple HTTP implementation for Swift using POSIX socket API. Running on Mac OS X and Linux. For Mac users: You can install new Swift

libuv base Swift web HTTP server framework

Notice Trevi now open a Trevi Community. Yoseob/Trevi project split up into respective Trevi, lime, middlewares and sys packages at our community. If

Owner
Phu Huynh
iOS and FileMaker Engineer.
Phu Huynh
GCDWebServer is a modern and lightweight GCD based HTTP 1.1 server designed to be embedded in iOS, macOS & tvOS apps.

GCDWebServer is a modern and lightweight GCD based HTTP 1.1 server designed to be embedded in iOS, macOS & tvOS apps. It was written from scr

Pierre-Olivier Latour 6.3k Dec 27, 2022
Auto Migration generation for Vapor projects

AutoMigrator A package that generates version based migrations from Fluent.Model types. The project will check your database scheme and understand whe

Mats Eikeland Mollestad 9 Jun 18, 2022
A template to get vapor working on Google App Engine

Swift Vapor App Engine This is a template to get vapor working on Google App Engine. Really all that's special is that it has a Dockerfile (included w

Michael 2 Oct 10, 2022
Test project to reproduce a lockup in Vapor

Test project to reproduce a lockup in Vapor The issue was first observed when backing up the SPI database during operation. Running pg_dump would caus

Sven A. Schmidt 1 Dec 30, 2021
PillowTalk - An iOS & SwiftUI server monitor tool for linux based machines using remote proc file system with script execution.

An iOS & SwiftUI server monitor tool for linux based machines using remote proc file system with script execution.

Lakr Aream 416 Dec 16, 2022
Lightweight library for web server applications in Swift on macOS and Linux powered by coroutines.

Why Zewo? • Support • Community • Contributing Zewo Zewo is a lightweight library for web applications in Swift. What sets Zewo apart? Zewo is not a w

Zewo 1.9k Dec 22, 2022
High Performance (nearly)100% Swift Web server supporting dynamic content.

Dynamo - Dynamic Swift Web Server Starting this project the intention was to code the simplest possible Web Server entirely in Swift. Unfortunately I

John Holdsworth 68 Jul 25, 2022
A job system for Swift backends.

Jobs A minimalistic job system in Swift, for Swift Table of Contents Getting started Intervals Syntax candy Starting a job Stopping a job Error handli

Brett R. Toomey 289 Oct 12, 2022
Server-side Swift. The Perfect core toolset and framework for Swift Developers. (For mobile back-end development, website and API development, and more…)

Perfect: Server-Side Swift 简体中文 Perfect: Server-Side Swift Perfect is a complete and powerful toolbox, framework, and application server for Linux, iO

PerfectlySoft Inc. 13.9k Dec 29, 2022
Swift Express is a simple, yet unopinionated web application server written in Swift

Documentation <h5 align="right"><a href="http://demo.swiftexpress.io/">Live ?? server running Demo <img src="https://cdn0.iconfinder.com/data/icons/

Crossroad Labs 850 Dec 2, 2022