ipfs / ipfs/ipfs-desktop

"Nativeness" of IPFS Desktop

Open
#867 17 comments 1 reaction 0 assignees View on GitHub
kind/discussion P3
Dominant language
JavaScript
Stars
6.6k
Forks
903
Avg merge
4d 13h
Merged PRs (30d)
5

Description

As of building #866, we clearly verify that the app could be much better and simpler if done natively or with something else than Electron that is even snappier/faster. Although, the approach of going full native have pros and cons. I'd like to discuss with you all if this is an effort we should focus on or not.

## How

By going native, we'd need to create separate macOS, Windows and Linux apps. During transition period, we could eventually build one by one and keep the Electron version alongside.

- **For macOS:** we could write an app natively in Swift.
- **For Windows:** we could write an app natively in C#.
- **For Linux:** we could either keep the Electron version or see if we could manage to do something else with Qt perhaps. To refer that Linux is the OS where things can vary more and is harder to support.

We could perhaps have a shared library in C++ if needed for something like a `ipfsd-ctl`. Or perhaps we wouldn't even need it.

## Cons

Usually people start by the pros, but I thought about starting with the negative aspects of going native:

1. We'd need to support three different technologies.
2. The above requires more work to keep the three platforms in parity of functionality.
3. We'd need to, perhaps, ditch the "so-deep" integration with Web UI. It's not that deep: it's just the language and three preferences. We could just open the Web UI on user's default browser.

## Pros

On the bright side of the situation:

1. Native means native.
2. Better functionality:
- Right now, the macOS app is the one which seems more native because Electron uses the native menus. On the other hand, on Windows, Electron doesn't use the native menu's and doesn't feel as native.
- There are some features really hard to implement using the current solution. Please see https://github.com/ipfs-shipyard/ipfs-desktop/issues/678#issuecomment-472479791 for an example.
- By being native we could perfect the functionality.
3. Smaller binaries.
4. Faster.

---

I'd really like your thoughts on this. There are some things I'd like to implement (native integrations) but that won't be really easy to do with Electron/Node.js. Not impossible, just harder.

This would be a big change and would require a lot of work. Would it be worth it?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.