Git Product home page Git Product logo

go-ipfs-desktop's Introduction

Experiment: IPFS Desktop without Electron

This repo is an experiment created during a Hack Week (2021 Q1) to explore if it is possible to provide most of IPFS Desktop functionality without dependency on the Electron/Chromium Rube Goldberg machine.

Consider this experimental for now!

go-ipfs-desktop_v0 0 1

How to run this?

Pre-built artifacts can be found here.

They require ipfs (go-ipfs binary) to be present on PATH or in the same directory as go-ipfs-desktop.
Set IPFS_PATH to override the default repo location.

This is a portable app, meaning no installation is required.

Dependencies

Linux

Make sure libappindicator is present, eg. apt-get install libappindicator3-dev

License

This project is dual-licensed under Apache 2.0 and MIT terms:

go-ipfs-desktop's People

Contributors

dependabot[bot] avatar galargh avatar joeltg avatar lidel avatar mvdan avatar web-flow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

go-ipfs-desktop's Issues

Allow natively adding a file via the system UI

IPFS Desktop's README says:

(Windows) Right-click a file/folder's icon to add it to IPFS from the pop-up menu
(Mac) Drag and drop a file/folder onto the IPFS logo in your menubar

The Windows approach should also be possible on Linux.

Apparently, this is what does it for Windows: https://github.com/ipfs-shipyard/ipfs-desktop/blob/master/assets/build/nsis.nsh

I haven't done further research here just yet. Definitely a stretch goal for the "one week" timeline.

implement the button to open the web UI

This is a bit trickier than it sounds, because we want to use the link that ipfs prints when it starts. We also want to open the user's choice of browser; check $BROWSER, then xdg-open, then open, then fall back to common browsers like firefox/chromium/chrome.

better support for the "pendrive" use case

That is, a use case where someone runs IPFS from a pendrive, without installing it on the system.

Right now we look for ipfs in $PATH. We should also look for it somewhere local; for example, right next to where the go-ipfs-desktop binary is.

use notification popups for errors

The systray UI is nice for showing passive status indicators and actions, but not for showing the user when something goes wrong.

For example, if the IPFS daemon crashes (#3), we want to tell the user. Changing the systray icon to the "off" status is fine, but not particularly visible. We should also show a notification.

We can use https://pkg.go.dev/gioui.org/x/notify for this.

track if the ipfs daemon is running or not

For example, if it crashes or if the user stops it.

The simplest way would be to periodically check that it's still running after we start it.

A better way would be to remain connected to the IPFS daemon in some way (via a socket, or an API endpoint) and then notice when the connection drops because the daemon is killed.

Should we also notice if the ipfs daemon is started by the user? Probably not, because this tool is not aimed at power users who would start the IPFS daemon directly.

Single binary with bundled go-ipfs

@mvdan I'm filling this to track your idea:

A way to do a release that bundles go-ipfs-desktop with go-ipfs itself. This should be possible now that Go 1.16+ supports embedding binary assets, meaning we could have a "full" release binary that embeds a full go-ipfs binary.

test on Windows

So far, I've been testing on Linux and @joeltg has been testing on Mac.

We need a Windows volunteer, ideally one that uses Windows regularly and is technical enough to know how to install Go and run go build.

If we can't find a volunteer, then one of us should set up a Windows VM as a fallback.

don't wait for ipfs to be ready forever

If we start the ipfs daemon and it never prints the "ready" line, we hang.

Use a timeout, like five seconds.

There's a very easy way to repro; place an executable shell script called ipfs in the same place where go-ipfs-desktop is run from. The script can just be a sleep 1000.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.