Safis CMS connects to a Git repository and manages its content using GraphQL and a user friendly UI (coming soon...).
Create custom content types for your application by defining their structure and adding validations for each individual field.
Safis CMS uses GitHub OAuth Apps as default authenticatication and authorization method to use your repositories and manage your content.
Safis CMS includes a GraphQL API that will help you read, manage and deliver your content through a flexible schema that will be dynamically updated based on the existing content types.
A web application designed for both content and development teams.
All of your content will be saved directly into your destination git repository.
In order for you to use Safis CMS packages you will need to meet the following requirements:
-
A GitHub personal access token that has the
repo
scope selected. -
A GitHub OAuth App so you can provide its
Client ID
andClient secret
in order to authenticate to GitHub and perform git operations on your behalf.
To see the full list of requirements please visit our requirements section.
We will use environment variables in this example to configure our safis-cms-server
.
Please see our configuration section to know more about how to configure you local environment.
$ npm install safis-cms-server
For this example, we will also be using the
dotenv
npm package.
Create and start a server using the safis-cms-server
npm package:
import { createServer } from 'safis-cms-server'
import dotenv from 'dotenv'
dotenv.config()
const PORT = process.env.PORT || 3000
const enablePlayground = process.env.ENABLE_GRAPHQL_PLAYGROUND === undefined
|| process.env.ENABLE_GRAPHQL_PLAYGROUND === 'true'
const configs = {
cookieSecret: process.env.COOKIE_SECRET,
git: {
ownerSecret: process.env.GIT_OWNER_SECRET,
owner: process.env.GIT_OWNER,
repo: process.env.GIT_REPO,
visibility: process.env.GIT_REPO_VISIBILITY,
defaultBranch: process.env.GIT_DEFAULT_BRANCH,
paths: {
root: process.env.GIT_ROOT_FOLDER,
contentTypes: process.env.GIT_CONTENT_TYPES_FOLDER,
content: process.env.GIT_CONTENT_FOLDER,
},
},
logger: true,
oatuhCallback: process.env.OAUTH_CALLBACK_URL,
oauthClientId: process.env.GIT_OAUTH_CLIENT_ID,
oauthClientSecret: process.env.GIT_OAUTH_CLIENT_SECRET,
oauthScope: process.env.GIT_OAUTH_SCOPE?.split(','),
oauthLogin: process.env.OAUTH_LOGIN_URL,
enablePlayground,
}
const server = createServer(configs) // creates a Fastify server
server.listen(PORT, (err) => {
if (err) {
server.log.error(`Failed to start Server: ${JSON.stringify(err)}`)
process.exit(1)
}
server.log.info(`Server running on port ${PORT}`)
})
You can additionally add a client to your server so you can manage your content through a more user friendly interface. Coming soon...
This repository is a monorepo managed using Lerna. This means there are multiple packages managed in this codebase, even though we publish them to NPM as separate packages.
New contributors are always welcome! Check out our Contributing Guide to get involved.
Safis CMS is released under the MIT License.