Okay, It's me, the guy with the WIP screenshots, haha! While working on the StupidGreen, I realized that the the Customizer tool is too cool to be hardcoded into the SG site, also, it would be a shame to make any kind of a dashboard without making it available as a standalone package. So I started working on Sunday, a smooth publishing platform written in Nim.
I will do my best to steal ideas from WordPress, Ghost, Strapi, and Statamic. There will be a plugin system (dll/so/dylib), a theme system, user management and all the usual stuff you would expect from a CMS.
For the plugin system I will use PluginKit, for the theme system I will stick to Tim Engine. Everything here is unstable and in early development, but this is the best way to test the capabilities of these packages (+ other pkgs)
Currently, I'm working on the plugin management and the bridge between PluginKit and Sunday. Basically, plugins will be able to create database tables, add routes, dashboard pages, widgets (inject HTML/CSS/JS in the dashboard to predefined hooks) and ofc, add functionality to the frontend of the website. At the same time, uninstalling a plugin should unroll all the changes it made to the system, including database tables and routes. It's gonna be a fun ride!
Example of a concept plugin made with PluginKit for Sunday:
import pkg/[pluginkit, ozark]
# plugin devs should be able to import a special SDK provided by the Sunday core,
# that will give them access to core functions, models (to ref the main models like
# `Users` and `Posts` in their own database schemas), routes and so on.
# Something like `import pkg/sunday/sdk`
plugin medialibrary, {
name: "Media Library",
version: "0.1.0",
license: "MIT",
author: "George Lemon",
description: "A plugin that provides a fully-featured media library within the Sunday dashboard",
url: "https://github.com/getsunday/medialibrary-plugin",
permissions: {reqDatabase, reqFilesystem, reRoutes, reqEvents}
}:
onInit do:
serializeSchemas:
# compile-time SQL validation and all that juice
newModel MediaLibrary:
id {.pk.}: Serial
filename {.notnull.}: Varchar(255)
filepath {.notnull.}: Varchar(255)
author {.notnull.}: SundayCore(Users.id)
uploaded_at {.notnull.}: TimestampTz
newModel MediaPost:
id {.pk.}: Serial
media_id {.notnull.}: MediaLibrary.id
post_id {.notnull.}: SundayCore(Posts.id)
# bundle static assets (tim templates, css, js) with the plugin
staticReader getProjectPath().parentDir: {
"templates": "src" / "medialibrary" / "templates",
"readme.md": "README.md"
}
onActive do:
# a handler that runs when the plugin is activated
# ...
Some screenshots 😎




The repo 👉 https://github.com/openpeeps/sunday, I don't think you will be able to install it yet, you know me, it's gonna be a while until I have something functional. One thing is for sure, this year we will have a niiice-looking CMS built in Nim that will be easy to extend and customize even for non-developers.
The core will be licensed under AGPLv3, but for plugins and themes I want to allow closed-source plugins and themes as well. Maybe MIT for plugin/themes core API and then plugin/theme devs can choose whatever license they want for their own code?
Anyway, if you have any suggestions, ideas just let me know. Also if you have favorite CMSs and you want to bring some of their features to the table. 👑 Cheers!