@ -8,9 +8,9 @@ A framework for building convergent cross-platform Nextcloud clients using Flutt
The Neon project has three main goals:
The Neon project has three main goals:
1. The [Neon framwork](packages/neon/neon/) does the heavy lifting for Nextcloud client developers. Neon already handles the authentication flow and manages data requests and caching. This means that developers can reuse a lot of the code and do not need to reinvent the wheel.
1. The [Neon framework](packages/neon/neon) does the heavy lifting for Nextcloud client developers. Neon already handles the authentication flow and manages data requests and caching. This means that developers can reuse a lot of the code and do not need to reinvent the wheel.
2. The [Neon app](packages/app/) is a cross platform Nextcloud client that runs on iOS, Android, macOS, Windows, Linux and Web. We already support Android and Linux with the other platforms being work in progress.
2. The [Neon app](packages/app) is a cross-platform Nextcloud client that runs on iOS, Android, macOS, Windows, Linux and Web. We already support Android and Linux with the other platforms being work in progress.
3. The [Neon app](packages/app/) is a multi client app. This means that you can have multiple clients in the same mobile app. It enables seamless switching between multiple apps as Nextcloud users have enjoyed on the web forever.
3. The [Neon app](packages/app) is a multi client app. This means that you can have multiple clients in the same mobile app. It enables seamless switching between multiple apps as Nextcloud users have enjoyed on the web forever.
### Current problems with other clients
### Current problems with other clients
@ -20,19 +20,19 @@ The Neon project has three main goals:
### How Neon as a framework tries to solve them
### How Neon as a framework tries to solve them
The Neon project uses [Dart](https://dart.dev/) and [Flutter](https://flutter.dev/) to help mobile client developers building apps. Flutter allows us to build convergent crossplatform clients that feel native.
The Neon project uses [Dart](https://dart.dev/) and [Flutter](https://flutter.dev/) to help mobile client developers building apps. Flutter allows us to build convergent cross-platform clients that feel native.
We are a 100% FOSS framework and do not rely on any proprietary libraries making it easy for developers to publish thier apps in places like the [F-Droid](https://f-droid.org/) store.
We are a 100% FOSS framework and do not rely on any proprietary libraries making it easy for developers to publish their apps in places like the [F-Droid](https://f-droid.org/) store.
We provide a generated [Nextcloud Dart client](packages/nextcloud/) that is generated from the new OpenAPI specifications shipped with Nextcloud and is already being used by other Dart and Flutter projects. Gone are the days of looking at the PHP code and implementing an API client by hand wich can be time consuming and very error prone.
We provide a generated [Nextcloud Dart client](packages/nextcloud) that is generated from the new OpenAPI specifications shipped with Nextcloud and is already being used by other Dart and Flutter projects. Gone are the days of looking at the PHP code and implementing an API client by hand wich can be time-consuming and very error-prone.
We provide abstractions, common utilities and prebuilt UI components (called Widgets in Flutter) that can be re-used. This allows Neon to make developing a new Nextcloud client as easy as adding a few custom UI elements and the necessary state management, while everything else is already taken care of for you.
We provide abstractions, common utilities and prebuilt UI components (called Widgets in Flutter) that can be re-used. This allows Neon to make developing a new Nextcloud client as easy as adding a few custom UI elements and the necessary state management, while everything else is already taken care of for you.
## Contributing
## Contributing
We encourage every client developer to contribute their app implementation back into Neon.
We encourage every client developer to contribute their app implementation back into Neon.
This way we app developers can choose from a large set of clients to enable.
This way the app developers can choose from a large set of clients to enable.
Check out our [contributing docs](CONTRIBUTING.md) to get started with developing with Neon.
Check out our [contributing docs](CONTRIBUTING.md) to get started with developing with Neon.
We have a lot of [documentation](./docs) from helping you setup your development environment to our guidelines.
We have a lot of [documentation](docs) from helping you setup your development environment to our guidelines.
Please make sure to read them before starting to contribute.
Please make sure to read them before starting to contribute.
## Development and support
## Development and support
@ -47,20 +47,20 @@ See [here](packages/app/README.md) for screenshots.
There can be a lot of confusion what an `app` is. It can mean a server app conventionally written in PHP, the app implementation of one or a mobile app built with Neon.
There can be a lot of confusion what an `app` is. It can mean a server app conventionally written in PHP, the app implementation of one or a mobile app built with Neon.
Therefore we use the following naming:
We try to use the following naming:
- **App** as the resulting user facing app that enables one or more clients
- **App** as the resulting user facing app that enables one or more clients
- **Client** for the implementation of a server PHP app
- **Client** for the implementation of a server PHP app
- **API-Client** as the Dart client generated from the OpenAPI specifications
- **API-Client** as the Dart client generated from the OpenAPI specifications
@ -22,4 +22,4 @@ Check out our little [overview](architecture.md) of how the Neon project is buil
## [Login user flow](login.md)
## [Login user flow](login.md)
## [Neon workflows](workflows.md)
## [Neon workflows](workflows.md)
We have documented various workflows for working with the mono repo structure like adding a new package.
We have documented various workflows for working with the mono repo structure like adding a new package.
- The `nextcloud` package provides implementations for multiple server APIs. These are generated with the `dynamite` generator utilizing the OpenAPI specifications shipping since Nextcloud Hub 6.
- The `nextcloud` package provides implementations for multiple server APIs. These are generated with the `dynamite` generator utilizing the OpenAPI specifications shipping since Nextcloud Hub 6.
- Plugins are special clients that are deeper implemented into the framework and need to be closely coupled with it.
- Plugins are special clients that are deeper implemented into the framework and need to be closely coupled with it.
- The individual clients are implemented as separate packages. These depend on the Neon framework and implement a few common interfaces so they can be used together in apps.
- The individual clients are implemented as separate packages. These depend on the Neon framework and implement a few common interfaces, so they can be used together in apps.
- The main star is the `neon` package that provides common UI components (Widgets) and functionality that is useful for building Nextcloud apps. It also manages the global state at runtime so clients do not have to manage multiple accounts, data fetching or caching.
- The main star is the `neon` package that provides common UI components (Widgets) and functionality that is useful for building Nextcloud apps. It also manages the global state at runtime so clients do not have to manage multiple accounts, data fetching or caching.
- On top of all that sits the app package that injects a set of selected clients into the framework. It is possible to configure which one should be included and add custom styling and branding to it.
- On top of all that sits the app package that injects a set of selected clients into the framework. It is possible to configure which one should be included and add custom styling and branding to it.