Boosting community app development

Hello developers,
Nice to e-meet you, my name is Daphne, I work for Nextcloud. In the upcoming year, I am going to try if we can give a boost to community app development and get more apps in the app store.

What motivates you to create apps?
What are your main blockers to get your apps published to the app store?
What really slowed you down when you just started developing Nextcloud apps?

Of course there are a lot of things that can be done, please be patient with me and I won’t be able to do everything, but I would really like to understand your perspectives.

Many thanks for your input!

9 Likes

So I’ve Tinkered with a few apps but never finished them because I was never able to reach a usable state because of my inability to figure out how to implement relatively simple features. I have an itch to scratch, there are a few things I would like to see in Nextcloud and wouldn’t mind sharing with others.

There appears to be no how-to tutorials it’s either hello world or go look at this complicated code-base. If you want new, not particularly experienced people to start working on apps and become experienced, there needs to be more work put into showing how that can actually be achieved and what best practices should be followed. I shouldn’t be re-inventing the wheel for tasks that are relatively common across apps, but that is what it feels like I had to to.

TL;DR My general opinion on the development documentation is it’s not particularly great and assumes you already know how everything works.

4 Likes

@dugite-code thanks a lot for your elaborate reply. I also totally agree with you on all your points.
What features did you try to implement that you got stuck on?
What kind of how to tutorials would you like to see?

Some discussions from the past:

1 Like

How about a separate section dedicated to mobile apps in the app store?

5 Likes

Shared from Reddit. DIscussion is on-going there.

tmjaea 23 points 18 hours ago
My serious advice to nextcloud after submitting a bug: Maybe teach the existing devs to behave in a respectful manner and treat other human beings with respect. If I were to work at nextcloud and would see how people reporting bugs are treated by my future colleagues, I would really have to think twice if that are the people I want to work with.

msic 0 points 14 hours ago
Respectful how? I’m not a dev, but curious to hear what you mean with actual examples.

tmjaea 3 points 6 hours ago
Attachments not visible for some mails. · Issue #4758 · nextcloud/mail · GitHub

lihaarp 16 points 17 hours ago
And for gods sake, reign in that stale bot!
Stale bots are bad and discourage contribution.

[–]lihaarp 1 point 3 hours ago
Don’t let stalebot carpetbomb issues, use tags. When a maintainer has looked at an issue that still needs additional info from the reporter, he sets a needsinfo tag. Automatically clear the tag when an user replies. The stale bot may only close issues that had this tag for more than x weeks. It’s not perfect but should avoid false positives.

[–]fermulator 10 points 12 hours ago
disable it - if an issue is reported there’s an issue
i had the bot try to mark my ticket as stale when there was an OPEN PR against it! really silly
only humans have the necessary context to determine if an issue should be closed or not
perhaps there could be more intelligent criteria for it, examples 1) if an issue is “/stale” (3 months?) and a human triaged and labelled as “not enough info” and the author hasn’t replied ever 2) if a human triaged as “backlog” and priority is “low” and there are less than 5 votes
etc

Developer response on stalebot

As one of the app developers that uses stalebot largely my opinion is this: if nobody bothered to do anything with an issue for a long time, it’s not an issue, it’s a minor annoyance and people can live with it.
Let me just comment on this.
i had the bot try to mark my ticket as stale when there was an OPEN PR against it! really silly
So there was a resolution and the issue wasn’t needed anymore then.
perhaps there could be more intelligent criteria for it, examples
That depends on the way it’s set up by the maintainers. For there are labels you can define to avoid stalebot closing issues.

dugite-code 9 points 11 hours ago
Anyone who has tried creating an app for Nextcloud would have quickly discover the Development documentation is quite lacking. Not to mention there is a complete lack of any easy to follow how-to tutorials to get you comfortable with development.
There are a bunch of common things needed for apps that could be easily demonstrated by a knowledgeable dev in a step-by-step manner that would fast track a majority of applications. Just look at this list, most of them are not unusual and it should be easy to just point someone somewhere to get the answer or at least the start of an answer.

[–]highedutechsup 1 point 8 minutes ago
How about encouraging old developers to keep up with the ever changing version numbers… or implement a system that works regardless of nextcloud version.

2 Likes

@just Thank you so much for taking the time to pull those reddit posts together!!

Also ended up on IRC and Matrix. Would be worth sharing the link to Mastodon if anyone is on there @JimmyKater

1 Like

Might be worth just checking the issue list of the documentation:

and even some pull requests:
https://github.com/nextcloud/documentation/pulls?q=is%3Apr+is%3Aopen+label%3A"manual%3A+developer"

Even here on the forum, if you have to wait 6 month for a response (\OC_User::getDisplayName($userId) deprecated/ remove), missed follow up answers (Nextcloud Event Debugging), no answer (Change user language from app controller).

If the documentation is great and there is some timely feedback on development questions, you will at least not discourage interested developers.

2 Likes

Which link exactly? @just

This discussion topic (as a shared link) :slight_smile: if you will

Hello Daphne :slight_smile:

I’m Baptiste, alias zak39, and I’m a developer at Arawa.

We have created the Workspace app which is a plug-in for the Groupfolders app.

You can look up the GitHub repository with a presentation on its working : GitHub - arawa/workspace: Create shared workspaces and delegate management of their members and groups .

I don’t know if answer your question. But, I motivate to create Nextcloud apps to meet customer’s needs of my company.

But on the other side creating Nextcloud app, it’s to be able to create extensions for existing apps. For example, with our Workspace app for Groupfolders.

What motivate me to want to create a Nextcloud app, it’s if there is an important community and with who can share our skills, knowledge and so on.

Today, Frameworks and technos succeed in creating a community by doing :

  • Tutorial videos : How to do a CRUD (Create, Read, Update and Delete) on folders, users, files, the file’s path, and so on. Via API or API/REST. How to code the front-end side ? How to do the translating of Nextcloud apps or Nextcloud ?

  • A clear documentation and precise, like the Laravel’s documentation (Installation - Laravel - The PHP Framework For Web Artisans)

  • A discord server or equivalent (Mattermost, and so on.) : This allows for efficient exchange and mutual support with different channels. Today, we have Laravel, Vue, React, EsLint, Deno, etc. which use this kind of tool so that their devs and community devs can exchange each other.

  • In the case of Nextcloud, we could have for example, a channel on :

    • #dev-frontend : To exchange/help each other on the front-end (JS, Reat, Vue, CSS and so on.)
    • #dev-backend : Like for the front-end but on the PHP
    • #dev-ci : To exchange on our different CIs to have a quality app
    • #ux : To exchange on the UX-Design of Nextcloud and its apps

Regarding the point on the Documentation, I agree with @dugite-code . The Nextcloud Documentation (Nextcloud developer documentation — Nextcloud latest Developer Manual latest documentation) is really written for developers who already know how Nextcloud works.
It took me a while to find out where is the tutorial page is to start developing a Nextcloud app, how the admin and simple user system works (with the @NoAdminRequired annotation), how to create migration files (create database table), etc.

One more, Nextcloud uses Symfony and I think it’s very pity that as a developer of Nextcloud or an application for Nextcloud, we cannot use Doctrine to create migration files to create a databases or seed files to feed those tables to have a dataset. I have to feed the database manually from the interface of my app.

Another reason that motivates me to create apps for Nextcloud, it’s to be able to write pretty code in the same way that Laravel or Symfony.

What stops me from publishing my apps in the app store is first of all knowing how to do it ^^

Today, I don’t know how to publish my app. I know that it is normally possible to publish our app with the “make appstore” command after creating the skeleton of my app. But, this command doesn’t work, it just creates a .tar.gz archive for me.

This picks up on the points in the first question.

What slows me down in the creating of my Nextcloud app are :

  • The lack of clarity of the documentation (see the point of @dugite-code)

    • How to create migration files ? How to seed our database table ?
    • How does the system of admin and no-admin users work ?
    • How to limit access to apps to groups ?
    • How to use the debugger for Nextcloud whether it be for back-end or front-end code ?
    • Does it is a documentation on the API/REST of Nextcloud ? If yes, where is it ?
    • Etc.
    • The documentation, it’s very not readable and understanding. You really need to know how Nextcloud code works to read the documentation. I have the impression that there is a huge gap between the back-end documentation (Nextcloud developer documentation — Nextcloud latest Developer Manual latest documentation ) and the front-end documentation (https://nextcloud-vue-components.netlify.app/).
      The front-end documentation is clearer than back-end documentation.
  • Lacks a server Discord or equivalent (Mattermost, etc.) to exchange between the Nextcloud developers and / or its community dev

  • Lacks tutorial videos to understand how to work this or that library PHP for Nextcloud, how to work on the Front-End, etc.

  • Julius created a docker-compose that looks strong. But, very complicated to use so that we can work on it with Nextcloud in local : GitHub - juliushaertl/nextcloud-docker-dev: Nextcloud development environment using docker-compose . I had trouble getting it to work, to be able to work on my machine locally.
    So, I create my docker-compose simpler than Julius. But, probably less efficient than his own. It should be simplified or git some examples of commands to be able to use it and that serves as a basis for all developers.

Voilà, that’s it for me. I will not hesitate to edit my comment if I forgot a few points ^^

7 Likes

Hey :wave:

Thanks everyone for your feedback :+1:

We have a dedicated page for developers: Developer - Nextcloud

Did you know about it?

https://docs.nextcloud.com/server/latest/developer_manual/app_publishing_maintenance/publishing.html#getting-an-app-approved

Looking forward to meet your app in the apps store :v:

3 Likes

I certainly didn’t because it’s not linked in the apps store app developer dropdown, which was my first point of call and embarrassingly it was my last for Nextcloud owned sites as I assumed that would be the only place to find links. That’s a fair amount more resources than I have found before now through search engines which basically sent me to Github pages. Perhaps adding links to that page would be a good start?

@Daphne the reply by @z4k covers most of what I would have said.

3 Likes

Hi @kesselb :slight_smile:

Yes, I know. But, this page mostly returns to the documentation for developers. And, this documentation it’s very complicated to read and to understand :confused:

Yes, I already read and reread this morning. I exchange with Daphne via MP and I don’t understand why don’t you put the content of this documentation :point_right: App Developer Guide — nextcloudappstore 2.0.0 documentation here :point_right: App store publishing — Nextcloud latest Developer Manual latest documentation ?

I think I didn’t read this part, but we may miss this documentation easily.

One more, when I read this part of the documentation :

Therefore we require you to sign your app using a certificate.

I assume it’s not necessary to generate a certificate. But, when we register my app in the app store, it becomes necessary.

I found that the Ariadne’s thread of the documentation for developers is complicated to read and visibility.

Thanks !! :blush:
Our app it is workspace if you want look at on GitHub :wink:

1 Like

Thanks @dugite-code :wink:

1 Like

What motivates you to create apps?

I maintain two apps and have two very exciting ones in the pipeline, all of them were created from a personal need for the functionality and I try to generalize them so other people can profit from them.

What are your main blockers to get your apps published to the app store?

The process isn’t very easy to understand in the beginning, but once you get the hang of it, the signing and uploading process is manageable.

What really slowed you down when you just started developing Nextcloud apps?

Nextcloud has a strong backend API and great vue components for the frontend, but there is a missing link in the chain of the data flow.
There is no library to handle the collection of data from the backend to the frontend, it is all manual axios http calls.
If you want anything more than that, you need to abstract it away yourself.
This is in my opinion a missed opportunity, it would be an awesome time saver, if nextcloud had a library that could automatically map backend entities to frontend entities. As most nextcloud apps already use the vue ecosystem and vuex (which will need to be migrated to its sucessor Pinia) these frontend entities would ideally be mapped into Pinia ORM entities.
This could allow for FAR faster development in my opinion, as data structures could just be defined in the backend and automatically exist in the frontend.

Normally this might not be possible to implement, because the data of the entities in the backend travels through Mappers, Services and Controllers, but thankfully appinfo/routes.php definitions already have the concept of resources, which combine the index, show, create, update and destroy actions which would be all, that is necessary for basic backend entitites to frontend entities mapping.

This is the kind of thing only a fully fledged Ecosystem like nextcloud could deliver and it would open the door to MANY cool features, that are not only good for the developer experience, but also for the user experience.
For example: If many apps used the described library, it would be quite easy to implement a Offline First experience for the nextcloud platform, which would make read-only access to app content possible in the browser, while the device is offline and make content loading FAR faster while online, because at first the stored offline copy of data is presented until the newest online version is downloaded and the state is synchronized. This is clearly the way the web is heading (see any google product) and I would like to see nextcloud modernizing in this direction. All that would be neccessary to implement offline first for apps using the above described library would be the pinia persisted state, a Service Worker to cache static files and small modifications of the apps to disable elements that modify data while the data synchonizes or the device is offline.

I would also like to use the opportunity to answer a question, that wasn’t asked :smile: , which is what would make me consider moving my dev efforts from the nextcloud plattform to a different one.

One killer feature of an alternative open source plattform, that would make me switch to developing apps for it basically instantly is, if we could get away from data polling from the frontend.
I want to play with the cool new stuff, or in this case the cool new stuff from 12 years ago: Server Sent Events.

Polling is inefficient on traffic and takes up valuable resources on the backend and is a pain to implement, which is why quite a few nextcloud apps only update their data when a context is switched (calendar: deselecting a calender) or only on page reload (passwords app).
This also ties in to my earlier proposal for automatic entities in the frontend as the library could also listen for changes via a Server Sent Event Stream from the Backend (more complicated to implement, as the resources routes “trick” is not applicable).

SSE in nextcloud is not a new idea, it was partially implemented in 2021 (Broadcast to mercure (and fallback to polling) by ChristophWurst · Pull Request #27 · nextcloud/push · GitHub), but sadly (as far as i can tell) never finished and abandonned (nextcloud/push is archived and I could not find any information, if nextcloud/notify_push is meant to be it’s successor).
Collaboration is a huge feature for nextcloud, but sadly only the really big apps have the capabilities to implement it as Realtime Collaboration, often relying on external dependencies (such as the onlyoffice documentserver docker) for the realtime communication part over WebSockets or SSE. Built in SSE could make this available to many more apps.

Generally as a developer I would appreciate more architectual improvements to nextcloud. I know features are what customers are paying for, but the nextcloud architecture has to keep up with the time. I hope nextcloud gmbh can get around to more of them, but I know you are trying, as can be seen with stuff like the sync clients no longer having to poll and sync 2.0.

There have been recent advances in getting more programming languages in the nextcloud backend (MediaDC), but I don’t think these implementations can get generalized enough (like a whole framework for creating nextcloud apps with python / JS) without backing from the Nextcloud gmbh, so maybe you can allocate a few resources to that :slight_smile: .

Thanks for this opportunity to get these thoughts out there, I planned on creating a forum thread about them for months, but this is better :slight_smile:

4 Likes

It’s a good idea to link the dedicated page for developers in the app developer dropdown of the apps store. Thank you for sharing.

1 Like

Thank you so much for taking the time to share your thoughts with me, and learning more about what you think of the Nextcloud architecture. THANKS!! :slight_smile:

2 Likes

I think that’s a very important point to boost app development efforts: To have an “easy” to run development environment without the need to go through manual installation of all dependencies. I don’t think I’ve seen the nextcloud-docker-dev container mentioned anywhere in the documentation?!

I also like to mention @szaimen’s nextcloud-easy-test-container: GitHub - szaimen/nextcloud-easy-test: Nextcloud easy test instance. It’s intended to test different server branches with different app branches (in contrast to julius’s container where the focus is more on development and “bigger” setups). It greatly helps you to get things up and running to test.

4 Likes