# Feature COMMS-1076 - Install OpenProject as a desktop application from the browser

Project: Stream Communicator
Status: merged
URL: https://community.openproject.org/work_packages/COMMS-1076

## Planning

| Attribute | Value |
| --- | --- |
| Date |  |
| Priority | Medium |
| Target versions | Behind feature flag, 18.1.0, Passion time |
| Sprint |  |
| Backlog bucket |  |
| Votes |  |
| List |  |
| Roadmap |  |
| Relevance |  |

## OPEN POINTS / FEEDBACK

_No work packages_

## Features and Chunks

_No work packages_

## Bugs and other work packages

_No work packages_

## Technical Details

| Attribute | Value |
| --- | --- |
| Module |  |
| Feature Flag |  |
| Requires doc change | Yes |
| Enterprise plan | Community (COM) |

## Details

| Attribute | Value |
| --- | --- |
| Pull preview |  |
| Mockups |  |
| Accessibility | No |

## People

| Attribute | Value |
| --- | --- |
| Assignee |  |
| Accountable |  |
| Product manager |  |
| Developers | Kabiru Mwenja |
| Designer |  |
| Ordered by |  |
| Signed off by |  |
| Interest by |  |

## Estimates and progress

| Attribute | Value |
| --- | --- |
| PD (min) |  |
| PD (max) |  |
| Work |  |
| Labor costs |  |

## Description

**As** a person who works in OpenProject from a desktop or laptop browser
**I want to** install OpenProject onto my machine as an application
**so that** I can launch it from my dock or taskbar in its own window, carrying my instance's name, colour and icon.

**Acceptance criteria**

*   **Installable**
    *   Chrome, Edge and Safari on desktop offer to install the instance over HTTPS, and the installed application opens in its own window at the instance root, path prefix included.
    *   Available behind the `progressive_web_app` feature flag.
*   **Named after the instance**
    *   The application carries the instance's application title. The short label under the icon is the title when it fits in 12 characters, otherwise its first word, and is left out rather than cut mid-word.
*   **Carries the OpenProject icon**
    *   Windows and Linux show the bare OpenProject mark on a transparent background. macOS 26 and later shows the blue mark on a full-bleed white tile rounded by the system, the same look as the favicon and the touch icon.
*   **Title bar follows the theme**
    *   The window's title bar mirrors the header colour of the signed-in user's theme preference: light, dark, high contrast, and the operating system's colour scheme and contrast settings when the preference follows the system. An Enterprise header colour from Design settings is honoured.
*   **Android is pointed at the native app**
    *   The manifest names the OpenProject Mobile app on Google Play, so Chrome on Android recommends the native app instead of installing the site.

**Technical notes**

*   Served by Rails' own `Rails::PwaController` at an extensionless `/manifest` with the format pinned to JSON; a format suffix does not route. The controller carries Rails' relaxed CSP (`script-src 'self' 'unsafe-inline'`), which has no effect on a JSON response.
*   `manifest-src 'self'` is set in the CSP initializer.
*   Icons live under `app/assets/images/pwa`: transparent 192 and 512 PNGs with purpose `any`, plus a full-bleed 512 PNG with purpose `maskable`. Nothing on `dev` reaches 192 pixels, hence dedicated files.
*   The title bar colour comes from `theme-color` meta tags rendered on every page from the user's preference, with media queries for `prefers-color-scheme` and `prefers-contrast`.

**Permissions and visibility considerations**

*   _To whom is this feature visible?_
    *   Everyone on an instance, in every edition, with no permission gate. Installability is a property of the site, not of a role.
*   _When is it not visible?_
    *   With the feature flag off, over plain HTTP, and on phones and tablets, which are served by the OpenProject Mobile app.

**Translation considerations**

*   None. The manifest carries the instance's own title.

**Out of scope**

*   **Unread badge** on the installed icon: own feature.
*   **Offline page** when the connection drops: SE-688.
*   **Web push**: SE-694.
*   **Custom icon** from the Design settings touch icon in the manifest, a help entry and user documentation: follow-ups.
