[Beta] [Needs Testing] Pico CMS for Nextcloud v1.0.0

Hi everyone,

it’s time to give word about some new developments - in its true sense. In the last couple of months I was working on Pico CMS for Nextcloud v1.0.0 - something between a total refactoring and a partial rewrite from scratch. Anyways, we’re very close to the app’s first stable release! :partying_face: :confetti_ball: :tada:

Pico CMS for Nextcloud v1.0.0 solves all known (at least to me) major issues with the cms_pico app. It utilizes Pico v2.1 and Pico CMS for Nextcloud will be officially supported by Pico in the future (Hi everyone, I’m Pico’s lead developer :v:). @Cult did an amazing job with cms_pico - but priorities change, so it’s about time to help him out… :hugs:

As you’ve likely guessed already we’re looking for testers. We’re planning to release Pico CMS for Nextcloud v1.0.0 within the next one or two weeks, feedback is highly appreciated :heavy_heart_exclamation:

If you’re a developer, we’re also looking forward to your code review - you can find all changes in nextcloud/cms_pico#77 :+1:

If you find any issues or want to give feedback, you can either open a new Issue on GitHub, reply to nextcloud/cms_pico#77 or simply reply to this thread. If you wanna do a code review, please use GitHub’s review feature from within nextcloud/cms_pico#77.

We’re looking forward to your feedback and reviews! Thank you! :heart:


Welcome @PhrozenByte !

1 Like

account from @PhrozenByte seems limited (first post ?), this is the rest of his message

Installation and Upgrading

Pico CMS for Nextcloud v1.0.0 isn’t in the app store yet (it requires testing after all :laughing:), requiring testers to take some extra steps, like checking file permissions (something Nextcloud would take care of when being installed via the app store). It’s super easy nevertheless :+1:

If you’re currently running cms_pico v0.9.8, you can safely upgrade to Pico CMS for Nextcloud v1.0.0. Nextcloud’s web-based updater will do the job and will not delete any of your websites… :relieved: The current beta is supposed to be pretty stable, but anyways, this is a beta release, so please don’t use it in production… :wink:

Pico CMS for Nextcloud v1.0.0 requires Nextcloud 14, 15 or 16. The app also supports the current beta of Nextcloud 17. The beta only supports German and English localization (without any question we’ll support more after the stable release).

  1. Download Pico CMS for Nextcloud’s release archive from cms_pico-1.0.0-beta.1.tar.gz (Click here to download!) and extract the archive (try tar xz cms_pico-1.0.0-beta.1.tar.gz in a shell or use your favorite archive app).

  2. Move resp. upload the included cms_pico folder to the apps/ folder of your Nextcloud instance (given you’ve installed Nextcloud to /var/www/html/nextcloud, this is going to be /var/www/html/nextcloud/apps/).

    If you’re currently running cms_pico v0.9.8 you can simply remove the existing cms_pico folder beforehand and replace it by the new cms_pico folder. You don’t have to disable the app first, Nextcloud will automatically perform a web-based update.

  3. You can now try whether enabling the app in Nextcloud’s apps management interface works. It should. You can then open the “Pico CMS” admin and personal sections below Settings.

    If you receive an "The webserver has no permission to create files and folders" error… (Click here to expand!)

    Make sure that your webserver has write permissions on the app’s appdata_public/ (e.g. /var/www/html/nextcloud/apps/cms_pico/appdata_public/) directory. You can ensure this by matching the permissions (owner, group and permissions) of Nextcloud’s data/ (e.g. /var/www/html/nextcloud/data/) directory.

    To do so, open a shell, navigate to Nextcloud’s install directory (e.g. /var/www/html/nextcloud) and run the following:

    $ chown --reference=data apps/cms_pico/appdata_public
    $ chmod --reference=data apps/cms_pico/appdata_public

    If you don’t have shell access, but FTP access to your webserver, try changing file permissions using your favorite FTP app. Most of the time you can simply right click on the folder (it’s apps/cms_pico/appdata_public/), choose “File permissions” or “Properties” and change the owner, group and permissions of the folder there. If your FTP app asks you whether you want to apply the same to all containing files and folders, hit “Yes”. If your FTP app doesn’t ask you this question, make sure that all containing files and folders have the same file permissions - if not, you’ll have to fix them, too.


But how does all of this look like? Simply click on the sections below to view some screenshots of Pico CMS for Nextcloud v1.0.0 :wave:

Example website

Example website

List websites

List websites

Create website

Create website

Custom themes, plugins and templates

Custom themes, plugins and templates

Webserver config

Webserver config

About Pico CMS for Nextcloud

Pico CMS for Nextcloud combines the power of Pico and Nextcloud to create simple, secure, shareable and amazingly powerful websites with just a few clicks. Pico is a stupidly simple, blazing fast, flat file CMS - making the web easy!

  • :notebook: Start a blog
  • :rocket: Share your resume with the world
  • :smiling_imp: Create a plan for world domination and only share with the right friends
  • :face_with_monocle: Build a knowledge base and let the smart ones among your colleagues help out

Installing Pico CMS for Nextcloud allows your users to create and manage their own websites. Creating a new page with Pico is no more than creating a simple text file in a users’ Nextcloud files. No config is required, no utterly complex management interfaces - just files. It’s the perfect match with Nextcloud. Secure Sharing, Collaboration, Access Control - not just for your files, but also your websites, all made possible by Pico CMS for Nextcloud! Breaking the boundaries between your Mobile & Desktop devices and your Server.

Websites will be accessible through URLs like https://cloud.example.com/sites/my_site/ and consist of just a bunch of .md text files in a user’s Nextcloud files. .md stands for Markdown - a super simple and intuitive markup to create headings, paragraphs, text formatting, lists, images and links. But don’t despair - you don’t have to learn yet another language if you don’t want to. Consider enabling Nextcloud’s Text or Markdown Editor apps to make easy things stupidly simple. But what about meta data like a page’s title or release date? Guess right, it’s all in one place. At the top of your Markdown files you can place a block with such meta data - called the YAML Front Matter. Creating websites can’t be easier…

But that wasn’t everything… Pico CMS for Nextcloud is highly customizable. You can change Pico’s appearance by using custom themes and add new functionality by using custom plugins. For security reasons users can neither add custom themes nor plugins on their own - but as an admin you can. Plugins and themes aren’t just new “skins” or “widgets”, the underlying technologies are powerful frameworks you can leverage to make your users’ websites truly unique. However, with great power comes great responsibility. Pico CMS for Nextcloud does its best to prevent users from including scripts into websites, since this might bear security risks (so called “Cross Scripting”). Since this risk doesn’t apply to Pico itself, 3rd-party developers of plugins and themes might not be aware of this issue - so be careful when installing custom plugins and themes.

You want to learn more about Pico CMS for Nextcloud? Easy! Just download and enable the app from Nextcloud’s App Store and create your first personal website using the “sample_pico” template. Pico’s sample contents will explain all you need to know… :wave:


i would love pico being as easy to setup as version 1.0 sounds promising! :+1:

Hi @PhrozenByte

A huge welcome to the community and an even bigger Thank you for working on this app!
I’ve been waiting for so long for the work on this to continue and I am so glad and exited it is finally happening.

I really hope this feature will be available in the reworked app:


A big HI to you @PhrozenByte, another guy here waiting for a while for an issue to be fixed (custom themes btw). Thanx to you and @Cult for all your work, can not wait to give 1.0 a testride probably next week, even before official release. As soon as i have it running i will tell you what to look out for, to see me taking over the world using my raspberry pi 2b and pico on nextcloud… :wink:

1 Like

Followed these instructions. I can confirm the upgrade worked

Question: what am I doing wrong/why is it so?
config.yml needs to be beneath var/www/html/appdata_ocvw3gjxp4ow/cms_pico/config

themes need to be underneath /var/www/html/apps/cms_pico/appdata_public/themes/ryy2Rx8U9G/default

Actually I do not understand why I have

(I did the manual upgrade by unpacking the tar…)

Thanks for your effort!!!

I guess you rather mean /html/data/appdata_ocvw3gjxp4ow/cms_pico.

Everything’s right here and how it is supposed to be. The /html/data/appdata_ocvw3gjxp4ow/cms_pico folder is a persistent storage but not accessible via webbrowser, thus we need /html/apps/cms_pico/appdata_public that is the exact opposite - not persistent, but accessible. The app takes care of everything, you just need to know about the /html/data/appdata_ocvw3gjxp4ow/cms_pico folder.

Thanks for the fast answer - yes - appdata_ocvw3gjxp4ow in /html/data/ - right - sorry!

Thanks for shedding a light on this.

“The app takes care of everything” - I did understand that for the “blog feature” I would have to copy/manipulate index.twigg - that’s why I was asking - I find index.twig in these locations:


but apparently only the second one is the one to be used…

Hello PhrozenByte,

Thank you very much for your work !!!

I do not understand everything sorry … Did Daita integrate your work into his application? or nothing at all?

How to find the latest stable version of your work, please?

Thanks again,

@WarpinWolf Never overwrite any files below apps/cms_pico, all your changes will be lost as soon as the app is updated. If you want to edit index.twig, you basically want to create a own theme based on Pico’s default theme. Simply copy apps/cms_pico/appdata/themes/default to data/appdata_ocvw3gjxp4ow/cms_pico/themes/my-theme, make all changes you want and enable your new theme using the app’s admin interface. data/appdata_ocvw3gjxp4ow/cms_pico/themes/default can be deleted - it’s a leftover from the upgrade.

@ludovicis @Cult (named daita on GitHub) is the original author of this app. I took over development. You can find the install instructions in the first two posts of this thread.

1 Like

I can place many *.md files in the content folder beside the index.md and they are show correctly. But when I place them in the sub-folder only the index-file is shown. Other md-files placed there does not. Is that intended?

This is expected behavior, the navigation shows pages on the first navigation level only. How these pages are supposed to be shown (e.g. as a blog) depends on the theme you use. You can install custom themes using the app’s admin interface. You’ll find a selection of officially promoted 3rd-party themes on http://picocms.org/themes/ and a even bigger list of more 3rd-party themes on https://github.com/picocms/Pico/wiki/Pico-Themes

1 Like

Good things need time: The second beta of Pico CMS for Nextcloud is out now! :partying_face: :confetti_ball: :tada:

Pico CMS for Nextcloud v1.0.0-beta.2 utilizes Pico v2.1.0-beta.1 (bringing Pico 2.1 in beta was the reason why this took longer than expected initially).

Again we’re looking for testers, feedback is highly appreciated :heavy_heart_exclamation: I’m assuming Pico CMS for Nextcloud to be stable and ready for production, the second beta is just a way to make things bullet-proof. Pico CMS for Nextcloud v1.0.0 will be released on 24th November 2019 (unless bad things happen in the next two weeks, but I doubt that).

If you’re a developer, we’re also looking forward to your code review - you can find all changes in nextcloud/cms_pico#77 :+1:

If you find any issues or want to give feedback, you can either open a new Issue on GitHub , reply to nextcloud/cms_pico#77 or simply reply to this thread. If you wanna do a code review, please use GitHub’s review feature from within nextcloud/cms_pico#77.

We’re looking forward to your feedback and reviews! Thank you! :heart:


You can download Pico CMS for Nextcloud’s release archive from here:

:arrow_right: cms_pico-1.0.0-beta.2.tar.gz (Click here to download!) :arrow_left:

Heads up! If you’re currently running Pico CMS for Nextcloud v1.0.0-beta.1 you MUST check the “I’m running v1.0.0-beta.1 right now” section below before upgrading. This is also true when upgrading to v1.0.0 later - you’ll break your installation otherwise!

Installation and Upgrading

Just refer to the “Installation and Upgrading” section above for install instructions, you just have to use the tarball of the second beta instead :ok_hand:

However, if you’re currently running v1.0.0-beta.1, you MUST check the section below first!

I’m running v1.0.0-beta.1 right now

There’s an issue with the first beta that will make the upgrade fail - no matter to which version you upgrade (i.e. doesn’t matter whether v1.0.0-beta.2 or v1.0.0). Even worse, if you’re currently running v1.0.0-beta.1, a later stable release of Pico CMS for Nextcloud won’t show up in your Nextcloud.

All this happens because v1.0.0-beta.1 is falsely identifying itself as v1.0.0. This is impossible to fix without upgrading to an intermediate version - like v1.0.0-beta.2. For this reason :exclamation: you MUST upgrade to v1.0.0-beta.2 first :exclamation: Naturally we added a security measure to the build script to prevent stupid errors like this in the future… :unamused:

Okay, now you know what’s going on, head over to the upgrade instructions.


Hm - probably my fault, but replacing the apps/pico_cms with beta2 triggers a web-based update which in turn delivers:
Doctrine\DBAL\Exception\InvalidFieldNameException: An exception occurred while executing 'UPDATE "oc_cms_pico_websites" w SET "w"."theme" = ?, "w"."type" = ?, "w"."options" = ? WHERE "w"."id" = ?' with params ["default", 1, "[]", 2]: SQLSTATE[42703]: Undefined column: 7 FEHLER: Spalte »w« von Relation »oc_cms_pico_websites« existiert nicht LINE 1: UPDATE "oc_cms_pico_websites" w SET "w"."theme" = $1, "w"."t... ^

I originally had Nextcloud 16, did upgrade to 17 (although it did complain about CMS Pico not being supported). CMS Pico did work fine afterwards. I was reading about the necessity to first upgrade to beta2 - so I was doing it… wget, tar, mv, chmod, chown

Any suggestion?

Fully detail (let me know if you need translation)
Update vorbereiten

Log-Level auf "debug" gesetzt

Wartungsmodus eingeschaltet

Reparaturschritt: Repair MySQL collation

Reparaturinformation: Not a mysql database -> nothing to do

Reparaturschritt: Repair SQLite autoincrement

Reparaturschritt: Copy data from accounts table when migrating from ownCloud

Reparaturschritt: Drop account terms table when migrating from ownCloud

Das Datenbankschema wird aktualisiert

Datenbank aktualisiert

Doctrine\DBAL\Exception\InvalidFieldNameException: An exception occurred while executing 'UPDATE "oc_cms_pico_websites" w SET "w"."theme" = ?, "w"."type" = ?, "w"."options" = ? WHERE "w"."id" = ?' with params ["default", 1, "[]", 2]: SQLSTATE[42703]: Undefined column: 7 FEHLER: Spalte »w« von Relation »oc_cms_pico_websites« existiert nicht LINE 1: UPDATE "oc_cms_pico_websites" w SET "w"."theme" = $1, "w"."t... ^

Hmmm - apparently something is going wrong here. The Postgresql Documentention (https://www.postgresql.org/docs/current/sql-update.html) says:
The name of a column in the table named by *'table_name'* . The column name can be qualified with a subfield name or array subscript, if needed. Do not include the table's name in the specification of a target column — for example, 'UPDATE table_name SET table_name.col = 1' is invalid.

I did change lib/Migration/Version010000From000908.php - removing the “w.”'s to:

    private function migratePrivateWebsites(array $themesMigrationMap)
                $qbUpdate = $this->databaseConnection->getQueryBuilder();
                    ->set('theme', $qbUpdate->createParameter('theme'))
                    ->set('type', $qbUpdate->createParameter('type'))
                    ->set('options', $qbUpdate->createParameter('options'))
                    ->where($qbUpdate->expr()->eq('id', $qbUpdate->createParameter('id')));

            $selectCursor = $this->databaseConnection->getQueryBuilder()
                    ->select('id', 'site', 'theme', 'type', 'options')

Now migration went through…

This is rather weird… No idea why PostgreSQL has an issue with this, it definitely supports table aliases. Furthermore Doctrine should take care of this, but doesn’t for some reason. Anyway, since we don’t need those aliases, I simply removed them, just like you did in the provided snippet. Thanks for your report!

Version 1.0 in the app store! Awesome!

A post was split to a new topic: Pico CMS for Nextcloud 1.0.0