Giter Club home page Giter Club logo

itch's Introduction

itch

MIT licensed Built with love build Translation status

The goal of this project is to give you a desktop application that you can download and run games from itch.io with. Additionally you should be able to update games and get notified when games are updated. The goal is not to replace the itch.io website.

Screenshots

Downloads

You can download it from https://itch.io/app, see Installing the app for detailed instructions.

If you'd like to develop the app instead, read the Getting Started page of the developer guide.

About itch-setup

itch-setup is the installer program for the itch app.

It's a Go executable that runs on Windows, macOS and Linux, and downloads the latest version of the app directly from https://itch.io.

Although itch-setup is normally served from https://itch.io/app, the canonical source to download it (e.g. for packaging purposes), is the following download server:

broth is maintained by itch.io employees, and serves various packages related to the itch app.

License

itch is released under the MIT License, see the LICENSE file for details.

Other relevant projects

Here are some other apps people have started:

Android

iOS

itch's People

Contributors

alexkalopsia avatar alts avatar aviduda avatar cybolic avatar cyrilis avatar fasterthanlime avatar felixp7 avatar fleskesvor avatar gorgusm avatar hardpenguin avatar itch-ovh avatar jonasmumm avatar jupitris96 avatar kuroganegames avatar leafo avatar local-minimum avatar matiasbeckerle avatar mj0331 avatar mrmaxmeier avatar notnsane avatar plyr0 avatar quyse avatar roseverte avatar snisin avatar sno avatar somepx avatar sorcerystory avatar tesfabpel avatar thkwznk avatar velddev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

itch's Issues

Get rid of node-7z

We only need list + extract-full, node-7z has un-normalized file lists, and bundles another promise implementation (when) which means we have an ugly wrapper.. at this point it's cheaper just to do it ourselves.

Move AppStore to renderer-side

That means making our dispatcher more ipc-aware, so it can wait on promises running on the node side. It's not impossible imho - if that fails we can always forget about promises in action callbacks and move back to separate events.

The upside to having AppStore live renderer-side is faster React rerenders (since it could then take advantage of immutable data structures), and less bandwidth needed between node and renderer (so less marshalling/unmarshalling going on).

Switch to grunt

gulp was fun (and necessary for our browserify usage imho) but we have to use grunt anyway for packaging/making installers so once #5 is done, I'm saying goodbye to grunt.

Switch to proxyquire

We're currently using mock-require, which is cool but:

  • It's easy to forget to stop mocking (you have to call stop / stopAll explicitly)
  • There's no easy way to let calls fall through the mock to the original module
  • ๐Ÿผ

I vote we switch to proxyquire which had me confused when I looked at it originally but actually seems to make perfect sense and even plays well with sinon which we are using.

Make all metal modules unit-testable

Since migrating to ES6, I've gone back and forth on several styles to use for importing and exporting module, and after facewalling a few times, here's a style that actually works for several different purposes:

// importing a whole module into a 'namespace', or
import module from 'path/to/module'
// ...just importing what we need
import {Louie, Huey, Dewey} from 'path/to/lawsuit'

let self = {
  // no need to go for ES6's fat arrow syntax, there's no 'this' to bind to
  foo: function () {
    // hey we need to call another function in our own module, refer to it via `self`
    // so that it can be mocked.
    return self.bar() + 1
  },

  // this one can be mocked, or tested independently, so that's cool. it could even
  // be split into another module later, but for now it doesn't do much harm here
  bar: function () {
    return 11
  } 
}

// this will work both when required via es6 module syntax or via simple require syntax
export default self

Some other styles are still around, but they'll all be changed as more tests get written against them.

Figure out a way to test React components

Aka read a few more articles on best practices to test React applications. Honestly it's probably going to be something like 'given X input, does component Y render at all?'. And maybe stuff like fake input events but that would imply mocking some of the flux architecture (probably just the action creator?)

Markdown required to build README.md

Very minor issue: Markdown needs to be installed in order to run the dev setup due to the README.md file itself. So, it should probably be added to the list of install dependencies in the README.md file itself or removed from the Tuprules file.

$ tup
[ tup ] [0.000s] Scanning filesystem...
[ tup ] [0.005s] Reading in new environment variables...
[ tup ] [0.005s] No Tupfiles to parse.
[ tup ] [0.005s] No files to delete.
[ tup ] [0.006s] Executing Commands...
* 1) markdown < README.md > README.html
/bin/sh: markdown: command not found
 *** tup errors ***
 *** Command ID=235 failed with return value 127

My solution was to install markdown via homebrew:

$ brew install markdown
==> Downloading http://daringfireball.net/projects/downloads/Markdown_1.0.1.zip
######################################################################## 100.0%
๐Ÿบ  /usr/local/Cellar/markdown/1.0.1: 2 files, 40K, built in 2 seconds
$ which markdown
/usr/local/bin/markdown
$ tup
[ tup ] [0.000s] Scanning filesystem...
[ tup ] [0.004s] Reading in new environment variables...
[ tup ] [0.004s] No Tupfiles to parse.
[ tup ] [0.004s] No files to delete.
[ tup ] [0.004s] Executing Commands...
 1) [0.100s] markdown < README.md > README.html
 [ ] 100%
[ tup ] [0.124s] Updated.

The rest of the setup was a success, though!

Finish setting up test infrastructure

On the chrome side

Launching electron works well, and it's travis-friendly, using the same trick as electron's own tests to communicate to command-line.

Still have to figure out how to test React components, might steal a thing or two from Jest? But gave up on using it out-of-the-box (too slow & doesn't integrate with electron afaict)

On the remote side

This one is pretty trivial, just haven't settled on a test framework yet - I'd like to keep them as close to the chrome tests as possible.

protocol-less image URLs broke the app

Here's what I think happen{ed,s}:

  • image URLs used to be https://img.itch.io/something
  • now they're //img.itch.io/something (protocol-relative URL)
  • since electron is loading a file:// resource, it's trying to open file://img.itch.io/something

Finish darwin auto-updater support

Afaict it's as simple as calling setFeedUrl and checkForUpdates when manually checking.

In fact I'd really like to have.. an update store that responds to CHECK_FOR_UPDATE and emits stuff like UPDATE_AVAILABLE, UPDATE_READY

Allow installing web games

@leafo all that's needed to support that is for the various download API endpoints to also list 'web' downloads (possibly with a new field, embed = true ? and have the game type (html5, flash, etc.) in the various game json objects in collection endpoints etc.) - ideally the client would directly download the zip and extract it locally.

Switch back to AVA?

When setting up nyc + coveralls to have nice reporting of how much of our app is covered by tests, I misunderstood how nyc worked, turns out it's actually a wrapper over istanbul and it would work with pretty much any test runner.

So there was no need to migrate to tape in the first place! which means we can switch back to AVA to get parallel tests. Note that this depends on #10 because I'm pretty sure mock-require acts at the global level and that would've been a dealbreaker in AVA anyway.

Evaluate fluxify

https://github.com/arqex/fluxify looks like it supports waitFor when actions return promises, which would be really cool.

For example, assuming we have prereq-store, api-store, and ui-store, on BOOT

  • ui-store (current 'app-store') would wait on api-store to know if we get to login via cached credentials or if we need to login from scratch, and on prereq-store to make sure we can run the app properly
  • api-store would try to retrieve credentials from the config
  • prereq-store would run the current setup task, simply

It's all the same action it's just different tasks that need to be coordinated, I think it makes sense in the flux infrastructure.

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.