owncloud / owncloud/ocis

[Feature Request] Graph View

Open
#6,558 3 comments 0 reactions 0 assignees View on GitHub
Category:Enhancement Status:Proposal
Dominant language
Go
Stars
2.1k
Forks
274
Avg merge
2d 1h
Merged PRs (30d)
103

Description

# Feature Request: Graph View

## Is your feature request related to a problem? Please describe.

This feature request aims to meet the following objectives:
- Expand the market share of ownCloud Infinite Scale (oCIS) among end users.
- Increase the product value of oCIS among corporations that use SaaS services for collaborative mindmap, concept maps, and knowledge maps.

The use case for this feature request is present in popular software such as Obsidian, Roam Research, and Logseq.

## Describe the solution you'd like

Show a graph view of oCIS files and references (with an oCIS Graph View extension).

### Example: Obsidian

https://forum.obsidian.md/t/design-talk-about-the-graph-view/22594 (contains images).

### Example: D2

https://d2lang.com/ (contains diagrams and images).

## oCIS Graph View extension

Use customized nodes instead of circle nodes (obsidian) or freeform nodes (d2) to represent nodes: oCIS nodes are structured nodes of resources (e.g., oCIS files, URL references to webpages) that show:
1. Title of the resource.
2. Description of the resource (node-specific).
3. Tags of the resource (or virtual node).
4. Resource Type (e.g., document, spreadsheet, webpage).
5. Per User Read Status (optional: enabled in settings).

![ocis-graph-view-node](https://github.com/owncloud/ocis/assets/81384235/7bef0b34-9cdb-40c3-8639-060e7ca270cf)

### Views

The views of this extension are Graphical User Interface (GUI) components that users can use to view nodes.

#### Graph

See **Obisidian** and **D2** examples above.

Options
- Filter: By Collection (Tag), Children, etc.
- Source of Truth: Determines what the graph uses as a source of truth for nodes. See **QA** for details on the difference between each option.
- Files (Default): Use oCIS files and their references to display the graph _(similar to Obsidian)_.
- Show External Links as Nodes: Enabling this option creates nodes for referenced external resources with an oCIS file.
- Manual: Nodes that point to a file or external link can be created and stored in $LOCATION. Users define connections at the Spaces level.

#### Node

A view of the single node for editing purposes. This view is similar to editing a document.

#### Main Window Side View

User, Group, Spaces Thread similar to the Google Drive Document, or NextCloud Document Comment Feature.

![ocis-graph-view-notes](https://github.com/owncloud/ocis/assets/81384235/9da6a73c-2c11-495c-b40d-e724f763f33f)

Let the user filter visible notes by User, Group, and Spaces _(similar to #6504)_.

### File (Graph)

Introduce a "graph file" (e.g., `.graph`) that lets the user configure the graph view settings within the file. Then, when the "graph file" is rendered (while using an oCIS client), the main window of the Graph View extension will display the respective graph.

## Describe alternatives you've considered

- No Graph View.
- Freeform Graph Software.
- Non-Collaborative Graph Software.

# Context (QA)

**What is the difference between a Graph View: Source of Truth: File Node vs. Manual Node?**

The **file node** is based on the files in the oCIS filesystem. The **manual node** is a virtual node created by the user, which references the files in the oCIS filesystem.

A file node is a unique node: Since file nodes must match the state of the filesystem, the only way to create a duplicate file node (of the same file) is to duplicate the file and rename it.

A manual node holds a reference to a resource: You can create two manual nodes which reference a single file, then assign each node different descriptions and tags without modifying the underlying file. Subsequently, changing the underlying file results in all its virtual nodes updating.

## Implementation

I have identified two approaches to the backend implementation of a graph view.

1. Use the Obsidian approach of a graph view implementation, which involves the usage of a key-store storage solution (i.e., IndexedDB) and position each node using an algorithm (e.g., ELK).
2. Use an OSS graph database (i.e Dgraph): Store virtual nodes in reference to physical file nodes or "virtual node files" in a folder that is hidden from users.

# Resources

I am willing to develop the backend implementation on the following conditions:
1. An optimal oCIS extension backend implementation (see https://github.com/owncloud/ocis/issues/6503 for scope) is determined (preferably by owncloud developers).
2. For [sponsorship](https://github.com/sponsors/switchupcb?frequency=one-time) or salary.

Otherwise, this feature request is published in an Open Source Software environment, available to all for implementation.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.