image/svg+xml

About

I'm working on porting the Ren'Py framework to the HTML5 web browser - so you can publish Visual Novel games online :)

Donate and help the development go faster!

Test the current version (7.2.2.491 / 2019-04-16)

(start-up may be long, let it load for half a minute)
The Question - Web Edition Tutorial - Web Edition
(Shitf+O for dev console, F3 for perfs)

Or test your own local game: provide a game.zip as explained below.
(this is purely local to your browser, nothing is sent to us)
Your Game - Web Edition

Download

To publish your game:
(note: will be easier in the future, when
Renpytom is done with Ren'Py launcher integration)

Examples:
beuc.itch.io/the-question-web
newgrounds.com/portal/view/729314
You can also include more than one game and select them using ?game=xxx.zip
renpy.beuc.net/play/?game=the_question.zip
renpy.beuc.net/play/?game=tutorial.zip
(renpy.beuc.net/play/?game=https://somewhere-else.net/game.zip is blocked so a user cannot be tricked into running a malicious game)

Testing locally: with Firefox, just double-click on index.html. With Chromium, you need a local webserver; python3 -m http.server 8080 in the RenPyWeb directory, or install XAMPP.

Development: contributions welcome! Check the official Ren'Py repository at
github.com/renpy/renpyweb

Caveats

RenPyWeb's goal is to run your game without additional work. However the web is a very different environment so here are a couple things to know.

Size: RenPyWeb currently needs to download the full game before playing, so you'll need to optimize your game if you want your players to be patient enough to play it (100-150MB tops)!
I'm thinking of download and cache strategies that will help with that (see
roadmap). But even then this is the web, things need to be lighter.
Solutions include: using layered images, making a lower-res or lossy/jpg version, use the .webp image format, dropping (some) audio, drop videos (not supported yet), splitting in chapters, etc.

Savegame: user savegames are linked to the webpage domain.
Ideally, provide a stable (sub)domain - like this page.
Some hosts may change your domain on new upload, causing previous savegames to become unreachable.
In addition, a game can read/modify savegames from other games hosted at the same domain. Ren'Py will ignore them, but a malicous game developer could do bad things.
For itch.io (hosts at XXX.ssl.hwcdn.net) it's not clear how often the domain may change: see How to save data? and HTML5 game : Save data locally.
For newgrounds all games are hosted at uploads.ungrounded.net so other games could read your player's data.
In doubt, remind players to export their savegames from RenPyWeb's top-left menu.

Network: browser outgoing connections are secured by Same-origin policy. In addition, the browser can only perform XHR and WebSocket (i.e. no direct TCP/IP or UDP/IP connections).
WebSockets are initially transparently when you make a TCP/IP connection from Python, but you need a specific server, or a service proxy (cf. Introduction to Emscripten Sockets) on the developer's server side.
The game may use XHR through Emscripten-specific functions such as emscripten_async_wget (which I didn't expose yet in RenPyWeb/python-emscripten) but it is asynchronous. emscripten_wget is synchronous but requires -s ASYNCIFY=1 which is deprecated/broken. emscripten_fetch has similar features & restrictions.

Feedback

Feedback welcome!
Patreon - e-mail - Lemma Soft Forums - itch.io - newgrounds

Roadmap

(in no definite order)

Status reports

2019 week 16 (2018-04-16)

2019 week 15 (2018-04-14)

2019 week 14 (2018-04-07)

2019 week 13 (2018-03-31)

2019 week 12 (2018-03-25)

2019 week 9 (2018-03-03)

2019 week 8 (2018-02-24)

2019 week 6 (2018-02-10)

2019 week 5 (2018-02-03)

2019 week 4 (2018-01-27)

2019 week 3 (2018-01-20)

2018 week 52 (2018-12-30)

2018 week 50 (2018-12-16)

2018 week 49 (2018-12-09)

2018 week 48 (2018-12-02)

2018 week 47 (2018-11-25)

2018 week 46 (2018-11-18)

2018 week 45 (2018-11-11)

2018 week 44 (2018-11-04)

2018 week 43 (2018-10-29)

2018 week 42 (2018-10-21)

2018 week 41 (2018-10-14)

2018 week 40 (2018-10-07)

2018 week 39 (2018-09-30)

Before