# 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.