Market — BW-Tech / owncloud.online fork
Marketplace / AppStore integration for ownCloud, modernised for PHP 8.4 and shipped with a fully self-contained local app catalog (no external marketplace required) plus a refreshed UI with dark-mode support and a live search.
This is a community fork maintained by BW-Tech GmbH for owncloud.online. Original code by ownCloud GmbH (AGPL-3.0).
Features
- Local-first catalog — apps live in
marketplace/apps.jsoninside the plugin directory; no remote backend needed. Add an entry, pointdownloadto a GitHub release URL, you're done. - Drop-in remote mode — set
appstoreurlinconfig.phpto use the classic ownCloud marketplace API or your own HTTPS catalog instead. - PHP 8.4 — constructor property promotion,
readonly,#[\Override], typed properties,match, native first-class function syntax. - Modern UI — refreshed tile cards, custom CSS variables, automatic
dark mode via
prefers-color-scheme, smoother animations. - Live search — type to filter the visible app list across name, summary, description and category.
- OCC commands — install, uninstall, list and upgrade apps from the command line.
- Background updates — daily check for available updates, with per-group notifications.
Requirements
- ownCloud Server 10.x (10.11+ recommended)
- PHP 8.4 or newer
- Composer 2.x (only for development / building the dist artifact)
- Node.js 20 (only for building the JS bundle)
Installation
cd /var/www/owncloud/apps
git clone https://github.com/BWTECH-github/owncloud.online.git market
cd market
composer install --no-dev
sudo chown -R www-data:www-data .
sudo -u www-data php /var/www/owncloud/occ app:enable market
If you prefer the prebuilt artifact, download the latest release archive from
the Releases page
and extract it into apps/market/.
Configuration
Everything is optional — out of the box the bundled local catalog at
apps/market/marketplace/apps.json is used.
Add to config/config.php to change the source:
<?php
$CONFIG = [
// (1) bundled catalog (default) — `appstoreurl` unset or "local"
// (2) catalog at a custom file-system path
'appstoreurl' => 'file:///srv/owncloud-catalog',
// (3) remote HTTPS marketplace (classic mode)
// 'appstoreurl' => 'https://marketplace.owncloud.com',
// 'marketplace.key' => 'your-api-key',
// 'marketplace.ca' => '/etc/ssl/custom-ca.pem',
// notification recipients
// 'has_internet_connection' => true, // disable to suppress remote calls
];
| Key | Default | Description |
|---|---|---|
appstoreurl |
local |
local for the bundled catalog, file:// for a local directory, or an HTTPS URL of a remote ownCloud marketplace. |
marketplace.key |
unset | API key sent as Authorization: apikey: … for remote marketplaces. |
marketplace.ca |
unset | Path to a custom CA bundle for remote TLS validation. |
has_internet_connection |
true |
If false, remote calls are blocked. Local catalog mode ignores this. |
Adding your own app to the local catalog
Edit marketplace/apps.json (see marketplace/README.md for the full schema):
[
{
"id": "myapp",
"name": "My App",
"summary": "One-line summary",
"categories": ["tools"],
"publisher": { "name": "Me", "url": "https://example.com", "isPagePublic": true },
"downloadable": true,
"screenshots": [{ "url": "https://example.com/myapp.png" }],
"releases": [
{
"version": "1.0.0",
"platformMin": "10",
"platformMax": "10.99",
"license": "AGPL-3.0",
"download": "https://github.com/me/myapp/releases/download/v1.0.0/myapp-1.0.0.tar.gz"
}
]
}
]
Then click Clear cache in the Market sidebar — the new app appears
immediately. The download URL can be HTTPS, a file:/// path, or a path
relative to the catalog directory.
OCC commands
| Command | What it does |
|---|---|
occ market:list |
List all app ids known to the configured catalog. |
occ market:install <id> [<id> …] |
Install one or more apps by id (latest minor release). |
occ market:install --local /path/to.tgz |
Install an app from a local tar.gz package. |
occ market:uninstall <id> |
Uninstall an app. |
occ market:upgrade [<id> …] |
Upgrade selected apps to the latest minor release. |
occ market:upgrade --all |
Upgrade every installed app that has an update. |
occ market:upgrade --major <id> |
Allow major-version upgrades for <id>. |
occ market:upgrade --list |
Show available updates without installing anything. |
| Argument / option | Type | Description |
|---|---|---|
<id> … |
string[] | One or more app ids; mutually exclusive with --local. |
--local, -l |
string[] | Path to one or more local .tar.gz packages. |
--major |
flag | Allow upgrading across a major version boundary. |
--list |
flag | List updates only, do not install. |
--all |
flag | Apply to every installed app with an update. |
Daily usage
- Open ownCloud and go to Apps → Market.
- Use the search box at the top of the sidebar to find apps.
- Click an app, then Install.
- Updates appear under Updates in the sidebar with a counter badge; click an entry to read release notes and update.
The UI follows the operating-system colour scheme automatically — there's nothing to toggle for dark mode.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| "Local marketplace catalog file is missing" | appstoreurl points at a directory without apps.json |
Place apps.json (and categories.json, bundles.json) at that path. |
| "Local marketplace catalog is invalid JSON" | Syntax error in apps.json |
Validate with python -m json.tool < apps.json or jq . apps.json. |
| "Installing apps is not supported" notice | Apps directory is not writable by the web user | chown -R www-data:www-data apps/ or fix the cluster's shared-storage mount. |
| App appears in catalog but Install fails with 404 | download URL is wrong |
Open the URL in a browser; if it's a private GitHub release, attach the CDN-style download URL. |
| Categories are empty | marketplace/categories.json not loaded yet (cache) |
Click Clear cache in the sidebar. |
| Dark mode looks broken on light background | Browser does not honour prefers-color-scheme |
Force it with <html data-theme="dark"> via a userstyle / extension. |
composer install fails with "requires php >=8.4" |
Older PHP | Install PHP 8.4 (apt install php8.4 php8.4-cli php8.4-curl) or change interpreter. |
| Update notifications never arrive | Background job hasn't run | occ background:cron or check that cron / system-cron is configured. |
Development
make build-dev # build JS bundle once
npm run dev # webpack --watch
make test-php-style # php-cs-fixer dry-run
make test-php-unit # phpunit
CI runs the same checks on every push and pull request — see
.github/workflows/.
Attribution
This is a fork of owncloud/market
(© ownCloud GmbH, AGPL-3.0). Modifications by BW-Tech GmbH for
owncloud.online. The licence remains AGPL-3.0.
License
AGPL-3.0 — see LICENSE.