Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
09695ad
cli: add helper script for adding packages
Kyonru May 13, 2026
019d7d1
package: add shove
Kyonru May 13, 2026
6c76ea2
package: improve dev management
Kyonru May 13, 2026
f2260a8
package: update registry, remove windfield and add baton
Kyonru May 13, 2026
33685d0
package: add option to add packages from branches
Kyonru May 13, 2026
b68665c
package: add beehive
Kyonru May 13, 2026
89abfe6
package: add cargo
Kyonru May 13, 2026
67d3681
package: add branches to tag list
Kyonru May 13, 2026
8f67ac1
package: add lua state machine pacakge
Kyonru May 13, 2026
656fb02
package: add SYSL-text
Kyonru May 13, 2026
6cf92d3
package: add love dialogue package
Kyonru May 13, 2026
afd9212
package: add submodules option
Kyonru May 13, 2026
8aed3d9
package: add knife package
Kyonru May 13, 2026
6b63233
package: use commit hash instead of tag or branch
Kyonru May 13, 2026
442afe0
package: add package add command to install custom packages
Kyonru May 14, 2026
a2cc134
package: add g3d package
Kyonru May 14, 2026
c7c449b
package: clean after input
Kyonru May 14, 2026
0f6af31
package: add tiny ecs package
Kyonru May 14, 2026
7bc96f9
feather: Merge branch 'main' into next
Kyonru May 16, 2026
a3e2217
cli: codebase refactoring
Kyonru May 16, 2026
e2cf257
package: lovebpm
Kyonru May 16, 2026
febae2a
cli: fix custom package add
May 16, 2026
31b78e7
cli: update folder structure
May 16, 2026
9a6b7c7
cli: improve package add codebase
May 16, 2026
4722d92
cli: standarize output
May 16, 2026
6473454
cli: improve styling
May 16, 2026
4aaf8d0
cli: improve command workflow code
May 16, 2026
de027d3
cli: Deeper UI split
May 16, 2026
6ff7290
cli: Output standardization
May 16, 2026
985c4b4
cli: improve lockfile
May 16, 2026
9dec2f1
cli: ui refactor
May 16, 2026
c95bac1
cli: improve doctor
May 16, 2026
5b78a1b
cli: add e2e
May 16, 2026
124bbae
cli: feather doctor --production
May 16, 2026
dfdc47b
cli: Harden plugin install/update
May 16, 2026
0c8ba9d
cli: Protect filesystem mutations
May 16, 2026
ee8a4dc
cli: Improve package/security provenance
May 16, 2026
6c1af67
cli: Auditability and sterile output
May 16, 2026
701623a
docs: improve documentation
May 16, 2026
15a15de
docs: improve documentation
May 16, 2026
1760a21
cli: add build and upload commands
May 16, 2026
fd026eb
cli: add android and ios build
May 16, 2026
e73c3a0
cli: improve builds
May 16, 2026
7d7970f
cli: add mobile release builds
May 16, 2026
327c836
cli: add vender command
May 16, 2026
c1436f2
cli: add mobile to feather run
May 16, 2026
5142156
cli: improve mobile run with cache
May 16, 2026
ac6bf08
lua: remove goto to avoid runtime error
May 16, 2026
3794868
cli: add web builds
May 16, 2026
fb0b4a2
cli: improve ios builds
May 16, 2026
71dad28
cli: improve e2e structure
May 16, 2026
63d18b4
cli: fix ios builds
May 16, 2026
779578a
cli: fix ios error messages
May 16, 2026
832efd2
cli: add desktop platforms builds
May 17, 2026
08be03e
cli: improve doctor
May 17, 2026
8224df0
feather: simplify minimal example
May 17, 2026
99c1935
feather: improve docs
May 17, 2026
7b7c027
feather: v1
Kyonru May 17, 2026
4371eee
feather: improve application opening and remove custom shell commands
Kyonru May 17, 2026
9d3c712
feather: ui
Kyonru May 17, 2026
ae2fc25
feather: add empty state
Kyonru May 17, 2026
b9b1ad8
feather: add more info in the settings screen
Kyonru May 17, 2026
3bc61bd
feather: update changelog
Kyonru May 17, 2026
33a460b
cli: upload workflow
Kyonru May 17, 2026
d51e5bc
Potential fix for pull request finding 'CodeQL / Incomplete URL subst…
Kyonru May 17, 2026
10c817c
Potential fix for pull request finding 'CodeQL / Incomplete URL subst…
Kyonru May 17, 2026
91a206f
Potential fix for pull request finding 'CodeQL / Incomplete URL subst…
Kyonru May 17, 2026
82f7147
feather: update tests
Kyonru May 17, 2026
c4f0b70
ci: update test
Kyonru May 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/cli-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ on:
- "package-lock.json"
- ".github/workflows/cli-e2e.yml"
push:
branches: [ main, next ]
branches: [main]
paths:
- "cli/**"
- "src-lua/**"
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,6 @@ docs/_site/
playwright-report/
test-results/
.env
builds/
vendor/
feather.build.json
4 changes: 3 additions & 1 deletion .husky/commit-msg
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ message_file="$1"
subject="$(sed -n '1p' "$message_file")"

case "$subject" in
ci:*|cli:*|app:*|lua:*|tauri:*|feather:*|docs:*)
ci:*|cli:*|package:*|plugin:*|app:*|lua:*|tauri:*|feather:*|docs:*)
exit 0
;;
esac
Expand All @@ -16,6 +16,8 @@ cat <<'EOF'
Commit message must start with one of:
ci:
cli:
package:
plugin:
app:
lua:
tauri:
Expand Down
45 changes: 45 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,50 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [v1.0.0] - 2026-05-17 - The one with platform builds

### Added

- **Build pipeline** — `feather build` now supports `.love`, web, Android, iOS, Windows, macOS, Linux, and SteamOS targets.
- Added mobile release build support for Android and iOS.
- Added desktop runtime packaging for Windows, macOS, Linux, and SteamOS.
- Added web build output and web run support.
- Added vendor management with `feather build vendor add/list` for build templates and runtimes.
- **Upload pipeline** — added `feather upload` support for publishing build artifacts, including itch.io workflows.
- **Run targets** — `feather run` can now launch desktop, web, Android, and iOS development flows.
- Added mobile run cache support to speed up repeated Android/iOS iteration.
- Added Android/iOS device and simulator launch helpers.
- **CLI doctor expansion** — `feather doctor` now includes deeper environment, project, security, production, vendor, and build-target checks.
- Added `--production`, security-focused checks, and build-target diagnostics.
- Added structured JSON diagnostics used by the desktop app.
- **Desktop CLI awareness** — Settings now detects the Feather CLI, reports CLI version/path/source, checks Node/npm, and runs read-only project doctor/vendor summaries.
- Added CLI path override and project directory selection.
- Added CLI/Desktop version mismatch warnings.
- Added docs links and copyable fix commands for missing setup.
- **Safe editor launch** — replaced shell-based source opening with a dedicated Tauri command that validates editor paths and project-relative file locations before launching VS Code.
- **First-run guidance** — added no-session setup prompts for installing the CLI, opening docs, connecting a LÖVE project, and copying `feather run`.
- **Package catalog growth** — added packages including baton, beehive, cargo, g3d, knife, love-dialogue, lovebpm, lua-state-machine, shove, SYSL-text, and tiny-ecs.
- **Custom package installs** — added `feather package add` workflows for custom packages, branch/commit-based sources, submodules, and provenance metadata.
- **CLI tooling and tests** — added package helper scripts and a broader CLI command test suite for build, doctor, package, plugin, run, runtime, and upload commands.

### Changed

- Refactored CLI command structure, shared UI components, output formatting, and interactive workflows for init, package, plugin, remove, and update commands.
- Hardened package, plugin, and filesystem mutation paths with path safety checks, provenance tracking, trust validation, redaction, and more auditable output.
- Improved lockfile handling for package installs and audits.
- Improved package registry generation and switched package source references toward pinned commit hashes.
- Improved documentation for installation, usage, assets, debugger, recommendations, CLI workflows, and minimal examples.
- Refined desktop settings into tabbed sections with CLI, assets, editor, connection, and security controls.
- Improved light/dark theming, plugin sidebar states, plugin button-style inputs, observability controls, and empty states.
- Updated Lua runtime/plugin internals, including safer `auto.lua` loading, plugin manager improvements, and debug overlay support.

### Fixed

- Fixed custom package add behavior and terminal input cleanup.
- Fixed iOS build behavior and error messages.
- Removed Lua `goto` usage that could trigger runtime errors.
- Removed frontend dependency on arbitrary shell execution for opening source locations.

## [v0.10.0] - 2026-05-13 - The one with the internal package manager

### Added
Expand Down Expand Up @@ -353,6 +397,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- LuaRocks package.
- GitHub Actions CI.

[v1.0.0]: https://github.com/Kyonru/feather/compare/v0.10.0...v1.0.0
[v0.10.0]: https://github.com/Kyonru/feather/compare/v0.9.3...v0.10.0
[v0.9.3]: https://github.com/Kyonru/feather/compare/v0.9.2...v0.9.3
[v0.9.2]: https://github.com/Kyonru/feather/compare/v0.9.0...v0.9.2
Expand Down
69 changes: 37 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Feather — CLI, Debugging & Inspection Tool for Löve2D
# Feather — CLI Debugging, Inspection, and Builds for LÖVE

Feather is a CLI for debugging, inspecting, and manage packages for [LÖVE](https://love2d.org) games.

Expand All @@ -19,10 +19,10 @@ The goal is to make the day-to-day loop of writing and testing a LÖVE game fast
- **Console / REPL** — Execute Lua in the running game (opt-in, requires an `apiKey`).
- **Plugin system** — 18+ built-in plugins (collision debug, animation inspector, audio debug, particle editor, and more). Plugins define their UI in Lua; the desktop app renders it automatically.
- **Multi-session** — Connect multiple games at the same time.
- **Mobile debugging** — Auto-detected LAN IP for connecting phones, tablets, and Steam Deck.
- **Mobile and platform builds** — CLI-managed web, Android, iOS, Windows, macOS, Linux, and SteamOS workflows.
- **Screenshots & GIF capture** — Built-in capture plugin.
- **Log file viewer** — Open `.featherlog` files for offline inspection.
- **CLI** — No Lua changes needed to run and debug love2d games.
- **CLI** — No Lua changes needed to run, debug, build, or clean up love2d games.
- **Package Manager** — Install packages from a curated list of popular love2D packages.

---
Expand All @@ -33,60 +33,65 @@ The goal is to make the day-to-day loop of writing and testing a LÖVE game fast

---

## Setup
## Quick Start

Install the CLI, then initialize your project:
Install the Feather desktop app and CLI:

1. Download the desktop app from [Releases](https://github.com/Kyonru/feather/releases).
2. Install the CLI:

```sh
npm install -g @kyonru/feather
feather init --mode cli
```

Run your game with Feather loaded:
Initialize your project, open the Feather app, then run the game:

```sh
feather init path/to/my-game
feather run path/to/my-game
# or
USE_DEBUGGER=1 love path/to/my-game
```

For games running on external devices (iOS, Android, Steam Deck, another machine), embed the runtime directly:
Feather is injected by the CLI for dev runs and debug builds, so your game code does not need a manual `require` for any target.

Optional vendor setup for web, mobile, and packaged desktop workflows:

```sh
feather init path/to/my-game # copies the Lua runtime into your project
USE_DEBUGGER=1 love path/to/my-game
feather build vendor add web --dir path/to/my-game
feather run path/to/my-game --target web

feather build vendor add android --dir path/to/my-game
feather run path/to/my-game --target android

feather build vendor add ios --dir path/to/my-game
feather run path/to/my-game --target ios
```

`feather init` creates a `feather.config.lua` in your project:
For all build vendors, including desktop packaging runtimes:

```lua
return {
sessionName = "My Game",
-- For phones, tablets, Steam Deck, or another computer:
-- host = "192.168.1.50",
-- include = { "console" },
-- exclude = { "hump.signal" },
}
```sh
feather build vendor add all --dir path/to/my-game
```

All generated game-side code is guarded so it only runs when `USE_DEBUGGER` is set:
Build release artifacts from the same CLI flow:

```lua
function love.update(dt)
if DEBUGGER then
DEBUGGER:update(dt)
end
end
```sh
feather build love --dir path/to/my-game
feather build android --dir path/to/my-game --release
feather build ios --dir path/to/my-game --release
feather build windows --dir path/to/my-game
feather build macos --dir path/to/my-game
feather build linux --dir path/to/my-game
feather build steamos --dir path/to/my-game
```

To strip Feather from a project before shipping:
For more commands and options:

```sh
feather remove --dry-run
feather remove --yes
feather --help
feather run --help
```

Then download the desktop app from the [releases page](https://github.com/Kyonru/feather/releases).
See the [CLI docs](docs/cli.md) for `feather run`, `feather doctor`, `feather build`, and `feather upload`.

---

Expand Down
26 changes: 1 addition & 25 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ Turn Feather into a platform instead of only a debugger.

---

## 1.0.0 — Trust Release
## Beyond v1 — Trust Release

Focus:
Production-ready release with security, trust, and community adoption.
Expand All @@ -69,13 +69,9 @@ Production-ready release with security, trust, and community adoption.

- [ ] Security pass
- [ ] Remote debugging encryption
- [ ] Command validation
- [ ] File/folder restrictions
- [ ] OS script protections

### Platform Readiness

- [ ] Add developer signature to avoid installation warnings
- [ ] Add privacy policy
- [ ] Improve crash recovery
- [ ] Final compatibility validation
Expand Down Expand Up @@ -114,23 +110,3 @@ Production-ready release with security, trust, and community adoption.
- [ ] Optimize screenshot/memory handling

---

## Ideas

- Being able to generate (maybe from a couple of templates \ pre made docker images) android and ios projects where lua code can be embedded, similar to how expo for react native works. (explore how to make hot reloading possible, but not needed for first iteration).
- `feather build android`
- `feather build ios`
- `feather build steamos`
- `feather build web`
- Ideally when building android and ios, the project should use cache from previous build to reduce the amount of time it takes to see lua code in mobile.
- Step by step setup guide for Steam deck (what legally is allowed).
- Release command, takes care of removing feather if integrated, and prepare builds with release flavors
- `feather release android`
- Interactive itch.io \ steam releases (also non-interactive)
- `feather upload itch.io`
- feather needs to be able to read from a secret file and inject them to builds if possible.
- Doctor should say what's missing to be able to use these commands (sdks, where to get them, etc).
- maybe a `feather.yml` to configure the cli
- Easy integration with CLI

Goals: Being as close as possible to expo
Loading
Loading