Template repo for tiny cross-platform apps that can be modified on phone, tablet or computer.
# A template repo for developing cross-platform apps on mobile devices

[![0 dependencies!]https://0dependencies.dev/0dependencies.svg]https://0dependencies.dev

![screenshot]assets/1.png

Copy this repo to get a leg up creating tiny, low-maintenance, cross-platform
apps that you can make changes to right on a phone or tablet.

It comes bundled with a few optional goodies:
* Support for tap-to-pan and pinch-to-zoom gestures over an infinite 2D
  surface for arbitrary graphics and UI.
* A tiny widget library for quickly creating arbitrary UI elements.
  [Here's an example of the kinds of things you can add to the global variable `widgets`.]https://akkartik.itch.io/carousel/devlog/665231/a-sprite-editor-in-100-lines-of-code
* A typographic scale for scaling the font size of text in visually pleasing
  increments.

Tap the 'edit' button and then poke around the 'load' menu to learn more.

This repo is an example of a [Freewheeling App]http://akkartik.name/freewheeling,
designed above all to be easy to run, easy to modify and easy to share.

## Getting started

Install [LÖVE]https://love2d.org. It's just a 5MB download, open-source and
extremely well-behaved.

[Run the app using LÖVE.]https://love2d.org/wiki/Getting_Started#Running_Games

## Hacking

You can edit the app and UI right on your device. However, there are some
gotchas to be aware of when editing such apps on a phone:

* If you upgrade LÖVE you lose all your local apps and their saved settings.
  This includes code changes. It's hard to get code changes out due to mobile
  restrictions. I can't come up with an alternative to copy-paste. This
  imposes a strict limit on the number of changes I'm willing to make to a
  large app on my phone.

* If you upgrade such apps after making local changes to them, you might see
  strange errors. Local changes are written to an overlay directory, whereas
  upgrades modify the app in place. The two locations create lots of
  opportunity for conflicts to arise.

  To mitigate this issue, such apps by default list local changes in the
  output editor every time they run. That will hopefully act as a reminder.
  There's also some helpers for deleting local changes in the 'scratch' page.

You can also modify the editing environment itself, or repurpose it for a
different app entirely, live as it runs. This requires running it on a
computer, but is much more reliable. Download [the driver app]https://git.sr.ht/~akkartik/driver.love.
Here's an example session showing the driver (left window) editing a different
app (right window containing yellow text):

![making changes without restarting the app]assets/2.gif

[Some reference documentation on how to create your own apps.]reference.md

If the app being modified by the driver lives in a .love file, your changes
will go into the [save directory]https://love2d.org/wiki/love.filesystem.getSaveDirectory.
If it lives in a directory (like this repo), your changes will go straight
into the same directory.

## Keyboard shortcuts

Within the editor widget:

* `ctrl+f` to find patterns within a file
* `ctrl+c` to copy, `ctrl+x` to cut, `ctrl+v` to paste
* `ctrl+z` to undo, `ctrl+y` to redo
* `ctrl+=` to zoom in, `ctrl+-` to zoom out, `ctrl+0` to reset zoom
* `alt+right`/`alt+left` to jump to the next/previous word, respectively
* mouse drag or `shift` + movement to select text, `ctrl+a` to select all

Exclusively tested so far with a US keyboard layout. If
you use a different layout, please let me know if things worked, or if you
found anything amiss: http://akkartik.name/contact

## Known issues

* On phones, pasting in text from the popup keyboard doesn't work well. Be
  sure to use the 'paste' key in the menu.

* No support yet for Unicode graphemes spanning multiple codepoints.

* No support yet for right-to-left languages.

* Can't scroll while selecting text with mouse.

* Some colors can't be customized yet.

## Mirrors and Forks

This repo is a fork of [lines.love]http://akkartik.name/lines.html, an
editor for plain text where you can also seamlessly insert line drawings.
Its immediate upstream is [Lua Carousel, a lightweight cross-platform
environment for creating little throwaway scripts on a computer or
phone](https://git.sr.ht/~akkartik/carousel.love). Updates to it can be
downloaded from the following mirrors:

* https://git.sr.ht/~akkartik/template-carousel-mobile
* https://tildegit.org/akkartik/template-carousel-mobile
* https://git.merveilles.town/akkartik/template-carousel-mobile
* https://nest.pijul.com/akkartik/template-carousel-mobile (using the Pijul version control system)

Further forks are encouraged. If you show me your fork, I'll link to it here.

* https://git.sr.ht/~akkartik/sokoban.love

## Feedback

[Most appreciated.]http://akkartik.name/contact Messages, PRs, patches,
forks, it's all good.