Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 85 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,95 @@
# App Versions

A template to get started with Nextcloud app development.
**Browse every installed app. Inspect available releases. Jump to the exact version you want.**

## Usage
`App Versions` is a Nextcloud admin tool for exploring installed apps and switching to a specific release from the app store metadata. It is built for local development stacks, debugging sessions, upgrade rehearsals, and those moments where "latest" is not good enough.

- To get started easily use the [Appstore App generator](https://apps.nextcloud.com/developer/apps/generate) to
dynamically generate an App based on this repository with all the constants prefilled.
- Alternatively you can use the "Use this template" button on the top of this page to create a new repository based on
this repository. Afterwards adjust all the necessary constants like App ID, namespace, descriptions etc.
Instead of a plain selector, the UI opens with a searchable card grid of installed apps. Each card shows the app name, id, icon, and summary so you can move fast without guessing.

Once your app is ready follow the [instructions](https://nextcloudappstore.readthedocs.io/en/latest/developer.html) to
upload it to the Appstore.
## What It Does

## Resources
- Lists installed apps in a full-width card view with search and filters.
- Pulls app metadata such as title, summary, description, and preview icon.
- Shows available versions for a selected app.
- Supports install, update, and downgrade flows from the same screen.
- Includes a dry-run mode with debug output for safer testing.
- Warns about downgrade ranges and lets admins confirm intentionally.
- Marks protected core apps in the picker and blocks management of them in the backend.

### Documentation for developers:
## Guard Rails

- General documentation and tutorials: https://nextcloud.com/developer
- Technical documentation: https://docs.nextcloud.com/server/latest/developer_manual
This app is intentionally opinionated.

### Help for developers:
- `app_versions` cannot manage itself.
- always-enabled Nextcloud core apps are shown in the card view, but clearly marked as `CORE`
- protected apps do not expose a `Choose app` action
- backend checks still reject direct requests against protected apps

- Official community chat: https://cloud.nextcloud.com/call/xs25tz5y
- Official community forum: https://help.nextcloud.com/c/dev/11
That means the UI is honest and the backend is not trusting the UI.

## Interface Snapshot

The flow is intentionally split in two modes:

1. **Discovery mode**
Search and browse the app cards across the full page width.
2. **Action mode**
After selecting an app, the screen switches to the familiar split view for version inspection, install actions, and debug/result output.

Extra controls live above the search:

- update channel
- safe mode
- install dry-run
- core app visibility filter

## Why You'd Use It

- reproduce a customer issue on an older app release
- validate an upgrade path before touching production
- compare app-store availability with what is installed locally
- dry-run version changes and inspect the installer debug output
- keep sharp boundaries around Nextcloud core apps

## Development

Frontend:

```bash
cd app_versions
npm install
npm run build
```

Useful frontend commands:

```bash
npm run watch
npm run lint
npm run stylelint
```

Backend quality checks:

```bash
composer install
composer lint
composer test:unit
composer psalm
```

## Stack

- Vue 3
- `@nextcloud/vue`
- Vite
- PHP 8.1+
- Nextcloud app framework

## Status

This app is currently shaped as an admin-focused utility for development and controlled environments. It is useful precisely because it gives more direct power than the default app management flow, so the protected-app restrictions are part of the design, not an afterthought.

## License

AGPL-3.0-or-later
Loading